做一些关于Verilog的简要笔记,方便日后快速复习,如有错漏希望您能够不吝赐教
- 四值逻辑系统
‘0’ ‘1’ ‘x’ ‘z’(x:表示未确定的值;z:表示高阻抗) - 整数常量和实数常量
整数表示:<位数(缺省则为32位)>’<数基b/o/d/h(缺省为十进制d)><有效数字(包含x,z;超出有效范围则截去高位)>
实数表示:可以用十进制或者科学记数法表示
以下是常量举例:
//整数举例
12
'h83a //默认32bits
8'b1100 0z1x //可使用x、z,且不区分大小写
//实数
6.3
32e-4
- 数据类型
net(线网类型) 实际上net是个大类
常用的net_kind有wire、tri、supply1(电源)、supply0(地)、wor(线或)、wand(线与)
如何定义net?
net_kind [msb:lsb] net1,net2…
下面用wire举例实现定义net:
wire data; //定义1位数据线
wire [7:0]Addr; //定义8位地址线
net需要被持续驱动,驱动它的元件可以是门和模块。常用assign关键字指定赋值。若没有驱动它的元件,那么它的缺省值为z。
register(寄存器类型)
常见的寄存器类型:
reg | integer | real | time | realtime |
---|---|---|---|---|
无符号型 | 32位有符号整型变量(通常用作不会由硬件实现的数据处理) | 双精度带符号的浮点变量 | 64位无符号整型变量,用于仿真时间 | 与real内容一致,但可以用作实数仿真时间 |
那么如何定义reg?
reg [msb: lsb] reg1,reg2…
下面举例说明:
reg [3:0]counter1; //定义了一个四位寄存器
integer A,B,C; //定义三个整型寄存器
register表示抽象出来的数据存储单元,只能在always和initial等过程语句中被赋值,其变量具有缺省值x。
reg与wire的不同点
赋值环境不同 | 待发现 |
---|---|
wire在assign关键字后进行赋值,reg在关键字always、initial等关键字后被赋值 |
最后来一些个人想法和补充:
net类型很大程度上是为了信号量的传输,所以其缺省值为z(高阻态);
而register类型多用于表示数据变量,时间或者其他的类型的数据存储量,所以其缺省值为x。
module中,若未加声明那么它的端口一般为wire型,想要修改这个默认的话,可以由下面这句编译指导改变:
'default_nettype
(漏讲了module等概念放在下次吧,我将且理解为模块,其内部是对于各个端口和信号的逻辑描述)