数字电路时钟设计verilog语言编写--

合集下载

用Verilog语言编写的多功能数字钟

用Verilog语言编写的多功能数字钟
四. 总结体会
这次的闹钟电路设计和多功能数字钟有一些相似的地方,不同在于整体构思和细
节上要求的差异。
构思根据要求采用的是状态机设计方法。从一个状态进入另一个状态最适合这个
设计了。细节上和数字钟也有很大的差异。中间的控制逻辑有时候需要反馈。前
后都是有联系的,并不是独立存在的。
本次设计基本上完成的所以的要求,但是由于时间紧急,一些细节并不是很完美,
分频器的作用是对 50Mhz 的系统时钟信号进行分频,得到频率为 1hz 的信号,
作为时钟的输入信号。
2
2.控制器和计数器 控制器的作用是,调整小时和分钟的值,并能实现清零功能。计数器的
作用是实现分钟和秒钟满 60 进 1,小时则由 23 跳到 00。当到达 59 分 55 秒的时 候,LED 灯会闪烁来进行报时。
end 2:
begin state<=2; s=1;
end 3:
begin s=0; if(k1==0) //时调整
7
begin
if(nz_h_l==3)
begin
nz_h_l=0;
if(nz_h_h==2)nz_h_h=0;
else nz_h_h=nz_h_h+1;
end
else nz_h_l=nz_h_l+1;
end
else if(k3==0) finish=1;
//设置完成
else if(k4==0) spker_en=1; //停止声响
end
8
4: begin s=0; if(k4==0) begin on_off<=!on_off;state=0;end end
endcase end end endmodule 3.显示器 显示器的作用是将时:分的值在数码管上依次显示出来。从分频器输出的 1Khz 的信号作为数码管的扫描信号。SEL 表示 6 个数码管选择位,它的取值表示八个 数码管,从左至右依次是 111~000。seg 表示七段数码管,它的取值决定特定位 数上显示的数字。

基于VerilogHDL设计的多功能数字钟

基于VerilogHDL设计的多功能数字钟

3' b101: Disp_Temp=4' b1010;
#(60000*HALF_PERIOD) S1_in=1;
3' b110: Disp_Temp=SECH;
end
3' b111: Disp_Temp=SECL;
//产 生 调 节 分 钟 信 号
endcase
initial
end
begin
always@(Disp_Temp) //显示转换

图 1 多功能数字钟端口功能图
Clk: 10KHZ 的系统基准时钟输入。作为七段码管 扫描频率。将其 10000 分频可得到 1HZ 的数字钟工作 频率。将其 8 分频和 4 分频分别分时送入扬声器, 使 其产生嘀( 1.25KHZ) 、嗒( 2.5KHZ) 的报时声。
Rst: 系统复位信号, 低电平有效。复位后显示 00- 00- 00。
Abstr act: In this paper, the process of designing multifunctional digital clock by the Verilog HDL top- down design method is pre- sented, which has shown the readability, portability and easily understanding of Verilog HDL as a hard description language. Circuit synthesis and simulation are performed by Altera QuartusⅡ 4.1 and ModelSim SE 6.0. The program can be used in the truly digital clock display by downloading to the FPGA chip. Keywor ds: Ver ilog HDL; har dwar e descr iption language; FPGA

简单的数字时钟(verilog设计)

简单的数字时钟(verilog设计)
Verilog作为一种硬件描述语言,可用于设计和实现数字系统,包括数字时钟。 通过Verilog设计数字时钟,可以加深对数字系统和Verilog语言的理解,并提高 设计能力。
设计目标与要求
设计一个简单的数字 时钟,能够显示时、 分、秒。
时钟应具有可靠性、 稳定性和可扩展性。
要求使用Verilog语 言实现,并能够在 FPGA或ASIC上实现。
设计思路及流程
• 设计思路:采用模块化设计方法,将数字时钟划分为不同的模 块,如计数器模块、显示模块等。每个模块负责实现特定的功 能,并通过接口与其他模块进行通信。
设计思路及流程
设计流程 1. 确定设计需求和目标。 2. 制定设计方案和计划。
设计思路及流程
3. 编写Verilog代码,实现各个模块的功能。 5. 根据测试结果进行调试和优化。
未来改进方向探讨
提高计时精度
通过改进算法或采用更高 性能的硬件平台,提高数
字时钟的计时精度。
降低资源占用
优化代码结构,减少不 必要的资源占用,提高 时钟系统的运行效率。
增加实用功能
拓展应用领域
考虑增加闹钟、定时器 等实用功能,使数字时 钟更加符合用户需求。
探索将数字时钟应用于 更多领域,如智能家居、
数据类型与运算符
Verilog中的数据类型包括
整型、实型、时间型、数组、结构体等。
Verilog中的运算符包括
算术运算符、关系运算符、逻辑运算符、位运算符等。
顺序语句与并行语句
Verilog中的顺序语句包括
赋值语句、条件语句、循环语句等,用于描述电路的时序行为。
Verilog中的并行语句包括
模块实例化、连续赋值语句、门级电路描述等,用于描述电路的并行行为。

verliog数字时钟计数器电路设计

verliog数字时钟计数器电路设计

