5.1 Clock
问题陈述:
为你提供了一个具有以下声明的模块:
module dut ( input clk ) ;
编写一个测试平台,创建一个模块dut实例(具有任何实例名称),并创建一个时钟信号来驱动模块clk输入。时钟的周期10ps。时钟应初始化为零,其第一次转换为0到1.
Verilog代码:
`timescale 1ps/1ps
module top_module ( );
reg clk;
initial begin
clk=1'b0;
end
always #5 clk=~clk;
dut u1(.clk(clk));
endmodule
5.2 Testbench 1
问题陈述:
创建一个Verilog测试平台,它将为输出A和B生成以下波形:
Verilog代码:
module top_module ( output reg A, output reg B );//
// generate input patterns here
initial begin
A=1'b0;
B=1'b0;
#10 A=1'b1;
#5 B=1'b1;
#5 A=1'b0;
#20 B=1'b0;
end
endmodule
5.3 AND gate
问题陈述:
您将获得测试的AND门:
module andgate (
input [1:0] in,
output out
);
通过生成以下时序图,编写一个实例化此AND并测试所有4个输入组合的测试平台:
Verilog代码:
module top_module();
reg [1:0] in;
reg out;
initial begin
in[1]=1'b0;
in[0]=1'b0;
#10 in[0]=1'b1;
#10 in[1]=1'b1;
in[0]=1'b0;
#10 in[0]=1'b1;
end
andgate u1(.in(in),.out(out));
endmodule
5.4 Testbench2
问题陈述:
下面的波形设置了clk、in和s:
模块q7具有以下声明:
module q7 (
input clk,
input in,
input [2:0] s,
output out
);
编写一个测试平台,实例化模块q7 并生成这些输入信号,如上图所示。
Verilog代码:
module top_module();
reg clk,in;
reg[2:0] s;
reg out ;
initial
begin
clk=1'b0;
in=1'b0;
s=3'b010;
#10 s=3'b110;
#10
in=1'b1;
s=3'b010;
#10
in=1'b0;
s=3'b111;
#10
in=1'b1;
s=3'b000;
#30
in=1'b0;
end
always #5 clk=~clk;
q7 u1 (.clk(clk),.in(in),.s(s),.out(out));
endmodule
5.5 T flip-flop
问题陈述:
给定一个T触发器模块,其声明如下:
module tff (
input clk,
input reset, // active-high synchronous reset
input t, // toggle
output q
);
编写一个实例化一个tff并重置T触发器然后将其切换到“1”状态的测试台。
Verilog代码:
module top_module ();
reg clk;
reg reset;
reg t;
reg q;
initial begin
clk=1'b0;
reset= 1'b0;
t=1'b0;
#8 reset=1'b1;
#9 reset=1'b0;
end
always #5 clk=~clk;
always@(posedge clk)
begin
if(reset)
t<=1'b1;
else
t<=1'b0;
end
tff u1(.clk(clk),.reset(reset),.t(t),.q(q));
endmodule