verilog记录

always@() : always@()里面的敏感变量为*,意思是说敏感变量由综合器根据always里面的输入变量自动添加,不用自己考虑
只能这样赋值:reg[5:0] mark = 6’b100110; 赋初值需要直接在后面写,不能像c语言一样先定义再赋。另外verilog赋值还可以在模块语句里面赋值,比如always语句里面。
integer也是一种寄存器数据类型,integer类型的变量为有符号数,而reg类型的变量则为无符号数,除非特别声明为有符号数,还有就是integer的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用reg定义,只是对于用于计数更方便而已。reg,integer,real,time都是寄存器数据类型,定义在Verilog中用来保存数值的变量,和实际的硬件电路中的寄存器有区别。
逻辑移位运算符:<<, >>
算数移位运算符:>>>, <<< (慎用)
always@ 模块内只能对reg类型的变量进行赋值
内存模型:Verilog中提供了二维数组来帮助我们建立内存的行为模型。具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问。这样的数组的定义方式如下:
reg [wordsize : 0] array_name [0 : arraysize];
例如:
reg [7:0] my_memory [0:255];
如果要存储一个值到某个单元中去,可以这样做:
my_memory [address] = data_in;
而如果要从某个单元读出值,可以这么做:
data_out = my_memory [address];
但要是只需要读一位或者多个位,就要麻烦一点,因为Verilog不允许读/写一个位。这时,就需要使用一个变量转换一下:
例如:
data_out = my_memory[address];
data_out_it_0 = data_out[0];
这里首先从一个单元里面读出数据,然后再取出读出的数据的某一位的值。
library : View -> library
点了simulate, 没有弹出objects窗口:右键->Add to->wave->all items in region
compile后错误信息点不出来:点compiler selected(单个文件)
Non-blocking assignment in function is illegal.
仿真时,出现:Error loading design 错误:检查一下modelsim的日志文件(工程目录下的transcript),一般都能找到出问题的模块
寄存器堆信号:rst_n : reset_negative 低电平重置
verilog行为仿真时钟激励显示总是z:initial内部就写信号的初始值,出现z的情况一般是没有初始值
$display: 打印
case()….endcase

这里写图片描述
ModelSim打不开.v文件:试着按open按钮

猜你喜欢

转载自blog.csdn.net/maifeilaoshi11/article/details/81535074