赞
踩
法一
author : Mr.Mao e-mail : 2458682080@qq.com module 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.Mao e-mail : 2458682080@qq.com module 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 > 60 reg 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 ; end end always@(posedge clk) begin if(cnt == 59) q <= 1'b1 ; else q <= 1'b0 ; end endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。