目录
Verification Writing Testbenches
以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步!
终于完成了 HDLBits 刷题,虽然说难度不大,但是有些题目题目还是有锻炼价值的,值得一刷。
提供一个具有以下声明的模块:
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
创建一个 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
您将获得以下要测试的 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
下面的波形设置 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
您将获得一个具有以下声明的 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