HDLBits刷题合集—23 Verication: Writing Testbenches
HDLBits-176 Tb/clock
Problem Statement
为你提供了带有以下声明的模块:
module dut ( input clk ) ;
编写一个测试台,创建一个模块dut的实例(具有任何实例名称),并创建一个时钟信号来驱动模块的clk输入。 时钟周期为10 ps。 时钟应初始化为零,且其第一次转换为0到1。
代码如下:
module top_module ( );
reg clk;
initial
clk = 0;
always
#5 clk = ~clk;
dut inst_dut(
.clk(clk)
);
endmodule
HDLBits-177 Tb/tb1
Problem Statement
创建一个Verilog测试平台,它将为输出A和B产生以下波形:
代码如下:
module top_module (
output reg A,
output reg B );//
initial begin
A = 0; B = 0;
#10 A = 1; B = 0;
#5 A = 1; B = 1;
#5 A = 0; B = 1;
#20 A = 0; B = 0;
#20 $stop;
end
endmodule
HDLBits-178 Tb/and
Problem Statement
你将得到以下需要测试的AND门:
module andgate (
input [1:0] in,
output out
);
通过生成以下时序图,编写一个实例化该“AND”门并测试所有4种输入组合的测试平台:
代码如下:
module top_module();
reg [1:0] in;
wire out;
initial
begin
in = 2'b00;
#10 in = 2'b01;
#10 in = 2'b10;
#10 in = 2'b11;
end
andgate my_andgate(.in(in),.out(out));
endmodule
HDLBits-179 Tb/tb2
Problem Statement
下面的波形设置clk,in和s:
Module q7具有以下声明:
module q7 (
input clk,
input in,
input [2:0] s,
output out
);
编写一个测试平台,以实例化模块q7并完全按照上述波形所示生成这些输入信号。
代码如下:
module top_module();
reg clk;
reg in;
reg [2:0] s;
wire out;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
in = 0; s = 3'b010;
#10 in = 0; s = 3'b110;
#10 in = 1; s = 3'b010;
#10 in = 0; s = 3'b111;
#10 in = 1; s = 3'b000;
#30 in = 0; s = 3'b000;
end
q7 my_q (.clk(clk),
.in(in),
.s(s),
.out(out)
);
endmodule
HDLBits-180 Tb/tff
Problem Statement
你将获得一个带有以下声明的T型触发器模块:
module tff (
input clk,
input reset, // active-high synchronous reset
input t, // toggle
output q
);
编写一个实例化一个tff的测试台,将复位T触发器,然后将其切换到“ 1”状态。
代码如下:
module top_module ();
reg clk;
reg reset;
reg t;
wire q;
initial
begin
clk = 0;
forever
#5 clk = ~clk;
end
initial
begin
reset=1; t=0;
#20 reset=0; t=1;
end
tff my_tff(.clk(clk), .reset(reset), .t(t), .q(q));
endmodule
Note
新手一枚,主要分享博客,记录学习过程,后期参考大佬代码或思想会一一列出。欢迎大家批评指正!