从ISE切换到Vivado后,一直不习惯该软件的仿真方式。因为有个大麻烦,软件无法自动生成testbench用例。即使网上有VScode搭配插件进行自动生成Testbench的方案,但是实践下来,需要配置python环境,公司电脑对软件的安装设置了很多麻烦,尝试了好久一直出问题,遂放弃。考虑到本身脚本生成的测试用例也只是简略的模板化代码,于是干脆回到原始时代,手写Testbench吧。因为Testbench本身有固定的套路可遵循,可以做一个总结归纳搞一个通用的,以后直接复制过来修修改改就能用。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/08/16 14:56:15
// Design Name:
// Module Name: tb_AD9575_SPI_2
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
//============== (1) ==================
//模块和相关信号声明
module tb_AD9575_SPI_2(
);
parameter SEND_DATA_WIDTH = 24;
parameter RECE_DATA_WIDTH = 24;
// 输入信号作为reg 输出信号作为wire
reg clk;//主时钟
reg rst_n;
reg spi_start_i ;
reg [24-1:0] spi_send_data ;
wire spi_trans_end;
wire [24-1:0] spi_rece_data;
wire spi_cs;
wire spi_sclk ;
wire spi_mosi;
reg spi_miso;
//============== (2) ==================
//主时钟生成 两种生成时钟方法可选择 采用initial用法的话 initiala不能被编译
initial begin//125M
clk = 0;
forever begin
#4 clk = ~clk;end
end
// initial
// clk = 0;
// always #20 clk = ~clk;
//============== (3) ==================
//复位产生
initial begin
rst_n = 1'b0 ;
#8 rst_n = 1'b1 ;
end
//============== (4) ==================
//激励产生
initial begin
spi_start_i = 0;
#16
spi_start_i = 1;
spi_send_data=2;
#24
spi_start_i = 0;
spi_send_data=2;
wait (spi_trans_end )
spi_start_i = 1;
spi_send_data=10485760;
#24
spi_start_i = 0;
wait (spi_trans_end )
begin
$display("SPI translation is over");
end
#500
$stop;
end
//============== (5) ==================
//所需仿真的模块例化
AD9575_SPI_2 #
(
.conf_width (SEND_DATA_WIDTH),
.rece_width (RECE_DATA_WIDTH)
)
AD9575_SPI_2_inst(
.clk (clk ),
.rst_n (rst_n ),
.spi_start_i (spi_start_i ),
.spi_send_data (spi_send_data ),
.spi_trans_end (spi_trans_end ),
.spi_rece_data (spi_rece_data ),
.spi_cs (spi_cs ),
.spi_sclk (spi_sclk ),
.spi_mosi (spi_mosi ),
.spi_miso (spi_miso )
);
//============== (6) ==================
//自动检查对比 输出相关的信息
//============== (7) ==================
//仿真完成
endmodule
2.IC验证之“Timescale”使用小谈(一) - 腾讯云开发者社区-腾讯云
3.testbench中,forever产生时钟出错 FPGA,verilog,testbench,forever - 最大最专业的FPGA论坛
5.十天学会FPGA之三——testbench的写法 - 知乎