Verilog入门学习笔记——第一弹
扫描二维码
随时随地手机看文章
Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能,一起来学习吧。
1、逻辑
四值电平逻辑:0(假)、1(真)、x(不确定)、z(高阻/浮动)
x和z代表的位数:十六进制-4位、八进制-3位、二进制-1位
数的最高位是x、z、0时,自动赋值扩展剩余更高位;数的最高位是1时,用0扩展剩余更高位。
2、常量
使用带基数的形式表示常量:<+/-><位宽><基数符号><数值>
-
指明位数的数字( '):
用十进制数表示位宽; 基数格式包括十进制(d)、十六进制(h)、二进制(b)、八进制(o); 0~1、a/A~f/F
-
不指明位数的数字 :不指定基数格式时默认为十进制数;默认位宽与计算机有关(最小32位)。
3、定义标识符来表示常量
公式:parameter 参数名=常量表达式
例子:
parameter BIT=1,BYTE=8,PI=3.14; parameter DELAY=(BYTE+BIT)/2;
4、强度值:supply(驱动)、strong(驱动)、pull(驱动)、large(存储)、weak(驱动)、medium(存储)、small(存储)、highz(高阻) 按程度由强到弱排序
-
各类线网中,只有trireg类型可以存储强度(large、medium、small三等级)
-
强度值解决不同强度驱动源之间的赋值冲突。
-
不同强度信号驱动同一个线网,结果服从高强度信号。同强度多个信号竞争,结果为不确定值。
5、线网类型 net type
线网net:硬件单元间的连接。由连接器件输出端连续驱动。
数据类型:wire,wand,wor,tri,triand,trior,trireg....
线网用wire声明,值由驱动源决定。默认值为z(trireg类型线网默认值为x),默认位宽为1。
定义格式:wire[n-1:0]变量名1,变量名2,...,变量名n;
wire a,b; //声明两个线网类型变量a,b wire [7:0] databus; //声明一个8位宽的线网类型变量databus wire [32:1] busA,busB,busC; //声明3个位宽为32的线网类型变量busA,busB,busC
6、寄存器类型 register type
寄存器:存储元件,被改写前保持原数值。
寄存器型变量只能在initial或always内部被赋值。
寄存器未被赋值前,默认为x。
| 寄存器类型 | 功能说明 |
|---|---|
| reg | 用于行为描述中对寄存器型变量的说明。无符号数 |
| integer | 32位带符号的整数型变量。默认位宽是宿主机的位数,域具体实现有关,最小32位。计算中认为是有符号的数,用二进制补码的形式储存。不可使用位矢量integer [3:0] num;× |
| real | 64位带符号的实数型变量,实数不带范围,默认为0。用十进制或科学计数法(3e6=3000000)当实数值被赋给一个integer型变量时,只保留整数部分的值,小数点后面的值被截掉。 |
| time | 64位无符号的时间型变量 ,时间寄存器用time来声明,宽度与具体实现有关,最小为64位。用于存储仿真的时间,只存无符号数。每个time型变量存储一个至少64位的时间值。调用$time可得当前的仿真时间 |
如果没有明确地说明寄存器型变量reg是多位宽的矢量,则寄存器变量的位宽为1位。
定义格式:reg[n-1:0]变量名1,变量名2,...,变量名n;
reg clock; //声明一个寄存器变量clock reg [3:0] counter; //声明一个4位宽的寄存器变量counter
integer型变量例子:
integer counter; //声明一个整型变量counter initial counter=-1; //将-1以补码的形式存储在counter中 //只有寄存器类型的变量才能在initial内部被赋值
real型变量例子:
real delta; //声明一个实数型变量delta initial begin delta=4e10; //给delta赋值 delta=2.13; end integer i; //声明一个整型变量i initial i=delta; //i得到的值是2(只将实数2.13的整数部分赋给i)
time型变量例子:
time current_time; //声明一个事件类型的变量 current_time initial current_time=$time; //保存当前的仿真时间到变量current_time中





