OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3357|回复: 1

[XILINX] 第十六章 UART 串口通信实验 一点疑问

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2022-8-14
在线时间
1 小时
发表于 2022-8-14 13:03:25 | 显示全部楼层 |阅读模式
1金钱
第十六章 UART 串口通信实验 代码文件 uart_recv.v 中一段代码:
//根据接收数据计数器来寄存uart接收端口数据
always @(posedge sys_clk or negedge sys_rst_n) begin
    if ( !sys_rst_n)  
        rxdata <= 8'd0;                                    
    else if(rx_flag)                            //系统处于接收过程
        if (clk_cnt == BPS_CNT/2) begin         //判断系统时钟计数器计数到数据位中间
            case ( rx_cnt )
             4'd1 : rxdata[0] <= uart_rxd_d1;   //寄存数据位最低位
             4'd2 : rxdata[1] <= uart_rxd_d1;
             4'd3 : rxdata[2] <= uart_rxd_d1;
             4'd4 : rxdata[3] <= uart_rxd_d1;
             4'd5 : rxdata[4] <= uart_rxd_d1;
             4'd6 : rxdata[5] <= uart_rxd_d1;
             4'd7 : rxdata[6] <= uart_rxd_d1;
             4'd8 : rxdata[7] <= uart_rxd_d1;   //寄存数据位最高位
             default:;                                    
            endcase
        end
        else                                                                         //没有这句程序就不能正常工作
            rxdata <= rxdata;                                        //没有这句程序就不能正常工作
    else
        rxdata <= 8'd0;
end



问题:
如果注释掉 rxdata <= rxdata; 程序就不能正常工作,为什么呢?
不是说“只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,带时钟的语句 if 或者 case 语句不完整描述不会产生 latch”---《正点原子逻辑设计指南 V1.9.pdf》48页
看了修改后生成的电路确实没有产生latch,而且也没有看到2种代码生成的电路有什么明显不同,为何结果不同呢?

作为一个新手看到程序似乎都会这么写,一定要对if-else补全,我理解的补全就是为了不产生latch,那样修改也没有产生latch但是结果确是错误的。

最佳答案

查看完整内容[请看2#楼]

我自己找到原因了,是因为去掉下面两行后: else //没有这句程序就不能正常工作 rxdata
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2022-8-14
在线时间
1 小时
 楼主| 发表于 2022-8-14 13:03:26 | 显示全部楼层
我自己找到原因了,是因为去掉下面两行后:
        else                                                                   //没有这句程序就不能正常工作
            rxdata <= rxdata;                                        //没有这句程序就不能正常工作
导致编译时候把下面两行:
    else
        rxdata <= 8'd0;
配对给 判断条件  if (clk_cnt == BPS_CNT/2) begin 了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 02:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表