Verilog数字时钟计数器电路设计一、引言Verilog是一种硬件描述语言,用于描述、设计和模拟数字电路。

数字时钟计数器电路是数字电子系统中常见的模块,用于产生时钟信号和计数功能。

本文将介绍如何使用Verilog语言设计数字时钟计数器电路。

二、电路功能数字时钟计数器电路的功能是产生一个稳定的时钟信号,并实现计数功能,用于驱动数字系统中的时序逻辑。

该电路通常包括时钟发生器和计数器两部分,时钟发生器用于产生稳定的时钟信号,而计数器用于对时钟信号进行计数。

三、Verilog语言简介Verilog是一种硬件描述语言,它可以用于描述数字电路的结构、行为和时序特性。

Verilog语言具有丰富的语法结构,包括模块、端口、信号、赋值语句、过程块等,可以描述数字电路中的各种逻辑和时序操作。

四、数字时钟计数器电路设计1. 模块定义我们需要使用Verilog语言定义数字时钟计数器的模块。

模块是Verilog语言中的最基本单元,用于描述数字电路的结构和行为。

以下是数字时钟计数器模块的定义:```verilogmodule clk_counter(input wire clk,input wire rst,output reg [3:0] count);```在上面的代码中,我们定义了一个名为`clk_counter`的模块,该模块包括一个时钟输入`clk`、一个复位输入`rst`和一个4位计数输出`count`。

2. 时钟发生器接下来,我们需要设计时钟发生器模块,用于产生稳定的时钟信号。

以下是时钟发生器模块的定义:```verilogmodule clk_generator(output reg clk);always #10 clk = ~clk;endmodule```在上面的代码中,我们定义了一个名为`clk_generator`的模块,该模块包括一个时钟输出`clk`。

通过`always`块和`#10`延时控制,我们实现了一个简单的时钟发生器,每10个时间单位翻转一次。

基于verilog的电子时钟报告

基于verilog的电子时钟报告

一 总体设计方案1.设计原理及思路1.1原理分析图1-1数字钟程序总体框图数字钟实际上就是对1Hz的频率进行计数的计数电路。

振荡器产生32768Hz的时钟信号,经过分频器后产生512Hz、64Hz、2Hz的脉冲信号,秒计数器计满60后,触发分计数器,分计数器计满60后,触发计时电路,当计满24小时后开始下一轮计数。

如果计数的起始时间与设想的有误差,可以通过调时、调分按键或复位键进行手动调时。

计数器的输出经过6选1多路选择器后以动态扫描方式送到LED数码管输出。

由框图可知程序模块可分为消抖模块、2分频、或门、6进制计数器、10进制计数器、24进制计数器6选1多路选择器、七段译码器、位选端控制器组成。

实现思路及具体实现过程将在第二部分详细介绍。

1.2数字钟的电路结构数字钟由电源电路、CPLD电路、JATG下载接口、振荡器、分频器、显示器等部分组成。

1.2.1电源电路图1-2电源电路电源电路通过USB接口输入5V电压,经三端稳压器输出3.3V工作电压用于电路中各元件的用电需求。

1.2.2 JATG下载接口图1-3JATG下载接口通过USB-blaster将JATG接口与电脑相连,即可将编写好程序代码下载到开发板上进行功能验证。

1.2.3 CPLD电路该CPLD电路通过MAX3000A EPM3064ALC44-10N实现各模块的功能验证和综合。

在该芯片中有64个宏单元,44个可用引脚,载入程序后断电不消失,再次通电后仍执行上次载入的程序。

编写的VerilogHDL模块利用其中提供的触发器,逻辑门电路实现所编写程序的逻辑功能。

从原理图可看出芯片通过制定接口与电源电路、振荡电路、JATG下载接口及译码管相连综合实现其功能。

三个按键电路图分别表示RESET(复位键)、AD_Hour(调时按键)、AD_Min(调分按键)。

三个按键通过指定接口接入芯片通过程序中的消抖模块为计数器提供调时、调分、复位脉冲。

图1-4 CPLD电路1.2.4振荡和分频电路图1-5 振荡和分频电路振荡和分频电路由晶振产生32768Hz的脉冲通过MC74WC4060芯片分频,产生F512Hz、F64Hz、F2Hz的脉冲信号,用于电路的计时脉冲和位选信号的产生。

用verilog-HDL多功能数字钟

用verilog-HDL多功能数字钟

用verilog-HDL多功能数字钟Verilog HDL实验报告基于Verilog HDL语言的多功能数字钟设计一、试验目的设计一个有如下功能的数字钟:(1)计时功能:包括时、分、秒。

(2)定时与闹钟功能:能在所设定的时间发出铃音。

(3)校时功能:对小时、分钟和秒钟进行手动校时。

(4)整点报时功能:每到整点能够发出“嘀嘀嘀嘀嘟”四短一长的报时。

二、试验原理ALERT HOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MINCLK CLK_1K MODE TURN CHANGEclockCLK CLK_1K MODE TURN CHANGEALERTHOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MIN多功能数字钟端口示意图数字钟设有五个输入端,分别为时钟输入(CLK )、模式(MODE )、产生声音的时钟信号(CLK_1K )、切换(TURN )和调时(CHANGE )键。

