Problem 173 Clock
问题:编写testbench产生一个驱动时钟信号,来驱动模块dut,时钟周期为10ps
解决:
`timescale 1ps/1ps //仿真单位为1ps,精度为1ps
module top_module ( );
reg clk;
dut dut_inst(clk);
initial begin
#0 clk = 0;//clk初始为0
end
always #5 clk = ~clk;//每5个时钟单位 clk取反一次
endmodule
Problem 174 Testbench1
问题:编写testbench产生A、B两个输出信号,波形如下:
解决:
`timescale 1ps/1ps
module top_module ( output reg A, output reg B );//
// generate input patterns here
initial begin
#0 A=0;
B=0;
#10 A=1;
#5 B=1;
#5 A=0;
#20 B=0;
end
endmodule
注意理解#后面的延时 而不是在某一个时刻
Problem 175 AND gate
问题:为你提供如下的与门
module andgate (
input [1:0] in,
output out
);
编写testbench测试输入的四种组合,每5个时基改变一次
解决:
`timescale 1ps/1ps
module top_module();
reg[1:0] in;
reg out;
andgate andgate_inst(in,out);
initial begin
#0 in = 2'b00;
#10 in = 2'b01;
#10 in = 2'b10;
#10 in = 2'b11;
end
endmodule
居然妄图写循环执行,发现并不需要
Problem 176 Testbench2
问题:编写testbench例化下面的模块,然后产生下图的波形输出
module q7 (
input clk,
input in,
input [2:0] s,
output out
);
解决:
`timescale 1ps/1ps
module top_module();
reg clk;
reg in;
reg[2:0] s;
reg out;
q7 q7_inst(
.clk(clk),
.in(in),
.s(s),
.out(out)
);
initial begin
#0 clk = 0;
in = 1'b0;
s = 3'd2;
#10 s = 3'd6;
#10 in = 1'b1;
s = 3'd2;
#10 in = 1'b0;
s = 3'd7;
#10 in = 1'b1;
s = 3'd0;
#30 in = 1'b0;
end
always #5 clk = ~clk;
endmodule
Problem 177 T flip-flop
问题:提供一个T触发器的模块
module tff (
input clk,
input reset, // active-high synchronous reset
input t, // toggle
output q
);
编写testbench例化该tff模块,复位它然后切换到状态‘1’
解决:
`timescale 1ps/1ps
module top_module();
reg clk;
reg reset;
reg t;
reg q;
tff tff_inst(
.clk(clk),
.reset(reset),
.t(t),
.q(q)
);
initial begin
#0 clk = 0;
t = 1'b0;
reset = 1'b1;
#10 reset = 1'b0;
t = 1'b1;
end
always #5 clk = ~clk;
endmodule
呜~~~~
终于做完了,题目还是都比较基础的感觉,比较收获的就是状态机那部分了,三段式真的学到了很多,还有就是分模块设计电路那里,也体会到了分模块设计的好处。最后就是testbench的编写了,虽然感觉还算简单把,但是也是一直没有学习,现在也算了解了一点了
后面就准备着手小项目,先点个oled玩玩~~~
完结撒花~~~~