..电子设计自动化大作业题目数字秒表设计学院控制科学与工程学院班级自动化0803姓名学号二OO一一年五月十二日..题目:数字秒表的设计一、设计要求:(1)数字秒表的计时精度是10ms;(2)复位开关可以在任何情况下使用,计时在计时过程中,只要按一下复位开关,计时器就清零,并做好下次计时的准备;(3)具有启/停开关,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关则停止计时。(4)数字秒表的计时范围是0秒~59分59.99秒,显示的最长时间为59分59秒二、总体设计:1、总体结构图输入到CHOICE中输入信号Sel模块选择通过3-8译码器控制8位数码管的亮灭时钟的分秒和毫秒控制选择模块输出的数据通过数据的编码控制数码管的显示..2、各模块功能1)SEL模块:将扫描信号输给选择(CHOICE)模块2)选择模块:按扫描信号的指定选择输出3)3-8译码模块:通过SEL给的信号来控制8位数码管位的亮灭4)计时模块:分别对毫秒,秒,分计时5)显示模块:通过CHOICE模块的输出信号来控制三、单元模块设计1、模块名:sel模块设计(1)模块功能:CLK为扫描时钟脉冲,SELOUT端不停的发出扫描到的信号(2)端口定义:CLK为信号输入端SELOUT[2..0]为选择到的信号输出(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityselisport(clk:instd_logic;selout:outstd_logic_vector(2downto0));endsel;architectureoneofselis..signalcount:std_logic_vector(2downto0);beginprocess(clk)beginifclk'eventandclk='1'thenif(count=101)thencount=000;elsecount=count+1;endif;endif;endprocess;selout=count;endone;(4)仿真结果说明:来一个上升沿,SELOUT的值增1,可以证明模块是正确的。2、模块名:选择模块设计..(1)模块功能:按扫描信号的指定选择输出(2)端口定义:a,b,c为控制信号;data1[3..0],data2[3..0],data3[3..0],data4[3..0],data5[3..0],data6[3..0]分别是毫秒的低位,毫秒的高位,秒的低位,秒的高位,分的低位,分的高位的数据值;ch_out[3..0]为选择输出端。(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitychoiceisport(a,b,c:instd_logic;data1,data2,data3,data4,data5,data6:instd_logic_vector(3downto0);ch_out:outstd_logic_vector(3downto0));endchoice;architecturebehaveofchoiceissignalch:std_logic_vector(2downto0);..beginch(2)=c;ch(1)=b;ch(0)=a;process(ch)begincasechiswhen000=ch_out=data1;when001=ch_out=data2;when010=ch_out=data3;when011=ch_out=data4;when100=ch_out=data5;when101=ch_out=data6;whenothers=null;endcase;endprocess;endbehave;(4)仿真结果说明:abc的值递增,ch_out选择输出data1,data2,data3,data4,data5,data6的值,证明模块是正确的3、模块名:3-8译码模块设计..(1)模块功能:通过SEL给的信号来控制8位数码管位的亮灭。(2)端口定义:输入端SEL[2..0]值大小来选择输出Q的值输出端Q[7..0]来控制灯哪位亮(3)VHDL源程序LIBRARYieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYdecode3_8ISPORT(SEL:INstd_logic_vector(2downto0);Q:OUTstd_logic_vector(7downto0));ENDdecode3_8;ARCHITECTUREaOFdecode3_8ISBEGINQ=11111110whensel=0else11111101whensel=1else11111011whensel=2else11110111whensel=3else11101111whensel=4else11011111whensel=5else11111111;ENDa;(4)仿真结果..说明:Sel的值递增,Q的相应位会亮,证明模块是正确的。4.1模块名:毫秒计时模块设计(1)模块功能:对毫秒位的计数(2)端口定义:clk为信号时钟输入端reset为复位端pause为暂停端co为进位信号输出端qh:毫秒信号的高位输出端ql:毫秒信号的低位输出端(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitym100isport(clk:instd_logic;reset:instd_logic;pause:instd_logic;co:outstd_logic;qh:bufferstd_logic_vector(3downto0);..ql:bufferstd_logic_vector(3downto0));endm100;architecturebehaveofm100isbeginco='1'when(qh=1001andql=1001)else'0';process(clk,reset,pause)beginif(reset='0')thenqh=0000;ql=0000;elsif(pause='0')thenqh=qh;ql=ql;elsif(clk'eventandclk='1')thenif(ql=1001)thenql=0000;if(qh=1001)thenqh=0000;elseqh=qh+1;endif;elseql=ql+1;endif;endif;endprocess;endbehave;(4)仿真结果..说明:毫秒为100进制,高位和地位都是10进制,高位到10会有进位,可以证明模块的正确性4.2模块名:秒计时模块设计(1)模块功能:对毫秒位的计数(2)端口定义:clk为信号时钟输入端reset为复位端pause为暂停端co为进位信号输出端qh:毫秒信号的高位输出端ql:毫秒信号的低位输出端(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitym60_secisport(reset:instd_logic;..pause:instd_logic;ci:instd_logic;co:outstd_logic;qh:bufferstd_logic_vector(3downto0);ql:bufferstd_logic_vector(3downto0));endm60_sec;architecturebehaveofm60_secisbeginco='1'when(qh=0101andql=1001andci='1')else'0';process(reset,pause,ci)beginif(reset='0')thenqh=0000;ql=0000;elsif(pause='0')thenqh=qh;ql=ql;elsif(ci'eventandci='1')thenif(ql=1001)thenql=0000;if(qh=0101)thenqh=0000;elseqh=qh+1;endif;elseql=ql+1;endif;endif;endprocess;endbehave;..(4)仿真结果说明:秒进制为60进制,高位到6会有进位,低位为10进制,可以证明模块的正确性4.3模块名:分计时模块设计(1)模块功能:对毫秒位的计数(2)端口定义:clk为信号时钟输入端reset为复位端pause为暂停端co为进位信号输出端qh:毫秒信号的高位输出端ql:毫秒信号的低位输出端(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitym60_minisport(reset:instd_logic;pause:instd_logic;ci:instd_logic;qh:bufferstd_logic_vector(3downto0);ql:bufferstd_logic_vector(3downto0)..);endm60_min;architecturebehaveofm60_minisbeginprocess(reset,pause,ci)beginif(reset='0')thenqh=0000;ql=0000;elsif(pause='0')thenqh=qh;ql=ql;elsif(ci'eventandci='1')thenif(ql=1001)thenql=0000;if(qh=0101)thenqh=0000;elseqh=qh+1;endif;elseql=ql+1;endif;endif;endprocess;endbehave;(4)仿真结果..说明:高位为6进制,低位为10进制,ci为脉冲信号,当ql=9的时候,qh在下一时刻会增1,可以证明模块的正确性5、模块名:显示模块设计(1)模块功能:通过CHOICE模块的输出信号来控制(2)端口定义:adr是选择模块结果的输入端q_show是控制数码管段亮的输出端(3)VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityBCD_7isport(adr:instd_logic_vector(3downto0);q_show:outstd_logic_vector(6downto0));endBCD_7;architecturebehaveofBCD_7isbeginprocess(adr)begincaseadriswhen0000=q_show=1111110;..when0001=q_show=0110000;when0010=q_show=1101101;when0011=q_show=1111001;when0100=q_show=0110011;when0101=q_show=1011011;when0110=q_show=1011111;when0111=q_show=1110000;when1000=q_show=1111111;when1001=q_show=1111011;whenothers=null;endcase;endprocess;endbehave;(4)仿真结果说明:随着adr的值增加,q_show输出相应的值,数码管相应的段会亮,证明