关于verilog的仿真测试程序编写

关于verilog的仿真测试程序编写,第1张

module mul3_testbench //定义一个没有输入输出端口的测试平台

reg a2,a1,a0,b2,b1,b0//被测模块的input端口,改为对应的 reg寄存器做输入信号

wire p5,p4,p3,p2,p1,p0//被测模块的output端口,改为对应的wire型

initial begin // 初始化所有 输入信号的寄存器值

a2= 0

a1=0

a0 =0

b2 =0

b1= 0

b0 =0

#50 //一般延迟较长时间后,应该使复位信号不复位系统正常工作,但你没有复位信号

end

// 初始化模块结束后一般时序电路仿真是产生时钟信号,

//这是纯组合逻辑没有时钟信号就省略了

//然后就可以根据你所需要验证的功能在此位置编写initial块或always块给reg 型

//的输入信号赋值的相关逻辑,观察wire型输入信号的值

//---------------------------调用被测对象,格式如一般元件调用-------------------

mul3 DUT( .a2(a2),

.a1(a2),

.a0(a0),

.b2(b2),

.b1(b2),

.b0(b0),

.p5(p5),

.p4(p4),

.p3(p3),

.p2(p2),

.p1(p1),

.p0(p0)

)

endmodule

// 最后的提示,你的程序里定义了整数型变量,其实是不好的用法,甚至不能被正确综合,

//可以用等值的reg 型变量来替代,即使你定义成整数型,实际上也是被综合成reg型的,

//另外,一般可综合代码中最好不要用for语句,个人认为你的代码会完全功能不正常的

本人也在用Verilog语言编写程序,之前编写过测试文件,在Quartus中编译总是出错,说不是一个模块之类的,用在Modelsim中就可以实现,因为Modelsim在你启动仿真时,要求你添加源代码和测试文件(不添加测试文件也可以,以用自己给时序,像Quartus一样)。所以本人认为Quartus只能通过建立波形文件来仿真。

给你写一个例子,下面是一个设计文件和一个对应的测试程序,希望能起到抛砖引玉的和用:

/*

File Name : test.v

Author: www.flxc.net

Data : 2010-10-14 20:20:52

Description : This module is to shift the 32 bit input data with clock edges.

*/

`timescale 1ns/1ns

`define period 10

module test(

clk,

rst_n,

data_i,

data_o

)

input clk

input rst_n

input [31:0] data_i

output [31:0] data_o

reg [31:0] data_o

always@(posedge clk or negedge rst_n)

beg

if(!rst_n)

data_o <= 32'b0

else

data_o <= data_i >>1

end

endmodule

module test_tb

reg clk

reg rst_n

reg [31:0] data_i

wire [31:0] data_o

initial

begin

clk=1'b1

rst_n=1'b1

data_i=32'b1010_1111_1000_1111_1111_0000_0001_0000

#(`period/3)

rst_n=1'b0

#(`period/3)

rst_n=1'b1

#100000000

$stop

end

always #(`period/2) clk=~clk

endmodule


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8041271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存