【正文】
內(nèi)部,數(shù)字電路可用硬件描述語言可以進行方便的描述,經(jīng)過生成元件后可作為一個標(biāo)準(zhǔn)元件進行調(diào)用。20世紀(jì)70年代,早期的可編程邏輯器件只有可編程只讀存儲器(PROM)、紫外線可擦除只讀存儲器(EPROM)和電可擦除只讀存儲器(EEPROM)3種。內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計輸入到硬件配置的完整PLD設(shè)計流程[4]。比如,打鈴器結(jié)構(gòu)組成中最基本的是數(shù)字鐘。秒計數(shù)器滿60后向分計數(shù)器進位,分計數(shù)器滿60后向小時計數(shù)器進位,小時計數(shù)器按照“24翻1”規(guī)律計數(shù)。分頻模塊由25k分頻、200分頻、5分頻、50k分頻、250分頻組成。如圖24所示為消抖模塊符號圖。圖29 秒計數(shù)模塊符號圖如圖26所示波形仿真圖。圖210時計數(shù)模塊波形仿真圖時計數(shù)模塊波形仿真圖如圖210所示。圖213 鬧鐘模塊總體設(shè)計框圖如圖213所示為鬧鐘模塊總體設(shè)計框圖。設(shè)計思路為:將鬧鐘設(shè)定的時間與及時模塊的時間分別比較,即時高位、時低位、分高位、分低位分別進行比較,若時間相等,則輸出高電平,輸出信號與1Hz時鐘信號相與,獲得的信號接蜂鳴器,可實現(xiàn)時隔一秒報警一次,報警時長為一秒。K3為切換春夏作息時間的按鍵,當(dāng)K3為高電平時選擇春季作息時間,方為低電平時選擇夏季作息時間;Q_HB[3..0]接時鐘時間的時高位,Q_HA[3..0]接時鐘時間的時低位,Q_MB[3..0]接時鐘時間的分高位,Q_MA[3..0]接時鐘時間的時低位;Q_Y為打鈴模塊的輸出,接報警模塊的輸入。復(fù)位按鍵reset設(shè)為高電平,給up_key一定脈沖時鐘,沒到達(dá)一次脈沖上升沿,speaktime就加一,當(dāng)計到15時重新從0開始,實現(xiàn)了報警時長在1至15秒內(nèi)自由設(shè)定的要求。如圖226所示為時間切換模塊設(shè)計框圖。顯示器的亮度既與點亮?xí)r的導(dǎo)通電流有關(guān),也與點亮?xí)r間和間隔時間的比例有關(guān)[10]。動態(tài)掃描電路將計數(shù)器輸出的8421BCD碼轉(zhuǎn)換為數(shù)碼管需要的邏輯狀態(tài),并且輸出數(shù)碼管的片選信號和位選信號[12]。其它輸入端口接計數(shù)模塊輸出的數(shù)據(jù);輸出端口segout[7..0]動態(tài)輸出掃描的數(shù)據(jù);端口selout[7..0]輸出數(shù)碼管的片選信號。為鬧鐘設(shè)定時間的顯示,通過時鐘、鬧鐘顯示切換按鍵來進行切換,當(dāng)為低電平時顯示鬧鐘時間,可通過定時調(diào)時調(diào)分切換按鍵來選擇調(diào)整時或分,按下鬧鐘時間調(diào)節(jié)的撥碼開關(guān)進行鬧鐘時間設(shè)定,圖中數(shù)碼管顯示從左到右依次為:報警時長高位、低位,定時時間時高位、時低位,分高位、分地位,秒高位、秒低位,當(dāng)前顯示鬧鐘設(shè)定時間為十二點十三分,報警時長為五秒,當(dāng)時鐘時間為十二點十三分時,蜂鳴器報警,時長為五秒。 本設(shè)計是采用硬件描述語言和FPGA芯片相結(jié)合進行的學(xué)校打鈴器的研究,從中可以看出EDA技術(shù)的發(fā)展在一定程度上實現(xiàn)了硬件設(shè)計的軟件化,設(shè)計的過程相對簡單,容易修改。我深知以后要走的路將會更長更曲折,不過不要緊,我有信心和毅力走下去,摔倒了再爬起來,沒有什么,因為我們年輕,我們有激情和熱血。 co:out std_logic)。039。 end process。beginco=39。139。use 。039。 end if。end entity。 process (clk) is beginif clk39。 end architecture art。139。then if cqi=250 then cqi=1。entity Dcfq isport(d,clk:in std_logic。end process。end SECOND。139。co=39。end SEC。architecture MIN of MINUTE isbeginprocess(clk,clr)variable t1,t0:std_logic_vector(3 downto 0)。t0:=1001。end if。use 。039。else sl=sl+1。end if。 a,b: in std_logic。 end process。 Q_minuea:OUT INTEGER RANGE 0 TO 9)。 THEN Q_tmpma:= 0。139。 Q_tmpma:=0 。 Q_houra=Q_tmpha。 QH_A,QM_A:IN INTEGER RANGE 0 TO 9。ARCHITECTURE a OF BIJIAOQI IS SIGNAL Y: STD_LOGIC。 USE 。 BEGIN QTIME=Q_HB amp。WHEN 0001010100100000 = Q_Y=39。WHEN 0001011000010101 = Q_Y=39。WHEN 0001100000110000 = Q_Y=39。WHEN 0001100100100000 = Q_Y=39。WHEN 0010000000010101 = Q_Y=39。WHEN 0010001000000000 = Q_Y=39。139。139。139。139。139。139。 END IF。ARCHITECTURE a OF ctrl_s IS begin PROCESS(reset,up_key) variable Q_tmpma: INTEGER RANGE 0 TO 15。 ELSe Q_tmpma:=0。ENTITY s20 ISPORT( QY,CLK: IN STD_LOGIC。 THEN IF QY=39。 END IF。(1)時間切換模塊LIBRARY ieee。QM_ARM_B: IN INTEGER RANGE 0 TO 9。 Q_HBO=QHBI WHEN K2=39。 ELSE QM_ARM_B。(2)動態(tài)掃描模塊library ieee。 ml:in std_logic_vector(3 downto 0)。 begin process(clk) variable num:std_logic_vector(3 downto 0)。sel=01111111。sel=11110111。end case。 when0111=seg=00000111。 segout=seg。 end case。 when0011=seg=01001111。sel=11111101。sel=11011111。 ) then if temp=7 then temp=000。end dongtaism2。 speaktimeh,speaktimel,sl:in std_logic_vector(3 downto 0)。 Q_SBO=QSBI WHEN K2=39。139。END NOR_ARM_CTL。QSBI,QMBI:IN INTEGER RANGE 0 TO 9。 END IF。139。ARCHITECTURE a OF s20 ISBEGIN PROCESS(CLK) VARIABLE tmp: INTEGER RANGE 0 TO 64。 END PROCESS 。 ELSIF up_key39。 USE 。139。139。139。139。139。139。 WHEN OTHERS= Q_Y=39。WHEN 0010000100000000 = Q_Y=39。WHEN 0010000000000101 = Q_Y=39。WHEN 0001100100010101 = Q_Y=39。WHEN 0001011100000000 = Q_Y=39。WHEN 0001011000000101 = Q_Y=39。PROCESS(QTIME) BEGIN IF K3=39。 Q_MB: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 WHEN (QH_A=HARM_A) AND (QM_A=MARM_A) AND (QH_B=HARM_B) AND (QM_B=MARM_B) ELSE 39。HARM_B: IN INTEGER RANGE 0 TO 9。END a。 END IF。 Q_tmphb:=Q_tmphb+1。 ELSIF up_key39。 VARIABLE Q_tmpha: INTEGER RANGE 0 TO 9。ENTITY ctrl_memo ISPORT( reset,k1,up_key: IN STD_LOGIC。039。use 。else sh=0000。event and clk=39。sh:buffer std_logic_vector(3 downto 0)。min0=t0。elset1:=0000。 thenif clr=39。entity MINUTE isport(clk,clr:in std_logic。end if。elsif t01001 thent0:=t0+1。 thent1:=0000。use 。event and clk=39。 end process。039。 co:out std_logic)。 else cqi=cqi+1。 when cqi=50e3 and clk=39。(4)library ieee。event and clk=39。Architecture art of t200 issignal cqi : integer range 1 to 200。 end if。else 39。entity t5 is port( clk :in std_logic。then if cqi=25000 then cqi=1。139。這次經(jīng)歷讓我受益匪淺。在此期間我也失落過,也曾一度熱情高漲。在本設(shè)計調(diào)試過程中遇到了一些難點問題,經(jīng)過努力加以解決:當(dāng)程序下載到實驗箱上后,數(shù)碼管顯示全部為零,計數(shù)器不工作,經(jīng)分析得知程序中的總的清零信號保持有效狀態(tài),改動程序后計數(shù)器開始計數(shù)。由于按鍵電路比較簡單,在此主要介紹按鍵各自完成的功能。一般每一位的顯示時間為1~10ms。當(dāng)發(fā)光二極管導(dǎo)通時,相應(yīng)的一個點或一個筆畫發(fā)光。 設(shè)定時鐘時間為21點34分52秒,定時時間為12點整;當(dāng)K2為高電平時,模塊輸出為時鐘時間21點34分52秒;當(dāng)K2為低電平時,模塊輸出為定時時間十二點整。 圖224 蜂鳴器發(fā)聲模塊符號圖如圖225所示為蜂鳴器發(fā)聲模塊波形仿真圖。報警模塊主要包括報警時長設(shè)定模塊和蜂鳴器發(fā)生模塊,實現(xiàn)學(xué)校作息時間報時和鬧鐘報警的功能。給clk0一定時鐘,設(shè)定鬧鐘時間時高位為1,時低位為2,分高位、分低位都為0,即鬧鐘時間為十二點整,;首先設(shè)定時鐘模塊的時高位設(shè)定為1,時低位為1,分高位為5,分低位為9,即十一點五十九分,再設(shè)定為十二點整;由波形仿真圖可知,當(dāng)時鐘時間由十一點五十九分變?yōu)槭c整時,speak輸出