cpld 做两路串口的切换

2020-02-03 11:14发布

cpld 做两路串口的切换 : 串口通过CPLD 后,接收到的数据 多了好多00000000 改怎么处理 如下图:,中间选中的,为有用的数据,其他好多无用的00,程序仅是通过 按键做两路 串口的切换。
assign xutxd1_c = (state_code == 1'b0)?xutxd2:sa_xutxd1;
assign xurxd1_c = (state_code == 1'b0)?xurxd2:sa_xurxd1;

改怎么处理才不会收到这么多无用的数据?求大神们指教!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
297229936
2020-02-04 12:07
玄德 发表于 2016-8-15 10:15
20ns的抖动处理

不是毫秒?

按键部分的代码:
reg[3:0]keyr;
always@(posedge clk or negedge key_rst)
        if(!key_rst)keyr<=4'b1111;
        else keyr <= {keyr[2:0],key_sel};
wire key_pos = keyr[2]&~keyr[3];
wire key_neg = ~keyr[2]&keyr[3];

reg[19:0] cnt;
always@(posedge clk or negedge key_rst)
        if(!key_rst)cnt <= 20'd0;
        else if(key_neg||key_pos) cnt <= 20'd0;
        else if(cnt <=20'd999_999)cnt <= cnt +1'b1;
        else cnt <= 20'b0;
       
reg[1:0]key_value;
always@(posedge clk or negedge key_rst)
        if(!key_rst) key_value[0] <= 1'b1;
        else if(cnt==20'd999_999)key_value[0] <=keyr[3];

always@(posedge clk or negedge key_rst)
                if(!key_rst)key_value[1] <=1'b1;
                else key_value[1] <= key_value[0];
               
wire led_ctrl = ~key_value[0]&key_value[1];

always@(posedge clk or negedge key_rst)
begin
                if(!key_rst)
                state_code <=1'b0;
        else
        begin
                 if(led_ctrl)
                 begin
                 if(state_code == 1'b1)
                 state_code <= 1'b0;
                 else
                 state_code <= 1'b1;
                 end
        end
end

请指导,为什么会出现那么多00?

一周热门 更多>