3 电路
3.2 时序逻辑
3.2.2 计数器
- Count1to10(Decade counter again)
与上题一样,区别是复位为1
module top_module(
input clk,
input reset,
output [3:0] q);
always @(posedge clk)
begin
if(reset)
q <= 4'b0001; //复位为1
else if(q <= 4'b1001)
q <= q + 1'b1;
else
q <= 4'b0001;
end
endmodule
- Coutslow(Slow decade couter)
一个0-9,同步复位且复位为0的计数器,但计数器不随clk变化而递增,而是由slowena使能信号控制
module top_module (
input clk,
input slowena,
input reset,
output [3:0] q);
always @ (posedge clk)
begin
if(reset)
q <= 4'b0;
else if(slowena == 1'b1)
begin
if(q == 4'd9)
q <= 4'b0;
else
q <= q + 4'd1;
end
end
endmodule
- Counter 1-12
根据以下输入输出信号设计一个计算1~12的计数器
Reset:同步复位信号,高复位,将计数器复位为1.
Enable:使能信号高有效
Clk:时钟上升沿触发计数器工作
Q[3:0]:计数器输出
c_enable, c_load, c_d[3:0]:题目中给我们提供了一个4-bit的计数器,这三个信号是用于该4-bit计数器的控制信号。
题目提供给我们4-bit计数器
- 有enable信号,带复位和置位的计数器,将该计数器例化至我们的代码中。
- 再用一些其他的逻辑门来完成本题
module top_module (
input clk,
input reset,
input enable,
output [3:0]Q,
output c_enable,
output c_load,
output [3:0]c_d
);
reg [3:0] temp; //4-bit 计数器的控制信号
assign c_enable = enable;
assign c_load = reset | (Q == 4'd12 & enable == 1'b1);
assign c_d = 4'b1;
count4 the_counter (clk,c_enable,c_load,c_d,Q);
endmodule
- Counter1000
OneHertz: 从1000Hz中分离出1Hz的信号;这个信号主要用作于数字时钟中。
利用一个模10的BCD计数器和尽量少的逻辑门建立一个时钟分频器。同时输出每个BCD计算器的使能信号(c_enable[0]为高位,c_enable[2]为低位)
module bcdcount (
input clk,
input reset,
output OneHertz,
output [2:0] c_enable
);
wire [3:0] q0,q1,q2; //1000 -> 100(q2) -> 10(q1) -> 1(q0)
assign c_enable = {q1==4'd9 && q0==4'd9,q0==4'd9,1'b1};
assign OneHertz = {q2==4'd9 && q1==4'd9 && q0==4'd9};
bcdcount counter0 (clk, reset, c_enable[0], q0);
bcdcount counter1 (clk, reset, c_enable[1], q1);
bcdcount counter2 (clk, reset, c_enable[2], q2);
endmodule
标签:reset,enable,HDLBits,4.18,clk,计数器,16,output,input From: https://www.cnblogs.com/LhTian/p/17331092.html