赞
踩
全部答案汇总:刷完这套题,我才发现Verilog原来如此简单----HDLBits答案汇总
今天更新Circuits章节中Verification:Writing Testbenches
这个章节的内容根据要求编写对应的Testbenches文件,Testbenches是测试激励,是对写好的Verilog module进行测试的一种激励手段,这里大致说一下格式:
【题目】:
提供给你如下的模块。编写一个Testbenches对该模块进行例化并测试,同时设置激励时钟clk,周期10ps,该信号初始为0。
module dut ( input clk ) ;
【个人思路】:
需要写一个Testbenches对提供dut模块进行测试,该模块只有一个输入激励clk,根据上图要求编写clk就可以了。clk是周期性变化的信号,每隔5ps就翻转一次。
- `timescale 1ps/1ps //时间单位/精度
- module top_module ( ); //测试module
-
- reg clk; //端口声明
-
- //------------<例化被测试模块>----------------------------
- dut dut_inst(
- .clk (clk)
- );
- //------------<设置初始测试条件>--------------------------
- initial begin
- clk = 1'b0; //初始化为0
- end
- always #5 clk <= ~clk; //时钟周期10ps
- endmodule
【题目】:
根据A、B的波形设计测试输入激励。
【个人思路】:
这题只要对着波形写A、B的激励就行了。
- module top_module ( output reg A, output reg B );//
-
- // generate input patterns here
- initial begin
- A <= 1'b0; //初始为0
- B <= 1'b0; //初始为0
- #10 //10ns后
- A <= 1'b1;
- #5 //5ns后
- B <= 1'b1;
- #5 //5ns后
- A <= 1'b0;
- #20 //20ns后
- B <= 1'b0;
- end
-
- endmodule
【题目】:
提供下面的与模块给你,设计一个testbench进行验证,要将两输入的4种可能的输入情况全部验证。
【个人思路】:
写激励的输入,分别让输入in为00、01、10、11,这样就验证到了所有的可能情况。
- `timescale 1ps/1ps //时间单位/精度
- module top_module(); //测试module
-
- reg [1:0] in; //端口声明
- wire out; //端口声明
-
- //------------<例化被测试模块>----------------------------
- andgate andgate_inst(
- .in(in),
- .out(out)
- );
- //------------<设置初始测试条件>--------------------------
- initial begin
- in <= 2'b00;
- #10 in <= 2'b01;
- #10 in <= 2'b10;
- #10 in <= 2'b11;
- end
-
- endmodule
【题目】:
输入信号时序图如下:
被测试模块q7如下,根据上图设计testbench对q7模块进行测试。
module q7 ( input clk, input in, input [2:0] s, output out );
【个人思路】:
题目意思是要根据时序图来设计输入激励信号,从而完成被被测试模块q7的测试,所以我们需要做的就是根据时序图来设计输入激励。
- `timescale 1ps/1ps //时间单位/精度
- //测试module
- module top_module();
-
- //端口声明
- reg in;
- reg [2:0] s;
- reg clk;
- wire out;
- //------------<例化被测试模块>----------------------------
- q7 q7_inst(
- .in (in),
- .clk (clk),
- .s (s),
- .out (out)
- );
- //------------<设置初始测试条件>--------------------------
- initial begin
- clk = 1'b0;
- in <= 1'b0;
- s <= 3'd2;
- #10 s <= 3'd6;
- #10 s <= 3'd2;
- in <= 1'b1;
- #10 s <= 3'd7;
- in <= 1'b0;
- #10 s <= 3'd0;
- in <= 1'b1;
- #30 in <= 1'b0;
- end
- always #5 clk <= ~clk; //CLK周期为10ps
-
- endmodule
【题目】:
提供如下TFF模块给你,例化TFF模块并对器进行测试。
module tff ( input clk, input reset, // active-high synchronous reset input t, // toggle output q );
【个人思路】:
只要例化一下tff模块,设计一下输入clk,reset,t就可以了。
- `timescale 1ps/1ps //时间单位/精度
- module top_module (); //测试module
-
- //端口声明
- reg clk;
- reg reset;
- reg t;
- wire q;
- //------------<例化被测试模块>----------------------------
- tff u_tff(
- .clk (clk ),
- .reset (reset ),
- .t (t ),
- .q (q )
- );
- //------------<设置初始测试条件>--------------------------
- initial begin
- clk=1'b0;
- reset <= 1'b1;
- #10;
- reset <= 1'b0;
- t <= 1'b1;
- end
-
- always #5 clk=~clk; //CLK周期为10ps
-
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。