hdl四位二进制计数器_用Verilog HDL设计一个4位BCD码计数器
2019-02-18 回答
去年做过这个,给你我的程序你参考看看,能调的通。
1.设计要求
设计一个数字时钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且设置的时间显示要求闪烁。
2.设计原理
计数器在正常工作下是对1hz的频率计数,在调整时间状态下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决定调整时、分、秒;当置数键按下时,表示相应的调整块要加一,如果对小时调整时,显示时间的led数码管将闪烁且当置数按键按下时,相应的小时显示要加一。显示时间的led数码管均用动态扫描显示来实现。其原理图如9-7-1所示。
module clock(seg7,scan,clk,clr,en,mode,inc);
output[6:0] seg7;
output[5:0] scan;
input clk; //时钟输入20mhz
input clr; //清零端
input en; //暂停信号
input mode; //控制信号,用于选择模式
input inc; //置数信号
reg[6:0] seg7; //7段显示控制信号(abcdefg)
reg[5:0] scan; //数码管地址选择信号
reg[1:0] state; //定义4种状态
reg[3:0] qhh,qhl,qmh,qml,qsh,qsl; //小时、分、秒的高位和低位
reg[3:0] data;
reg[2:0] cnt; //扫描数码管的计数器
reg clk1khz,clk1hz,clk2hz; //1khz、1hz、2hz的分频信号
reg[2:0] blink; //闪烁信号
reg inc_reg;
reg[7:0] sec,min;
reg[7:0] hour;
parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;
reg[13:0] count1;
reg[8:0] count2;
reg[8:0] count3;
//-----------------------------1khz分频,用于扫描数码管地址--------
always @(posedge clk)
begin
if(count1=='d10000)
begin clk1khz<=~clk1khz;count1<=0; end
else
begin count1<=count1+1; end
end
//---------------------- 1hz分频,用于计时-----------------------------
always @(posedge clk1khz)
begin
if(count2=='d500)
begin clk1hz<=~clk1hz;count2<=0; end
else
begin count2<=count2+1; end
if(count3=='d250) //2hz分频,用于数码管闪烁
begin clk2hz<=~clk2hz;count3<=0; end
else
begin count3<=count3+1; end
if(cnt=='d5) //数码管动态扫描计数
begin cnt<='d0; end
else
begin cnt<=cnt+1; end
end
//------------------------- 模式转换-------------------------
always @(posedge mode)
begin
if(clr)
begin state<=state0; end
else
begin state<=state+1; end
end
//-------------------------状态控制-----------------------------
always @(posedge clk1hz)
begin
if(en)
begin hour<=hour;
min<=min;
sec<=sec;
end
else if(clr)
begin hour<=0;
min<=0;
sec<=0;
end
else
begin
case(state)
state0:begin //模式0,正常计时
if(sec==8'd59)
begin sec<='d0;
if(min==8'd59)
begin min<='d0;
if(hour==8'd23)
begin hour<=8'd0; end
else
begin hour<=hour+1; end
end
else
begin min<=min+1; end
end
else
begin sec<=sec+1; end
end
state1:begin //模式1,设定小时时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(hour==8'd23)
begin hour<=8'd0; end
else
begin hour<=hour+1; end
end
end
else
begin inc_reg<=0; end
end
state2:begin //模式2,设定分钟时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(min==8'd59)
begin min<=8'd0; end
else
begin min<=min+1; end
end
end
else
begin inc_reg<=0; end
end
state3:begin //模式3,设定秒钟时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(sec==8'd59)
begin sec<=8'd0; end
else
begin sec<=sec+1; end
end
end
else
begin inc_reg<=0; end
end
endcase
end
end
//--------------------------------当进行时间设定时,令数码管闪烁-----------------------
always @(state,clk2hz)
begin
case(state)
state0:blink[2:0]<='b111;
state1:blink[2]<=clk2hz;
state2:blink[1]<=clk2hz;
state3:blink[0]<=clk2hz;
default:blink[2:0]<='bx;
endcase
end
//--------------------------秒计数的十进制转bcd码---------------------------
always @(sec)
begin
case(sec[7:0])
8'd0:begin qsh[3:0]<='b0000;qsl[3:0]<='b0000; end
8'd1:begin qsh[3:0]<='b0000;qsl[3:0]<='b0001; end
8'd2:begin qsh[3:0]<='b0000;qsl[3:0]<='b0010; end
8'd3:begin qsh[3:0]<='b0000;qsl[3:0]<='b0011; end
8'd4:begin qsh[3:0]<='b0000;qsl[3:0]<='b0100; end
8'd5:begin qsh[3:0]<='b0000;qsl[3:0]<='b0101; end
8'd6:begin qsh[3:0]<='b0000;qsl[3:0]<='b0110; end
8'd7:begin qsh[3:0]<='b0000;qsl[3:0]<='b0111; end
8'd8:begin qsh[3:0]<='b0000;qsl[3:0]<='b1000; end
8'd9:begin qsh[3:0]<='b0000;qsl[3:0]<='b1001; end
8'd10:begin qsh[3:0]<='b0001;qsl[3:0]<='b0000; end
8'd11:begin qsh[3:0]<='b0001;qsl[3:0]<='b0001; end
8'd12:begin qsh[3:0]<='b0001;qsl[3:0]<='b0010; end
8'd13:begin qsh[3:0]<='b0001;qsl[3:0]<='b0011; end
8'd14:begin qsh[3:0]<='b0001;qsl[3:0]<='b0100; end
8'd15:begin qsh[3:0]<='b0001;qsl[3:0]<='b0101; end
8'd16:begin qsh[3:0]<='b0001;qsl[3:0]<='b0110; end
8'd17:begin qsh[3:0]<='b0001;qsl[3:0]<='b0111; end
8'd18:begin qsh[3:0]<='b0001;qsl[3:0]<='b1000; end
8'd19:begin qsh[3:0]<='b0001;qsl[3:0]<='b1001; end
8'd20:begin qsh[3:0]<='b0010;qsl[3:0]<='b0000; end
8'd21:begin qsh[3:0]<='b0010;qsl[3:0]<='b0001; end
8'd22:begin qsh[3:0]<='b0010;qsl[3:0]<='b0010; end
8'd23:begin qsh[3:0]<='b0010;qsl[3:0]<='b0011; end
8'd24:begin qsh[3:0]<='b0010;qsl[3:0]<='b0100; end
8'd25:begin qsh[3:0]<='b0010;qsl[3:0]<='b0101; end
8'd26:begin qsh[3:0]<='b0010;qsl[3:0]<='b0110; end
8'd27:begin qsh[3:0]<='b0010;qsl[3:0]<='b0111; end
8'd28:begin qsh[3:0]<='b0010;qsl[3:0]<='b1000; end
8'd29:begin qsh[3:0]<='b0010;qsl[3:0]<='b1001; end
8'd30:begin qsh[3:0]<='b0011;qsl[3:0]<='b0000; end
8'd31:begin qsh[3:0]<='b0011;qsl[3:0]<='b0001; end
8'd32:begin qsh[3:0]<='b0011;qsl[3:0]<='b0010; end
8'd33:begin qsh[3:0]<='b0011;qsl[3:0]<='b0011; end
8'd34:begin qsh[3:0]<='b0011;qsl[3:0]<='b0100; end
8'd35:begin qsh[3:0]<='b0011;qsl[3:0]<='b0101; end
8'd36:begin qsh[3:0]<='b0011;qsl[3:0]<='b0110; end
8'd37:begin qsh[3:0]<='b0011;qsl[3:0]<='b0111; end
8'd38:begin qsh[3:0]<='b0011;qsl[3:0]<='b1000; end
8'd39:begin qsh[3:0]<='b0011;qsl[3:0]<='b1001; end
8'd40:begin qsh[3:0]<='b0100;qsl[3:0]<='b0000; end
8'd41:begin qsh[3:0]<='b0100;qsl[3:0]<='b0001; end
8'd42:begin qsh[3:0]<='b0100;qsl[3:0]<='b0010; end
8'd43:begin qsh[3:0]<='b0100;qsl[3:0]<='b0011; end
8'd44:begin qsh[3:0]<='b0100;qsl[3:0]<='b0100; end
8'd45:begin qsh[3:0]<='b0100;qsl[3:0]<='b0101; end
8'd46:begin qsh[3:0]<='b0100;qsl[3:0]<='b0110; end
8'd47:begin qsh[3:0]<='b0100;qsl[3:0]<='b0111; end
8'd48:begin qsh[3:0]<='b0100;qsl[3:0]<='b1000; end
8'd49:begin qsh[3:0]<='b0100;qsl[3:0]<='b1001; end
8'd50:begin qsh[3:0]<='b0101;qsl[3:0]<='b0000; end
8'd51:begin qsh[3:0]<='b0101;qsl[3:0]<='b0001; end
8'd52:begin qsh[3:0]<='b0101;qsl[3:0]<='b0010; end
8'd53:begin qsh[3:0]<='b0101;qsl[3:0]<='b0011; end
8'd54:begin qsh[3:0]<='b0101;qsl[3:0]<='b0100; end
8'd55:begin qsh[3:0]<='b0101;qsl[3:0]<='b0101; end
8'd56:begin qsh[3:0]<='b0101;qsl[3:0]<='b0110; end
8'd57:begin qsh[3:0]<='b0101;qsl[3:0]<='b0111; end
8'd58:begin qsh[3:0]<='b0101;qsl[3:0]<='b1000; end
8'd59:begin qsh[3:0]<='b0101;qsl[3:0]<='b1001; end
default: begin qsh[3:0]<='bx;qsl[3:0]<='bx; end
endcase
end
//---------------------------分计数的十进制转bcd码--------------------
always @(min)
begin
case(min[7:0])
8'd0:begin qmh[3:0]<='b0000;qml[3:0]<='b0000; end
8'd1:begin qmh[3:0]<='b0000;qml[3:0]<='b0001; end
8'd2:begin qmh[3:0]<='b0000;qml[3:0]<='b0010; end
8'd3:begin qmh[3:0]<='b0000;qml[3:0]<='b0011; end
8'd4:begin qmh[3:0]<='b0000;qml[3:0]<='b0100; end
8'd5:begin qmh[3:0]<='b0000;qml[3:0]<='b0101; end
8'd6:begin qmh[3:0]<='b0000;qml[3:0]<='b0110; end
8'd7:begin qmh[3:0]<='b0000;qml[3:0]<='b0111; end
8'd8:begin qmh[3:0]<='b0000;qml[3:0]<='b1000; end
8'd9:begin qmh[3:0]<='b0000;qml[3:0]<='b1001; end
8'd10:begin qmh[3:0]<='b0001;qml[3:0]<='b0000; end
8'd11:begin qmh[3:0]<='b0001;qml[3:0]<='b0001; end
8'd12:begin qmh[3:0]<='b0001;qml[3:0]<='b0010; end
8'd13:begin qmh[3:0]<='b0001;qml[3:0]<='b0011; end
8'd14:begin qmh[3:0]<='b0001;qml[3:0]<='b0100; end
8'd15:begin qmh[3:0]<='b0001;qml[3:0]<='b0101; end
8'd16:begin qmh[3:0]<='b0001;qml[3:0]<='b0110; end
8'd17:begin qmh[3:0]<='b0001;qml[3:0]<='b0111; end
8'd18:begin qmh[3:0]<='b0001;qml[3:0]<='b1000; end
8'd19:begin qmh[3:0]<='b0001;qml[3:0]<='b1001; end
8'd20:begin qmh[3:0]<='b0010;qml[3:0]<='b0000; end
8'd21:begin qmh[3:0]<='b0010;qml[3:0]<='b0001; end
8'd22:begin qmh[3:0]<='b0010;qml[3:0]<='b0010; end
8'd23:begin qmh[3:0]<='b0010;qml[3:0]<='b0011; end
8'd24:begin qmh[3:0]<='b0010;qml[3:0]<='b0100; end
8'd25:begin qmh[3:0]<='b0010;qml[3:0]<='b0101; end
8'd26:begin qmh[3:0]<='b0010;qml[3:0]<='b0110; end
8'd27:begin qmh[3:0]<='b0010;qml[3:0]<='b0111; end
8'd28:begin qmh[3:0]<='b0010;qml[3:0]<='b1000; end
8'd29:begin qmh[3:0]<='b0010;qml[3:0]<='b1001; end
8'd30:begin qmh[3:0]<='b0011;qml[3:0]<='b0000; end
8'd31:begin qmh[3:0]<='b0011;qml[3:0]<='b0001; end
8'd32:begin qmh[3:0]<='b0011;qml[3:0]<='b0010; end
8'd33:begin qmh[3:0]<='b0011;qml[3:0]<='b0011; end
8'd34:begin qmh[3:0]<='b0011;qml[3:0]<='b0100; end
8'd35:begin qmh[3:0]<='b0011;qml[3:0]<='b0101; end
8'd36:begin qmh[3:0]<='b0011;qml[3:0]<='b0110; end
8'd37:begin qmh[3:0]<='b0011;qml[3:0]<='b0111; end
8'd38:begin qmh[3:0]<='b0011;qml[3:0]<='b1000; end
8'd39:begin qmh[3:0]<='b0011;qml[3:0]<='b1001; end
8'd40:begin qmh[3:0]<='b0100;qml[3:0]<='b0000; end
8'd41:begin qmh[3:0]<='b0100;qml[3:0]<='b0001; end
8'd42:begin qmh[3:0]<='b0100;qml[3:0]<='b0010; end
8'd43:begin qmh[3:0]<='b0100;qml[3:0]<='b0011; end
8'd44:begin qmh[3:0]<='b0100;qml[3:0]<='b0100; end
8'd45:begin qmh[3:0]<='b0100;qml[3:0]<='b0101; end
8'd46:begin qmh[3:0]<='b0100;qml[3:0]<='b0110; end
8'd47:begin qmh[3:0]<='b0100;qml[3:0]<='b0111; end
8'd48:begin qmh[3:0]<='b0100;qml[3:0]<='b1000; end
8'd49:begin qmh[3:0]<='b0100;qml[3:0]<='b1001; end
8'd50:begin qmh[3:0]<='b0101;qml[3:0]<='b0000; end
8'd51:begin qmh[3:0]<='b0101;qml[3:0]<='b0001; end
8'd52:begin qmh[3:0]<='b0101;qml[3:0]<='b0010; end
8'd53:begin qmh[3:0]<='b0101;qml[3:0]<='b0011; end
8'd54:begin qmh[3:0]<='b0101;qml[3:0]<='b0100; end
8'd55:begin qmh[3:0]<='b0101;qml[3:0]<='b0101; end
8'd56:begin qmh[3:0]<='b0101;qml[3:0]<='b0110; end
8'd57:begin qmh[3:0]<='b0101;qml[3:0]<='b0111; end
8'd58:begin qmh[3:0]<='b0101;qml[3:0]<='b1000; end
8'd59:begin qmh[3:0]<='b0101;qml[3:0]<='b1001; end
default:begin qmh[3:0]<='bx;qml[3:0]<='bx; end
endcase
end
//----------------------------小时计数的十进制转bcd码------------------------
always @(hour)
begin
case(hour)
8'd0:begin qhh[3:0]<='b0000;qhl[3:0]<='b0000; end
8'd1:begin qhh[3:0]<='b0000;qhl[3:0]<='b0001; end
8'd2:begin qhh[3:0]<='b0000;qhl[3:0]<='b0010; end
8'd3:begin qhh[3:0]<='b0000;qhl[3:0]<='b0011; end
8'd4:begin qhh[3:0]<='b0000;qhl[3:0]<='b0100; end
8'd5:begin qhh[3:0]<='b0000;qhl[3:0]<='b0101; end
8'd6:begin qhh[3:0]<='b0000;qhl[3:0]<='b0110; end
8'd7:begin qhh[3:0]<='b0000;qhl[3:0]<='b0111; end
8'd8:begin qhh[3:0]<='b0000;qhl[3:0]<='b1000; end
8'd9:begin qhh[3:0]<='b0000;qhl[3:0]<='b1001; end
8'd10:begin qhh[3:0]<='b0001;qhl[3:0]<='b0000; end
8'd11:begin qhh[3:0]<='b0001;qhl[3:0]<='b0001; end
8'd12:begin qhh[3:0]<='b0001;qhl[3:0]<='b0010; end
8'd13:begin qhh[3:0]<='b0001;qhl[3:0]<='b0011; end
8'd14:begin qhh[3:0]<='b0001;qhl[3:0]<='b0100; end
8'd15:begin qhh[3:0]<='b0001;qhl[3:0]<='b0101; end
8'd16:begin qhh[3:0]<='b0001;qhl[3:0]<='b0110; end
8'd17:begin qhh[3:0]<='b0001;qhl[3:0]<='b0111; end
8'd18:begin qhh[3:0]<='b0001;qhl[3:0]<='b1000; end
8'd19:begin qhh[3:0]<='b0001;qhl[3:0]<='b1001; end
8'd20:begin qhh[3:0]<='b0010;qhl[3:0]<='b0000; end
8'd21:begin qhh[3:0]<='b0010;qhl[3:0]<='b0001; end
8'd22:begin qhh[3:0]<='b0010;qhl[3:0]<='b0010; end
8'd23:begin qhh[3:0]<='b0010;qhl[3:0]<='b0011; end
default:begin qhh[3:0]<='bx;qhl[3:0]<='bx; end
endcase
end
//------------------------------数码管动态扫描-------------------------------------
always @(cnt,qhh,qhl,qmh,qml,qsh,qsl,blink)
begin
case(cnt)
3'b000:begin data[3:0]<=qsl[3:0];scan[5:0]<='b000001&{6{blink[0]}}; end
3'b001:begin data[3:0]<=qsh[3:0];scan[5:0]<='b000010&{6{blink[0]}}; end
3'b010:begin data[3:0]<=qml[3:0];scan[5:0]<='b000100&{6{blink[1]}}; end
3'b011:begin data[3:0]<=qmh[3:0];scan[5:0]<='b001000&{6{blink[1]}}; end
3'b100:begin data[3:0]<=qhl[3:0];scan[5:0]<='b010000&{6{blink[2]}}; end
3'b101:begin data[3:0]<=qhh[3:0];scan[5:0]<='b100000&{6{blink[2]}}; end
default:begin data<='bx;scan<='bx; end
endcase
end
//-----------------------------------7段译码----------------------------------------
always @(data)
begin
case(data[3:0])
4'b0000:seg7[6:0]=7'b1111110;
4'b0001:seg7[6:0]=7'b0110000;
4'b0010:seg7[6:0]=7'b1101101;
4'b0011:seg7[6:0]=7'b1111001;
4'b0100:seg7[6:0]=7'b0110011;
4'b0101:seg7[6:0]=7'b1011011;
4'b0110:seg7[6:0]=7'b1011111;
4'b0111:seg7[6:0]=7'b1110000;
4'b1000:seg7[6:0]=7'b1111111;
4'b1001:seg7[6:0]=7'b1111011;
default:seg7[6:0]=7'b0000000;
endcase
end
endmodule
具体的内容请参考周润景老师的那本书。
hdl四位二进制计数器_用Verilog HDL设计一个4位BCD码计数器相关推荐
- 74ls390设计任意进制计数器_异步FIFO:设计原理及Verliog源码
1. 异步FIFO的概念 异步FIFO为读取与写入采用不同的时钟,使用异步FIFO用于在不同的时钟域传输数据,主要用于跨时钟域传输多bit数据. 2. 异步FIFO的设计难点 同步异步信号,避免亚 ...
- HDLBits 系列(18) BCD码计数器的设计
目录 原题复现 审题 我的设计 原题复现 先给出原题: Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit i ...
- logisim,quartus实现模为60的BCD码计数器
一.分析:利用封装的74161完成带有异步复位端的模6和模10计数器,然后级联构成模为60的BCD码计数器: 由74161功能表可知要构成模6计数器和模10计数器,可以采用同步置数法:当达到需要的 ...
- 单片机(keil c51):BCD码转化为二进制(以4位BCD码举例,依此类推)
BCD码转化为二进制 原理: 一个BCD码表示0~9,所以一个BCD码的取值范围为0000~1001. 在机器里所有的数都是按照二进制存入的,所以只需将BCD码转换为十进制即可. 4位BCD码可以表示 ...
- 【 Verilog HDL 】不同抽象级别的Verilog HDL模型之门级结构描述
本博文参考:<从算法设计到硬件逻辑实现>,仅供学习交流使用. Verilog模型可以是实际电路不同级别的抽象.这些抽象的级别和它们对应的模型类型共有以下五种: 1) 系统级(system) ...
- 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器
三位bcd加法计数器 Problem statement: 问题陈述: To perform addition operation between two 8-bit BCD numbers usin ...
- 利用BCD码计数器和7段码转换器子电路
实验目的:利用BCD码计数器和7段码转换器子电路 实验工具:Quartus ii软件和meli软件联合仿真 实验过程截图 实验结果截图 实验代码: module BCDcount (Clock, Cl ...
- hdl四位二进制计数器_四位二进制计数器这样接成十进制计数器
十进制计数器与4位二进制计数器有些相似,但4位二进制计数器需要计数到1111然后 才能返回到0000,而十进制计数器要求计数到1001 (相当于9)就返回0000.8421BCD码 十进制计数器是一种 ...
- hdl四位二进制计数器_四位二进制加法计数器
一 实验目的 1 .熟悉Q uartusII 的VHDL文本设计流程全过程,学习计数器的设计与仿真 2 .掌握简单逻辑电路的设计方法与功能仿真技巧. 3 .学习使用 V AHDL 语言进行含异步清零和 ...
- hdl四位二进制计数器_quartus4位二进制加减法计数器.doc
贵州大学实验报告 学院: 专业: 班级 姓名学号实验组实验时间指导教师成绩实验项目名称4位二进制加减法计数器实验目的了解二进制加减法计数器的设计,进一步了解,熟悉和掌握quartusII的使用方法 学 ...
最新文章
- Adobe Flex 3.0 和 AIR 1.0 正式发布
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
- Python用subprocess的Popen来调用系统命令
- 下一代iPhone将变成“越南制造”?富士康已在越南买地
- Android中如何提取和生成mp4文件
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
- 楷书书法规则_郁钧剑为何被誉为“明星书法”第一人?
- PyCharm(Python编译器汉化)
- 校园网设计超超超级详细的配置来了(以河北科技大学为例)
- 《Arduino奇妙之旅:智能车趣味制作天龙八步》一1.4 轰!
- ResNet 网络结构与残差连接介绍
- 鸿蒙系统和全屋智能,不断升级“常用常新” 搭载鸿蒙系统的全屋智能有多酷?...
- HBase二级索引方案
- TPC_mcgs打印方案
- C#使用欧姆龙PLC的Fins协议读写PLC地址(基本封装)
- ARM ELF 镜像结构
- 六级考研单词之路-十一
- windows输入法英文字体间距比平常大,按照设置里按下"shift+space“键,也依然如此
- 2023最新黑客入门(超级详细版)
- arcgis表转excel一直失败_arcGIS中属性表怎么导出到EXCEL里|excel表格转shp数据丢失...
热门文章
- Unity3d常用快捷键
- AM调制解调matlab实验报告,基于MATLAB的AM调制解调系统仿真报告
- VS2022 Setup Project 打包
- 用DW编写网页--个人简历
- 点歌系统源码 android,安卓盒子点歌系统代码
- Glide 缓存机制分析二,内存缓存(3.7.0为例 5)
- 【spark】map算子n种简化写法
- HTML5游戏实战 1 50行代码实现正面跑酷游戏
- java编程计算圆球的体积_已知圆球体积为4/3πr³,试编写一个程序,输入圆球半径,经过计算输出圆球的体积.用JAVA编写的...明天(3月11号)要用....
- 推荐一款免费的万能电子书格式转换工具电子书转换器NeatConverter