任何人都可以幫我寫下面代碼的verilog測試平臺代碼! 我有嘗試,但它是行不通的!Verilog測試平臺代碼
module top(clock_in, Reset, Hold, up_down, Led_Out, f);
input clock_in, Reset, Hold, up_down;
output [6:0] Led_Out;
output wire [3:0] f;
wire pulse;
clock_design temp0(clock_in, pulse);
up_down_counter temp1(pulse, Reset, Hold, up_down, f);
led7 temp2(Led_Out, f);
endmodule
LED7:
module led7(iOut, iQ);
output reg [6:0] iOut;
input [3:0] iQ;
always @(iQ)
case (iQ)
4'b0000: iOut = 7'b0000001; //0
4'b0001: iOut = 7'b1001111; //1
4'b0010: iOut = 7'b0010010; //2
4'b0011: iOut = 7'b0000110; //3
4'b0100: iOut = 7'b1001100; //4
4'b0101: iOut = 7'b0100100; //5
4'b0110: iOut = 7'b0100000; //6
4'b0111: iOut = 7'b0001111; //7
4'b1000: iOut = 7'b0000000; //8
4'b1001: iOut = 7'b0000100; //9
default: iOut = 7'b0000000; //default
endcase
endmodule
up_down_counter:
module up_down_counter (Clock,Reset,Hold,up_down,Q);
input Clock,Reset,Hold,up_down;
output reg [3:0] Q;
integer direction;
always @(posedge Clock)
begin
if(up_down)
direction = 1;
else
direction = -1;
if (!Reset && direction == 1)
Q <= 0;
else if(!Reset && direction == -1)
Q <= 1001;
else if (!Hold)
Q <= Q + direction;
if (direction==1 && Q[0]==1 && Q[1]==0 &&Q[1]==0 && Q[3]==1)
Q <= 0;
else if (direction==-1 && Q[0]==0 && Q[1]==0 &&Q[2]==0 && Q[3]==0)
Q <= 1001;
end
endmodule
clock_design:
module clock_design (clock_in,clock_out);
input clock_in;
output clock_out;
parameter which_clock=1;
reg [31:0] divided_clocks=0;
always @(posedge clock_in)
divided_clocks = divided_clocks +1;
assign clock_out = divided_clocks[which_clock];
endmodule
我的測試臺代碼
module counter_tb;
reg [6:0] Led_Out_tb;
wire [3:0] f_tb;
reg clock_in_tb, Reset_tb, Hold_tb, up_down_tb;
top dut(clock_in_tb, Reset_tb,Hold_tb, up_down_tb, Led_Out_tb, f_tb);
initial begin
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 1;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 1;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
#10 clock_in_tb = 0;Hold_tb = 0;Reset_tb = 1; up_down_tb = 0;
end
endmodule
「不起作用」對您的問題沒有用處。 – toolic 2013-03-20 11:53:04
對'divided_clocks'使用非阻塞賦值。 – toolic 2013-03-20 11:55:13