Verilog数字钟设计
- 格式:pdf
- 大小:436.57 KB
- 文档页数:18
基于FPGA的电子钟设计报告一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称2、FPGA芯片及其最小系统(1)FPGA芯片它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
基于FPGA的数字时钟2019-11-23 21:36·电力源动一、FPGA的基本知识1、可编程逻辑器件的概况可编程逻辑器件主要分为FPGA和CPLD 两种,两者的功能基本相同。
FPGA--现场可编程门阵列的简称CPLD--复杂可编程逻辑器件的简称它的外形与普通嵌入式处理器芯片相同采用PGA(Organic pin grid Array,有机管脚阵列)的封装形式,但可以通过烧写特殊程序改变其内部结构,实现专门的电路功能。
二、FPGA的设计方法1、编程语言FPGA的主流程序设计语言主要有VHDL语言与Verilog语言两种。
本课题采用VHDL语言进行编写。
VHDL--用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
Verilog--一种基本语法与C语言相近,相比较于C语言更容易理解,2、图形化程序设计(设计效率低)三、软件开发环境QuartusII是Altera提供的FPGA开发集成环境,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
它完全支持VHDL设计流程,其内部嵌有VHDL逻辑综合器。
四、数字钟功能模块认识数字时钟的设计采用了自顶向下分模块的设计。
底层是实现各功能的模块,各模块由VHDL语言编程实现顶层采用原理图形式调用。
具体的设计框图:各模块原理剖析:(1)在七段数码管上具有时--分--秒的依次显示;(2)时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数;(3)整点报时,当计数到整点时扬声器发出响声;(4)时间设置:可以通过按键手动调节秒和分的数值。
/*信号定义:CL K: CL K 为时钟信号;CLR:为异步复位信号;PAUSE:为暂停信号;MSH,M SL:百分秒的高位和低位;SH,S L:秒信号的高位和低位;MH,ML:分钟信号的高位和低位。
*/mo dulepaobi ao(CL K,CLR,PAUS E,MSH,MSL,SH,SL,MH,M L); input CLK,CLR;inpu t PAU SE;outpu t[3:0] MSH,MSL,SH,SL,MH,M L;r eg[3:0] MS H,MSL,SH,S L,MH,ML;reg c n1,cn2; //cn1 为百分秒向秒的进位,c n2 为秒向分的进位//百分秒计数进程,每计满100,c n1 产生一个进位alwa ys @(posed ge CL K orposed ge CL R)b eginif(C LR) b egin//异步复位{M SH,MS L}<=8'h00;cn1<=0;endelse if(!PAUSE) //P AUSE为0 时正常计数,为1 时暂停计数b eginif(M SL==9) beg in王金明:《V erilo g HDL程序设计教程》- 55-MS L<=0;if(MSH==9)b eginMSH<=0; cn1<=1; endelse MSH<=MSH+1;e nde lse b eginMSL<=MSL+1; cn1<=0;endendend//秒计数进程,每计满60,cn2产生一个进位al ways@(pos edgecn1 o r pos edgeCLR)begi nif(CLR) begi n //异步复位{SH,S L}<=8'h00;cn2<=0;endelse if(S L==9) //低位是否为9begi nSL<=0;if(S H==5) begi n SH<=0; c n2<=1; endels e SH<=SH+1;en del seb eginSL<=S L+1;cn2<=0; en den d//分钟计数进程,每计满60,系统自动清零alwa ys @(posed ge cn2 orposed ge CL R)b eginif(C LR)begin {MH,ML}<=8'h00; end //异步复位e lse i f(ML==9) b eginML<=0;i f(MH==5) M H<=0;els e MH<=MH+1;en del se ML<=ML+1;e ndendm odule。
学院:信息技术学院班级:专业:电子信息科学与技术姓名:日期:学号:1、熟悉行为级语法;2、熟悉有限状态机设计一四位计数器,进行仿真,并检测输出结果;提示:在时钟上升沿,如果复位信号有效,则复位为0,如果复位信号无效,则计数器需要加一。
完成一个序列信号电路检测器,检测信号为10010,当检测到此序列时输出端口输出高电平,其余时间输出低电平。
提示:先画出状态转换图或写出状态转换表,根据状态表或者状态图完成代码的设计;编写测试模块对该功能模块进行仿真。
要求实验报告包括完整的状态转化图或者转化表。
序列信号电路检测器:module mian (z, x, clock, clear);output z;reg z;input clock, clear;input x;parameter s0 = 3'd0,s1 = 3'd1,s2 = 3'd2,s3 = 3'd3,s5 = 3'd5,s4 = 3'd4;reg [2:0] state;reg [2:0] next_state;always @(posedge clock) if(clear)state <= s0;elsestate <= next_state;always @(state)begincase(state)s0: show = 0;s1: show = 0;s2: show = 0;s3: show = 0;s4: show = 0;s5: show = 1; endcaseendalways @(x or state) begincase(state)s0: if(x == 0)next_state = s0;elsenext_state = s1;s1: if(x == 0)next_state = s2;elsenext_state = s1;s2: if(x == 0)next_state = s3;elsenext_state = s1;s3: if(x == 0)next_state = s0;elsenext_state = s4;s4: if(x == 0)next_state = s5;elsenext_state = s1;s5: if(x == 0)next_state = s0;elsenext_state = s1;endcaseendendmodulemodule stimulus_mv;wire z;reg x;reg clock, clear; mianMVP(z, x, clock, clear);initialbegin clock = 0;forever #5 clock = ~clock;endinitialbeginclear = 1;repeat(2)@(negedge clock);clear = 0;endinitialbegin#30 x = 1;#10 x = 0;#10 x = 0;#10 x = 1;#10 x = 0;endendmodule1.输出:四位计数器3.1功能块代码module counter(out, clock, clear);output out;input clock, clear;reg [3:0] out;always @(posedge clock or negedge clear) beginif(clear)out <= 4'd0;elseout <= out + 1;endendmodule3.2测试模块代码module counter_stimulus;reg clock, clear;wire [3:0] out;initial$monitor($time, "count = %b , clear = %b", out[3:0], clear); counter MVP(out, clock, clear);alwaysbeginclear = 1'b1;#15 clear = 1'b0;#200 clear = 1'b1;#50 clear = 1'b1;endinitialbeginclock = 1'b0;forever #5 clock = ~clock;endinitialbegin#400 $Finish;endendmodule4分析总结4.1遇到的问题及解决方法4.2实验心得及存在的问题。
数电课设--数字钟的设计摘要:该设计主要是设计一种基于数字电路实现的数字钟,用于显示当前时间,同时设计一个简单的时间调整系统来实现对数字钟的时间调整。
本设计实现了数字钟的时间显示、时间调整等功能,具有简单、实用等优点。
关键词:数字钟、计数器、时间调整系统一、引言数字钟是一种时钟显示设备,它可以在显示面板上显示当前时间,数字钟的普及改变了人们观念上的关于时间知识的变革。
本课设就是要通过设计一个数字钟,来综合应用我们所学的数字电路知识,通过数字电路的设计实现时间的显示及调整。
二、数字钟的设计原理数字钟的设计离不开计数器和定时器,计数器的作用是进行计数操作,进而对时间进行处理,定时器的作用是用来控制计数器的计数和复位,使其能够按照固定的时间序列不断进行计数。
数字钟的显示部分采用数码显示管显示当前时间,数码显示管显示的时间单位有小时、分钟和秒。
三、数字钟的设计方案数字钟的设计方案可以分为两部分,一部分是计数器及定时器的设计,另一部分是时间调整系统的设计。
下面分别进行介绍。
(一)计数器及定时器的设计计数器采用7474型D触发器进行设计,二进制计数器采用模8计数模式,带有异步复位功能。
其中,D触发器的Vcc接+5V电源,GND接地,CLK接定时器的输出,D接Q的输出,Q接下一级触发器D端。
计数器采用8253/8254型定时器,应该根据标准时钟的频率和预置值计算计数器的频率和复位时间。
时间调整功能通常是通过8255接口芯片实现。
(二)时间调整系统的设计时间调整系统通过单片机实现,主要实现以下功能:上下键切换修改时间单位、按键快速调整修改时间数字、按键高频稳定范围设置、判断闹钟是否开启、日历选择等。
四、数字钟的实现数字钟的实现可以参考实验教材进行,实现前需要明确以下几点:1. 根据实际需求确定数字钟的参数:例如显示的时间格式,以及是否需要设置闹钟等。
2. 设计好数字钟的原理图,并选择适合的元件进行接线。
3. 进行电路调试和测试,对电路进行稳定性测试等。
verilog的for语句Verilog中的for语句是一种循环结构,用于重复执行一段代码块。
在Verilog中,for语句通常用于生成硬件描述,例如生成一系列时钟信号或数据序列。
下面列举了一些常见的Verilog for语句的应用场景:1. 生成时钟信号:在数字电路设计中,时钟信号是非常重要的。
使用for语句可以生成一系列时钟信号,如下所示:```verilogreg clk;integer i;always beginfor (i=0; i<10; i=i+1) begin#10 clk = 1; // 时钟高电平持续10个时间单位#10 clk = 0; // 时钟低电平持续10个时间单位endend```2. 遍历数组元素:在某些情况下,需要对数组进行遍历操作。
使用for语句可以方便地遍历数组元素,如下所示:```verilogreg [7:0] data [0:9];integer i;initial beginfor (i=0; i<10; i=i+1) begindata[i] = i; // 将数组元素赋值为索引值endend```3. 实现计数器:计数器是数字电路中常见的组件,用于计数。
使用for语句可以实现一个简单的计数器,如下所示:```verilogreg [3:0] count;integer i;always @(posedge clk) beginfor (i=0; i<16; i=i+1) beginif (count == i) begincount <= count + 1; // 计数器加1endendend```4. 生成数据序列:在某些应用中,需要生成一系列特定的数据序列。
使用for语句可以方便地生成这些序列,如下所示:```verilogreg [7:0] data;integer i;initial beginfor (i=0; i<256; i=i+1) begindata = i; // 生成0~255的数据序列endend```5. 实现状态机:状态机是数字电路设计中常见的组件,用于描述系统的不同状态和状态之间的转移关系。
数字系统设计与Verilog HDL(复习)EDA(Electronic Design Automation)就是以计算机为工作平台,以EDA软件工具为开发环境,以PLD器件或者ASIC专用集成电路为目标器件设计实现电路系统的一种技术。
1.电子CAD(Computer Aided Design)2.电子CAE(Computer Aided Engineering)3.EDA(Electronic Design Automation)EDA技术及其发展p2EDA技术的应用范畴1.3 数字系统设计的流程基于FPGA/CPLD的数字系统设计流程1. 原理图输入(Schematic diagrams )2、硬件描述语言 (HDL文本输入)设计输入硬件描述语言与软件编程语言有本质的区别综合(Synthesis)将较高层次的设计描述自动转化为较低层次描述的过程◆行为综合:从算法表示、行为描述转换到寄存器传输级(RTL)◆逻辑综合:RTL级描述转换到逻辑门级(包括触发器)◆版图综合或结构综合:从逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示综合器是能自动实现上述转换的软件工具,是能将原理图或HDL语言描述的电路功能转化为具体电路网表的工具适配适配器也称为结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,并产生最终的可下载文件对CPLD器件而言,产生熔丝图文件,即JEDEC文件;对FPGA器件则产生Bitstream 位流数据文件p8仿真(Simulation)功能仿真(Function Simulation)时序仿真(Timing Simulation)仿真是对所设计电路的功能的验证p9编程(Program)把适配后生成的编程文件装入到PLD器件中的过程,或称为下载。
通常将对基于EEPROM工艺的非易失结构PLD器件的下载称为编程(Program),将基于SRAM 工艺结构的PLD器件的下载称为配置(Configure)。
多功能数字钟设计实验报告院系:电子与通信工程学院:郭世康班级:1301学号:U202113639指导教师:唐祖平一、实验目标掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程熟悉EDA软件使用掌握Verilog HDL设计方法分模块、分层次数字系统设计二、实验容要求根本功能能显示小时、分钟、秒钟〔时、分用显示器,秒用LED〕能调整小时、分钟的时间提高要求任意闹钟;〔1分〕小时为12/24进制可切换〔1分〕报正点数〔几点钟LED闪烁几下〕〔1分〕三、实验条件Xilinx工程环境,win7操作系统,BASYS2实验板。
四、实验设计1.设计分析数字钟大体上由2个60进制计数器,1个24进制计数器构成,中间有数据选择器进展连接。
为实现提高功能,还需12进制计数和整点判断模块。
下列图为数字钟层次构造图。
2. 实验原理振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,再经分频器输出标准秒脉冲。
秒计数器计满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按24或12进制规律计数。
计数器的输送译码显示电路,即可显示出数码〔即时间〕。
计时出现误差时可以用校时电路进展校时和校分。
小时显示〔12\24〕切换电路、仿电台报时、定时闹钟为扩展电路,只有在计时主体电路正常运行的情况下才能进展功能扩展。
本实验采用Verilog HDL进展描述,然后用FPGA/CPLD实现,使用部50MHz 晶振作为时钟电路。
3. 逻辑设计实现上述功能的Verilog HDL 程序如下。
实现根本功能的程序分为两层次四个模块,底层有3个模块构成,即6进制计数器模块,10进制计数器模块和24进制计数器模块,顶层有一个模块,他调用底层的3个模块完成数字中的计时功能。
moduletimeclock(Hour,Minute,Second,CP,nCR,EN,Adj_Min,Adj_Hour,number,Light,clk,temp,c hange,AMTM,dingdong);output [7:0] Hour,Minute,Second;output [3:0] Light,temp;output [6:0] number;output clk,AMTM,dingdong;//clk为分频之后的时钟信号,频率为1Hz,AMTM为24进制转换12进制时说明上下午的变量,dingdong为整点报时时的闪烁信号。
基于Quartus2的Verilog 实例详解说明:该例程分两部分:第一部分主要是通过一个半加器的实验来演示Quartus2软件的基本用法,从而使入门者很快上手。
第二部分主要是VerilogHDL 的实例,其中每个程序都是已经调试通过的,尤其是后边的数字钟、频率计等都有已经建好的工程,若将其下到实验箱就可以直接观察效果。
由于水平有限,纰漏之处还请指正!第一部分半加器的实现1、打开Quartus2软件如下图所示:图1—1Quartus II 软件图形用户界面我们首先简单了解一下各部分的作用:菜单栏工程栏资源管理窗编译状态显示窗信息显示窗标题栏:显示当前工程的路径和程序的名称。
菜单栏:主要包括文件(File)、编辑(Edit)、视图(View)、工程(Project)、资源分配(Assignments)、操作(Processing)、工具(Tools)、窗口(Window)、和帮助(Help)、9个下拉菜单组成。
工具栏:包含常用命令的快捷图标。
资源管理窗:显示当前工程中所有相关的文件。
工程工作区:对不同的工程文件进行各种操作。
编译状态显示窗:显示模块综合、布局布线过程和时间。
信息显示窗:显示软件综合、布局布线过程中的信息。
下面我们通过一个半加器的实验来进一步学习:我们首先要新建一个工程,按下图进行操作单击后会出现下列的窗口,按照下图继续进行……鼠标单击,下一步保存文件路径工程名称鼠标单击,下一步鼠标单击,下一步元件系列选择具体元件选择(我们采用实验箱上的Cyclone系列的EP1C3T144C8)最后单击下一步工程建好后新建一个图形文件,File New(如下图所示)用鼠标选中,单击OK 确定后弹出如下图所示的窗口最后,单击“Finish ”图形文件编辑区双击图形文件编辑区会弹出如下图所示的对话框。
在原理图中调入与门(and2)、异或门(xor)、输入端口(input)、输出端口(output)等元件,可在“Name”的文本框中直接输入元件的名字,也可以在元件库中直接寻找,调入元件。
实验报告实验名称: [数字时钟实验]姓名:学号:指导教师:实验时间: [2013年6月15日]信息与通信工程学院DS1302数字时钟实验1.实验任务DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
本实验运用DS1302实现对时间的计时,对日期的计数.利用数码管显示年、月、日、周、日、时、分、秒.能够复位,设置时间,日期.可以换键显示年月日和时分秒.学会运用FPGA实验箱用verilog语言进行一定的程序编程设计,满足一定的实验要求,掌握fpga的I/O口及并口的使用,能够处理一些简单的实验问题,学会简单的实验设计。
2.实验原理振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。
秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数,月都是12,所以不用特殊设置,日按平年计算,在润年的时候2月减一天即可。
年由于只显示后两位数字就可以,所以用两位显示可以满足。
计数满后各计数器清零,重新计数。
计数器的输出分别经译码器送数码管显示。
计时出现误差时,可以用校时电路校时、校分。
控制信号由1×5矩形键盘输入。
时基电路可以由石英晶体振荡电路构成,假设晶振频率1MHz,经过6次十分频就可以得到秒脉冲信号。
译码显示电路由八段译码器完成。
3.设计流程图形或HDL编辑Analysis & Synthesis(分析与综合)Filter(适配器)Assembler(编程文件汇编)编辑器Timing Analyzer(时序分析器)设计输入综合或编译适配器件下载仿真4.实验程序程序初始化module shuzishizhong(Clk0,SEG,DIG,rst,rst_n,sclk,data_io,button);input button;//用于选择在数码管上显示时间or日历的按键,按下为高电平input rst;//外部复位键input Clk0;//外部输入时钟50Mhzoutput [7:0] SEG,DIG;output rst_n;//ds1302的端口RTC nRSToutput sclk;//ds1302的输入时钟RTC CLKinout data_io;//ds1302的io端口RTC IOreg [12:0] CNT_R0;//用于将50Mhz时钟分频为10Khz的寄存器reg Clk_10KHz;//10Khz时钟reg [21:0] count;//用于按键消抖的计数器reg flag=0;//判断显示时间or日历的标识位,0显示时间,1显示日历reg [2:0] SCAN_R;reg [3:0] SEG_M [7:0];reg [7:0] SEG_DR;reg [7:0] SEG,DIG;wire [23:0] dat_o_TM;//来着ds1302_drive的存放时间的寄存器wire [31:0] dat_o_C;//来着ds1302_drive的存放日历的寄存器ds1302_drive(.clock(Clk0),.rst(rst),.rst_n(rst_n),.sclk(sclk),.data_io(data_io),.dat_o_T M(dat_o_TM),.dat_o_C(dat_o_C));驱动程序初始化module ds1302_drive(clock,rst,rst_n,sclk,data_io,dat_o_TM,dat_o_C);input rst;//外部复位按键重新设置数据input clock;//ds1302端口信号output rst_n,sclk;//ds1302的工作时钟inout data_io;//dat_o_TM信号接六个数码管,分别显示小时,分钟和秒//dat_o_C信号送到12864显示年,月,日和星期output[23:0] dat_o_TM;//读出的时间送出显示output[31:0]dat_o_C;//读出的日历送出显示reg rst_n;reg data;//data_io的缓存,reg clk_us;//状态机的时钟8us/periodreg clk_2us;//ds1302的工作时钟//data_io是双向口,开关link_write管理数据的出入//link_write为高时,允许输出,为低电平是高阻reg link_write;reg flag123;//重新设置日历标志位reg [4:0]step1;//WR_SET任务的状态reg [4:0]step2;//RD_T任务的状态reg [23:0] data_out_reg_time;//存放读出的时间reg [31:0] data_out_reg_calender;//存放读出的日历reg F;//读任务的标志reg FF;//写任务的标志reg [7:0]reg_CMD=0;//commandreg [7:0]reg_SEC=0;//秒reg [7:0]reg_MIN=8'h30;//分钟reg [7:0]reg_H=8'h09;//小时reg [7:0]reg_DAY=8'h03;//天reg [7:0]reg_MONTH=8'h06;//月reg [7:0]reg_X=8'h01;//星期reg [7:0]reg_YEAR=8'h13;//年reg [7:0]register1;//写操作的指令存器reg [7:0]register3;//读操作读进数据的寄存器reg [7:0]register4;//读操作的指令寄存器reg [3:0]state;//状态机//=============================================== //初始设置的状态参数//写状态parameterIDLE =4'b0000,WR_S =4'b0001,WR_Min =4'b0010,WR_H =4'b0011,WR_X =4'b0100,WR_D =4'b0101,WR_M =4'b0110,WR_Y =4'b0111;//=============================================== //=============================================== parameter //状态读RD_S =4'b1000,RD_Min =4'b1001,RD_H =4'b1010,RD_X =4'b1011,RD_D =4'b1100,RD_M =4'b1101,RD_Y =4'b1110,CLOSE_W =4'b1111;//=============================================== //WR_SET任务的参数parameterstep1_f0 =5'b00000,step1_f1 =5'b00001,step1_f2 =5'b00010,step1_f3 =5'b00011,step1_f4 =5'b00100,step1_f5 =5'b00101,step1_f6 =5'b00110,step1_f7 =5'b00111,step1_f8 =5'b01000,step1_f9 =5'b01001,step1_fa =5'b01010,step1_fb =5'b01011,step1_fc =5'b01100,step1_fd =5'b01101,step1_fe =5'b01110,step1_ff =5'b01111,step1_f10 =5'b10000;//=============================================== //RD_T任务的参数parameterstep2_f0 =5'b00000,step2_f1 =5'b00001,step2_f2 =5'b00010,step2_f3 =5'b00011,step2_f4 =5'b00100,step2_f5 =5'b00101,step2_f6 =5'b00110,step2_f7 =5'b00111,step2_f8 =5'b01000,step2_f9 =5'b01001,step2_fa =5'b01010,step2_fb =5'b01011,step2_fc =5'b01100,step2_fd =5'b01101,step2_fe =5'b01110,step2_ff =5'b01111,step2_f10=5'b10000;//++++++++++++++++++++++++++++++++++++++++++++++ //本模块的时钟20ns X 200 X 2=8us/period,reg[8:0]counter;5. 管脚分配6.实验结果如图所示实验版通过对左边3和4按键的使用可以实现年月日与时分秒的切换,图左上角的数码管用于显示时钟,对实验程序中如下部分的修改可以改变可以使数码管上的时钟改变用于设定时间。
create_clock用法一、概述c r ea te_c lo ck是一种常见的Ve ri lo gHD L中的时钟定义方式,用于定义模块中的时钟信号。
本文将介绍c rea t e_cl oc k用法及其相关注意事项。
二、c r e a t e_c l o c k格式c r ea te_c lo ck的格式如下所示:```c r ea te_c lo ck-p eri o d<时钟周期>-na me<时钟名称>[-w av ef o rm<时钟波形>][-a dd[起始时间]<时钟名称>]```-`-p er io d<时钟周期>`:用于指定时钟周期,单位为纳秒。
-`-n am e<时钟名称>`:用于指定时钟的命名。
-`-w av ef or m<时钟波形>`:可选参数,用于指定时钟的波形,默认为周期性的方波。
-`-a dd[起始时间]<时钟名称>`:可选参数,用于指定其他时钟信号。
起始时间表示从哪个时间开始添加这个时钟信号。
三、c r e a t e_c l o c k用法示例以下是一个使用c rea t e_cl oc k定义时钟的例子:```v er il ogc r ea te_c lo ck-p eri o d10-na me cl k```这个例子中,定义了一个时钟信号,时钟周期为10纳秒,命名为cl k。
四、c r e a t e_c l o c k常见用法1.定义多个时钟c r ea te_c lo ck可以用于定义多个时钟信号。
例如:```v er il ogc r ea te_c lo ck-p eri o d10-na me cl kc r ea te_c lo ck-p eri o d20-na me cl k2```这个例子中,定义了两个时钟信号,分别为c lk和c lk2。
摘要本设计为一个多功能的数字时钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能。
本设计采用EDA技术,以硬件描述语言Verilog HDL为系统逻辑描述语言设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统由时钟模块、控制模块、计时模块、数据译码模块、显示以及组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,按键进行校准,整点报时,闹钟功能。
关键词:数字时钟,硬件描述语言,Verilog HDL,FPGAAbstractThe design for a multi-functional digital clock, with hours, minutes and seconds count display to a 24-hour cycle count; have proof functions function. The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in QUAETUSII tools environment, atop-down design, by the various modules together build a FPGA-based digital clock. The main system make up of the clock module, control module, time module, data decoding module, display and broadcast module. After compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the hours, minutes and seconds respectively, using keys to cleared , to calibrating time. And on time alarm and clock for digital clock.Keywords:digital clock,hardware description language,Verilog HDL,FPGA目录第一章绪论1.1.选题意义与研究现状在这个时间就是金钱的年代里,数字电子钟已成为人们生活中的必需品。
Verilog 程序设计报告一、课题概述:任务:本实验主要完成8位比较器、分频器、阻塞赋值和非阻塞赋值的区别、8路的数据选择器、有限状态机的设计。
目的:通过实验掌握基本组合逻辑电路、时序逻辑电路的实现流程;条件语句及case语句的用法;在实验中认识阻塞赋值和非阻塞赋值的区别;能够设计出简单的有限状态机。
要求:熟练掌握verilog的基本语法知识和一些基本语句的用法。
二、设计思路及采取方案思路:(1)8位比较器可以用数据流描述方法(assign赋值语句)或行为描述方法(always语句)或结构描述方法(元件例化)实现。
(2)分频器可以采用if…else语句或case语句实现。
(3)阻塞赋值和非阻塞赋值的区别可以通过观察波形图及分析综合出的电路图来得到。
(4)8位数据选择器可以采用assign赋值语句及always语句实现。
(5)有限状态机可以采用case语句实现。
方案:(1)8位的比较器采用assign赋值语句实现。
(2)用if…else条件语句实现分频器的设计。
(3)通过观察波形图,得出利用阻塞赋值和非阻塞赋值设计电路的特点和区别。
(4)利用always语句实现8位数据选择器。
(5)利用case语句完成有限状态机的设计。
三、实验结果结果:我基本完成以上的5个任务,并且通过这些任务的完成,巩固了已经学过的知识,提高了自己的动手操作能力,坚定了继续学习的信心。
四、实验体会体会:第一次接触学习硬件编程语言,感受到verilog与软件编程语言有着许多显著的差别,最重要的是用verilog可以编出并行执行的程序,通过不断的学习和实践,习惯了用硬件结构思路编程,由于一些细节把握不到位,在设计中出现了许多错误;像进程赋值语句声明寄存器变量时格式出错、begin-end声明语句没有注意相互匹配、在声明语句的末尾忘了写上分号等等。
编译不成功时,我会不厌其烦的去查找错误,直至编译成功、满足题目的要求。
通过实验不仅巩固了已经学过的知识而且加强了自己的动手操作能力,为以后的考研及工作打下了基础。
湖北大学物电学院EDA课程设计报告(论文)题目:多功能数字钟设计专业班级: 14微电子科学与工程*名:**时间:2016年12月20日指导教师:万美琳卢仕完成日期:2015年12月20日多功能数字钟设计任务书1.设计目的与要求了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解2.设计内容1,能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开;2,能用按键调时调分;3,能整点报时,到达整点时,蜂鸣器响一秒;4,拓展功能:秒表,闹钟,闹钟可调3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩在规定时间内,完成叙述并回答问题。
目录(四号仿宋_GB2312加粗居中)(空一行)1 引言 (1)2 总体设计方案 (1)2.1 设计思路 (1)2.2总体设计框图 (2)3设计原理分析 (3)3.1分频器 (4)3.2计时器和时间调节 (4)3.3秒表模块 (5)3.4状态机模块 (6)3.5数码管显示模块 (7)3.6顶层模块 (8)3.7管脚绑定和顶层原理图 (9)4 总结与体会 (11)多功能电子表摘要:本EDA课程主要利用QuartusII软件Verilog语言的基本运用设计一个多功能数字钟,进行试验设计和软件仿真调试,分别实现时分秒计时,闹钟闹铃,时分手动较时,时分秒清零,时间保持和整点报时等多种基本功能关键词:Verilog语言,多功能数字钟,数码管显示;1 引言QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。
利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然2 总体设计方案2.1 设计思路根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。
基于FPGA的数字时钟设计设计设计(论文)题目:基于FPGA的数字时钟设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日摘要随着科学技术的飞速发展,系统向着高速度、低功耗、低电压和网络化、移动化方向发展,各个领域对电路的要求越来越高,传统单一功能的电路很难满足发展的要求,而可编程逻辑器件(CPLD/FPGA)可以很方便地通过对逻辑结构的修改和配置,完成对系统和设备的升级。
一、8位数字显示的简易频率计设计要求:①能够测试10Hz~10MHz方波信号;②电路输入的基准时钟为1Hz,要求测量值以8421BCD码形式输出;③系统有复位键;④采用分层次分模块的方法,用Verilog HDL进行设计。
⑤写出测试仿真程序1.设计原理频率计的原理即测量给定信号每秒钟脉冲个数,则系统时钟宽度应为2s,通过分频模块将基准时钟进行二分频实现;当系统时钟高电平时计数模块开始计数,低电平时清零;之后将结果存入锁存模块使其稳定显示。
2.设计方案该频率计由分频模块,计数模块,锁存模块和顶层模块构成,其中:1)分频模块(FC_div):由于基准时钟(clk_d)频率为1Hz,高电平宽度为0.5s,因此通过一个二分频模块得到一个频率为0.5Hz,高电平宽度为1s的时钟(clk_out),并作为计频器的系统时钟。
2)计数模块(FC_counter):频率计核心模块,在接入的系统时钟(clk_c)处于高电平时对输入信号(freq_in)的上升沿进行计数,从而测得输入信号的频率。
由于要把测量值以8421BCD码输出,且量程上限为10MHz。
因此程序内采用8个4位寄存器分别从低到高地按位存储测量值,最后再按位排列输出一个32位的BCD 码序列(CT)。
3)锁存模块(FC_latch):将计数模块输出的结果存储以稳定显示。
4)顶层模块(FC_top):将各模块连接实现计频器。
3.程序代码1)分频模块module FC_div(clk_d,rst_d,clk_out);input clk_d,rst_d;output clk_out;reg clk_out;always@(posedge clk_d or negedge rst_d)beginif(rst_d==0)clk_out<=0;elseclk_out<=~clk_out;endendmodule2)计数模块module FC_counter(clk_c,freq_in,CT);input clk_c;input freq_in;output [31:0] CT;reg [31:0] CT;reg [3:0] C0,C1,C2,C3,C4,C5,C6,C7;always@(posedge freq_in)beginif(!clk_c)beginC0<=0;C1<=0;C2<=0;C3<=0;C4<=0;C5<=0;C6<=0;C7<=0;endelsebeginif(C0!=4'b1001)C0<=C0+1;elsebeginC0<=0;if(C1!=4'b1001)C1<=C1+1;elsebeginC1<=0;if(C2!=4'b1001)C2<=C2+1;elsebeginC2<=0;if(C3!=4'b1001)C3<=C3+1;elsebeginC3<=0;if(C4!=4'b1001)C4<=C4+1;elsebeginC4<=0;if(C5!=4'b1001)C5<=C5+1;elsebeginC5<=0;if(C6!=4'b1001)C6<=C6+1;elsebeginC6<=0;if(C7!=4'b1001)C7<=C7+1;elseC7<=0;endendendendendendendendassign CT={C7,C6,C5,C4,C3,C2,C1,C0};endendmodule3)锁存模块module FC_latch(freq,Cl,Rl);input freq;input [31:0] Cl;output [31:0] Rl;reg [31:0] Rl;always@(negedge freq)Rl<=Cl;Endmodule4)顶层模块module FC_top(clk,rst,Freq_in,Nt);input clk,rst;input Freq_in;output [31:0] Nt;wire c0;wire [31:0] w0;FC_div d(.clk_d(clk),.rst_d(rst),.clk_out(c0));FC_counter c(.clk_c(c0),.freq_in(Freq_in),.CT(w0));FC_latch l(.freq(Freq_in),.Cl(w0),.Rl(Nt));Endmodule5)测试程序`timescale 100ns/1ns;module FC_top_test;reg clk,rst;reg Freq_in;wire [31:0] Nt;initialbeginclk=0;rst=0;Freq_in=0;#4999 rst=1;#500000$stop();endalways #50000 clk=~clk;always #5 Freq_in=~Freq_in;FC_top t(.clk(clk),.rst(rst),.Freq_in(Freq_in),.Nt(Nt));Endmodule4.仿真测试如测试程序所示,取时间单位为100ns,精度为1ns,为方便起见,定义此基准时钟为1Hz,则待测信号频率为10kHz。
在SystemVerilog 中,时钟(clk)通常是通过模块的输入端口传递的,并在模块内部用于驱动时序逻辑。
下面是一个简单的例子,展示了如何定义一个时钟信号,并在一个始终块中使用它来驱动一个寄存器:```systemverilogmodule my_module (input logic clk, // 时钟输入input logic reset_n, // 异步复位(低有效)input logic data_in, // 数据输入output logic data_out // 数据输出);// 使用always_ff块定义时序逻辑always_ff @(posedge clk or negedge reset_n) beginif (!reset_n) begin// 当复位信号为低时,将输出寄存器清零data_out <= 0;end else begin// 在时钟上升沿,更新输出寄存器data_out <= data_in;endendendmodule```在上面的代码中,`clk` 是模块`my_module` 的一个输入端口。
在`always_ff` 块中,我们指定了`posedge clk` 来表明我们想要在`clk` 的上升沿触发行为。
此外,我们还使用`negedge reset_n` 来表明希望在`reset_n` 信号的下降沿触发异步复位行为。
在`always_ff` 块内部,我们使用非阻塞赋值(`<=`)来确保正确的时序行为。
此外,如果需要生成一个时钟信号,可以使用`initial` 和`always` 块来创建一个简单的时钟生成器:```systemverilogmodule clk_generator (output logic clk // 定义输出的时钟信号);// 初始化时钟信号为0initial clk = 0;// 使用always块生成时钟波形always #5 clk = ~clk; // 假设时钟周期为10时间单位,这里每5时间单位翻转一次endmodule```在这个例子中,`#5` 指的是延时5个时间单位,这意味着每5个时间单位,时钟信号`clk` 的值会翻转。