我最近需要使用启用和重置来制作一个 BCD 加减计数器。我总是有三个块,但我不知道如何将它们连接在一起。
我的代码来自老师给出的代码段。我之前写了一个结构 Verilog 做同样的功能,但我不知道如何将它转换为行为类型。
这是我的代码:
module BCDcountmod(Clock, Clear, E, segment_a, segment_b, segment_c,
segment_d, segment_e, segment_f, segment_g, updown);
input Clock, Clear, E, updown;
output segment_a, segment_b, segment_c, segment_d, segment_e, segment_f, segment_g;
reg [6:0] segment_data;
reg [3:0] BCD1, BCD0;
always @(posedge Clock)
begin
if (Clear)
begin
BCD1 <= 0;
BCD0 <= 0;
end
else if (E)
if (updown)
if (BCD0 == 4′b1001)
begin
BCD0 <= 0;
if (BCD1 == 4′b0101)
BCD1 <= 0;
else
BCD1 <= BCD1 + 1;
end
else
BCD0 <= BCD0 + 1;
end
else
if (BCD0 == 4'b0000)
begin
BCD0 <= 4'b1001;
if (BCD1 == 4'b0000)
BCD1 <= 4'b0101;
else
BCD1 <= BCD1 - 1;
end
else
BCD0 <= BCD0 - 1;
end
always @(BCD0)
case (BCD0)
4'b0000: segment_data = 7'b1111110;
4'b0001: segment_data = 7'b0110000;
4'b0010: segment_data = 7'b1101101;
4'b0011: segment_data = 7'b1111001;
4'b0100: segment_data = 7'b0110011;
4'b0101: segment_data = 7'b1011011;
4'b0110: segment_data = 7'b1011111;
4'b0111: segment_data = 7'b1110000;
4'b1000: segment_data = 7'b1111111;
4'b1001: segment_data = 7'b1111011;
endcase
wire segment_a = ~segment_data[6];
wire segment_b = ~segment_data[5];
wire segment_c = ~segment_data[4];
wire segment_d = ~segment_data[3];
wire segment_e = ~segment_data[2];
wire segment_f = ~segment_data[1];
wire segment_g = ~segment_data[0];
always @(BCD1)
case (BCD1)
4'b0000: segment_data = 7'b1111110;
4'b0001: segment_data = 7'b0110000;
4'b0010: segment_data = 7'b1101101;
4'b0011: segment_data = 7'b1111001;
4'b0100: segment_data = 7'b0110011;
4'b0101: segment_data = 7'b1011011;
endcase
wire segment_a = ~segment_data[6];
wire segment_b = ~segment_data[5];
wire segment_c = ~segment_data[4];
wire segment_d = ~segment_data[3];
wire segment_e = ~segment_data[2];
wire segment_f = ~segment_data[1];
wire segment_g = ~segment_data[0];
endmodule