OpenEdv-开源电子网

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

[ALTERA] 关于阻塞赋值和非阻塞赋值的问题

[复制链接]

8

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2016-12-9
在线时间
6 小时
发表于 2020-3-10 16:45:27 | 显示全部楼层 |阅读模式
1金钱
在语法讲解的时候,“在描述组合逻辑电路的时候,使用阻塞赋值,比如assign赋值语句和不带时钟的always赋值语句;在描述时序逻辑的时候,使用非阻塞赋值,综合成时序逻辑的电路结构,比如带时钟的always语句;”
然后再看sdram_rw_test实验的时候,发现以下程序段是不带时钟的always赋值,应该是使用阻塞赋值语句(=)才对的啊,但实际代码且是使用的是非阻塞赋值语句(<=),想知道为什么跟语法讲话中的是矛盾的,希望解释下。
//计数器控制逻辑
always @ (*) begin
        case (init_state)
        `I_NOP:         cnt_rst_n <= 1'b0;     //延时计数器清零(cnt_rst_n低电平复位)

        `I_PRE:         cnt_rst_n <= 1'b1;     //预充电:延时计数器启动(cnt_rst_n高电平启动)
                                        //等待预充电延时计数结束后,清零计数器
        `I_TRP:         cnt_rst_n <= (`end_trp) ? 1'b0 : 1'b1;
                                        //自动刷新:延时计数器启动
        `I_AR:
                 cnt_rst_n <= 1'b1;
                                        //等待自动刷新延时计数结束后,清零计数器
        `I_TRF:
                 cnt_rst_n <= (`end_trfc) ? 1'b0 : 1'b1;       

        `I_MRS:  cnt_rst_n <= 1'b1;            //模式寄存器设置:延时计数器启动
                                        //等待模式寄存器设置延时计数结束后,清零计数器
        `I_TRSC: cnt_rst_n <= (`end_trsc) ? 1'b0:1'b1;

        `I_DONE: begin                  //初始化完成后,判断工作状态
                    case (work_state)
                                `W_IDLE:        cnt_rst_n <= 1'b0;
                                        //行有效:延时计数器启动
                                `W_ACTIVE:         cnt_rst_n <= 1'b1;
                                        //行有效延时计数结束后,清零计数器
                                `W_TRCD:        cnt_rst_n <= (`end_trcd)   ? 1'b0 : 1'b1;
                                        //潜伏期延时计数结束后,清零计数器
                                `W_CL:                cnt_rst_n <= (`end_tcl)    ? 1'b0 : 1'b1;
                                        //读数据延时计数结束后,清零计数器
                                `W_RD:                cnt_rst_n <= (`end_tread)  ? 1'b0 : 1'b1;
                                        //写数据延时计数结束后,清零计数器
                                `W_WD:                cnt_rst_n <= (`end_twrite) ? 1'b0 : 1'b1;
                                        //写回周期延时计数结束后,清零计数器
                                `W_TWR:            cnt_rst_n <= (`end_twr)    ? 1'b0 : 1'b1;
                                        //预充电等待延时计数结束后,清零计数器
                                `W_TRP:        cnt_rst_n <= (`end_trp) ? 1'b0 : 1'b1;
                                        //自动刷新等待延时计数结束后,清零计数器
                                `W_TRFC:        cnt_rst_n <= (`end_trfc)   ? 1'b0 : 1'b1;
                                default:    cnt_rst_n <= 1'b0;
                    endcase
        end
                default: cnt_rst_n <= 1'b0;
        endcase
end

最佳答案

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

你前面的描述是正确的,这里应该使用阻塞赋值“=”。只不过每个状态只对一条语句进行赋值,这里不影响功能。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2013

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5618
金钱
5618
注册时间
2018-10-21
在线时间
1591 小时
发表于 2020-3-10 16:45:28 | 显示全部楼层
你前面的描述是正确的,这里应该使用阻塞赋值“=”。只不过每个状态只对一条语句进行赋值,这里不影响功能。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-3-11 00:39:04 | 显示全部楼层
帮顶
回复

使用道具 举报

8

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2016-12-9
在线时间
6 小时
 楼主| 发表于 2020-3-11 09:41:13 | 显示全部楼层
QinQZ 发表于 2020-3-11 09:00
你前面的描述是正确的,这里应该使用阻塞赋值“=”。只不过每个状态只对一条语句进行赋值,这里不影响功能 ...

分析得犀利,但就算是不影响功能,我觉得还是要规范,不能跟语法讲解的时候说的规则相矛盾,不然会让人很迷惑/
回复

使用道具 举报

3

主题

2013

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5618
金钱
5618
注册时间
2018-10-21
在线时间
1591 小时
发表于 2020-3-11 11:28:20 | 显示全部楼层
Aaronzhong 发表于 2020-3-11 09:41
分析得犀利,但就算是不影响功能,我觉得还是要规范,不能跟语法讲解的时候说的规则相矛盾,不然会让人很 ...

是的,这个我们后续改正
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2019-5-6
在线时间
27 小时
发表于 2020-5-1 15:26:42 | 显示全部楼层
QinQZ 发表于 2020-3-11 11:28
是的,这个我们后续改正

这里使用非阻塞赋值,是否会有一拍延时,自己感觉,这里应该跟阻塞赋值效果一样,毕竟上述没有时钟信号,所以应该不存在一拍延时,望老师解答疑惑
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
发表于 2020-6-22 16:14:40 | 显示全部楼层
chunyu5888 发表于 2020-5-1 15:26
这里使用非阻塞赋值,是否会有一拍延时,自己感觉,这里应该跟阻塞赋值效果一样,毕竟上述没有时钟信号, ...

实测过,之前有一次在组合逻辑里用了非阻塞赋值,导致我的信号始终无法对齐,所以这种方式会导致信号延迟一拍
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 17:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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