erilog 测试波形的生成
- 值序列
- 线性产生值序列
eg:
-
- 循环产生值序列
eg:每隔50时间单位输出一次随机的256以内的数字,同时循环256次,循环结束之后延迟200时间单位结束
-
- 数组产生值序列
eg:首先需要实现数组列表数据的初始化,然后将数组列表中存储的数据对外输出
-
- 文件导入产生值序列
- 时钟的建立
- timescale时间尺度
‘timescale 1ns/10ps (时间单位,时间精度)
-
- forever产生时钟信号
always块产生时钟信号
- 数据显示
- 显示信息$display
$display(‘‘hello verilog world’’)
>>hello verilog world
$display($time)
>>100(显示当前时间)
$display(‘‘simulation time is %t ,data is %h(hex)’’,$time,data);
>>simulation time is 100,data is 11(hex) (十六进制与时间)
$display(“data is %b”,data);
>>data is 0011xxxx
$display(“it is %%”);
>>it is % (显示转义字符,特殊字符)
-
- 监控信息$monitor
>>0 set = x,1.6 set=0 , 3.2 set =1
-
- 选通显示$strobe
同一时刻所有的赋值语句完成之后再执行
- 文件访问
- $open(“file_name”)
-
- 读取文件
- 读取单个字符$fgetc
c=$fgetc(fd);>>从fd对应的文件里读取一个字节(byte),并返给c,若读取错误,则返回EOF(-1)
- 读取一行字符串$fgets
integer code =$fgets(str,fd);>>从fd对应的文件中读取一行文字串,存储到向量str中
- 格式化读取数据
$fscanf,$sscanf
- 二进制数据读取
- $fread
- 关闭文件
$fclose(fd);
- 从文本文件中读取向量
reg[7:0] memory[7:0];//声明8*8的存储单元
integer i;
initial
begin
$readmemb(“dat.data”,memory);
for (i=0;i<8;i=i+1)
$display(“memory[%d]=%b”,i,memory[i]);
end
- 向文本文件中写入向量
parameter period=20;
reg[7:0] in_vec;//激励向量
wire[7:0] out_vec;//相应向量
integer resultsfile ,stimulusfile;//文件操作句柄
dut u1(out_vec,in_vec);//待测模块实例化
initial
begin
stimulusfile = $fopen(“stimulus.dat”);
resultsfile =$fopen(“results.dat”)
fork
if (stimulusfile! = 0) forever # (period/2)
$fstrobeb(stimulusfile,”%b”,in_vec);//fstrobe的二进制输出
join
end