版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告课程名称:指导老师:学生姓名:学 号:专业班级:EDA技术实用教程通信工程134班2015年12月7日实验一、全加器设计实验实验二、模可变计数器设计实验实验三、序列信号发生和检测器设计实验实验四、交通灯控制器设计实验实验五、多功能数字钟设计实验实验六、出租车计费器设计实验 本课程总结亠、全加器设计实验(一) 实验目的1、 熟悉建立文件夹和建立工程的整个过程。2、 学会建立波形文件。3、 学会将文件下载到板子上。(二) 设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变 计数器功能,具体要求如下:1、利用书上的程序,完成实验目的,实现两个一位二进制数的相加,
2、并将进位 输出。(三) 主要仪器设备1、 微机1台2、Quartusll集成开发软件1套3、EDA实验装置1套(四) 实验思路由于要用到例化语句,所以需要将文件都放在一个文件夹里然后创建工程。选择文件夹和名称。添加文件Add Files |ge 2 of 5寻疋t the一 二弓p问口 齐酥!怀 計幽i曲in thr pi-aMT-,口i衣4del Jhjl sad III*壬彳严fih* n (hrRT创严叶日f erary汨 需*pejrtNek:wu an*碎*dd尢目那 宙盂F 穴m“尊Fjc rwit;恳中京Typt Ubw 号加知门引和拆 nlhe 阳 Tgl 晦 n-banj .
3、pecrH ihe palii nances讲any nDri-deBflull FbrwiesLM-Lt-HII.CCT 伽忡 _.甲 ub: de-ICE SCIECIHCb / dieFter二 s&eJflc二己心itteced 汩九 aiabfc dioe Itt fly a toe谢佶;New Project Wizardvtert_.HDLWQOePultPeitih:选择实验室用的芯片New Project WizardFamily & Device Settings paqc 3 of 5detect Si? E 丁 and ckvlce yiu 風 am m
4、 它 rgetWimptatjcr .伽 ran httd addlaiai deukx smpert Mi tie EiEtdl Devics onnml on DielDsois rrenu.Soncaon d&gcanedCarralEmbedded multiplier与bit cJemci.初idnIhM習臥 tCubut哆 out工口:CutoutQJput然后对输入信号进行赋值,赋值为周期性信号。编译后保存.wknNode Finder仿真后效果如下将程序烧入板子如下(六)实验总结因为这个是第一次进EDA实验室,对软件硬件都不了解。遇到很多的简单问题,也就是操作上的不熟练
5、。对照书本上的步骤一步一步操作, 才能完成。真应该加 强动手能力。通过这次实验理解了全加器的原理和例化语句的使用,初步对EDA实验产生了兴趣。二、模可变计数器设计(一) 实验目的1、进一步熟悉实验装置和QuartusH软件的使用;2、进一步熟悉和掌握EDA设计流程;3、学习简单组合、时序电路的EDA设计;4、学习计数器中二进制码到BCD码的转换技巧;5、学习实验装置上数码管的输出方法。(二) 设计要求 完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可 变计数器功能,具体要求如下:1、设置一个按键控制改变模值, 按键按下时模为10-99之间(具体数值自行 确定)的数,没按下
6、时模为1 00- 1 99之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。(三) 主要仪器设备1、微机1台2、QuartusII集成开发软件1套3、EDA实验装置1套(四) 实验思路 总体程序如下module jishuqi (CLK,rst,M,SG,en,q,d);input CLK,rst,en;input M;output SG; reg7:0 cnt;reg clk1;reg7:0 SG;reg sel;output reg11:0 q; reg11:0 model;reg3:0 a;output reg d; wire3:0 gw,sw,bw;assign gw3
7、:0=q3:0;assign sw3:0=q7:4;assign bw3:0=q11:8; always (M)if (M) model=12b000000110000; else model=12b000100000000;always (posedge CLK) begincnt=cnt+1;if (cnt=200)beginclk1=1b1;cnt=0;endelse clk1=1b0;if (sel2) sel=sel+1;else sel=0;endalways (posedge CLK or negedge rst)beginif(!rst)q=0;elseif(en) begin
8、 if(qmodel) beginif (gw=9) begin q=q+7;if (sw=9) q=q+96; endelse q=q+1; endelse q=0;endendalways (q)beginif(qmodel) d=0;else d=1;endalways (sel)begincase (sel)0: a=bw;1: a=sw;2: a=gw;default: a=0;endcasecase (a)0:SG=8b00111111; 1:SG=8b00000110;2:SG=8b01011011; 3:SG=8b01001111;4:SG=8b01100110; 5:SG=8
9、b01101101;6:SG=8b01111101; 7:SG=8b00000111;8:SG=8b01111111; 9:SG=8b01101111;default: SG=8b11111111;endcaseendendmodule分频模块分频模块由时钟频率的分频作为计数脉冲,每200个系统脉冲有一个技术脉冲, 同时可以利用系统脉冲进行循环选择SEL来进行循环扫码。程序如下always (posedge CLK)begincnt=cnt+1;if (cnt=200)beginclk1=1b1;cnt=0;endelse clk1=1b0;if (sel2) sel=sel+1;else s
10、el=0;选择模块由M选择,M为1时模是30,M为0时模为100。always (M)if (M)model=12b000000110000;else model=12b000100000000;计数模块计数模块如下,由于q为16进制数,我们需要的输出为BCD码,故进行调整。 平常时q来一个脉冲加1,当加到个位为9时,也就是1001,将其加7变为16也就是0,实现了个位由9到0的BCD计数,同时也会向十位进1。当十位和个 位同时,为9时,q位加96也就是十位加6,再加上个位向十位进的1就是加7, 十位会清零同时个位也会清零,同时向百位进1,实现了正常的十进制BCD码 计数。Rst则为清零信号,
11、en为使能信号。always (posedge CLK or negedge rst)beginif(!rst)q=0;elseif(en) beginif(qmodel)beginif (gw=9) begin q=q+7;if (sw=9)q=q+96; endelse q=q+1; endelse q=0;endEnd当计数到顶后有个标志位d标志是否计到顶。always (q)beginif(qmodel) d=0;else d=1;end循环扫码模块如下,由于sei的变化频率和系统时钟相同,所以肉眼辨别不出来 在跳动,可以通过其分别选择数码管并将个位十位百位呈现在数码管上, 同时配 有
12、译码程序。always (sel)beg incase (sel)0: a=bw;1: a=sw;2: a=gw;default: a=0;endcasecase (a)0:SG=8b00111111; 1:SG=8b00000110;2:SG=8b01011011; 3:SG=8b01001111;4:SG=8b01100110; 5:SG=8b01101101;6:SG=8b01111101; 7:SG=8b00000111;(五)实验截图仿真时用CLK代替分频频率便于观察总体图Rst可以实现计数的清零良並丹占垄莊)g期眶住)5 二I制辱rtesfTrre So-;ops* FoiitCT
13、; 122.06 mIhbrT 22.09nz当M为1时实现了模30的计数,同时标志位为1当M为0时实现了模100的计数,同时标志位为1使能信号en为0时计数保持不变(六)实验总结 初步进行了自己设计程序和仿真一系列工作, 加深了对设计过程和语句使用的理 解。进而对软硬件的操作使用都有了进一步的熟练, 遇到的基础问题也能想办法UFJTiw fiar:3既F3PELKBOOL 111!.:r KfliiiJgfl*鬓越SJd* H.HUt焉冒 gflf.Uhtt轉忡鼻讯冲* 汕M朋Ji ZLXtua住黑 HF3.I11bibtl1iK11-LrprT_r4rt_ri_ri_LT_LrLn_rT4
14、_U_i_rLTUrLrUn_rLjL-(- iir tji?nr iX i :i:X】【1丁丁片叩:n;| Q】!:需:忙丁 / ::T吠-斤in:-inir鼬:-TI: *(111111M7 IMOYMInbariAd宾13iK去解决了,不像第一次那样手足无措了。语法语句也大概有了了解。二、序列信号发生和检测器设计(一) 实验目的1、进一步熟悉EDA实验装置和QuartusH软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。(二) 设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能
15、,具体要求如下:1、先用设计01110110110010010(序列信号发生器,其最后6BIT数据用LED显示出来;2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“110110则输出为“1”否则输出为“0”(三)主要仪器设备1、 微机2、QuartusII集成开发软件3、EDA实验装置1台1套1套(四)实验思路首先画出状态转移图览廻4列llo 0总体程序如下module xulieji2(clk,rst,en,date,SOUT);parameter s0=1,s1=2,s2=3,s3=4,s4=5,s5=6,s6=7;input clk,rst,en;output date
16、,SOUT;wire SOUT;reg8:0 cnt;reg6:0 ST,NST;reg5:0 date; reg16:0 sdate;assign SOUT=(NST=s6);always ( posedge clk or negedge rst )beginif(!rst) beginST=s0;date=6b000000;sdate=17b011101101100100100;cnt=16;endelse if(en) beginST=NST;date5:1=date4:0; date0=sdatecnt;cnt=cnt-1;endelse cnt=0;case(ST)s0: begin
17、 if(date0=1b1)NST=s1;else NST=s0;end s1: beginif(date0=1b1) NST=s2;else NST=s0;end s2: begin if(date0=1b0)NST=s3;else NST=s2;end s3: begin if(date0=1b1) NST=s4;elseNST=s0;end s4: begin if(date0=1b1) NST=s5;else NST=s0;ends5: begin if(date0=1b0)NST=s6;else NST=s2;end s6: beginif(date0=1b0) NST=s0;els
18、e NST=s4;end default: NST=s0;endcase endendmodule这里用到了状态机技术,状态机可以方便的设置程序满足什么条件然后去往什么状态,利用状态机可以实现检测到110110时的状态,同时可以在不满足时准确的调往正确的状态以便于下一步的判断。状态机简写为FSM(Fi nite State Mach in e)主要分为2大类:第一类,若输出只和 状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关 而且和输入有关系,则称为Mealy状态机。要特别注意的是,因为Mealy状态 机和输入有关,输出会受到输入的干扰,所以可能会产生毛刺(Glitc
19、h)现象, 使用时应当注意。事实上现在市面上有很多EDA工具可以很方便的将状态图的 描述转换成可以综合的程序代码。状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出 于对状态机的内在因果关系的考虑。 “现态” 和“条件”是因,“动作”和“次态” 是果。详解如下:1现态:是指当前所处的状态。2条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一 次状态的迁移。3动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可 以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作, 直接迁移到新状态。4次态:条件满足后要迁往的新状态。“次态”
20、是相对于“现态”而言的,“次态” 一旦被激活,就转变成新的“现态”了。赋值模块parameter s0=1,s1=2,s2=3,s3=4,s4=5,s5=6,s6=7;input clk,rst,en;output date,SOUT;wire SOUT;reg8:0 cnt;reg6:0 ST,NST;reg5:0 date;reg16:0 sdate;assign SOUT=(NST=s6);si到s6为状态机的不同状态,elk为控制序列输入的信号,rst为清零信号,en为使能信号,SOUT为检测到序列110110时的输出信号1,ent为控制哪一位数 据进行检测的数,ST和NST为状态机现
21、在的状态和下一时刻将要到来的状态,date为检测到的6为数据,sdate为输入序列,当检测到状态为s6时,通过assign SOUT=(NST=s6)可以让SOUT输出为1.输入序列模块always ( posedge elk or negedge rst )beginif(!rst) beginST=s0;date=6b000000;sdate=17b011101101100100100;ent=16;endelse if(en) beginST=NST;date5:1=date4:0;date0=sdateent;ent=ent-1;endelse ent=0;Clk为序列输入信号,rst
22、为清零信号,rst为低电平时将初始状态设为sO,初始6位待检测数据为000000,17位输入序列为011101101100100100,先从最高位从左往右输入,所以ent开始时为16。en为使能信号,当en为1时可以将下一状 态NST赋予现在状态ST,同时将序列进行移位, 待检测信号进行输入, 同时ent减1指向下一数据。如果en为0,则保持现在的状态不进行工作。状态转移模块case(ST)s0:begin if(date0=1b1) NST=s1;else NST=s0;ends1:begin if(date0=1b1) NST=s2;else NST=s0;e nds2:begin if(
23、date0=1b0) NST=s3;else NST=s2;e nds3:begin if(date0=1b1) NST=s4;else NST=s0;e nds4:begin if(date0=1b1) NST=s5;else NST=s0;e nds5:begin if(date0=1b0) NST=s6;else NST=s2;e nds6:begin if(date0=1b0) NST=s0;else NST=s4;e nddefault: NST=s0; en dcase end=+ TtB 137UEU.L74J1EWllMlEn dmodule通过这个状态转移语句可以正确的实现检
24、测到110110便可使状态到达s6,即便序列为110110110时也是可以的,原理附状态转移图。(五)时序仿真ISat w:IUH17.ILULUIZLIL耘可以清楚的看出,当检测到110110序列时sout便为1,即便是连续的110110110也可以检测出来,证明了这个程序的正确性。(六)实验总结要求画出状态转移图,我把书上的状态机部分仔细阅读,参考了书上的程序编写 了这个程序,一开始检查的时候不符合要求,后来检查是状态转移图弄错了,修 改之后进行仿真,便得到了正确的结果。状态机在EDA的程序设计中应用广泛。经过这次实验深刻掌握了状态机技术和状态转移图的画法,进一步激发了我对eda的兴趣。四
25、、 交通灯控制器设计(一) 实验目的1、学习与日常生活相关且较复杂数字系统设计;2、进一步熟悉EDA实验装置和QuartusH软件的使用方法;3、学习二进制码到BCD码的转换;(二) 设计要求 完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一 个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器 功能,具体要求如下:1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出
26、请求信号S=1,其余时间S=0;4、 平时系统停留在主干道通行(MGCR)状态,一旦S信号有效,经主道 黄灯4秒(MYCR)状态后转入乡间公路通行(MRCG)状态,但要保证主干道 通行大于一分钟后才能转换;5、 一旦S信号消失,系统脱离MRCG状态,即经乡道黄灯4秒(MRCY) 状态进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟;6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。(三)主要仪器设备1、微机1台2、QuartusII集成开发软件1套3、EDA实验装置1套(四)实验思路总体程序如下程序大体分为S=1与S=0的情况, 不同
27、情况对应不同处理方法, 每一次COUNTER均为0时根据S的1和0来改变数码管的计数的灯的情况,具体原理在注释中有。module jiaotong (S,clk,LED,COUNTER,LED1,sel);input clk;reg CPB;/时钟input S;/指明乡村路口是否有汽车的通行信号/信号灯的显示/显示时间的十位/数码的显示reg 5:0 LED;reg 7:0 COUNTER;reg 7:0 LED1;reg 35:0i;reg flag1;reg flag2;output 2:0 sel; reg 2:0sel;reg 3:0a;output 5:0 LED;output 7
28、:0 LED1;output 8:0 COUNTER;reg 7:0 cnt;initialbeginflag2=b0;flag1=b0;COUNTER7:0=D60;LED5:0=6b001100;/主干道是绿灯乡村道是红灯endalways (posedge clk)begin cnt=cnt+1;if (cnt=1000) begin CPB=1b1; cnt=0; endelse CPB=1b0;endalways (posedge clk)beginif (sel1) sel=sel+1; else sel=0;end /sel为数码管选择always (posedge clk)be
29、ginif(COUNTER3:0=4D0 & COUNTER7:4=4D0) /在数码管是60时判断 是否有信号s的出现beginif(S)S为1即乡村想中断的情况下beginif(LED5:0=6b001100) beginLED5:0=6b010100; /表示主干道是黄灯而乡村是红 灯COUNTER7:4=4D0;/显示的是4秒钟COUNTER3:0=4D4;endelse if(LED5:0=6b010100) /表示4秒钟过后的乡村开始通 路了beginLED5:0=6b100001; /表示主干道是红灯而乡村是绿 灯COUNTER7:4=4D2;/显示的是20秒钟COUNT
30、ER3:0=4D0;flag1=1b1;endbeginLED5:0=b100010; /表示主干道是红灯而 乡村是黄灯COUNTER7:4=4D0; /显示的是4秒钟COUNTER3:0=4D4;flag1=b0;endelse if(LED5:0=b100010) beginelse if(LED5:0=b100001)/表示20秒过后主干道通行LED5:0=b001100; /主干道是绿灯乡村道是 红灯COUNTER7:4=4D6; /显示的是60秒钟COUNTER3:0=4D0;endendelse/S为0即乡村不想中断的情况下beginif(LED5:0=b010100) /表示4秒
31、钟过后的乡村开始通路了beginLED5:0=b100001; /表示主干道是红灯而乡村是 绿灯COUNTER7:4=4D2; /显示的是20秒钟COUNTER3:0=4D0;flag1=1b1; /表示可以开始进行20秒的检查是否乡村endelse if(LED5:0=b100001) /表示20秒过后主干道可以通行 了beginLED5:0=b100010; /表示主干道是红灯而乡村 是黄灯COUNTER7:4=4D0; /显示的是4秒钟COUNTER3:0=4D4;flag1=b0;endelse if(LED5:0=b100010) /表示4秒过后主干道通行了beginLED5:0=b
32、001100; /表示主干道是绿灯而乡村 是红灯COUNTER7:4=4D6; /显示的是60秒钟COUNTER3:0=4D0;endelseif(LED5:0=b001100) beginflag2=b1; /60秒过后才可以让乡村中断主干道LED5:0=b001100;/主干道是绿灯乡村道是红灯COUNTER7:4=4D6; /再次显示60秒钟COUNTER3:0=4D0;endendendelsebeginif(S & (flag2=b1) /表示乡村道路有信号并且可以让乡村道路通行 了,乡村想中断beginLED5:0=b010100; /表示主干道是黄灯而乡村是红灯COUNT
33、ER7:4=4D0; /显示的是4秒钟COUNTER3:0=4D4;flag2=b0;endelse begin if(COUNTER3:0=4D0)/正常计数beginCOUNTER7:4=COUNTER7:4-4D1; COUNTER3:0=4D9;end elseCOUNTER3:0=COUNTER3:0-4D1; endend if(flag1=b1) begin/乡村不想绿灯了,想中断其20秒的绿灯if(!S) begin flag2=b0; flag1=b0; LED5:0=b100010; /表示主干道是红灯而乡村是黄灯COUNTER7:4=4D0; /显示的是4秒钟COUNTE
34、R3:0=4D4;endend end always (sel) begin case (sel)0: a=COUNTER7:4; /1数码管为十位1: a=COUNTER3:0; default:a=0;endcase case(a)0:LED17:0=b00111111;1:LED17:0=b00000110;2:LED17:0=b01011011;3:LED17:0=b01001111;4:LED17:0=b01100110;5:LED17:0=b01101101;6:LED17:0=b01111101;7:LED17:0=b00000111;8:LED17:0=b01111111;9:
35、LED17:0=b01101111; default: LED17:0=8b11111111;endcase end endmoduleoutput 8:0 COUNTER; /数码的显示reg 5:0 LED;reg 7:0 COUNTER;reg 7:0 LED1;reg 35:0i;reg flag1;reg flag2;reg 7:0 cnt;initialbeginflag2=b0;flag1=b0;COUNTER7:0=D60;LED5:0=6b001100;Clk为系统时钟1KHz,可以作为扫描频率,将其分频之后的CPB作为秒的计数 频率,S为乡道是否想中断主道的信号,sei为循
36、环扫描信号,LED为信号灯的 显示,LED1为显示时间的十位,COUNTER为时间数码的显示。Flag1和flag2的处理方法赋值模块input clk;reg CPB; input S;output 2:0sel;reg 2:0 sel;reg 3:0a;output 5:0 LED;output 7:0 LED1;/时钟/指明乡村路口是否有汽车的通行信号/信号灯的显示/显示时间的十位当flag为1即在乡道20秒运行的过程中才为1,这时配合语句if(flag1=b1)begin /乡村不想绿灯了,想中断其20秒的绿 灯if(!S)beginflag2=b0;flag1=b0;LED5:0=b
37、100010;/表示主干道是红灯而乡村是黄灯COUNTER7:4=4D0; /显示的是4秒钟COUNTER3:0=4D4;就是在这时一旦检测到S为0即乡道没车的时候,让乡道黄灯转入主道60秒的计时。当flag2为1即在主道60之后才为1,这时配合语句if(S & (flag2=b1)/表示乡村道路有信号并且可以让乡村道路通行了,乡村想中断beginLED5:0=b010100;/表示主干道是黄灯而乡村是红灯COUNTER7:4=4D0;/显示的是4秒钟COUNTER3:0=4D4;flag2=b0;End即S=1同时flag2为1时才可转入乡道的20秒计时。通过这两个信号正确地完 成需
38、要的功能。分频模块输出CPB为1秒的信号always (posedge clk)begin cnt=cnt+1;if (cnt=1000) begin CPB=1b1; cnt=0; endelse CPB=1b0;数码管扫描模块 循环扫码模块如下,由于sel的变化频率和系统时钟相同,所以肉眼辨别不出来 在跳动,可以通过其分别选择数码管并将个位十位百位呈现在数码管上, 同时配 有译码程序。always (sel) begincase (sel)0: a=COUNTER7:4; /1数码管为十位1: a=COUNTER3:0;default: a=0;endcase case(a)0:LED17
39、:0=b00111111;1:LED17:0=b00000110;2:LED17:0=b01011011;3:LED17:0=b01001111;4:LED17:0=b01100110;5:LED17:0=b01101101;6:LED17:0=b01111101;7:LED17:0=b00000111;8:LED17:0=b01111111;9:LED17:0=b01101111; default: LED17:0=8b11111111;endcaseenden dmodule(五)时序仿真总体图在主道开始60秒的计数过程中即使S为1也不会转入乡道运行在主道60秒计数结束后可以转入乡道的20
40、秒,在乡道的20秒过程中如果S为0则又返回主道计数这次实验是从EDA实验以来遇到的最复杂的代码,其中的if语句众多,而且嵌 套也多,开始的时候摸不到头脑,编译的时候在这些语句上也是出错最多了。 还 好有一定的代码基础,我就在此基础上进行了一些修改和改进, 仿真也非常的成 功,去实验室进行烧程序进板子的时候,也很快。所以,这次实验的验收也很快。 这也大大的促使我学习的动力,就想在下一次的实验中,学到更多。五、 多功能数字钟设计(一)实验目的1、学习综合且较复杂数字系统设计;2、学习多层次、多模块数字系统设计;3、学习数码管扫描显示电路设计;(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节
41、,在型EDA实验装置上由简单 到复杂实现多功能数字钟功能,具体要求如下:1、数码管扫描显示时、分、秒;2、具有正常计时和调时、调分、调秒等校时功能;3、经设置应具有整点报时功能;4、经设置应具有跑表功能;5、经设置应具有闹钟功能; 以下部分为扩展要求:6、音乐闹钟功能;7、液晶显示:年、月、日、时、分、秒、星期;8、自动闰年、闰月的万年历功能;(三)主要仪器设备1、微机1台2、QuartusII集成开发软件1套3、EDA实验装置1套(四)实验思路整个程序采用模块化的设计方法。基本计数模块整个程序采用BCD码计数,即每一位要显示的数据都用3位二进制数来表示。 根据设计要求, 技术模块应有模60,
42、模24和模100的计数,可以用模10的模6的和模24的三个模块通过例化元件一步步实现,而且计数模块应具有计数清零 和锁存的功能。模10通过使能端en完成计数和锁存ncr清零,cp为计数脉冲,Q为数据输出。modulecounter10(Q,nCR,EN,CP);input nCR,EN,CP;output 3:0 Q;reg 3:0 Q;always (posedge CP or negedge nCR)beginif (nCR) Q=4b0000;else if (EN) Q=Q;else if ( Q=4b1001) Q=4b0000;else Q=Q+1b1;endendmodule模6
43、原理与模10相同module counter6(Q,nCR,EN,CP);input nCR,EN,CP;output 3:0 Q;reg 3:0 Q;always (posedge CP or negedge nCR)beginif (nCR) Q=4b0000;else if (EN) Q=Q;else if ( Q=4b0101) Q=4b0000;else Q=Q+1b1;end endmodule模60通过例化模10和模6的元件,二者计数脉冲相同, 进位通过模6的使能段en在模10的为9的下一个脉冲时进行使能选通从而进位,否则锁存数据。module counter6(Q,nCR,EN
44、,CP);input nCR,EN,CP;output 3:0 Q;reg 3:0 Q;always (posedge CP or negedge nCR)beginif (nCR) Q=4b0000;else if (EN) Q=Q;else if ( Q=4b0101) Q=4b0000;else Q=Q+1b1;endendmodule模100与模60原理相同module counter100(Cnt,nCR,EN,CP);input nCR,EN,CP; output 7:0 Cnt;wire 7:0 Cnt;wire ENP;counter10 UC0(Cnt3:0,nCR,EN,C
45、P);counter10 UC1(Cnt7:4,nCR,ENP,CP);assign ENP=(Cnt3:0=4b1001); endmodule模24计数也分为高位和低位, 低位为9时下一个脉冲向高位进1同时低位清零,ncr为清零信号,en为使能信号完成计数和锁存,CP为计数脉冲,当满足高位 大于2或者低位大于9(实际不可能实现,只是让程序更严密)或者计数到23时,下一个脉冲清零,否则正常计数加1,从而完成模24的计数。module counter24(CntH,CntL,nCR,EN,CP);input nCR,EN,CP;output 3:0 CntH,CntL;reg 3:0 CntH
46、,CntL;always (posedge CP or negedge nCR) beginif (nCR) CntH,CntL=8h00;else if (EN) CntH,CntL2)|(CntL9)|(CntH=2)&(CntL=3) CntH,CntL=8h00;else if (CntH=2)&(CntL3) begin CntH=CntH; CntL=CntL+1b1; endelse if (CntL=9) begin CntH=CntH+1b1; CntL=4b0000; end else beginCntH=CntH; CntL=CntL+1b1; end e
47、ndEndmodule分频模块 输入为1KHz的信号,调用了三个模10的计数模块, 一个为10时作为下一个的 使能端信号从而让下一个模10模块进行计数,这样就可以通过二进制数计数时 个个位的变化规律进行分频获得想要的频率的脉冲信号,程序中获得了100HZ,500HZ,和1HZ的信号。module Divided_Frequency(_1HZOut,_500HZOut,nCR,_1KHZIn,_100HZ); inputnCR,_1KHZIn;output _1HZOut,_500HZOut,_100HZ;supply1 Vdd;wire 11:0 Q;wire EN1,EN2;counter1
48、0 DUO(Q3:0,nCR,Vdd,_1KHZIn); counter10DU1(Q7:4,nCR,EN1,_1KHZIn);counter10 DU2(Q11:8,nCR,EN2,_1KHZIn);assign EN1=(Q3:0=4h9);assign EN2=(Q3:0=4h9&Q7:4=4h9);assign _1HZOut=Q11;assign _500HZOut=Q0; assign _100HZ=Q3;endmodule主时钟模块 主时钟模块调用了两个模60和一个模24的基本计数模块,以完成正常的时钟计 数,当检测到有调时调分信号时便让分或时进位,否则秒为59的下一个脉
49、冲作 为分的计数信号使分进1,分为59同时秒为59时的下一个脉冲时作为时的计数 信号使时进1,用if语句实现。使能端则一直为1,计数脉冲接分频后的一秒。 用1KHZ的频率对计数进行扫描获得进位信号。module top_clock(Hour,Minute,Second,nCR,_1HZ,AdjMinKey,AdjHrKey,HZ); inputnCR,_1HZ,AdjMinKey,AdjHrKey,HZ;output 7:0 Hour,Minute,Second;wire 7:0 Hour,Minute,Second;supply1 Vdd;reg 7:0 MinCP,HrCP;counter
50、60 UT1(Second,nCR,Vdd,_1HZ); counter60 UT2(Minute,nCR,Vdd,!MinCP);counter24 UT3(Hour7:4,Hour3:0,nCR,Vdd,!HrCP); always(posedge HZ)begin if (AdjMinKey) MinCP=(Second=8h59); else MinCP=1b1;end always(posedge HZ)begin if (AdjHrKey) HrCP=(Minute,Second=16h5959); else HrCP=1b1;endEndmodule闹钟模块 设置了分和时的计数模
51、块, 调用了模60和模24的模块。为了消抖动, 脉冲技术 端接一秒的信号, 调时调分信号非后接使能段, 这样既可以正常计数又可以在不 用使能端时保持信号又可以消抖动。 然后设置了比较程序, 当主时钟的输出与闹 钟设置的相等而且闹钟ctrlbell为1时便输出闹钟结果,否则闹钟一直输出为0, 从而完成正常的功能。moduleBell(Alarn_Clock,Hour,Minute,Second,Set_Hr,Set_Min,SetHrKey,SetMinKey,_500HZ,_1KHZIn,_1HZ,CtrlBell);output Alarn_Clock; output 7:0 Set_Hr,
52、Set_Min;wire 7:0 Set_Hr,Set_Min;wire Alarn_Clock;input _500HZ,_1KHZIn,_1HZ;input SetHrKey,SetMinKey,CtrlBell;input 7:0 Hour,Minute,Second; supply1 Vdd;wire HrH_EQU,HrL_EQU,MinH_EQU,MinL_EQU;wire Time_EQU; counter60 SU1(Set_Min,Vdd,!SetMinKey,_1HZ);counter24 SU2(Set_Hr7:4,Set_Hr3:0,Vdd,!SetHrKey,_1HZ
53、);Comparator SU4(HrH_EQU,Set_Hr7:4,Hour7:4);Comparator SU5(HrL_EQU,Set_Hr3:0,Hour3:0);Comparator SU6(MinH_EQU,Set_Min7:4,Minute7:4);Comparator SU7(MinL_EQU,Set_Min3:0,Minute3:0); assignTime_EQU=(HrH_EQU & HrL_EQU & MinH_EQU & MinL_EQU);assign Alarn_Clock=CtrlBell ? Time_EQU:1b0; endmodul
54、emodule Comparator(EQU,A,B) ; input 3:0 A,B; output EQU; assign EQU=(A=B);endmodule秒表模块 秒表的输入脉冲为100Hz即1毫秒,调用了一个模100的计数模块和两个模60的计数模块。毫秒为99时下一个脉冲向秒进1,秒为59时同时毫秒为99时的 下一个脉冲向分进1,使能端进行计数与保持。清零端应该单独设置,否则会将 主时钟也清零了。用1KHZ的频率对计数进行扫描获得进位信号。module stopwatch(Minute,Second,haomiao,nCR,en,_100HZ,HZ); inputnCR,_100
55、HZ,en,HZ;output 7:0 Minute,Second,haomiao; wire 7:0 Minute,Second,haomiao; reg 7:0miaoCP,SECP;counter100 UT1(haomiao,nCR,en,_100HZ); counter60UT2(Second,nCR,en,!miaoCP); counter60 UT3(Minute,nCR,en,!SECP);always(posedge HZ)begin if (haomiao=8h99) miaoCP=(haomiao=8h99); elsemiaoCP=(haomiao=8h99);end
56、always(posedge HZ)begin if (Second,haomiao=16h5999) SECP=(Second=8h99);else SECP=(Second,haomiao=16h5999);end endmodule整点报时模块 只有当分为59切秒为55时,让报警信号输出时长为5秒的信号,计数脉冲为1秒的信号。module Radio(Alarn_Radio,Minute,Second,_1HZ);input _1KHZ;input 7:0 Minute,Second; output Alarn_Radio; reg Alarn_Radio;always(Minute,S
57、econd)if(Minute=8h59)case(Second)8h55:Alarn_Radio=1b1;8h56:Alarn_Radio=1b1; 8h57:Alarn_Radio=1b1; 8h58:Alarn_Radio=1b1;8h59:Alarn_Radio=1b1; default: Alarn_Radio=1b0; endcaseelse Alarn_Radio=1b0;endmodule顶层模块调用上述的各个模块, 设置一个报警信号为闹钟与整点报时的相或输出。 再设置 循环扫码模块和选择显示模块, 让主时钟秒表和闹钟的输出信号均可显示在数码 管上并且互不影响。扫描频率均为1K
58、HZ。modulecomplete_clock(LED_Hr,LED_Min,LED_Sec,Alarn,AdjMinKey,AdjHrKey,SetHrKey,SetMinKey,stopwatchnCR,stopwatchen,_1KHZIn,_1HZ,CtrlBell,Mode1,Mode2,nCR,sel,SG);input_1KHZIn,nCR,AdjMinKey,AdjHrKey,SetHrKey,SetMinKey,CtrlBell,Mode1,Mode2,stopwatchnCR,stopwatchen;output 7:0 LED_Hr,LED_Min,LED_Sec,Ala
59、rn,SG ,_1HZ;wire 7:0 LED_Hr,LED_Min,LED_Sec;wire _500HZ,_1HZ,_100HZ;wire 7:0Hour,Minute,Second,stopwatchHour,stopwatchMinute,stopwatchSecond;wire 7:0 Set_Hr,Set_Min;wire Alarn_Clock,Alarn_Radio;reg 3:0a;reg 2:0 sel;reg 7:0 SG;output 2:0 sel;Divided_Frequency U0(_1HZ,_500HZ,nCR,_1KHZIn,_100HZ); top_c
60、lockU1(Hour,Minute,Second,nCR,_1HZ,AdjMinKey,AdjHrKey,_1KHZIn);Radio U2(Alarn_Radio,Minute,Second,_1HZ);BellU3(Alarn_Clock,Hour,Minute,Second,Set_Hr,Set_Min,SetHrKey,SetMinKey,_500HZ,_1KHZIn,_1KHZIn,CtrlBell);stopwatch(stopwatchHour,stopwatchMinute,stopwatchSecond,stopwatchnCR,stopwatchen,_100HZ,_1KHZIn);assign Alarn=Alarn_Clock|Alarn_Radio;_3To1MUX Mu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024基于非对称的数据加密算法技术规范
- 电冰箱、空调器安装与维护电子教案 2.1 认识选用电冰箱
- 演艺消费季音乐节(演唱会)类演出项目结项审核申报书
- 2024年重庆市九龙坡区杨家坪中学小升初数学试卷
- 河南省郑州市第七高级中学2024-2025学年高二上学期期中考试生物试题(含答案)
- 2024-2025学年内蒙古鄂尔多斯市西四旗高二(上)期中数学试卷(含答案)
- 尿道注射器产业运行及前景预测报告
- 座位名卡市场发展预测和趋势分析
- 发光或机械信号板市场发展预测和趋势分析
- 人教版英语八年级下册 Unit 8 刷题系列
- 地震波动力学
- 诉讼费退费账户确认书
- 辽宁2022年辽宁省农村信用社联合社内部选聘行业审计工作人员上岸提分题库3套【500题带答案含详解】
- T-GDAEPI 07-2022 广东省环保管家服务规范
- 科学领域核心经验《幼儿园科学领域教育精要-关键经验与活动指导》
- JJF 1627-2017皂膜流量计法标准漏孔校准规范
- GB/T 36195-2018畜禽粪便无害化处理技术规范
- GB/T 18833-2012道路交通反光膜
- GB/T 15063-2020复合肥料
- GB/T 12767-1991粉末冶金制品表面粗糙度参数及其数值
- 冀教版小学英语 四年级上册-lesson 13 at school
评论
0/150
提交评论