【FPGA】Verilog:时序电路设计 二进制计数器 计数器 分频器 时序约束_二进制计数器电路(1)

end
endmodule



通用型的二进制计数器一般具备更多功能,例如可以增/减计数、预置初值、同步清零、暂停等。74LS161就是一种常用的可预置4位二进制同步加法计数器。其功能表如下图表:



![](https://img-blog.csdnimg.cn/929e76a71dec4e78a03d916ee7049817.png)​






|  |  |
| --- | --- |
| 输入 | 输出 |
|  |  | P | T | CP | D0 | D1 | D2 | D3 | Q0 | Q1 | Q2 | Q3 |
| *0* | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | *0* | *0* | *0* | *0* |
| *1* | *0* | Ⅹ | Ⅹ | ↑ | *D0* | *D1* | *D2* | *D3* | *D0* | *D1* | *D2* | *D3* |
| *1* | *1* | *1* | *1* | ↑ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | 计数 |
| *1* | *1* | *0* | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | 保持 |
| *1* | *1* | Ⅹ | *0* | Ⅹ | Ⅹ | Ⅹ | Ⅹ | Ⅹ | 保持 |


#### 0x01 利用IP核构造计数器


(1)根据上述74LS161的原理和参考代码,在vivado中设计计数电路:



module CNT161( input CR, input CP, input [3:0] D , input LD, input EP, input ET, output wire [3:0] Q);
wire [3:0] Din;
reg [3:0] Dout;
assign Din=D;
assign Q=Dout;
always@(posedge CP or negedge CR) begin
if (CR0) Dout&

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. BCD计数器Verilog描述: BCD(二进制编码十进制)计数器是一种计数器,它可以在0到9之间循环计数。下面是一个BCD计数器Verilog描述: ```verilog module bcd_counter( input clk, input rst, output reg [3:0] count ); always @(posedge clk or posedge rst) begin if (rst) begin count <= 4'b0000; end else begin if (count == 4'b1001) begin count <= 4'b0000; end else begin count <= count + 1; end end end endmodule ``` 在此Verilog代码中,我们声明了一个名为 "bcd_counter" 的模块,该模块接受时钟信号 "clk"、复信号 "rst" 和四输出 "count"。在 "always" 块中,我们使用 "posedge" 来检测时钟上升沿,并在复上升沿时将计数器 "count" 复为0。在计数器不被复时,我们检查计数器的值是否为9,如果是,则将其重置为0,否则将其递增1。 2. 二进制计数器Verilog描述: 二进制计数器是一种计数器,它可以在0到15之间循环计数。下面是一个二进制计数器Verilog描述: ```verilog module binary_counter( input clk, input rst, output reg [3:0] count ); always @(posedge clk or posedge rst) begin if (rst) begin count <= 4'b0000; end else begin if (count == 4'b1111) begin count <= 4'b0000; end else begin count <= count + 1; end end end endmodule ``` 在此Verilog代码中,我们声明了一个名为 "binary_counter" 的模块,该模块接受时钟信号 "clk"、复信号 "rst" 和四输出 "count"。在 "always" 块中,我们使用 "posedge" 来检测时钟上升沿,并在复上升沿时将计数器 "count" 复为0。在计数器不被复时,我们检查计数器的值是否为15,如果是,则将其重置为0,否则将其递增1。 3. 分频器Verilog描述: 分频器是一种电路,它可以从输入时钟信号的频率产生一个较低的输出时钟信号。下面是一个分频器Verilog描述: ```verilog module divider( input clk, input rst, output reg divided_clk ); reg [7:0] count; always @(posedge clk or posedge rst) begin if (rst) begin count <= 8'b00000000; divided_clk <= 1'b0; end else begin count <= count + 1; if (count == 8'hff) begin divided_clk <= ~divided_clk; count <= 0; end end end endmodule ``` 在此Verilog代码中,我们声明了一个名为 "divider" 的模块,该模块接受时钟信号 "clk"、复信号 "rst" 和输出时钟信号 "divided_clk"。我们使用一个八计数器 "count" 来计算时钟周期的数量。在 "always" 块中,我们使用 "posedge" 来检测时钟上升沿,并在复上升沿时将计数器 "count" 和分频器输出 "divided_clk" 复为0。在计数器不被复时,我们递增计数器 "count",并在计数器计数到255时切换 "divided_clk" 的值。这样,从输入时钟信号产生的输出时钟信号的频率就是输入时钟信号频率的1/256。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值