输出共七个,其中HOUR[7..0]、MIN[7..0]和SEC[7..0]采用BCD 计数方式,分别驱动2个数码管。

硬件电路原理图如下:三、试验内容1. 代码/*信号定义:clk: 标准时钟信号,其频率为4Hz;clk_1k:产生闹铃声、报时音的时钟信号,其频率为1024Hz;mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时还是分钟;若长时间按住改建,还可使秒信号清零,用于精确调时;change: 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_mi n);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output[7:0] hour,min,sec;reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0] m,fm,num1,num2,num3,num4;reg[1:0] loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always @(posedge clk)beginclk_2Hz<=~clk_2Hz;if(sound==3) begin sound<=0; ear<=1; end //ear信号用于产生或屏蔽声音else begin sound<=sound+1; ear<=0; endendalways @(posedge clk_2Hz) //由4Hz的输入时钟产生1Hz的时基信号clk_1Hz<=~clk_1Hz;always @(posedge mode) //mode信号控制系统在三种功能间转换begin if(m==2) m<=0; else m<=m+1; endalways @(posedge turn)fm<=~fm;always //产生count1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1<=change; {LD_min,LD_hour}<=2; endelsebegin counta<=change; {LD_min,LD_hour}<=1; end{count2,countb}<=0;end1:begin if(fm)begin count2<=change; {LD_min,LD_hour}<=2; endelsebegin countb<=change; {LD_min,LD_hour}<=1; end{count1,counta}<=2'b00;enddefault:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseendalways @(negedge clk) //如果长时间按下“change”键,则生成“num1”信号用于连续快速加1if(count2) beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1; num2<=0;endendelse begin loop2<=0; num2<=0; endalways @(negedge clk) //产生num2信号if(count1) beginif(loop3==3) num3<=1;elsebegin loop3<=loop3+1; num3<=0; endendelse begin loop3<=0; num3<=0; endalways @(negedge clk)if(counta) beginif(loop4==3) num4<=1;elsebegin loop4<=loop4+1; num4<=0; endendelse begin loop4<=0; num4<=0; endassign ct1=(num3&clk)|(!num3&m_clk); //ct1用于计时、校时中的分钟计数assign ct2=(num1&clk)|(!num1&count2); //ct2用于在定时状态下调整分钟信号assign cta=(num4&clk)|(!num4&h_clk); //cta用于计时、校时中的小时计数assign ctb=(num2&clk)|(!num2&countb); //ctb用于在定时状态下调整小时信号always @(posedge clk_1Hz) //秒计时和秒调整进程if(!(sec1^8'h59)|turn&(!m))beginsec1<=0;if(!(turn&(!m))) minclk<=1;end//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时else beginif(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; endelse sec1[3:0]<=sec1[3:0]+1; minclk<=0;endassign m_clk=minclk||count1;always @(posedge ct1) //分计时和分调整进程beginif(min1==8'h59) begin min1<=0; hclk<=1; endelse beginif(min1[3:0]==9)begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; endelse min1[3:0]<=min1[3:0]+1; hclk<=0;endendassign h_clk=hclk||counta;always @(posedge cta) //小时计时和小时调整进程if(hour1==8'h23) hour1<=0;else if(hour1[3:0]==9)begin hour1[7:0]<=hour1[7:4]+1; hour1[3:0]<=0; endelse hour1[3:0]<=hour1[3:0]+1;always @(posedge ct2) //闹钟定时功能中的分钟调节进程if(amin==8'h59) amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; endelse amin[3:0]<=amin[3:0]+1;always @(posedge ctb) //闹钟定时功能中的小时调节进程if(ahour==8'h23) ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1; endelse ahour[3:0]<=ahour[3:0]+1;always //闹铃功能if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))//若按住“change”键不放,可屏蔽闹铃音if(sec1<8'h20) alert1<=1; //控制闹铃的时间长短else alert1<=0;else alert1<=0;always //时、分、秒的现实控制case(m)3'b00: begin hour<=hour1; min<=min1; sec<=sec1; end//计时状态下的时、分、秒显示3'b01: begin hour<=ahour; min<=amin; sec<=8'hzz; end//定时状态下的时、分、秒显示3'b10: begin hour<=hour1; min<=min1; sec<=8'hzz; end//校时状态下的时、分、秒显示endcaseassign LD_alert=(ahour|amin)?1:0; //指示是否进行了闹铃定时assign alert=((alert1)?clk_1k&clk:0)|alert2; //产生闹铃音或整点报时音always //产生整点报时信号alert2beginif((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))if(sec1>8'h54) alert2<=ear&clk_1k; //产生短音else alert2<=!ear&clk_1k; //产生长音else alert2<=0;endendmodule2. 仿真图四、小结及体会为了做多功能数字钟,我借了多本关于Verilog HDL的程序设计书。

verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波))

verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波))

Verilog基本电路设计(包括:时钟域同步、无缝切换、异步FIFO、去抖滤波))Verilog基本电路设计共包括四部分:单bit跨时钟域同步时钟无缝切换异步FIFO去抖滤波Verilog基本电路设计之一: 单bit跨时钟域同步(帖子链接:/thread-605419-1-1.html)看到坛子里不少朋友,对于基本数字电路存在这样那样的疑惑,本人决定开贴,介绍数字电路最常见的模块单元,希望给初学者带来帮助,也欢迎大佬们前来拍砖。

如果想要做数字设计,下面这些电路是一定会碰到的,也是所有大型IP,SOC设计必不可少的基础,主要包括异步信号的同步处理,同步FIFO,异步FIFO,时钟无缝切换,信号滤波debounce等等,后面会根据大家反馈情况再介绍新电路。

首先介绍异步信号的跨时钟域同步问题。

一般分为单bit的控制信号同步,以及多bit的数据信号同步。

多bit的信号同步会使用异步FIFO完成,而单bit的信号同步,又是时钟无缝切换电路以及异步FIFO电路的设计基础,这里先介绍单bit信号同步处理。

clka域下的信号signal_a,向异步的clkb域传递时,会产生亚稳态问题。

所有的亚稳态,归根结底就是setup/hold时间不满足导致。

在同一个时钟域下的信号,综合以及布线工具可以在data路径或者clock路径上插入buffer使得每一个DFF的setup/hold时间都满足;但是当signal_a在clkb域下使用时,由于clka与clkb异步,它们的相位关系不确定,那么在clkb的时钟沿到来时,无法确定signal_a此时是否处于稳定无变化状态,也即setup/hold时间无法确定,从而产生亚稳态。

这种异步信号在前后端流程里面是无法做时序分析的,也就是静态时序分析里常说的false_path。

消除亚稳态,就是采用多级DFF来采样来自另一个时钟域的信号,级数越多,同步过来的信号越稳定。

对于频率很高的设计,建议至少用三级DFF,而两级DFF同步则是所有异步信号处理的最基本要求。

课程设计---基于Verilog HDL数字时钟设计与实现

课程设计---基于Verilog HDL数字时钟设计与实现

课程设计---基于Verilog HDL数字时钟设
计与实现
简介
本课程设计旨在通过使用Verilog硬件描述语言(HDL)设计和实现数字时钟。

学生将研究如何使用Verilog语言来描述数字电路,并将其应用于设计和实现一个简单的数字时钟电路。

设计目标
- 研究使用Verilog HDL来描述和设计数字电路
- 实现一个简单的数字时钟电路
- 熟悉数字时钟的工作原理和设计流程
实施步骤
1. 了解数字时钟的原理和工作方式
2. 研究Verilog HDL语言的基本语法和使用方法
3. 设计并实现时钟的各个功能模块,如时钟显示模块、时钟计数模块等
4. 使用仿真工具验证设计的正确性
5. 进行实际的硬件验证,将设计烧录到FPGA开发板上并进行测试
实验要求
1. 设计的数字时钟应具备基本的时分秒显示功能
2. 时钟应具备可调节的时间设置功能
3. 需要使用FPGA开发板进行实际硬件验证
4. 实验报告应包含设计原理、设计流程、仿真结果和实际硬件验证结果
参考资料
1. Verilog HDL教程
2. FPGA开发板用户手册
3. 相关学术论文和文献
以上为课程设计---基于Verilog HDL数字时钟设计与实现的文档简介。

本课程设计将帮助学生学习Verilog HDL语言并应用于设计和实现数字时钟电路。

Verilog数字钟课程设计

Verilog数字钟课程设计

课程设计报告课程设计题目:数字钟系统设计学号:2学生姓名:刘新强专业:通信工程班级:1421302指导教师:钟凯2016年1月4日FPGA( Field Programmable Gate Array,现场可编程门阵列),一种可编程逻辑器件,是目前数字系统设计的主要硬件基础。

可编程逻辑器件的设计过程是利用EDA 开发软件和编程和编程工具对器件进行开发的过程。

通过modelsim软件下采用verilog语言实现数字钟系统设计,实现了以下几个方面的功能:1.数字钟基本计时功能2.数字钟校时功能3.数字钟系统报时功能关键词:FPGA ;VHDL;数字钟一、FPGA与VHDL简介 (1)1、FPGA与简介 ...........................................................................................2、VHDL简介 ...............................................................................................二、课程设计的目的与要求 (2)1、教学目的....................................................................................................................2、教学要求....................................................................................................................3、数字钟系统设计要求................................................................................................三、设计方案 (2)1、系统框图....................................................................................................................2、模块说明....................................................................................................................四、仿真与实现 (3)1、数字钟基本计时功能实现........................................................................................2、数字钟校时功能实现................................................................................................3、数字钟系统报时功能实现........................................................................................五、实验心得 (4)六、参考文献 (4)七、代码 (5)一、FPGA与VHDL简介1、FPGA简介以硬件描述语言(Verilog 或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA 上进行测试,是现代IC 设计验证的技术主流。

数字电路时钟设计verilog语言编写

数字电路时钟设计verilog语言编写

电子线路设计与测试实验报告一、实验名称多功能数字钟设计二、实验目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计。

三、设计内容及要求1.基本功能➢具有“秒”、“分”、“时”计时功能,小时按24小时制计时。

➢具有校时功能,能对“分”和“小时”进行调整。

2.扩展功能➢仿广播电台正点报时。

在59分51秒、53秒、55秒、57秒发出低音512Hz 信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。

➢定时控制,其时间为23时58分。

3.选做内容➢任意时刻闹钟(闹钟时间可设置)。

➢自动报整点时数。

四.系统框图与说明数字钟框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。

2.秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。

3.计数器的输出经译码器送显示器。

五.设计步骤1.列写多功能数字钟设计--层次结构图多功能数字钟顶层模块(clock_main.v)小时计数器(counter24.v)分钟计数器(counter60.v)秒钟计数器(counter60.v)6进制计数器(counter6.v)10进制计数器(counter10.v)6进制计数器(counter6.v)10进制计数器(counter10.v)分频模块(fre_divider.v)固定时刻闹钟设定校时模块任意时刻闹钟(setclock.v)整点报时模块(baoshi.v)2.拟定数字钟的组成框图,在Max+Plus II软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路;3.设计各单元电路并进行仿真;4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;5.下载到Cyclone II FPGA实验平台上,实际测试数字钟的逻辑功能。

verilog模块级时钟门控写法

verilog模块级时钟门控写法

文章标题:探讨Verilog模块级时钟门控写法的深度与广度在数字电路设计中,Verilog语言是一种常用的硬件描述语言,它能够有效地描述电路的结构与功能。

其中,模块级时钟门控写法作为其中的重要内容之一,对于数字电路设计来说具有重要的意义。

本文将深入探讨Verilog模块级时钟门控写法,通过分析和共享个人观点与理解,帮助读者更深入地理解这一主题。

1. 理解Verilog模块级时钟门控写法在数字电路设计中,模块级时钟门控写法是一种重要的设计技巧,它能够有效地控制时钟信号的传输和使用。

通过对Verilog语言的灵活运用,能够实现对时钟门控的精确控制,从而提高电路的性能和稳定性。

2. 实现Verilog模块级时钟门控的方法在Verilog语言中,实现模块级时钟门控可以通过一些常用的方法,例如使用时钟使能信号、时钟门控信号等。

通过在代码中灵活使用这些变量和控制逻辑,能够实现对时钟的精准控制,从而提高电路的性能和灵活性。

3. 核心思想与技术难点在实际应用中,Verilog模块级时钟门控写法的核心思想在于通过对时钟信号进行精准控制,从而实现对电路功能的精确调控。

技术难点则在于如何有效地设计和编写代码,以及如何在实际电路中稳定地运行。

4. 个人观点与理解在我看来,Verilog模块级时钟门控写法是一种非常重要且实用的设计技巧,它能够为数字电路设计带来很大的便利和灵活性。

通过对时钟信号的精准控制,能够实现对电路功能的精确调控,从而提高电路的性能和稳定性。

5. 总结与回顾Verilog模块级时钟门控写法是数字电路设计中重要的内容之一,通过深入探讨和灵活运用,能够为电路设计带来很大的便利和灵活性。

在实际应用中,我们需要不断地学习和实践,才能够更好地掌握这一重要技术。

通过以上对Verilog模块级时钟门控写法的深度与广度探讨,希望能够对读者有所启发和帮助。

在数字电路设计中,Verilog模块级时钟门控写法确实具有重要的意义,在实际应用中我们需要不断地学习和探索,才能够更好地运用这一重要技术。

数字式秒表verilog语言实现

数字式秒表verilog语言实现

一、实验目的(1)熟练掌握分频器、各种进制的同步计数器的设计。

(2)熟练掌握同步计数器的级联方法。

(3)掌握数码管的动态显示驱动方式。

(4)掌握计数器的功能和应用。

(5)理解开关防颤动的必要性。

(6)掌握简单控制器的设计方法。

二、实验内容和原理1、实验设计要求:(1)计时范围0’0’.0’’~59’59’.9’’,分辨率为0.1s,用数码管显示计时值。

(2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再次按键。

计时停止(“停止”状态);第三次按键,计时器复位为0’0’.0’’,且电路恢复到“初始”状态。

2、根据设计要求,可画出秒表电路的原理框图,如图1-2所示,秒表电路由时钟管理模块(DCM)、分频器模块、按键处理模块、控制器、计时模块和显示模块组成。

图1-2 秒表电路的原理框图(1)DCM模块由于数字钟为低速电路,而XUP Virtex-II Pro 开发系统只提供100MHz主时钟,因此需插入DCM分频模块以降低系统的工作时钟,从而提高系统的可靠性。

DCM可采用16分频,输出6.25MHz的sys_clk信号作为系统的主时钟。

ISE生成DCM内核的Verilog HDL 代码:VgaDCM DCMInst(.CLKIN_IN(clk),.CLKDV_OUT(sys_clk),.CLKIN_IBUFG_OUT(),.CLK0_OUT(), .LOCKED_OUT());(2)分频器模块产生用于计时的1/10秒脉冲信号pulse10,频率为10Hz ; 产生用于显示模块的扫描脉冲信号pulse400,频率为400Hz 。

1/10秒脉冲信号pulse10和扫描脉冲信号pulse400的脉冲宽度为一个系统主时钟信号sys_clk 的周期。

分频器模块原理框图如图1-3所示,先设计一个15625分频器,产生400Hz 的扫描信号pulse400,再由pulse400控制40分频器产生1/10秒脉冲信号pulse10。

多功能数字钟设计(Verilog语言编写)

多功能数字钟设计(Verilog语言编写)

多功能数字钟设计院系:电光学院班级:***学号: ***姓名: ***指导老师:***时间:2010.4.20.摘要:利用QuartusII软件设计一个数字钟,利用模块化的程序设计思想,核心模块均采用Verilog语言编写(译码显示模块采用原理图设计),软件仿真调试编译成功后,再下载到SmartSOPC实验系统中。

经过硬件测试,查找软件设计缺陷,并进一步完善软件,最终设计得到较为满意的多功能数字钟。

关键词:QuartusII; 多功能数字钟; 模块化; Verilog; 可编程;Abstract:Using the QuartusII software design a digital bell with the blocking method.The design takes theory drawing instead of Verilog language.After emluating and debuging successfully,translate and edit the code.Then,download the result to the programmable SmartSOPC system and test it in hardware.Realizing the soul of designing hardware by software.Keywords:QuartusII; digital bell; blocking method; VHDL; programmable; hardware目录设计内容简介 (3)设计要求说明 (3)方案论证(整体电路设计原理) (3)各子模块设计理 (5)分频模块: (5)计数模块: (7)--校准模块程序实现: (8)--秒计数模块程序实现: (9)--分计数模块程序实现: (10)--时计数模块程序实现: (10)整点报时模块: (12)闹钟设定模块: (13)--闹钟调节模块程序实现: (14)--输出信号选择模块程序实现: (14)彩铃模块: (15)译码显示模块: (18)万年历模块: (19)--日计数模块程序设计: (20)--月计数模块程序设计: (23)--年计数模块程序设计: (23)--万年历波形仿真结果: (25)结论: (26)实验感想: (26)附图: (27)设计内容简介设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、快速较秒等功能。

基于Verilog HDL设计的数字时钟

基于Verilog HDL设计的数字时钟

深圳大学考试答题纸(以论文、报告等形式考核专用)二○18 ~二○19 学年度第一学期课程编1602080001 课程名称号学姓名李思豪专业年级电子科学与技术16级1班号题目:基于Verilog HDL设计的数字时钟摘要:本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Altera QuartusⅡ 6.0和cyclnoe II EP2C35F672C6完成综合、仿真。

此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中关键词:Verilog HDL;硬件描述语言;FPGA目录一、实验任务 (3)实验目的 (3)实验要求 (3)二、设计思路 (3)三、实验结果 (10)四、总结与收获 (14)一、实验任务实验目的1.深入了解基于quartus ii工具的复杂时序逻辑电路的设计。

2.理解并熟练利用EDA工具进行综合设计。

3.熟练掌握芯片烧录的流程及步骤。

4.掌握Verilog HDL 语言的语法规范及时序电路描述方法。

实验要求设计一个带秒表功能的24 小时数字钟,它包括以下几个组成部分:①显示屏,由6 个七段数码管组成,用于显示当前时间(时:分,秒)或设置的秒表时间;②复位键复位所有显示和计数③设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置④秒表键,用于切换成秒表功能基本要求(1) 计时功能:这是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。

(2) 秒表功能:设置时间,进行倒计时功能(3) 设置新的计时器时间:按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。

二、设计思路1、总原理框图:原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下的不同功能,最后通过在顶层模块的调用,来实现时钟功能。

2.顶层模块:顶层模块调用三个字模块,并且定义输入输出口,代码输入所示:modulemyclock2(daojishi,stop,clk,reset,shi,fen,miao,miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2) ;input clk,reset,stop,shi,fen,miao,daojishi;output[6:0] miaoout1,miaoout2,fenout1,fenout2,shiout1,shiout2;wire[3:0] miao1,miao2,fen1,fen2,shi1,shi2;wire clk_1hz;divider_1HZ divider1hz(clk_1hz,reset,clk);count count1(daojishi,shi,fen,miao,stop,miao1,miao2,fen1,fen2,shi1,shi2,reset,clk_1hz); decode4_7 d0(miaoout1,miao1);decode4_7 d1(miaoout2,miao2);decode4_7 d2(fenout1,fen1);decode4_7 d3(fenout2,fen2);decode4_7 d4(shiout1,shi1);decode4_7 d5(shiout2,shi2);endmodule输入输出端口类型功能表:三个子模块的原理和代码:(1)分频模块:分频模块的作用主要是要获得各种频率的时钟信号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子线路设计与测试实验报告一、实验名称多功能数字钟设计二、实验目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计。

三、设计内容及要求1.基本功能➢具有“秒”、“分”、“时”计时功能,小时按24小时制计时。

➢具有校时功能,能对“分”和“小时”进行调整。

2.扩展功能➢仿广播电台正点报时。

在59分51秒、53秒、55秒、57秒发出低音512Hz 信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。

➢定时控制,其时间为23时58分。

3.选做内容➢任意时刻闹钟(闹钟时间可设置)。

➢自动报整点时数。

四.系统框图与说明数字钟框图1.数字钟电路系统由主体电路和扩展电路两大部分所组成。

2.秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。

3.计数器的输出经译码器送显示器。

五.设计步骤1.列写多功能数字钟设计--层次结构图多功能数字钟顶层模块(clock_main.v)小时计数器(counter24.v)分钟计数器(counter60.v)秒钟计数器(counter60.v)6进制计数器(counter6.v)10进制计数器(counter10.v)6进制计数器(counter6.v)10进制计数器(counter10.v)分频模块(fre_divider.v)固定时刻闹钟设定校时模块任意时刻闹钟(setclock.v)整点报时模块(baoshi.v)2.拟定数字钟的组成框图,在Max+Plus II软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路;3.设计各单元电路并进行仿真;4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;5.下载到Cyclone II FPGA实验平台上,实际测试数字钟的逻辑功能。

六.Verilog代码//24进制时钟, 具有计时、校时、仿广播电台正点报时、固定时刻定时,任意时刻闹钟等功能moduleclock_main(LED_Hour,LED_Minute,LED_Second,Alarm,CP_1KHz,Jsh_Min_key,Jsh_Hour_ke y,Set_Hour_key,Set_Min_key,Show,Ctrl_Bell);input CP_1KHz;//定义输入时钟input Jsh_Min_key,Jsh_Hour_key;//定义校时按键input Set_Hour_key,Set_Min_key;//定义闹钟定时按键input Show; //定义显示模式按键input Ctrl_Bell;//定义闹钟铃声控制output [7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量wire [7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量类型wire [7:0]Hour,Minute,Second;wire [7:0]Set_Hour_Out,Set_Min_Out;wire Out_1Hz,Out_500Hz;//定义分频模块输出变量类型reg Alarm_Ring,Alarm_Clock_1KHz;//定义仿广播电台报时和固定时刻定时铃声output Alarm;//蜂鸣器输入supply1Vdd;wire Alarm_Clock;//任意时刻闹钟闹铃wire MinL_EN,MinH_EN,Hour_EN;//定义中间变量类型//分频fre_dividerFD0(Out_1Hz,Out_500Hz,Vdd,Vdd,CP_1KHz);//正常计时counter10 U1(.Q(Second[3:0]),.nCR(Vdd),.EN(Vdd),.CP(Out_1Hz));counter6U2(.Q(Second[7:4]),.nCR(Vdd),.EN(Second[3:0]==4'h9),.CP(Out_1Hz));assignMinL_EN=Jsh_Min_key?Vdd:(Second==8'h59);assignMinH_EN=(Jsh_Min_key&&(Minute[3:0]==4'h9))||(Minute[3:0]==4'h9)&&(Second==8'h59 );counter10 U3(.Q(Minute[3:0]),.nCR(Vdd),.EN(MinL_EN),.CP(Out_1Hz));counter6 U4(.Q(Minute[7:4]),.nCR(Vdd),.EN(MinH_EN),.CP(Out_1Hz));assign Hour_EN=Jsh_Hour_key?Vdd:((Minute==8'h59)&&(Second==8'h59));counter24 U5(Hour[7:4],Hour[3:0],Vdd,Hour_EN,Out_1Hz);//仿广播电台正点报时baoshi BS1(Alarm_Ring,Minute,Second,Out_500Hz,CP_1KHz);//在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点//固定时刻定时always @(Hour or Minute or Second)//所定时刻为23时58分,蜂鸣器发出低音1KHz 信号,持续5秒钟if (Hour==8'h23&Minute==8'h58)case (Second)8'h00,8'h01,8'h02,8'h03,8'h04:Alarm_Clock_1KHz=CP_1KHz;default Alarm_Clock_1KHz=1'b0;endcaseelse Alarm_Clock_1KHz=1'b0;//任意时刻闹钟setclockSC1(Alarm_Clock,Set_Hour_Out,Set_Min_Out,Hour,Minute,Second,Set_Hour_key,Set_Mi n_key,CP_1KHz,Out_500Hz,Out_1Hz,Ctrl_Bell);//响铃assign Alarm=Alarm_Ring||Alarm_Clock_1KHz||Alarm_Clock;//数码管显示选择Choice_2to1 CU1(LED_Hour,Show,Set_Hour_Out,Hour);//Show为高电平时,显示闹钟所定时刻;为低电平时,显示正常计时Choice_2to1 CU2(LED_Minute,Show,Set_Min_Out,Minute);Choice_2to1 CU3(LED_Second,Show,8'h00,Second);Endmodule//**********分频模块,获得500Hz低频1Hz时钟源**********modulefre_divider(Out_1Hz,Out_500Hz,nCR,EN,In_1KHz);input nCR,EN,In_1KHz;output Out_1Hz,Out_500Hz;supply1Vdd;wire Out_1Hz,Out_500Hz;wire [11:0]Qn;//定义中间变量类型wire EN1,EN2;counter10 DU1(.Q(Qn[3:0]),.nCR(nCR),.EN(EN),.CP(In_1KHz));counter10 DU2(.Q(Qn[7:4]),.nCR(nCR),.EN(EN1),.CP(In_1KHz));counter10 DU3(.Q(Qn[11:8]),.nCR(nCR),.EN(EN2),.CP(In_1KHz));assign EN1= (Qn[3:0]==4'd9);assign EN2= (Qn[7:4]==4'd9)&(Qn[3:0]==4'd9);assign Out_500Hz=Qn[0];assign Out_1Hz=Qn[11];endmodule//****************模10计数器******************module counter10(Q,nCO,nCR,EN,CP);inputCP,nCR,EN;output[3:0]Q;outputnCO;reg[3:0]Q;always@(posedge CP or negedgenCR)beginif(~nCR)Q<=4'd0;else if(EN)beginif(Q>=4'd9)Q<= 4'd0;else Q<=Q+1'd1;endelse Q<=Q;endassignnCO=~(Q[3]&&Q[0]);endmodule//****************模6计数器****************** module counter6(Q,nCO,nCR,EN,CP);inputCP,nCR,EN;output[3:0]Q;outputnCO;reg[3:0]Q;always@(posedge CP or negedgenCR)beginif(~nCR)Q<=4'd0;else if(EN)beginif(Q==4'd5)Q<= 4'd0;else Q<=Q+1'd1;endelse Q<=Q;endassignnCO=~(Q[2]&&Q[0]);endmodule//**********模60计数,用来构成分、秒计数********** module counter60(Qnt,CO,nCR,EN,CP);inputCP,nCR,EN;output [7:0]Qnt;output CO;wire [7:0]Qnt;counter10 U0(Qnt[3:0],nCO_10,nCR,EN,CP);counter6 U1(Qnt[7:4],nCO_6,nCR,Qnt[3:0]==4'd9,CP);assign CO=~((Qnt[7:4]==4'd5)&&(Qnt[3:0]==4'd9));endmodule//********************模24计数器********************module counter24(CntH,CntL,nCR,EN,CP);inputCP,nCR,EN;output[3:0]CntH,CntL;reg [3:0]CntH,CntL;always @(posedge CP or negedgenCR)beginif(~nCR) {CntH,CntL}<=8'h00;else if(~EN) {CntH,CntL}<={CntH,CntL};else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;else if((CntH==2)&&(CntL<3))beginCntH<= CntH;CntL<= CntL+1'b1;endelse if(CntL==9)beginCntH<= CntH+1'b1;CntL <= 4'b0000;endelsebeginCntH<= CntH;CntL<= CntL+1'b1;endendendmodule//**********仿广播电台正点报时**********modulebaoshi(Alarm_Ring,Minute,Second,_500Hz,_1KHz);input [7:0] Minute,Second;//定义输入变量input _500Hz,_1KHz;output Alarm_Ring;//定义输出变量regAlarm_Ring;//定义输出变量类型always@(Minute or Second)if(Minute==8'h59)case (Second)8'h51,8'h53,8'h55,8'h57:Alarm_Ring=_500Hz; //在59分51秒、53秒、55秒、57秒发出低音512Hz 信号8'h59:Alarm_Ring=_1KHz; //在59分59秒时发出一次高音1024Hz信号default:Alarm_Ring=1'b0;endcaseelseAlarm_Ring=1'b0;Endmodule//******************任意时刻闹钟******************modulesetclock(Alarm_Clock,Set_Hour_Out,Set_Min_Out,Hour,Minute,Second,Set_Hour_key,S et_Min_key,_1KHz,_500Hz,_1Hz,Ctrl_Bell);inputSet_Hour_key,Set_Min_key;inputCtrl_Bell;input [7:0]Hour,Minute,Second;outputAlarm_Clock;output [7:0]Set_Hour_Out,Set_Min_Out;wire [7:0]Set_Hour_Out,Set_Min_Out;wireAlarm_Clock;input _1KHz,_500Hz,_1Hz;supply1Vdd;wireHourH_EQU,HourL_EQU,MinH_EQU,MinL_EQU;wireTime_EQU;counter60 SU1(.Qnt(Set_Min_Out),.nCR(Vdd),.EN(Set_Min_key),.CP(_1Hz)); //实现闹钟分钟的设定counter24 SU2(Set_Hour_Out[7:4],Set_Hour_Out[3:0],Vdd,Set_Hour_key,_1Hz); //实现闹钟小时的设定comparator SU4(HourH_EQU,Set_Hour_Out[7:4],Hour[7:4]);comparator SU5(HourL_EQU,Set_Hour_Out[3:0],Hour[3:0]);comparator SU6(MinH_EQU,Set_Min_Out[7:4],Minute[7:4]);comparator SU7(MinL_EQU,Set_Min_Out[3:0],Minute[3:0]);assignTime_EQU=(HourH_EQU&&HourL_EQU&&MinH_EQU&&MinL_EQU);assign Alarm_Clock=Ctrl_Bell?(Time_EQU&&(((Second[0]==1'b1)&&_500Hz)||((Second[0]==1'b0)&&_1KHz))):1'b0;endmodule//****************比较器******************module comparator(EQU,A,B); //比较器,如果A和B相等时,则输出为1input [3:0] A,B;output EQU;assign EQU=(A==B);endmodule//****************二选一选择器****************module Choice_2to1(Qnt,SEL,X,Y);input [7:0] X,Y;input SEL;output [7:0] Qnt;assignQnt=SEL?X:Y;endmodule七.各工作模块仿真波形1.基本功能—正常计时和校时2.仿广播电台正点报时3.固定时刻定时4.任意时刻定时及闹钟设定八.实验总结:1.对于本次能够成功地使用Verilog设计并仿真出多功能数字钟,感到非常满意。

相关文档
最新文档