用74160设计17进制加法计数器verilog代码.
时间: 2024-05-06 18:17:47 浏览: 103
计数器verilog 代码
4星 · 用户满意度95%
以下是使用74160设计的17进制加法计数器的Verilog代码。该设计使用了4个74160计数器芯片。
```verilog
module counter_17bit(clk, rst, count);
input clk, rst;
output reg [16:0] count;
wire [3:0] up_count;
wire [3:0] down_count;
reg [3:0] enable;
reg [3:0] load;
wire [3:0] enable_out;
wire [3:0] load_out;
// 4-bit counters
// up-counters
reg [3:0] up_q0, up_q1, up_q2, up_q3;
wire up_carry_out;
// down-counters
reg [3:0] down_q0, down_q1, down_q2, down_q3;
wire down_carry_out;
// 4-bit up-counters
74160 up0(clk, rst, enable[0], load[0], up_q0, up_carry_out, enable_out[0], load_out[0]);
74160 up1(clk, rst, enable[1], load[1], up_q1, up_carry_out, enable_out[1], load_out[1]);
74160 up2(clk, rst, enable[2], load[2], up_q2, up_carry_out, enable_out[2], load_out[2]);
74160 up3(clk, rst, enable[3], load[3], up_q3, up_carry_out, enable_out[3], load_out[3]);
// 4-bit down-counters
74160 down0(clk, rst, enable[0], load[0], down_q0, down_carry_out, enable_out[0], load_out[0], 1'b1);
74160 down1(clk, rst, enable[1], load[1], down_q1, down_carry_out, enable_out[1], load_out[1], 1'b1);
74160 down2(clk, rst, enable[2], load[2], down_q2, down_carry_out, enable_out[2], load_out[2], 1'b1);
74160 down3(clk, rst, enable[3], load[3], down_q3, down_carry_out, enable_out[3], load_out[3], 1'b1);
always @(posedge clk, posedge rst) begin
if (rst) begin
count <= 17'b0;
enable <= 4'b0;
load <= 4'b0;
up_q0 <= 4'b0;
up_q1 <= 4'b0;
up_q2 <= 4'b0;
up_q3 <= 4'b0;
down_q0 <= 4'b0;
down_q1 <= 4'b0;
down_q2 <= 4'b0;
down_q3 <= 4'b0;
end else begin
// enable and load signals
enable[0] <= up_carry_out;
enable[1] <= enable_out[0];
enable[2] <= enable_out[1];
enable[3] <= enable_out[2];
load[0] <= 1'b0;
load[1] <= enable_out[0];
load[2] <= enable_out[1];
load[3] <= enable_out[2];
// up-counters
up_q0 <= up_q0 + 1'b1;
if (up_carry_out) begin
up_q1 <= up_q1 + 1'b1;
if (enable_out[0]) begin
up_q2 <= up_q2 + 1'b1;
if (enable_out[1]) begin
up_q3 <= up_q3 + 1'b1;
end
end
end
// down-counters
down_q0 <= down_q0 - 1'b1;
if (down_carry_out) begin
down_q1 <= down_q1 - 1'b1;
if (enable_out[0]) begin
down_q2 <= down_q2 - 1'b1;
if (enable_out[1]) begin
down_q3 <= down_q3 - 1'b1;
end
end
end
// output count value
count <= {up_q3, up_q2, up_q1, up_q0} + {down_q3, down_q2, down_q1, down_q0};
end
end
endmodule
```
这个Verilog代码使用了4个74160计数器芯片,其中两个是上升计数器,两个是下降计数器。计数器的输出被连接到一个17位寄存器中,其中前8位来自上升计数器,后8位来自下降计数器。在每个时钟周期上,计数器的值将增加或减少1,具体取决于计数器的方向。当计数器到达最大值或最小值时,它将返回到0或最大值。重置信号将使计数器返回到0。
由于74160计数器只能计数到16,因此在这个设计中,需要将4个计数器级联,以实现17位计数器。在级联计数器时,计数器的进位输出被连接到下一个计数器的使能输入,这样,在前一个计数器计数到最大值时,它将启动下一个计数器。这个设计还使用了一个load信号来控制计数器的起始值。
阅读全文