本文共 1106 字,大约阅读时间需要 3 分钟。
法一
author : Mr.Maoe-mail : 2458682080@qq.commodule cnt60x( input clk, input reset, input [5:0] d, input en, input load, input sclr, output reg[5:0] q, output cout );always @(posedge clk,posedge reset) if(reset) q <= 0; else if(sclr) q <= 0; else if(load) q <= d; else if(en) if(q < 60-1) q <= q + 1'b1; else q <= 0; assign cout = (q==60-1);endmodule
法二
author : Mr.Maoe-mail : 2458682080@qq.commodule CNT_60(rst_a, en_s, load_s, clr_s, clk, q, data, cnt) ; input clk, clr_s, rst_a, en_s, load_s; //后缀有s的代表为同步,后缀为a的代表异步input [0:5] data ;output q, cnt; //其实这里的cnt并不需要输出,只不过为了仿真时更好观察计数过程,把cnt输出reg [0:5] cnt ; //计数60,2^5 = 64 > 60reg q ;always@(posedge clk or negedge rst_a)begin if(!rst_a) cnt <= 0 ; //异步复位 else if(en_s) begin if(load_s) cnt <= data ; //如果数据加载有效,则令计数器=输入的数据 else if(clr_s) cnt <= 0 ; else if(cnt <= 59) cnt <= cnt + 1 ; else cnt <= cnt ; endendalways@(posedge clk)begin if(cnt == 59) q <= 1'b1 ; else q <= 1'b0 ; endendmodule
转载地址:http://jyiwi.baihongyu.com/