如何写Verilog仿真文件

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然后重新写入

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值