一、verilog注意点
- 延时语句
begin
areg = breg;
#10 creg = areg; //在两条赋值语句间延迟10个时间单位。
end
2.触发事件
parameter d=50; //声明d是一个参数
reg [7:0] r; //声明r是一个8位的寄存器变量
begin //由一系列延迟产生的波形
#d r = 'h35;
#d r = 'hE2;
#d r = 'h00;
#d r = 'hF7;
#d -> end_wave; //触发事件end_wave
end
3.并行块
特点:(1)并行块中所有语句同时执行
(2)块内每条语句的执行时间是相对于程序流程进入到块内的仿真时间的
(3)延时时间是用来给赋值语句ti'g提供执行时序的
(4)当按时间时序排序在最后的语句执行完或者执行disable语句时,程序流程跳出程序块
并行块的格式如下:
fork
语句1;
语句2;
.......
语句n;
join
或
fork:块名
块内声明语句 //块内声明语句可以是参数说明语句、 reg型变量声明语句、 integer型变量声明语句、
//real型变量声明语句、time型变量声明语句、事件(event)说明语句。
语句1;
语句2;
......
语句n;
join
4.时间尺度 `timescale
`timescale 用来说明跟在该命令后的模块的时间单位和时间精度。使用该命令可以在同一个设计里包含采用了不同的时间单位的模块。
如果在同一个程序设计里,存在多个`timescale命令,则用最小的时间精度值来决定仿真的时间单位。另外时间精度至少要和时间单位一样精确,时间精度值不能大于时间单位值。
`timescale 10ns/1ns //模块test的时间单位为10ns、 时间精度为1ns
module test;
reg set;
parameter d=1.55; //根据时间精度,参数d值被从1.55取整为1.6。
initial
begin
#d set=0;
#d set=1;
end
endmodule
5.verilog结构说明语句
(1)initial说明语句
initial和always说明语句在仿真的一开始即开始执行。initial语句只执行一次。相反, always语句则是不断地重复执 行,直到仿真过程结束。在一个模块中,使用initial和always语句的次数是不受限制的。
initial
begin
areg=0; //初始化寄存器areg
for(index=0;index<size;index=index+1)
memory[index]=0; //初始化一个memory
end
(2)always说明语句
6.verilog符号代表意义
(1){}大括号
1、{ }表示拼接,{第一位,第二位...};
2、{{ }}表示复制,{4{a}}等同于{a,a,a,a};
所以{13{1‘b1}}就表示将13个1拼接起来,即13'b1111111111111。
(2)