目录
一、常量
1.1数字
1.1.1 整数
二进制(b或B)、十进制(d或D)、十六进制(h或H)、八进制(o或O)。
表达方式:
<位宽><进制><数字>省略位宽默认数据位宽32,省略位宽与进制默认数据为32位十进制。
例:
8'b10101111位宽为8的二进制表示,'b表示二进制
8'ha2位宽为8的数十六进制表示
1.1.2x和z值
x和z值在数字电路中,x代表不定值,z代表高阻值。
例:
4'b10x0 //位宽为4的二进制数从低位数起第2位为不定值
4'b101z //位宽为4的二进制数从低位数起第1位为高阻值
1.1.3负数
注意:减号不可以放在位宽和进制之间,也不可以放在进制和具体的数之间。
4. 8'd5 //这个表达式代表5的补数(用八位二进制数表示)
8'd- 5 //非法格式
2.参数(parameter)型
在VerilogHDL中用parameter来定义常量,即用parameter来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用标识符代表一个常量可提高程序的可读性和可维护性。
例:
parameter msb=7; //定义参数msb为常量7
parameter e=25, f= 29; //定义两个常数参数
二、变量
2.1wire型
常用来表示用以assign关键字指定的组合逻辑信号。
2.2reg型
寄存器数据类型。
2.3memory型
通过对reg型变量建立数组来对寄存器建模,可以描述RAM型存储器,ROM存储器和reg文件。
三、三种变量的区别
3.1wire型变量
a,连线型数据,网线类型,一般指RTL生成内部网线
b,表示元器件之间的物理连线,无法保存数据
c,可被连续赋值语句或元件输出驱动
d,值由驱动源提供
e,无驱动源网线缺省值为Z
总结:即wire代表verilog构建模型时内部生成网线。
3.2reg型变量
a,寄存器数据类型,通常用于描述存储单元
b,可保持自身数据直至该变量被赋予新值
c,常用于表示“always”内,代表触发器(触发器,由事件进行触发,即触发端接收到事件发生信号,输出端状态发生反转)。
d,用于表示无符号数
总结:用于数据存放
3.3memory变量
使用方法:reg[n-1:0]存储器名[m-1:0]
reg[n-1:0]定义寄存器大小,存储器名[m-1:0]定义存储器中有多少个这样的寄存
例:reg[7:0] mema[255:0]
一个名为mema的存储器,内部包含256个8位寄存器。
个人认为可以将一个memory变量看作一个书架,reg是书架上排列的书籍,我们需要的具体数据为书中具体内容。我们根据存储器名[a]可以锁定书籍编码即其在书架上的具体摆放位置,从而锁定到我们寻找的是哪一本书(即哪个寄存器),reg[7:0] 则定义书籍大小,从而我们可以获取想要的值。
这样的读取数据相较于reg直接读取会相对慢一些,因为多了一步通过memory寻找reg的过程。
注:一个n位寄存器可以直接赋值,而一个完整存储器不行。
例: rega=0; //合法赋值语句
mema=0; //不合法赋值语句
原因如同我们不能直接将数据具体内容写在书架上一样,memory只能存放reg具体位置,不能存放reg的具体内容。