chop147的个人空间 https://blog.eetop.cn/1468735 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

VERILOG语法问题【汇总贴】

热度 1已有 651 次阅读| 2022-5-10 12:31 |个人分类:FPGA学习汇总贴|系统分类:芯片设计| FPGA

【问题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”以外的代码。


1

点赞

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 7

    粉丝
  • 1

    好友
  • 4

    获赞
  • 2

    评论
  • 419

    访问数
关闭

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

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

GMT+8, 2024-3-29 23:01 , Processed in 0.010972 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部