将 4 位计数器的输出连接到 Hex 到 7-Seg 解码器并创建测试台
Connecting output of 4-bit counter to Hex to 7-Seg decoder and creating testbench
我有一般的抽象概念,但是用Verilog做对我来说很难。我知道我必须将两者连接起来,然后制作一个测试台。那需要2个以上的模块吗?我无法理解如何正确地声明输入和输出,这使得很难制作测试平台。
计数器的输入是时钟,输出是4位。该 4 位连接到解码器的 4 位输入。 testbench需要显示时钟输入,4个计数器输出,解码器的7个输出。
不清楚的一件事是我是否需要一个模块来连接两个模块,或者我是否可以将此功能实现到一个测试台中?
//4-bit counter counting from 0000 to 1111
module lab_x_counter (clk, cnt);
input clk;
output reg[3:0] cnt;
always @(posedge clk) begin
cnt <= cnt + 1;
end
initial
cnt <= 0;
endmodule
//Hex to 7-seg
module lab_x_behavioral (SW, HEX0);
input [3:0] SW;
output [6:0] HEX0;
bcd_behavioral u0 (SW[3:0], HEX0[6:0]);
endmodule
module bcd_behavioral (bcd, HEX0);
input [3:0] bcd;
output reg [6:0] HEX0;
always @(bcd) begin
case (bcd)
4'b0000: HEX0 <= ~7'b0111111;
4'b0001: HEX0 <= ~7'b0000110;
4'b0010: HEX0 <= ~7'b1011011;
4'b0011: HEX0 <= ~7'b1001111;
4'b0100: HEX0 <= ~7'b1100110;
4'b0101: HEX0 <= ~7'b1101101;
4'b0110: HEX0 <= ~7'b1111101;
4'b0111: HEX0 <= ~7'b0000111;
4'b1000: HEX0 <= ~7'b1111111;
4'b1001: HEX0 <= ~7'b1101111;
4'b1010: HEX0 <= ~7'b1110111;
4'b1011: HEX0 <= ~7'b1111100;
4'b1100: HEX0 <= ~7'b0111001;
4'b1101: HEX0 <= ~7'b1011110;
4'b1110: HEX0 <= ~7'b1111001;
4'b1111: HEX0 <= ~7'b1110001;
endcase
end
endmodule
我创建了一个没有端口的 tb
模块,而不是您的 lab_x_behavioral
模块。然后我实例化了计数器,添加了一个时钟,并建立了连接。不需要端口名称匹配。这是编写快速测试平台的一种方法:
module tb;
wire [3:0] cnt;
wire [6:0] HEX0;
reg clk = 0;
bcd_behavioral u0 (cnt, HEX0);
lab_x_counter u1 (clk, cnt);
always #5 clk = ~clk;
initial begin
#500 $finish;
end
endmodule
另见 Testbench 101
我有一般的抽象概念,但是用Verilog做对我来说很难。我知道我必须将两者连接起来,然后制作一个测试台。那需要2个以上的模块吗?我无法理解如何正确地声明输入和输出,这使得很难制作测试平台。
计数器的输入是时钟,输出是4位。该 4 位连接到解码器的 4 位输入。 testbench需要显示时钟输入,4个计数器输出,解码器的7个输出。
不清楚的一件事是我是否需要一个模块来连接两个模块,或者我是否可以将此功能实现到一个测试台中?
//4-bit counter counting from 0000 to 1111
module lab_x_counter (clk, cnt);
input clk;
output reg[3:0] cnt;
always @(posedge clk) begin
cnt <= cnt + 1;
end
initial
cnt <= 0;
endmodule
//Hex to 7-seg
module lab_x_behavioral (SW, HEX0);
input [3:0] SW;
output [6:0] HEX0;
bcd_behavioral u0 (SW[3:0], HEX0[6:0]);
endmodule
module bcd_behavioral (bcd, HEX0);
input [3:0] bcd;
output reg [6:0] HEX0;
always @(bcd) begin
case (bcd)
4'b0000: HEX0 <= ~7'b0111111;
4'b0001: HEX0 <= ~7'b0000110;
4'b0010: HEX0 <= ~7'b1011011;
4'b0011: HEX0 <= ~7'b1001111;
4'b0100: HEX0 <= ~7'b1100110;
4'b0101: HEX0 <= ~7'b1101101;
4'b0110: HEX0 <= ~7'b1111101;
4'b0111: HEX0 <= ~7'b0000111;
4'b1000: HEX0 <= ~7'b1111111;
4'b1001: HEX0 <= ~7'b1101111;
4'b1010: HEX0 <= ~7'b1110111;
4'b1011: HEX0 <= ~7'b1111100;
4'b1100: HEX0 <= ~7'b0111001;
4'b1101: HEX0 <= ~7'b1011110;
4'b1110: HEX0 <= ~7'b1111001;
4'b1111: HEX0 <= ~7'b1110001;
endcase
end
endmodule
我创建了一个没有端口的 tb
模块,而不是您的 lab_x_behavioral
模块。然后我实例化了计数器,添加了一个时钟,并建立了连接。不需要端口名称匹配。这是编写快速测试平台的一种方法:
module tb;
wire [3:0] cnt;
wire [6:0] HEX0;
reg clk = 0;
bcd_behavioral u0 (cnt, HEX0);
lab_x_counter u1 (clk, cnt);
always #5 clk = ~clk;
initial begin
#500 $finish;
end
endmodule
另见 Testbench 101