查看: 1351|回复: 0

VERILOG语法问题【汇总贴】

[复制链接]
  • TA的每日心情
    开心
    2023-1-4 10:25
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2022-5-10 12:28:43 | 显示全部楼层 |阅读模式
    分享到:
    【问题1:ALWAYS不写ESLE表示保持原来的值】:下面是一个ALWAYS语句,当rst_n==1、a==1时,led的值是多少?

    答:当rst_n==1,a==1时,上图中第3、第6和第9行都不满足条件,因此第4、7、10行的赋值语句都不会执行。也就是说led值没有改变。
             所以,时钟上升沿之后,led还会保持原来的值。如果原来的led等于0,之后也是0;原来等于1,之后也是等于1.


    【问题2】为啥begin后面加这个冒号,以前没见到过。
    答:begin后面加冒号,相当于这个begin end块起一个名字。起名字是做区分用,一般情况下,不对begin/end命名,所以这种写法很少见。


    【问题3】请问以下变量后加个"-"意思是取这个变量的某几位吗?
    答:上面的按减号带入结果就可以了,例如 data[7-1],就是data[6]。 data[7-1:0],就是data[6:0]。


    【问题4】
    二进制000-二进制001=111  这个最高位怎么算的?
    答:参考十进制加减的运算方法,如下图所示得到的。

    所不同的是:二进制是 0-0=0,0-1=1,1-0=1,1-1=0。
    如果保存结果的位宽只保留最低位的话,那就是111。
    更多更详细的资料,请看《FPGA至简设计原理与应用》:http://www.mdy-edu.com/wentijieda/20210414/1331.html?1618393457,请看第一篇,第三章5.3 算术运算符的内容。

    【问题5】rst_n==1'b0 和!rst_n不同的问题。
    LED灯设计为什么LED和计数器复位条件不一样?
    答:这两个结果是一样的,都是当rst_n为1时复位。只是写法不同。

    【问题6:一个always里有多少信号时的理解问题】如下图所示,第9行代码里的key_reg值,是等于第8行的key的值还是key_reg的值。是先执行第8行,再执行第9行代码吗?
    答:当一个always里设计了多个信号时,如上图中设计了key_reg和delay_cnt的值,其实质可拆分成如下代码。
    答:当一个always里设计了多个信号时,如上图中设计了key_reg和delay_cnt的值,其实质可拆分成如下代码。
    而众所周知,verilog代码中每个always都是独立并且同时执行的。因此上图中第23行的代码和第32行的判断是同时进行的。假设当前key_reg等于0。在时钟上升沿前key等于1。那么第23行执行后,key_reg值更新为1。同时第32行判断时key_reg值仍然为0,不是最新的值为1。
    在此,MDY强烈建议,一个ALWAYS设计一个信号,有助于做逻辑设计,理清思路,避免很多理解上的问题。而且事实上,一个always设计多个信号更像写“软件”的代码,是用软件思维在设计FPGA,而在FPAG中是不规范的。


    【问题7】红色箭头指的那些语句是什么意思?
    答:这是宏定义的的一种用法。此时表示该.v文件使用的是从“ 'ifndef SIMPLE”到“ 'endif”的代码,如果把“' define SIMPLE”注释掉的话,使用的就是除“ 'ifndef SIMPLE”到“ 'endif”以外的代码。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 01:02 , Processed in 0.115104 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.