【HDLBits 刷题 15】Verification Writing Testbenches

目录

写在前面

Verification Writing Testbenches

clock

Tb/tb1

Tb/and

Tb/tb2

Tb/tff


写在前面

以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步!

终于完成了 HDLBits 刷题,虽然说难度不大,但是有些题目题目还是有锻炼价值的,值得一刷。

Verification Writing Testbenches

clock

提供一个具有以下声明的模块:

module dut ( input clk ) ;

编写一个测试平台,创建一个模块 dut 实例(具有任何实例名称),并创建一个时钟信号来驱动模块的 clk 输入。时钟的周期为 10 ps。时钟应初始化为零,其第一个转换为 0 到 1。

module top_module();
	reg   clk;
	initial begin
		clk = 'd0;
	end

	always #5 clk = ~clk;

	dut dut_inst(
		clk
		);

endmodule

Tb/tb1

创建一个 Verilog 测试平台,该测试平台将为输出 A 和 B 生成以下波形:

module top_module ( output reg A, output reg B );//

    // generate input patterns here
    initial begin
    	A = 'd0;
    	B = 'd0;
    	#10
    	A = 'd1;
    	#5
    	B = 'd1;
    	#5
    	A = 'd0;
    	#20
    	B = 'd0;
    end

endmodule

Tb/and

您将获得以下要测试的 AND 门:

module andgate (
    input [1:0] in,
    output out
);

通过生成以下时序图,编写一个实例化此 AND 门并测试所有 4 种输入组合的测试平台:

module top_module();
	reg  [1:0]   in;
	wire         out;

initial begin
	in = 'd0;
	#10
	in = 'd1;
	#10
	in = 'd2;
	#10
	in = 'd3;
end

andgate andgate_inst(in, out);

endmodule

Tb/tb2

下面的波形设置 clk、in 和 s:

模块 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 = 'd0;
		in  = 'd0;
		s   = 'd2;
		#10
		s   = 'd6;
		#10
		in  = 'd1;
		s   = 'd2;
		#10
		in  = 'd0;
		s   = 'd7;
		#10
		in  = 'd1;
		s   = 'd0;
		#30
		in = 'd0;
	end

	always #5 clk = ~clk;

q7 q7_inst (clk, in, s, out);

endmodule

Tb/tff

您将获得一个具有以下声明的 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   = 'd0;
	reset = 'd1;
	#10
	reset = 'd0;
end

always #5 clk = ~clk;

always @(posedge clk) begin
	if (reset) begin
		t <= 'd0;
	end
	else begin
		t <= 'd1;
	end
end

tff tff_inst(clk, reset, t, q);

endmodule
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Linest-5

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

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

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

打赏作者

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

抵扣说明:

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

余额充值