一、题目
8位加法计数器设计。
二、源代码
说明:本实验实现了八位加法计数器,可以用于定时1us;其中CLK,EN,RST,
LOAD,DATA作为输入信号;CLK作为时钟信号,频率为50MHz;EN为允许加载或计数信号,当EN == 1时,允许计数器计数和给计数器设置初值;LOAD信号作为允许给计数器设置初值信号,当且仅当EN == 1并且LOAD == 0时允许为计数器设置初值;可设置DATA设置计数器的初值;本实验设置计数器的初值为0,根据定时时间1us可以算出计数器的溢出值为50;COUT,DOUT作为输出信号;DOUT输出计数器的当前值;COUT输出计数器是否溢出状态,当COUT为1时,计数器溢出,反之,计数器未溢出。
//----------------------------------------------------------------------------------------
// File name: Eight_count
// Last modified Date: 2020年5月26日10点45分
// Last Version: V1.1
// Descriptions: 8位加法计数器设计实验 实现延时1us
//----------------------------------------------------------------------------------------
module Eighth_count(CLK,RST,EN,LOAD,COUT,DOUT,DATA);
input CLK,EN,RST,LOAD;//时钟,时钟使能,复位,数据加载控制信号
//EN == 1有效
input [7:0] DATA;//八位并行加载数据
output [7:0] DOUT;//八位计数输出
output COUT; //计数进位输出
reg [7:0] Q1;reg COUT;
assign DOUT = Q1;//将内部寄存器的计数结果输出至DOUT
always @(posedge CLK or negedge RST) //时序过程
begin
if(!RST) Q1 <= 0; //RST=0时,对内部寄存器单元异步清0
else if (EN) //同步使能EN = 1;则允许加载或计数
begin
if(!LOAD) Q1 <= DATA; //当LOAD == 0,向内部寄存器加载数据
else if(Q1 < 50)
Q1 <= Q1 +1;//当Q1小于50时,允许累加
else
Q1 <= 8'B00000000; //否则一个时钟后清0返回初值
end
end
always @(Q1) //组合逻辑
if (Q1==8'd50)
COUT = 1'b1;
else
COUT = 1'b0;
endmodule
三、仿真波形图