1、 EDA 设计可分为 系统级、电路级和物理实现级。用 VHDL 语言开发的流程 :(1 文本编辑:用任何文本编辑器都可以进行, 也可以用专用的 HDL 编辑环境。 通常 VHDL 文件保存为 .vhd 文件。(2 功能仿真:将文件调入 HDL 仿真软件进行功能仿真, 检查逻辑功能是否正 确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完 成以后,进行时序仿真。(3 逻辑综合:将源文件调入逻辑综合软件进行综合, 即把语言综合成最简的 布尔表达式和信号的连接关系。逻辑综合软件会生成 .edf (edif 的 EDA 工业标准文件。(4布局布线:将 .edf 文件调入 PLD 厂家提供的软件中进
2、行布线,即把设计 好的逻辑安放到 PLD/FPGA内。(5编程下载:确认仿真无误后,将文件下载到芯片中。本设计为一个多功能的数字钟,具有时、 分、秒计数显示功能,以 24小时 的循环计数:具有校对功能。 本设计采用 EDA 技术, 以硬件描述语言 VHDL 为系 统逻辑描述手段设计文件, 在 Quartus 工具软件下, 采用自顶向下的设计方 式,由各个基本模块共同构建了一个基本 FPGA 的数字钟。系统主芯片采用 EP2C70F896C6,有时钟模块、控制模块、计时模块、数据 译码模块、显示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻 辑器件上下载验证,本系统能够完成时、分、秒的分
3、别显示,由按键输入进行 数字钟的校时、清零、启停功能。随着电子技术的发展,数字电路朝着速度快、容量大、体积小、重量轻的 方向发展。人们对时间计量的精度要求越来越高,钟表的数字化给人们生产生 活带来了极大的方便。数字钟是一种用数字电路技术实现时、分、秒计时的装 置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更 长的使用寿命,因此得到了广泛的使用。本次设计以数字电子为主, 实现对时、 分、 秒数字显示的计时装置 , 周期为 24小时,显示满刻度为 23时 59分 59秒,并具有校时功能和报时功能的数字 电子钟。课程设计所采用的开发平台:Quartus II 是可编程片上系统的综
4、合性 设计环境,它支持 CPLD 和 FPGA 器件的开发。 FPGA (Field Programmable Gate Array 现场可编程门阵列, 内部主要由许多可编程逻辑模块组成, 靠纵横交错 的分布式可编程互连线连接起来,可构成极其复杂的逻辑电路。本次课程设计 所采用的 FPGA 芯片 Cyclone II系列的 EP2C70F896C6。2.2工作原理及系统框图利用数字电子技术、 EDA 设计方法、 FPGA 等技术,设计、仿真并实现一个 基于 FPGA 的数字电子时钟基本功能, 其基本组成框图如图 1所示, 振荡器采用 ALTERA 的 DE2-70实验板的 50MHz 输出,分
5、频器将 50MHz 的方波进行分频进而 得到 1Hz 的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六 十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。电子 时钟扩展功能为倒计时流水灯。数字电子钟的电路组成框图片如下图 :图 15 系统框图1. 数字钟电路系统由主体电路和扩展电路两大部分所组成。2. 数字电子时钟电路具有时、分、秒计时,秒计数器计满 60后向分计数器进 位,分计数器计满 60后向小时计数器进位,小时计数器按照“ 24进制”规律 计数。3. 准确计时, 以数字形式显示时、 分、秒的时间,计数器的输出经译码器送显 示器。4. 具有分、时校正功能,校正输入
6、脉冲频率为 1Hz5. 复位功能,时、分、秒计时清零。6. 扩展功能为:具有仿广播电台整点报时的功能,即每逢 59分 51秒、 52秒、 53秒、 54秒、 55秒及 57秒, LED 绿灯依此点亮, 59分 59秒时, LED 红灯亮, 形成倒计时流水灯报时。三.软件方案3.1 程序流程图3.1.1 24进制小时采用 24进制计时,当 CP , EN 和 nCR 为高电平时计数,计数范围为 0,23, 使能信号 EN 等于 0时, 计时器保持。 当高位大于 2或高位等于 2且低 位大于 3时,计时器清零,否则继续计时。流程图见下图。图 16 24进制程序流程图3.1.2 10进制流程图当 C
7、P , EN 和 nCR 为高电平时计数, 计数范围为 0,9, 使能信号 EN 等于 0时,计时器保持。当计时到 9的时候,计时器清零,否则继续计时。流程图 见下图。图 17 10进制流程图3.1.3 6进制当 CP , EN 和 nCR 为高电平时计数, 计数范围为 0,5, 使能信号 EN 等于 0时,计时器保持。当计时到 5的时候,计时器清零,否则继续计时。图 18 6进制流程图3.1.4 60进制分、秒采用 60进制计时,当 CP , EN 和 nCR 为高电平时计数,计数范围 为 0,59,使能信号 EN 等于 0时,计时器保持。当个位等于 9时向十位进位; 当个位等于 9十位等于
8、 5,计时器清零,否则继续计时。图 19 60进制流程图3.1.5 from0to9数码管有 7段组成,分共阳极和共阴极,本次设计采用共阳极数码管。当 输入为低电平时,数码管显示;当输入为高电平时,数码管不显示。用这样的 方法输入不同的高低信号控制数码管的显示。图 20 from0to9流程图3.1.6 分频模块图 21 分频模块流程图3.1.7 总流程图图 22 总流程图3.2 程序清单3.2.1头文件 complete_clock程序module complete_clock(HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,_50MHzIn,_1Hz,_50Hz, _5KHz,
9、_500KHz,AdjMinkey,AdjHrkey,nCR,Alarm,LED0,LED10,LED3,LED4,LED5,LED6,LED 7,LED8,LED9 ;output 7:0 HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;output Alarm,_1Hz,_50Hz,_5KHz,_500KHz;output LED0;output LED10;output LED3;output LED4;output LED5;output LED6;output LED7;output LED8;output LED9;wire 7:input nCR,_50MHzIn;w
10、ire _1Hz,_50Hz,_5KHz,_500KHz;wire LED0;wire LED10;wire LED3;wire LED4;wire LED5;wire LED6;wire LED7;wire LED8;wire LED9;input AdjMinkey,AdjHrkey;0 Second,Minute,Hour;Divided_Frequency C1(_5KHz,_500KHz,nCR,_50MHzIn;/调用分频模块,输入 50MHz 的 频率,经两次分频后变为 5KHz Divided_Frequency U0(_1Hz,_50Hz,nCR,_5KHz;/调用分频模块,
11、输入 5KHz 的频率,经 两次分频后变为 1Hztop_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey;/调用校时模块, 对时、 分模块进行校时 baoshi U2(Alarm_Ring,Minute,Second,_50Hz,_5KHz;assign Alarm=Alarm_Ring;assign LED0=(Minute,Second=16h5951;/定义 LED0为 59分 51秒时灯亮assign LED10=(Minute,Second=16h5952;/定义 LED10为 59分 52秒时灯亮assign LED3
12、=(Minute,Second=16h5953;/定义 LED3为 59分 53秒时灯亮assign LED4=(Minute,Second=16h5954;/定义 LED4为 59分 54秒时灯亮assign LED5=(Minute,Second=16h5955;/定义 LED5为 59分 55秒时灯亮assign LED6=(Minute,Second=16h5956;/定义 LED6为 59分 56秒时灯亮assign LED7=(Minute,Second=16h5957;/定义 LED7为 59分 57秒时灯亮assign LED8=(Minute,Second=16h5958;/
13、定义 LED8为 59分 58秒时灯亮assign LED9=(Minute,Second=16h5959;/定义 LED9为 59分 59秒时灯亮 from0to9 U10(HEX0,Second3:0; /个位秒调用译码from0to9 U9(HEX1,Second7:4; /十位秒调用译码from0to9 U3(HEX2,Minute3: /个位分调用译码from0to9 U4(HEX3,Minute7:from0to9 U5(HEX4,Hour3: /个位时调用译码from0to9 U6(HEX5,Hour7: /十位时调用译码endmodule3.2.2 counter24程序mod
14、ule counter24(CntH,CntL,nCR,EN,CP;input CP,nCR,EN;output 3:0 CntH,CntL;reg 3:always (posedge CP or negedge nCRbeginif(nCR CntH,CntL=8h00;/当 nCR=0时,计时器清零else if(EN CntH,CntL2|(CntH9|(CntH=2&(CntL=3CntH,CntLelse if(CntH=2&(CntL3begin CntH=CntH;CntL=CntL+1b1;endelse if(CntL=9=CntH+1=4b0000;elseEndmodul
15、e3.2.3 counter60程序module counter60(Q1,Q2,Q3,Q4,Q5,Q6,Cnt,Cnt1,Cnt24,nCR,EN,CP,LED,LED1,LED2; input CP,nCR,EN;0 Cnt;0 Cnt1;0 Cnt24;output 6:0 Q1;0 Q2;0 Q3;0 Q4;0 Q5;0 Q6;output LED;output LED1;output LED2;wire 6:wire LED;wire LED1;wire LED2;wire ENP;wire ENP1;wire ENP2;wire ENP3;counter10 UC0(Cnt3:0,
16、nCR,EN,CP;counter6 UC1(Cnt7:4,nCR,ENP,CP;counter10 UC2(Cnt13:0,nCR,ENP1,CP;counter6 UC3(Cnt17:4,nCR,ENP2,CP;counter24 UC4(Cnt247:4,Cnt243:0,nCR,ENP3,CP;assign ENP=(Cnt3:0=4h9;assign ENP1=(Cnt=8h59;assign ENP2=(Cnt13:h9&(Cnt=8assign ENP3=(Cnt1=8h59&assign LED=CP;assign LED1=CP;assign LED2=CP;from0to9
17、 UC5(Q1,Cnt3:from0to9 UC6(Q2,Cnt7:from0to9 UC7(Q3,Cnt13:from0to9 UC8(Q4,Cnt17:from0to9 UC9(Q5,Cnt243:from0to9 UC10(Q6,Cnt247:3.2.4 from0to9程序module from0to9(HEX,D;0 HEX;input 3:0 D;reg 6:always (Dcase(D4d0:HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6=7b0000001; 4d1:b1001111;d2:b0010010;d3:b0000110;d4:b1001100
18、;d5:b0100100;d6:b0100000;d7:b0001111;d8:b0000000;d9:b0000100; default:b1111111; endcase3.2.5 counter6程序module counter6(Q,nCR,EN,CP;0 Q;if(nCR Qelse if(EN Q=Q;else if(Q=4b0101 Qelse Q=Q+1/计时器正常计时3.2.6 counter10程序module counter10(Q,nCR,EN,CP;b1001 Q3.2.7 分频程序module Divided_Frequency(_1HzOut,nCR,_5kHzI
19、N;input _5kHzIN,nCR;output _1HzOut;supply1 Vdd;/定义 Vdd 是高电平wire 15:/计时器的输出信号 (中间变量 wire EN1,EN2,EN3;/ 计时器的使能信号 (中间变量 counter10 DU0(Q3:0,nCR,Vdd,_5kHzIN;/调用十进制counter10 DU1(Q7:4,nCR,EN1,_5kHzIN;counter10 DU2(Q11:8,nCR,EN2,_5kHzIN;counter10 DU3(Q15:12,nCR,EN3,_5kHzIN;assign EN1=(Q3:assign EN2=(Q7:4=4(
20、Q3:assign EN3=(Q11:8=4(Q7:assign _1HzOut=Q15;/assign _500HzOut=Q0;3.2.8 校时模块程序module top_clock(Second,Minute,Hour,_1Hz,nCR,AdjMinKey,AdjHrkey;input _1Hz,nCR,AdjMinKey,AdjHrkey;0 Hour,Minute,Second;wire MinCP,HrCP;counter60 UT1(Second,nCR,Vdd,_1Hz;/调用 counter60,对秒计时counter60 UT2(Minute,nCR,Vdd,MinCP;
21、/ 调用 counter60,对分校时counter24 UT3(Hour7:4,Hour3:0,nCR,Vdd,HrCP;/调用 counter24,对时校时assign MinCP=AdjMinKey ? _1Hz:(Second=8/当 MinCP=AdjMinKey时,执行校时,当 MinCP AdjMinKey 时, 秒计时至 59 时向分进位assign HrCP=AdjHrkey?_1Hz:(Minute,Second=16/当 HrCP=AdjHrkey时,执行校时,当 HrCP AdjHrkey 时,分秒计时至 59分 59秒时向时进位 Endmodule四.调试及结果4.1 模块仿真4.1.1 counter10模块仿真CP 为时钟脉冲;当 CP , EN 和 nCR 为高电平时 Q 计数; Q的计
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1