




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、20212021学年第二学期数字电子技术课程设计报告 专业班级 自动化082班 姓 名 学 号 0805 开课系室 电工电子学教学中心 设计日期 2010年8月23日27日 设计题目:多功能数字钟电路设计一、设计任务及要求:本次课程设计任务是设计一个多功能数字钟。具体要求是:1.钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从023时。2.小时分钟秒钟。3.整点报时,在整点前5秒LED开始按照1HZ频率闪烁,过整点后,停止闪
2、烁。4.调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。另外用S8按键作为系统时钟复位,复位后全部显示000000。二、设计原理与方案:一、顶层设计方案:包括原理框图及其工作原理说明等内容图1 原理框图工作原理说明:clk用于输入50MHZ时钟,s1用于给小时加1,s2用于给分钟加1,s8用于复位。分频器分出三个频率的时钟,clkout1输出1HZ,clkout2输出1千HZ,clkout1输出2HZ。控制器输入端口t1用于控制灯闪烁,输出端口led接小灯,ss1、ss2、reset分别储存s1、s2、s8的值并将其传
3、给计数器。计数器输出端口shis表示小时的十位,shig表示小时的各位,mins表示分钟的十位,ming表示分钟的个位。secs表示秒的十位,secg表示秒的个位。显示器输出端口leds接七段数码管,wei接数码管的控制端。当clkout1出现上升沿时,秒执行加1或进位操作,假设秒进位,那么分钟执行加1或进位操作,假设分秒都进位,那么小时进行加1或进位操作。小时进位前5秒,灯开始以1HZ频率闪烁。按下s1时小时加1或进位,按下s2时分钟加1或进位,假设分钟进位,小时同时进行加1或进位操作。整体仿真源文件:图2整体仿真源文件说明:s1、s2、s8按下时为0,不按下时为1。当s8按下时,全部归0。
4、当s1按下时,小时假1,当s2按下时,分钟加1。输入波形中刚开始s8为0,归0。然后让其运行一段时间,再让s1为0,再过一段时间让s2为0,再过一段时间让s8为0。clk为脉冲信号,10ps一周期。输出放大截图:图3 输出仿真波形放大截图第一局部图4 输出仿真波形放大截图第二局部灯的闪烁说明:仿真时计数器控制器都是12分频,灯闪烁是6分频,显示器是2分频,因此能看到输出的6个数码管的值。并对其进行初步判断。由于数码管数值不易分辨,所以不用全部看到,只看一局部即可。二、各个电路子模块:设计方案设计思路:设计计数变量 cout1、cout2、cout3,每来一个脉冲加1。cout1加到500000
5、00时归0,同时clkout1加1,否那么clkout1归0。cout2到25000000时归0,同时clkout2加1,否那么clkout2归0。cout3到25000000时归0,同时clkout3加1,否那么clkout3归0。源程序:module fenpin(clk,clkout1,clkout2,clkout3);input clk; /下载时clk为50MHzoutput clkout1,clkout2,clkout3; /clkout1输出1赫兹,clkout2为1千赫兹,clkout3为2赫兹reg clkout1,clkout2,clkout3;integer cout1,
6、cout2,cout3; /cout1,cout2,cout3均为计数变量always (posedge clk )begincout1 <= (cout1 = 32'd50000000) ? 32'd0 : (cout1 + 32'd1); clkout1<= (cout1 = 32'd50000000) ? 1'd1 : 1'd0; /50000000分频cout3 <= (cout3 = 32'd25000000) ? 32'd0 : (cout3 + 32'd1); clkout3<= (c
7、out3 = 32'd25000000) ? 1'd1 : 1'd0; /25000000分频cout2 <= (cout2 = 32'd50000) ? 32'd0 : (cout2 + 32'd1); clkout2<= (cout2 = 32'd50000) ? 1'd1 : 1'd0; /50000分频 endendmodule/仿真时,改clkout1为12分频,clkout2为2频,clkout1为6分频/下载时,由于clk为50MHz,改clkout1为50000000分频,输出1赫兹,clkou
8、t2为50000分频,输出1千赫兹,clkout3为5000000分频,输出2赫兹分频器仿真源文件:图5 分频器仿真源文件仿真输出文件:图6 频器仿真输出文件2.控制器设计方案控制器输入端口t1用于控制灯闪烁,输出端口led接小灯,ss1、ss2、reset分别储存s1、s2、s8的值并将其传给计数器设计思路: ss1、ss2、reset储存s1、s2、s8的值传给计数器执行其他功能。这一局部由1赫兹进行驱动。led是灯,t1为1时led闪烁。这一局部由2赫兹进行驱动。源程序:module kongzhi(clkout1,clkout3,s1,s2,s8,t1,led,ss1,ss2,rese
9、t);input clkout1,clkout3,s1,s2,s8,t1; / clkout1输入1赫兹,clkout3输入2赫兹,t1控制闪烁output led,ss1,ss2,reset; /led是灯,ss1、ss2、reset储存s1、s2、s8的值传给计数器reg led,ss1,ss2,reset;always(posedge clkout1)begin reset=s8;ss1=s1;ss2=s2; endalways(posedge clkout3)begin if(t1=1) led=led;else if(t1=0) led=0;/当t1=1时闪烁,否那么不闪 enden
10、dmodule控制器仿真源文件:图7控制器仿真源文件说明:clkout1的周期是clkout3的一倍。s1、s2、s3均有0和1出现,t1之后为1控制器仿真输出文件:图8控制器仿真输出文件说明:从图中可以看出s1、s2、s3的值分别赋给了ss1、ss2、reset。Led在t1为1时闪烁。器设计方案计数器输出端口shis表示小时的十位,shig表示小时的各位,mins表示分钟的十位,ming表示分钟的个位。secs表示秒的十位,secg表示秒的个位。设计思路:判断ss1是否为0,假设为0,小时加1或归0。同时判断ss2是否为0,假设为0,那么分钟加1或归0并进1。同时判断reset是否 为0,
11、假设为0,全部归0。假设不为 0那么嵌套if语句判断sec、min、shi的值并进行加1或归0操作。当59分54秒到59秒时让t1为1,灯闪烁。其他时候t1为0,灯灭。module jishu(clkout1,ss1,ss2,reset,shis,shig,mins,ming,secs,secg,t1);input clkout1,ss1,ss2,reset;/ clkout1为1赫兹,ss1、ss2、reset是储存的s1、s2、s8的值output1:0 shis;/小时的十位output3:0 shig;/小时的个位output2:0 mins;/分钟的十位output3:0 ming;
12、/分钟的个位output2:0 secs;/秒的十位output3:0 secg;/秒的个位output t1;/返回闪烁的控制变量reg t1;reg5:0 shi;/小时reg5:0 min, sec; /分钟,秒always(posedge clkout1)begin if(ss1=0&&shi<24) shi=shi+1;/s1为0和shi小于23时,小时加1 if(ss1=0&&shi=24) shi=0; / s1为0和shi等于24时,小时变0 if(ss2=0&&min<60) min=min+1;/s2为0和min小
13、于60时,分钟加1 if(ss2=0&&min=60) begin min=0;t1=0; end/ s2为0和min等于60时,分钟变0 if(reset=0) begin shi=0;min=0;sec=0;t1=0;end /执行复位功能 else if(sec=59) begin sec=sec+5;/sec为59是sec归0,判断min的值是否为59 if(min=59) begin /假设min=59,min归0并判断shi> 22 min=min+5;t1=0; if(shi>22) shi=0;/假设等于22,归0 else shi=shi+1;/假
14、设不等,shi加1 end else begin min=min+1;end/假设min不等于59,min加1 end else begin sec=sec+1;t1=0;end/假设sec不为59,sec加1,令t1为0 if(min=59&&sec>54&&sec<60) t1=1;假设整点前5秒,令t1为1,灯闪烁endassign shis=shi/10;/将小时的十位赋给shisassign shig=shi%10;/ 将小时的个位赋给shigassign mins=min/10;/将分钟的十位赋给minsassign ming=min%1
15、0;/ 将分钟的个位赋给mingassign secs=sec/10;/将秒的十位赋给secsassign secg=sec%10;/ 将秒的个位赋给secgendmodule计时器仿真源文件:图9计时器仿真源文件说明:reset先为0,令其复位。运行一段时间之后先让ss1加1,再让ss2加1,clkout1始终有输入。整体仿真图:图10 整体仿真图说明:从图中可以看出灯闪烁变量t1的变化,也可以看出小时shi加1的变化,其他的在下面有放大图。秒进位:图11秒进位仿真截图说明:从图中可以看出秒十位secs为5,个位secg为9时,秒归0,分钟个位ming加1。分钟进位:图12分钟进位仿真截图说
16、明:从图中可以看出,分钟59时ming为9,mins为5时,分钟归0,小时加1S1起作用图13 s1起作用仿真截图说明:从图中可以看出ss1为0时,每过一个上升沿,小时加1shig加1或进位S2起作用:图14 s2起作用仿真截图说明:从图中可以看出ss2为0后,分钟开始加1或进位。ming加1或进位S8起作用:图15 s8起作用仿真截图说明:s8为0时,reset为0,其余均为0除输入外。器设计方案:包括设计思路及其工作原理设计思路:1千赫兹输入,用wei来确定数码管的位置,分别给不同的数码管赋不同的值。使数码管从左到右依次显示小时分钟秒。module xianshi(clkout2,shis
17、,shig,mins,ming,secs,secg,leds1,wei);input clkout2;/clkout2为1千赫兹input1:0 shis; /小时的十位input3:0 shig; /小时的个位input2:0 mins; /分钟的十位input3:0 ming; /分钟的个位input2:0 secs; /秒的十位input3:0 secg; /秒的个位output6:0 leds1;/leds1为数码管reg6:0 leds1;output 2:0 wei; /wei表示数码管的位置reg2:0 wei; reg3:0 a; /中间变量always(posedge clk
18、out2)beginif(wei=6) begin a=shis;/当wei为6时,加1,第7号数码管显示小时的十位 case(a) 4'd0:leds1=7'b0111111; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; default:leds1=7'b1111110; endcase wei=wei+1;endelse if(wei=5) begin a=shig; /当wei为5时,加1,第6号数码管显示小时的个位case(a) 4'd0:leds1=7'b01111
19、11; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; 4'd3:leds1=7'b1001111; 4'd4:leds1=7'b1100110; 4'd5:leds1=7'b1101101; 4'd6:leds1=7'b1111101; 4'd7:leds1=7'b0000111; 4'd8:leds1=7'b1111111; 4'd9:leds1=7'b1101111; default:leds1=7
20、39;b1111110; endcase wei=wei+1;endelse if(wei=4) begin leds1=7'b1000000;wei=wei+1; /当wei为4时,加1,第5号数码管显示横杠endelse if(wei=3) begin a=mins; /当wei为3时,加1,第4号数码管显示分钟的十位case(a) 4'd0:leds1=7'b0111111; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; 4'd3:leds1=7'b1001111; 4&
21、#39;d4:leds1=7'b1100110; 4'd5:leds1=7'b1101101; default:leds1=7'b1111110; endcase wei=wei+1;endelse if(wei=2) begin a=ming; /当wei为2时,加1,第3号数码管显示分钟的个位case(a) 4'd0:leds1=7'b0111111; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; 4'd3:leds1=7'b1001111; 4
22、39;d4:leds1=7'b1100110; 4'd5:leds1=7'b1101101; 4'd6:leds1=7'b1111101; 4'd7:leds1=7'b0000111; 4'd8:leds1=7'b1111111; 4'd9:leds1=7'b1101111; default:leds1=7'b1111110; endcase wei=wei+1;endelse if(wei=1) begin leds1=7'b1000000;wei=wei+1; /当wei为1时,加1,第
23、2号数码管显示横杠endelse if(wei=0) begin a=secs; /当wei为0时,加1,第1号数码管显示秒的十位case(a) 4'd0:leds1=7'b0111111; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; 4'd3:leds1=7'b1001111; 4'd4:leds1=7'b1100110; 4'd5:leds1=7'b1101101; default:leds1=7'b1111110; endcase wei
24、=wei+1;endelse if(wei=7) begin a=secg; /当wei为7时,加1,第0号数码管显示秒的个位 case(a) 4'd0:leds1=7'b0111111; 4'd1:leds1=7'b0000110; 4'd2:leds1=7'b1011011; 4'd3:leds1=7'b1001111; 4'd4:leds1=7'b1100110; 4'd5:leds1=7'b1101101; 4'd6:leds1=7'b1111101; 4'd7:le
25、ds1=7'b0000111; 4'd8:leds1=7'b1111111; 4'd9:leds1=7'b1101111; default:leds1=7'b1111110; endcasewei=wei+1; end endendmodule数码管仿真源文件:图16数码管仿真源文件说明:只输入了一组值13时43分12秒仿真输出文件:图17数码管仿真文件说明:从图中可以看出八个数码管对应的值。wei=000时0号数码管输出1011011对应秒的个位为2;wei=001时1号数码管输出0000110对应秒的十位为1;wei=010时2号数码管输出1
26、000000对应输出“;wei=011时3号数码管输出1001111对应输出分钟的个位为3;wei=100时4号数码管输出1100110对应输出分钟的十位为4;wei=101时5号数码管输出1000000对应输出“;wei=110时6号数码管输出1001111对应输出小时的个位为3;wei=111时7号数码管输出0000110对应输出小时的十位为1;即输出为“134312三、分析与讨论:一课程设计综述:本次课程设计我总共进行了两天,感觉整个程序就是一个精密的机器,由很多简单的部件构成,而我的任务就是仔细的设计部件组成机器,否那么就很容易出错。 第一天上午我编写了分频程序和控制器程序,这两个程序
27、是最简单的。分频程序一个是输出1赫兹,一个是输出1千赫兹,另一个是输出2赫兹。控制器三个变量就是用来存储三个按键的值,还有就是控制闪烁。这一局部没出现什么问题,就是出现了一些警告。警告1.Verilog HDL assignment warning at <location>: truncated with size <number> to match size of target (<number> 原因:在HDL设计中对目标的位数进行了设定,如:reg4:0 a;而默认为32位, 要将位数裁定到适宜的大小。 解决方案:如果结果正确,无须加以修正,如果不想
28、看到这个警告,可以改变设定的位数 。2.Following 9 pins have nothing, GND, or VCC driving datain port - changes to this connectivity may change fitting results 原因:第9脚,空或接地或接上了电源。 解决方案:有时候定义了输出端口,但输出端直接赋0,便会被接地,赋1接电源。如果你的设计中这些端口就是这样用的,那便可以不理会这些warning 3.Found pins as undefined clocks and/or memory enables 原因:是你作为时钟的PIN
29、没有约束信息.可以对相应的PIN做一下设定就行了。主要是指你的某些管脚在电路当中起到了时钟管脚的作用,比方flip-flop的clk 管脚,而此管脚没有时钟约束,因此QuartusII把“clk作为未定义的时钟。解决方案:clk应该是时钟,如果不是,最好改一个名字。4.Design contains <number> input pin(s) that do not drive logic 原因:输入引脚没有驱动逻辑(驱动其他引脚),所有的输入引脚需要有输入逻辑。 解决方案:如果这种情况是成心的,无须理会,如果非成心,输入逻辑驱动。最好是输入时钟作为驱动逻辑。5.Can't
30、 analyze file - file E:/quartusii/*/*.v is missing 原因:试图编译一个不存在的文件,该文件可能被改名或者删除了。 解决方案:不管他,没什么影响。6.Warning (10268): Verilog HDL information at lcd7106.v(63): Always Construct contains both blocking and non-blocking assignments 原因: 一个always模块中同时有阻塞和非阻塞的赋值 解决方案:最好是全部用阻塞赋值,或者全是非阻塞赋值。当混合使用时,对同一变量必须全部用同一
31、种赋值方式。 第一天下午编写计数器。计数器是最难编的一个程序,因为计数器才是真正起作用的局部。计数器的逻辑驱动是1赫兹。它的工作原理应为: 1.每过一秒,如果秒数小于59,秒数加1。如果是59秒,就让秒数归0并判断分钟。 2.此时,如果分钟数小于59,分钟数加1。如果分钟是59,就把分钟归0并判断小时。 3.此时,如果小时小于23, 小时进1。如果小时是23,就让小时归0。 4.如果s1按下,小时加1。如果s2按下,分钟加1。如果s8按下,全部归0。 5如果是59分,在秒数为55到59之间让灯以1Hz闪烁。 前三步的实现是采用嵌套if语句,最后一个功能是并列if语句。需要注意的是按按键时小时加
32、1不能超过23,分钟加1不能超过59,复位时秒数不能走。这样,复位优先级要高于走秒的优先级,判断按键s1s2按下时加1的方式,还要判断其他条件。 第三局部编写好之后,就还差一个显示模块。这时候就可以进行仿真了,我把分频器、控制器、计数器在顶层文件连接好进行仿真。这样,程序的输出变为灯led、小时十位、小时个位、分钟十位、分钟个位、秒数十位、秒数个位,看波形就可以看到小时、分钟、秒数、小灯的运行过程。经过对波形的分析我发现两个问题,第一是秒数、分钟和小时会越过他们的界限。原因是我给它们赋了6位的值,如果不加限制,它们在运行时都可以到达63。增加了限制条件后一切正常。第二是灯闪烁时间太早,我把时间
33、调整后,波形正常。 下面就是显示模块。显示模块采用扫描方式给数码管输出,因此是1千赫兹驱动。位置控制的变量从0开始每运行1次加1到7,再加1到0,数码管输出相应的值。这一局部也还可以。 最后是合成整个程序,编译、分配管脚后进行下载。下载时除了两个问题:第一,数码管显示的是倒的,时分秒都倒了。之后我把控制数码管位置的变量重新赋值解决了这一问题。第二,灯闪烁是是54秒,说明我之前调整的是错的,我又把它调回去,再下载就正确了。二容易出现的错误总结1.无法编译,编译按钮呈灰色。原因:未翻开工程。从新翻开工程即可。2.Error: Top-level design entity "kongzh
34、i" is undefined原因:module后的模块名与工程名不同,假设只是对verilog文件进行编译,可以将模块名与工程名与verilog文件名改为一样的。假设要生成框图,此时不应该进行编译。3.Error (10137): Verilog HDL Procedural Assignment error at kongzhi.v(15): illegal Procedural Assignment to nonregister data type "led"原因:未把led赋给reg类型就在过程赋值语句中对其进行赋值。把led定义为reg类型即可。4.Er
35、ror (10028): Can't resolve multiple constant drivers for net "reset" at kongzhi.v(11)原因:当一个模块中有两个过程赋值语句时,不能有同一变量在两个语句中同时被赋值。也就是说,每一个变量只能有一个触发电平。5.Error (10170): Verilog HDL syntax error at kongzhi.v(15) near text "=" expecting ")", or "?", or binary operat
36、or, Error (10112): Ignored module "kongzhi" at kongzhi.v(1) due to previous errors原因:双击后显示那一条语句,在那条语句中缺少了一个end,或者是()的一边,或者是if的判断语句少了个=号,或者是少了其他局部。6.Error (10171): Verilog HDL syntax error at kongzhi.v(20) near end of file ; expecting an identifier, or "endmodule", or a parallel s
37、tatement原因:在模块的最后缺少了一个endmodule。加上后就可以了。7.Error (10206): Verilog HDL Module Declaration error at kongzhi.v(2): top module port "t1" is not found in the port list原因:t1端口在列表中未定义。8.Error (10161): Verilog HDL error at kongzhi.v(1): variable "t1" is not declared原因:t1端口在端口列表中出现了但是未定义。9
38、.Error (10231): Verilog HDL error at kongzhi.v(10): value cannot be assigned to input "clkout1"原因:输入端口不能赋值,不能对其进行任何更改。10.Error (10219): Verilog HDL error at jishu.v(37): data type of left-hand side of Continuous Assignment is "shis", but must be net type原因:assign语句中=号左端的不能是reg类型,如果左端是端口的话,不要给它定义其他类型。11.Error: Net "gdfx_temp0", which fans out to "xi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030教育信息化基础设施即服务市场格局与用户行为调研报告
- 2025-2030抗菌药物耐药性解决方案市场投资价值分析报告
- 员工职业技能提升培训活动方案
- 2025-2030托育早教一体化服务模式的政策红利与投资风险评估
- 2025-2030户外露营装备行业渗透率提升与渠道布局策略
- 2025-2030慢性病管理APP用户留存率与盈利模式优化
- 2025-2030微生物组学与婴幼儿认知发育关联性的商业开发价值评估
- 2025-2030律师行业并购重组趋势与典型案例分析
- 2025-2030律师事务所行业诉讼业务与非诉业务比较研究报告
- 2025-2030律师事务所行业知识产权保护与风险防范研究
- 玫瑰知识培训课件
- 青桐鸣大联考2025-2026学年高一上学期10月月考物理试卷
- 2025济钢集团有限公司校园招聘(48人)笔试参考题库附带答案详解
- 2025版《煤矿安全规程》题库
- 辽宁省名校联盟2025-2026年高三10月联考物理试卷+答案
- 监理临时用电培训
- 2025人民出版社供小学用中华民族大家庭教学课件:第7课 中华民族的语言文字 含多个微课视频
- 2025成人高考政治真题及答案
- 2025年自学考试《艺术概论》考试复习题库(含答案)
- 中南地区民航消防员理论考试题库(精简500题)
- MQ型门座起重机说明书
评论
0/150
提交评论