1. 复习verilog语法
【选做题】
- reg和wire的区别
寄存器数据类型
Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的。(程序块:例如always块)
这里未免还是会让人产生疑惑?寄存器数据类型的变量最后一定会被综合成寄存器吗?
对应于实际的数字电路中,如果该程序块描述的是时序逻辑,则该寄存器变量对应为寄存器;如果该程序块描述的是组合逻辑,该寄存器变量对应为硬件逻辑;如果该程序块描述的是不完全组合逻辑,那么该寄存器变量也可以对应为锁存器。由此可见,寄存器类型的变量不一定会综合为寄存器。
线网数据类型
Verilog中规定,模块的input和inout端口必须是线网类型;连续赋值语句的被赋值对象必须是线网类型。对应于实际的数字电路,线网类型实际上就对应着硬件的连线,起到连接作用。
线网数据类型包括wire和tri等,wire最常见,不必多说,很多情况下直接声明为wire即可。
至于tri其实和wire在用法上是一模一样的,不过有时候,我们需要定义一些会被三态门驱动的硬件连线,用tri来命名会让代码更具有可读性,让人一看就知道这根连线上会出现Z状态,仅此而已!
---------------------
作者:李锐博恩(Reborn)
原文:https://blog.csdn.net/Reborn_Lee/article/details/82771503
这是我以前写过的博文:【 Verilog HDL 】寄存器数据类型(reg)与线网数据类型(wire,tri)
- 阻塞赋值与非阻塞赋值的区别
1、非阻塞(Non_Blocking)赋值方式(如 b <= a;)
块结束后才完成赋值操作;
b的值并不是立刻就改变;
这是一种比较常用的赋值方法。(特别在编写可综合模块时)
2、阻塞(Blocking)赋值方式(如: b = a;)
赋值语句执行完后,块才结束;
b的值在赋值语句执行完后立刻就改变;
可能产生意想不到的结果。
非阻塞赋值方式和阻塞赋值方式的区别常给设计