verilog
input,output:输入输出 ,reg: 寄存器
send_controller:模块名
reg[4:0] cnt :名称为cnt的一维数组,共有5位,cnt=5’b0给数组赋初始值00000(5个0);
wire finish:名称为finish的wire型变量,wire表示实际连线。
always @(posedge Clk) : 进程块,Clk为敏感信号,进程块一直执行,内部的变量如果要赋值只能是reg类型并且在这个块执行完后更新变量的值,读取变量时(“=”右侧变量)不受类型限制。posedge :上升沿
if else :if语句,当if后不止一句时要加上begin end(相当于“{”和“}”)
<= :非阻塞赋值,意思是同时执行完才一起赋值给变量。
case :case语句,case(tx_cnt) tx_cnt:是待判断的变量。注意要以endcase结尾;
上图是verilog模块调用,en0是模块的例化名,可以例化多个名字要不同,端口以.datain()形式输入。
函数调用:在同一文件下写下函数,调用时将函数名及参数输出,直接赋值给变量即可例如:
nextCRC16_D48({rx_data_handle2,rx_data_handle3,rx_data_handle4,rx_data_handle5,rx_data_handle6,rx_data_handle7},crc) == {rx_data_handle8,rx_data_handle9}
函数原型:
普通变量赋值:
延时445ns:
testbench写法:
不等于: !=
2023.8.22 更新
Verilog 常数
常数(Constant numbers)
常数是程序运行过程中,其值不可以改变的量。Verilog HDL提供了整数常数(Integer constants)和实数常数(Real constants)两种常数类型。
整数常数可以用于描述电路的逻辑值,是可综合语句;实数常数只可以用于电路仿真,是不可综合语句。
1 整数常数(Integer constants)
整数常量可以十进制,十六进制,八进制或二进制格式。整数常量的定义的基本语法结构为:
<符号><位宽>'<基本格式><数值>
1.1 位宽(Size)
位宽定义了数值所能够占用宽度bit数,这个bit数需要用十进制来表示。位宽是可选项,如果没有指明位宽,则默认的数据位宽为32bit。
1.2 基本格式(Base format)
在Verilog HDL中可以使用的基本格式(数制)有十进制(d或D)、十六进制(h或H)、二进制(b或B)、八进制(o或O)四种,字母不区分大小写。缺省了位宽和基本格式的数字将被视为十进制数。
1.3 数值(Value)
对于十六进制的数值可以用数字 0~9 和 a~f(或 A~F)表示,字母不区分大小写。
1.4 负数(Negative numbers)
负数需要将负号( - )放在位宽前面, 基本格式和数字之间添加负号是非法语法。通常情况,负数使用二进制补码的形式表示。
1.5 下划线(Underscore)
下划线(_)可以放在数值中的任何地方,除了第一个数字之前。下划线字符的添加是出于提高代码可读性的目的,大多用在分解长度较长的数值中。下划线字符不会改变数值的大小,在综合时将被忽略。
1.6 截取(Truncate)
位宽定义了数值所能够占用宽度bit数,当位宽确定后数值的最大值就可以确定。如果出现实际的数值比最大值大的情况,即实际数值位宽超过了指定的位宽数,那么实际数值将会被截取并保留低bit数值。
整数举例
A = 8'b10101100;
B = 8'h12;
C = 6'o45;
D = 8'd100;
说明:A = 8’b10101100 //表示8bit二进制数10101100(B),用十进制表示为172
B = 8’h12 //表示8bit十六进制数12(H),用十进制表示为18
C = 6’o45 //表示6bit八进制数45(O),用十进制表示为37
D = 8’d100 //表示8bit十进制数100(D),用十进制表示为100
负整数举例
A = -8'b10101100;
B = 8'hff;
说明:A = -8’b10101100 //表示8bit二进制数-10101100(B),用十进制表示为 -172
B = 8’hff //表示8bit十六进制数 -1(H)(补码),用十进制表示为 -1
X和Z举例
A = 8'bxxxx_zzzz;
B = 8'hxz;
2023.9.14 更新:
$readmemh(),verilog 读取PC中文本文件的函数,需要注意斜杠不同,读取的数据存放在mem中,二维数组:reg signed [15:0] mem[1:125000] 名字为mem ,数量为125000个,单个元素为16位的数组。
输入16位有符号的数组。