1 如何写仿真文件
写testbench的可以分为两步:
①写激励(相当于硬件中的晶振等)
②例化主模块(对被测模块进行端口映射)
举例:
`timescale 1ns/1ps
module tb_led_twinkle();//tb文件不需要定义输入输出端口
// 设计参数化
parameter CLK_PERIOD = 20;
parameter CLK_HALF_PERIOD = CLK_PERIOD/2;
parameter RST_MUL_TIME = 5;
parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;
//以下是激励部分代码
reg sys_clk ;
reg sys_rst_n;
wire led ;
initial begin // initial语句只在程序开始时执行一次
sys_clk = 0;
sys_rst_n = 0;
#RST_TIME sys_rst_n = 1;
end
// 这是一个周期20ns的时钟
always
#CLK_HALF_PERIOD sys_clk = ~sys_clk;
// 以下是例化主模块部分
led_twinkle u_led_twinkle(
.sys_clk (sys_clk ),
.sys_rst_n(sys_rst_n),
.led (led )
);
endmodule
2 testbench中变量声明技巧
- 在编写Testbench代码中变量声明是为被测试模块提供对应接口,与被测试模块端口对应即可。
注意: 与被测模块输入端口对应的变量应该声明为reg类型,因为reg类型可以存储数据,为被测模块提供激励;与被测模块输出端口对应的变量应该声明为wire类型,即通过wire来引出被测模块的输出 - sys_clk初始值设置为0,仿真文件中的信号延时n个时钟周期后变化,则这些信号变化时对应时钟的下降沿
3 如何在仿真时把仿真文件写到txt中
在仿真时,有时我们需要看一下仿真产生的结果是否正确。如果直接从vivado的仿真窗口看仿真波形,则比较难看出仿真结果是否正确,这时我们可以将仿真结果写到txt文件中,然后在matlab中读取txt文件即可比较方便的查看仿真结果。
这里用到verilog中的两个系统函数:$fopen 和 $fdisplay
- verilog 仿真代码
`timescale 1ns / 1ps
module tb_pn_code();
// 设计参数化
parameter CLK_PERIOD = 20;
parameter CLK_HALF_PERIOD = CLK_PERIOD/2;
parameter RST_MUL_TIME = 5;
parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;
reg rc_clk ;
reg rst ;
wire pn ;
initial begin
rst = 1;
rc_clk = 0;
#RST_TIME
rst = 0;
end
always
#CLK_HALF_PERIOD rc_clk = ~rc_clk;
pn_code u_pn_code(
.rc_clk(rc_clk),
.rst (rst ),
.pn (pn )
);
// ------------------ 将仿真结果写入txt文件 ----------------------- //
integer pn_code_file;
initial begin
pn_code_file = $fopen("G:/graduation_project/verilog/project_bpsk/bpsk_dsss/bpsk_dsss.srcs/txt/pn_code.txt");
end
always@(posedge rc_clk)begin
if(~rst)
$fdisplay(pn_code_file,"%d",pn);
end
endmodule
- matlab中读取txt文件
clear
clc
load('G:\graduation_project\verilog\project_bpsk\bpsk_dsss\bpsk_dsss.srcs\txt\pn_code.txt');
注意:
① 在$fopen函数中写地址时,用的斜杠的方向"/",这里与matlab中不同
② 每次仿真都会清空txt然后重新写入
286

被折叠的 条评论
为什么被折叠?



