verilog
Last updated
Last updated
自上而下设计
区分大小写
分号作为语句结束符
空格无意义
//单行注释 /* */多行注释
标识符:自定义名字 关键字:具有一定功能的语言标识
数值种类
0:假
1:真
x or X:未知
Z or z:高阻
整数表示方法
',其中 bits 指定数据的位宽,representation 指定数据用何种进制来描述,可以是 2 进制(b 或 B)、8 进制(o 或 O)、10 进制(d 或 D)、16 进制(h 或 H),value 指定数据的具体数值
example:
4'b1011 // 4bit 数值 32'h3022_c0de // 32bit 的数值
当直接写数字不指明位宽和进制时默认十进制
负数:在表示位宽的数字前加‘-’
实数表示:
十进制
科学计数:
1.2e4 //大小为12000 1_0001e4 //大小为100010000 1E-3 //大小为0.001
字符串:
双引号包围,不可以换行
线网(wire)
wire表示的是物理连线,wire的电平由连接到的器件决定且与器件相同,若没有驱动的器件连接到wire则wire值为z
寄存器(reg)
表示储存单元,会保持原有值直到改写
仿真时,reg的值可以通过赋值号改写
向量
当位宽大于1时,wire或者reg可以被声明为向量
例如:reg [3:0] counter;声明了一个最高位为3,最低位为0的位宽为4的寄存器counter
位选择
访问向量的单个位如:data[0]会选择data的最低位
部分选择
可以选择向量的部分连续位
data[9:0]会选择最低位0到最高位9
并且向量域的选择可以是可变的
bit位后固定位宽的向量域选择访问
[bit+: width] : 从起始 bit 位开始递增,位宽为 width。
[bit-: width] : 从起始 bit 位开始递减,位宽为 width。
//下面 2 种赋值是等效的 A = data1[31-: 8] ; A = data1[31:24] ;
//下面 2 种赋值是等效的 B = data1[0+ : 8] ; B = data1[0:7] ;
把信号进行组合时,需要借助大括号
使用integer声明,且声明时不用指明位宽
用real声明,可用十进制或者科学计数法表示,若将实数赋值给整数则只有整数部分会被赋值
一般使用特殊的时间寄存器time变量对仿真时间保存可以通过$time获取当前的仿真时间
存储器变量就是寄存器数组,可以描述RAM或ROM
用parameter声明,只能赋值一次
a^b// a与b进行异或
单目运算:+ - ! ~
乘除取模:* / %
加减 + -
移位 << >>
关系< <= > >=
等价 == != ===(严格等价:ture!===1) !===