在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2265|回复: 8

[求助] 求助,verilog语言的基础问题

[复制链接]
发表于 2016-11-12 16:17:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
近来学习verilog的过程,遇到一个问题,自己搞不明白,求各位前辈指教。问题如下:
对于以下的代码
always @(*) begin
    if (rst == `RstEnable) begin
        a                      <= 2'b00;
    end else begin
        a                      <= 2'b01;
    end
      
    case (op)
        0 :
        begin
            a                      <= 2'b10;
        end
        1 :
        begin
            a                      <= 2'b11;
        end
    endcase
end

如果是计算机软件语言a的结果很好理解,因为软件是有顺序的,后面的赋值语句会覆盖前面的赋值语句的结果。但是Verilog是硬件描述语句,所以always块中的语句是并发执行的,那么上述a的结果如何确定呢?
从仿真的结果来看和顺序执行的效果一致,但是从Verilog语言层面如何理解呢?
求帮助!!!!!!!
发表于 2016-11-12 22:56:38 | 显示全部楼层
首先有一点硬件描述语言对应的是电路,好的代码风格能够综合出无竞争和冒险的电路,always@(*)开头的过程快一般用来对应的是组合逻辑电路,因此在这个过程块中最好把所有赋值符号换成阻塞赋值符号(=)这样子就比较好理解了。
当你要描述时序逻辑电路的时候一般会用always@(event)来进行,这时里面的赋值符号最好用非阻塞。
发表于 2016-11-15 10:31:33 | 显示全部楼层
请先了解阻塞和非阻塞的区别。
发表于 2016-11-15 11:58:59 | 显示全部楼层
只要想明白最终映射的电路就很好理解了。
比如if-else的综合结果是一个带优先级的选择器,选择器的输入端是所有的输入值,选择端是if-else的逻辑
    a---|\
         | |---> c
    b---|/
           |__sel
 楼主| 发表于 2016-11-17 22:05:20 | 显示全部楼层



if-else的语句我是理解的,只是上面的例子中if-else和case语句是同级的,他们应该是没有优先级的吧。

另外,这些语句的写法是我从某些书上看来的,而介绍verilog语言的书上我没有看到过这种写法,一般要不然是if-else语句,要不然是case语句,不会并列使用的。所以,我很想知道这种写法是否属于教科书上不讲,但是平常很常见那种情况。以及这种写法下,会编译成什么样的电路。
 楼主| 发表于 2016-11-17 22:09:26 | 显示全部楼层
回复 4# jxk304


    你好,我就是想不明白always块中if-else和case语句并列存在时会编译成什么样的电路呀!可以直接告知吗?
发表于 2016-11-18 13:04:46 | 显示全部楼层
回复 6# new-ray

在always内部,由于有begin end, 所以是顺序执行的。
发表于 2016-11-18 15:02:24 | 显示全部楼层
1. 仅就代码本身来说,always内部是顺序执行的,所以可以认为if-else先执行,case后执行,所以这是一个优先级选择,case的优先级高
2. 这种写法不严谨,不能在if-else块和case块中对同一信号进行赋值。
要清楚自己实现什么样的逻辑,而不是代码会被映射成什么电路。你的例子中,代码的逻辑如果rst使能就复位,否则a就置01, 但是case又把else的结果覆盖了,那其实正确的逻辑是把case放进else里面
 楼主| 发表于 2016-11-18 23:38:57 | 显示全部楼层
谢谢各位的帮助!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 20:27 , Processed in 0.022090 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表