第一篇:EDA綜合實(shí)驗(yàn)設(shè)計(jì)報(bào)告
Beijing Jiaotong University
EDA實(shí)驗(yàn)設(shè)計(jì)報(bào)告
指導(dǎo)老師:劉彪
學(xué)
院:電子信息工程學(xué)院 姓
名:黃家維 學(xué)
號(hào):13213012 班
級(jí):電子1301
實(shí)驗(yàn)地點(diǎn):電氣樓406
實(shí)驗(yàn)日期:2014年5月29日星期四
實(shí)驗(yàn)一熟悉QuartusII軟件的安裝及使用(4學(xué)時(shí))
我們通過(guò)下載及安裝,可在電腦上運(yùn)行Altera Quartus II。打開(kāi)軟件,新建一個(gè)工程,在工程底下新建一個(gè)VHDL File,即可實(shí)現(xiàn)編程功能。編完程序后點(diǎn)擊Start Compilation可試運(yùn)行程序,待編寫(xiě)的程序運(yùn)行無(wú)誤后,再在此工程下新建一個(gè)Vector Waveform File,給程序中的輸入變量賦值,保存后點(diǎn)擊Start Simulation即可實(shí)現(xiàn)程序的仿真。實(shí)驗(yàn)
二、組合邏輯電路的設(shè)計(jì) 實(shí)驗(yàn)方案設(shè)計(jì)、實(shí)驗(yàn)方法、1.實(shí)驗(yàn)方案
8-3優(yōu)先編碼器的VHDL描述有多種方法,設(shè)計(jì)過(guò)程中可以根據(jù)真值表采用case…when語(yǔ)句、with…select語(yǔ)句、if…then結(jié)構(gòu)等多種手段實(shí)現(xiàn),也可以根據(jù)真值表分析輸入輸出間的邏輯關(guān)系,根據(jù)邏輯關(guān)系寫(xiě)出其布爾表達(dá)式,根據(jù)布爾代數(shù)式調(diào)用基本邏輯門元件實(shí)現(xiàn)8-3優(yōu)先編碼器。
本實(shí)驗(yàn)中根據(jù)真值表用if-then結(jié)構(gòu)實(shí)現(xiàn)8-3優(yōu)先編碼器 2.實(shí)驗(yàn)方法
首先根據(jù)前文所述,對(duì)照真值表的列出的不同輸入邏輯狀態(tài),分情況依次輸出于輸入的對(duì)應(yīng)關(guān)系,而后編譯綜合,由開(kāi)發(fā)系統(tǒng)自行實(shí)現(xiàn)電路功能。實(shí)驗(yàn)步驟
1.設(shè)計(jì)輸入 利用FILENew菜單輸入VHDL源程序,創(chuàng)建源文件 2.設(shè)計(jì)項(xiàng)目的創(chuàng)建 1)原文件存儲(chǔ)…..2)利用FILEProjectSet Project… 3.設(shè)計(jì)編譯 ….4.器件選擇及管腳分配 …..5.設(shè)計(jì)仿真 …..6.時(shí)序分析 …..7.編程下載(可選)….LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ENCODER IS
PORT(D:IN TO 7);
A:OUT STD_LOGIC_VECTOR(0 TO 2));END;ARCHITECTURE XIANI OF ENCODER IS BEGIN PROCESS(D)BEGIN IF
(D(7)='0')THEN A<=“111”;
ELSIF(D(6)='0')THEN A<=“110”;
STD_LOGIC_VECTOR(0
ELSIF(D(5)='0')THEN A<=“101”;
ELSIF(D(4)='0')THEN A<=“100”;
ELSIF(D(3)='0')THEN A<=“011”;
ELSIF(D(2)='0')THEN A<=“010”;
ELSIF(D(1)='0')THEN A<=“001”;
ELSIF(D(0)='0')THEN A<=“000”;
ELSE A<=“ZZZ”;
END IF;END PROCESS;END;
1用CASE語(yǔ)句設(shè)計(jì)一個(gè)4-16譯碼器。設(shè)計(jì)思路:
通過(guò)case語(yǔ)句可實(shí)現(xiàn)使能端的控制及4-16譯碼器的功能,即輸入一個(gè)四位二進(jìn)制數(shù),即可使輸出的16個(gè)端口中相應(yīng)的端口電平發(fā)生變化。用case語(yǔ)句來(lái)實(shí)現(xiàn)譯碼器中相應(yīng)數(shù)值選擇的功能恰到好處。程序:
其中實(shí)體名為SB2,when “0000”=> outt(15 downto 0)<=“***0”等語(yǔ)句即可實(shí)現(xiàn)從0011譯碼到第4位輸出發(fā)生變化。具體程序如下: library ieee;use ieee.std_logic_1164.all;entity SB2 is
port(inn:in std_logic_vector(3 downto 0);
shi:in std_logic;
outt:out std_logic_vector(15 downto 0));end entity SB2;architecture sb of SB2 is
begin process(inn,shi)begin if shi='1' then case inn is when “0000”=>
outt(15 0)<=“***0”;when “0001”=>
outt(15 0)<=“***1”;when “0010”=>
outt(15 0)<=“***1”;when “0011”=>
outt(15 0)<=“***1”;when “0100”=>
outt(15 0)<=“***1”;when “0101”=>
outt(15 0)<=“***1”;when “0110”=>
outt(15
downto
downto
downto
downto
downto
downto
downto 0)<=“***1”;when “0111”=>
outt(15 0)<=“***1”;when “1000”=>
outt(15 0)<=“***1”;when “1001”=>
outt(15 0)<=“***1”;when “1010”=>
outt(15 0)<=“***1”;when “1011”=>
outt(15 0)<=“***1”;when “1100”=>
outt(15 0)<=“***1”;when “1101”=>
outt(15 0)<=“***1”;
downto
downto
downto
downto
downto
downto
downto when “1110”=> outt(15 downto 0)<=“***1”;when “1111”=>
outt(15
downto 0)<=“***1”;when others
=>outt(15
downto 0)<=“***1”;end case;end if;end process;end architecture;仿真波形:
當(dāng)輸入inn為0000時(shí),輸出outt中的第16個(gè)端口變?yōu)榈碗娖?,即?shí)現(xiàn)了譯碼的功能。實(shí)際仿真波形如下圖。
實(shí)驗(yàn)3:時(shí)序電路設(shè)計(jì)
設(shè)計(jì)4位二進(jìn)制同步加/減法可逆計(jì)數(shù)器,其中 輸入: clr:
異步清零(高電平有效)clk:
時(shí)鐘輸入
d3-d0:
4位二進(jìn)制數(shù)輸入端 updown:
加/減法控制信號(hào)(‘1’加,‘0’減)輸出: q3-q0:
4位二進(jìn)制計(jì)數(shù)輸出 co:
進(jìn)位輸出 bo:
借位輸出 設(shè)計(jì)思路:
用if語(yǔ)句實(shí)現(xiàn)清零及加減法的選擇。若選擇updown=1,則當(dāng)時(shí)鐘輸入為高電平時(shí)輸入的d就加1,當(dāng)d=1111時(shí)進(jìn)位輸出co就變1,最后將d中的數(shù)送給q來(lái)輸出,以達(dá)到4位二進(jìn)制同步加/減法可逆計(jì)數(shù)器的設(shè)計(jì)。程序:
其中實(shí)體名為
CTRDIV16,程序中兩個(gè)關(guān)鍵的if語(yǔ)句即可實(shí)現(xiàn)加減法的控制及進(jìn)位、借位的輸出。具體程序如下: library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity CTRDIV16 is
port(clk:in STD_LOGIC;
updown:in STD_LOGIC;
clr:in STD_LOGIC;
q:out STD_LOGIC_VECTOR downto 0);
co,bo:out std_logic);end CTRDIV16;
(3 architecture sbb of CTRDIV16 is signal d:std_logic_vector(3 downto 0);begin process(clk,clr,updown)begin if clr='1' then
d<=“0000”;elsif clk'event and clk='1' then
if updown='1' then
d<=d+'1';
co<='0';
bo<='0';
else
d<=d-'1';
co<='0';
bo<='0';
end if;
if d=“1111” and updown='1' then
co<='1';
bo<='0';
end if;
if d=“0000” and updown='0' then
bo<='1';
co<='0';
end if;end if;end process;process(d)begin q<=d;end process;end sbb;仿真波形:
若選取updown=1(加法),通過(guò)波形即可看出,該程序已經(jīng)實(shí)現(xiàn)了d的加法運(yùn)算,同時(shí)在d=1111時(shí),進(jìn)位輸出co跳轉(zhuǎn)一次,即有一個(gè)進(jìn)位。
若選取updown=0(減法),該程序也實(shí)現(xiàn)了d的減法運(yùn)算,同時(shí)在d=0000是,借位輸出bo跳轉(zhuǎn)一次,即有一個(gè)借位輸出。具體仿真波形如下。
updown=1(加法)updown=0(減法)
實(shí)驗(yàn)感想:
quartusII可以模擬硬件設(shè)計(jì),即為硬件程序燒寫(xiě)模擬軟件,操作簡(jiǎn)單,易于運(yùn)行。它讓我熟練了實(shí)際硬件的使用語(yǔ)言和邏輯順序,并能實(shí)現(xiàn)一些簡(jiǎn)單硬件的程序編制和模擬仿真,使我對(duì)VHDL和EDA有了更加具體而深刻的認(rèn)識(shí),我認(rèn)為這次實(shí)驗(yàn)設(shè)計(jì)對(duì)使我獲益匪淺,一定會(huì)為我以后的學(xué)習(xí)生活帶來(lái)不少的益處。
第二篇:數(shù)字鐘實(shí)驗(yàn)設(shè)計(jì)報(bào)告
數(shù)字鐘實(shí)驗(yàn)設(shè)計(jì)報(bào)告
數(shù)字鐘設(shè)計(jì)
一 設(shè)計(jì)任務(wù)
1.基本功能:以數(shù)字形式顯示時(shí)、分、秒的時(shí)間,小時(shí)的計(jì)時(shí)要求為“24翻1”,分和秒的計(jì)時(shí)要求為60進(jìn)位; 2.擴(kuò)展功能:校時(shí)、正點(diǎn)報(bào)時(shí)及鬧時(shí)功能;
二 電路工作原理及分析
數(shù)字電子鐘主要由以下幾個(gè)部分組成:秒信號(hào)發(fā)生器,時(shí)、分、秒計(jì)數(shù)器,顯示器,校時(shí)校分電路,報(bào)時(shí)電路。
2.1數(shù)字鐘的基本邏輯功能框圖
圖1 數(shù)字鐘的基本邏輯功能框圖
2.2振蕩器的設(shè)計(jì)
振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精確度決定了數(shù)字鐘的準(zhǔn)確程度。通常選用石英晶體構(gòu)成振蕩器電路。一般來(lái)說(shuō),振蕩的頻率越高,計(jì)時(shí)精度越高。如果精度要求不高則可以采用由集成邏輯門與R、C組成的時(shí)鐘源振蕩器或集成電路計(jì)時(shí)器555與R、C組成的多諧振蕩器,電路參數(shù)如圖2所示.接通電源后,電容C1被充電,當(dāng)Vc上升到2Vcc/3時(shí),使vo為低電平,同時(shí)放電三極管T導(dǎo)通,此時(shí)電容C1通過(guò)R2和T放電,Vc下降。當(dāng)Vc下降到Vcc/3時(shí),vo翻轉(zhuǎn)為高電平。電容C1放電所需時(shí)間為 tpL=R2ln2≈0.7R2C1 當(dāng)放電結(jié)束時(shí),T截止,Vcc將通過(guò)R1、R2向電容器 C1充電,一;Vc由Vcc/3上升到2Vcc/3所需的時(shí)間為
當(dāng)平。如得到 振 故
tpH=(R1+R2)C1ln2≈0.7(R1+R2)C Vc 上升到2Vcc/3 時(shí),電路又翻轉(zhuǎn)為低電此周而復(fù)始,于是,是在電路的輸出端就一個(gè)周期性的矩形波。其振蕩頻率為 f=1/(tpL+tpH)≈1.43/[(R1+2R2)C] 蕩周期:T=T1+T2=(R1+2R2)C1In2 得 R1+2R2=T/C1In2=0.142k 選定R1=0.1K,R2=0.021k
圖2 555振蕩器(圖中R1,R2值不為實(shí)際值)
圖3 555振蕩器產(chǎn)生的波形
2.3時(shí)、分、秒計(jì)數(shù)器電路
時(shí)、分、秒計(jì)數(shù)器電路由秒個(gè)位和秒十位,分個(gè)位和分十位及時(shí)個(gè)位和時(shí)十位計(jì)數(shù)器電路構(gòu)成,其中秒個(gè)位和秒十位計(jì)數(shù)器,分個(gè)位和分十位計(jì)數(shù)器為60進(jìn)制計(jì)數(shù)器,而時(shí)個(gè)位和時(shí)十位為24進(jìn)制計(jì)數(shù)器。
2.4校時(shí)電路
通過(guò)開(kāi)關(guān),觸發(fā)器,邏輯門組成的校時(shí)電路來(lái)校時(shí)。校時(shí)電路時(shí)用來(lái)對(duì)“時(shí)”、“分”、“秒”顯示數(shù)字進(jìn)行校對(duì)調(diào)整的.三 數(shù)字電路的設(shè)計(jì)
3.1計(jì)數(shù)電路的設(shè)計(jì)
由2個(gè)74LS90計(jì)數(shù)器和4個(gè)74LS290計(jì)數(shù)器組成的時(shí)分秒的計(jì)數(shù)電路。
3.1.1六十進(jìn)制計(jì)數(shù)電路
秒計(jì)數(shù)和分計(jì)數(shù)單元為60進(jìn)制計(jì)數(shù)器,其輸出為8421BCD碼。采用十進(jìn)制計(jì)數(shù)器74LS290來(lái)實(shí)現(xiàn)時(shí)間計(jì)數(shù)單元的計(jì)數(shù)功能。由圖可知,74LS90為異步清零計(jì)數(shù)器,有異步清零端12,13腳(高電平有效)。
圖4 六十進(jìn)制計(jì)數(shù)器
(1)秒計(jì)數(shù)器電路的電路圖如圖4所示
秒個(gè)位計(jì)數(shù)單元為10進(jìn)制計(jì)數(shù)器,無(wú)需進(jìn)制轉(zhuǎn)換,當(dāng)QAQBQCQD從1001變成0000時(shí),U1 向U3 的輸入端發(fā)出一個(gè)脈沖信號(hào),使秒十位進(jìn)1位。
秒十位計(jì)數(shù)單元為6進(jìn)制,當(dāng)QAQBQCQD變成0110時(shí),通過(guò)與QBQC相連的導(dǎo)線,給U3 兩個(gè)清零端一個(gè)信號(hào),把它的兩個(gè)清零端都變成1,計(jì)數(shù)器的輸出被置零,跳過(guò)0110到1111的狀態(tài),又從0000開(kāi)始,如此重復(fù),十位和個(gè)位合起來(lái)就是60進(jìn)制。
(2)分計(jì)數(shù)器
分的個(gè)位和十位計(jì)數(shù)單元的狀態(tài)轉(zhuǎn)換和秒的是一樣的,只是它要把進(jìn)位信號(hào)傳輸給時(shí)的個(gè)位計(jì)數(shù)單元,電路圖如圖4所示
3.1.2二十四進(jìn)制計(jì)數(shù)器電路
時(shí)計(jì)數(shù)單元為24進(jìn)制計(jì)數(shù)器,其輸出為8421BCD碼。采用十進(jìn)制計(jì)數(shù)器74LS90來(lái)實(shí)現(xiàn)時(shí)間計(jì)數(shù)單元的計(jì)數(shù)功能。
時(shí)計(jì)數(shù)器電路的電路圖如圖5所示
圖5 二十四進(jìn)制計(jì)數(shù)器
當(dāng)“時(shí)”十位的QAQBQCQD為0000或0001時(shí),“時(shí)”的個(gè)位計(jì)數(shù)單元是十進(jìn)制計(jì)數(shù)器,當(dāng)個(gè)位的QAQBQCQD到1010時(shí),通過(guò)與非門使得個(gè)位74LS90上的清零端為0,則計(jì)數(shù)器的輸出直接置零,從0000開(kāi)始。當(dāng)十位的QAQBQCQD為0010時(shí),通過(guò)與非門使得該74LS90的清零端為0,“時(shí)”的十位又重新從0000開(kāi)始,此時(shí)的個(gè)位計(jì)數(shù)單元變成4進(jìn)制,即當(dāng)個(gè)位計(jì)數(shù)單元的QAQBQCQD為0100時(shí),就要又從0000開(kāi)始計(jì)數(shù),這樣就實(shí)現(xiàn)了“時(shí)”24進(jìn)制的計(jì)數(shù)。
3.2校時(shí)電路的設(shè)計(jì)
數(shù)字鐘應(yīng)具有分校正和時(shí)校正功能,因此,應(yīng)截?cái)喾謧€(gè)位和時(shí)個(gè)位的直接計(jì)數(shù)通路,并采用正常計(jì)時(shí)信號(hào)與校正信號(hào)可以隨時(shí)切換的電路接入其中。如圖6所示,當(dāng)開(kāi)關(guān)J1按下時(shí),直接給分個(gè)位計(jì)數(shù)器一個(gè)脈沖信號(hào),使分計(jì)數(shù)器進(jìn)1位,同時(shí)不影響數(shù)字鐘的運(yùn)行。同理,由J2對(duì)時(shí)計(jì)數(shù)器進(jìn)行校對(duì)。
圖6 校時(shí)校分電路
3.3 整點(diǎn)報(bào)時(shí)設(shè)計(jì)
仿廣播電臺(tái)正點(diǎn)報(bào)時(shí)電路的功能要求時(shí):每當(dāng)數(shù)字鐘計(jì)時(shí)快要到正點(diǎn)時(shí)發(fā)出聲響,通常按照4低音1高音的順序發(fā)出間斷聲響,以最后一聲高音結(jié)束的時(shí)刻是整點(diǎn)時(shí)刻。
每當(dāng)數(shù)字鐘計(jì)時(shí)快要到正點(diǎn)時(shí)發(fā)出聲響,按照4低音1高音的頻率發(fā)出間 斷聲響,前4低音聲響頻率為500HZ,后1高音聲響頻率為1000HZ。并以最后一 聲高音結(jié)束的時(shí)刻為正點(diǎn)時(shí)刻。本設(shè)計(jì)中,報(bào)時(shí)電路采用TTL與非門。報(bào)時(shí)電路如圖1.5所示。4聲低音分別發(fā)生在59分51秒、53秒、55秒及57秒,最后一 聲高音發(fā)生在59分59秒,聲響均持續(xù)1秒。如表1.2所示。由表可得式1.1。只有當(dāng)分十位的Q2M2Q0M2=11,分個(gè)位的Q3M1Q0M1=11,秒個(gè)位的Q2S2Q0S=11及秒個(gè)位的Q0S1=1時(shí),音響電路才能工作。
3.4 報(bào)時(shí)電路的安裝與調(diào)試
按照原理圖及實(shí)物連線圖接線。報(bào)時(shí)音響電路采用三極管3DG130來(lái)推動(dòng)喇叭。報(bào)時(shí)所需的500Hz和1000Hz音頻信號(hào),分別取分頻器的500Hz輸出端和1000Hz輸出端。
四 主要芯片的技術(shù)參數(shù)
4.1 74LS90芯片
74LS90芯片結(jié)構(gòu)及引腳分布如圖7所示,74LS90計(jì)數(shù)器是一種中規(guī)模的二一五進(jìn)制計(jì)數(shù)器。它由四個(gè)主從JK觸發(fā)器和一些附加門電路組成,整個(gè)電路可分兩部分,其中FA觸發(fā)器構(gòu)成一位二進(jìn)制計(jì)數(shù)器;FD、FC、FB構(gòu)成異步五進(jìn)制計(jì)數(shù)器,在74LS90計(jì)數(shù)器電路中,設(shè)有專用置“0”端R1、R2和置位(置“9”)端S1、S2。
圖7 74LS90芯片
4.2 74LS290芯片
74LS190芯片的管腳分布如圖8所示,其中,R9(1)、R9(2)稱為置“9”端,R0(1)、R0(2)稱為置“0”端;A、B端為計(jì)數(shù)時(shí)鐘輸入端,QAQBQCQD為輸出端,NC表示空腳。74LS290具有以下功能:
置“9”功能:當(dāng)R9(1)= R9(2)=1時(shí),不論其他輸入端狀態(tài)如何,計(jì)數(shù)器輸出QAQBQCQD=1001,而1001(2進(jìn)制)=9(10進(jìn)制),故又稱為異步置數(shù)功能。
置“0”功能:當(dāng)R9(1)和 R9(2)不全為1,并且R0(1)=R0(2)=1時(shí),不論其他輸入端狀態(tài)如何,計(jì)數(shù)器輸出QAQBQCQD=0000,故又稱為異步清零功能或復(fù)位功能。
計(jì)數(shù)功能:當(dāng)R9(1)和 R9(2)不全為1,并且R0(1)和R0(2)不全為1時(shí),輸入計(jì)數(shù)脈沖,計(jì)數(shù)器開(kāi)始計(jì)數(shù)。
圖8 74LS290芯片
五 心得體會(huì)
通過(guò)這次綜合試驗(yàn)設(shè)計(jì),大大提高了我分析問(wèn)題的能力,同時(shí)提高了運(yùn)用電工領(lǐng)域有關(guān)的軟件進(jìn)行電路模擬仿真的能力,將自己在課堂上學(xué)到的數(shù)電知識(shí)得到充分發(fā)揮,解決了很多問(wèn)題,同時(shí)學(xué)到了很多元件和芯片的各種用途及性能,從中學(xué)到了很多書(shū)上沒(méi)有明白的問(wèn)題
本次的課程設(shè)計(jì),是對(duì)所學(xué)的數(shù)電知識(shí)的一次綜合應(yīng)用,既考驗(yàn)了我的知識(shí)掌握程度,也鍛煉了我的動(dòng)手能力。在此過(guò)程中,我學(xué)到很多新知識(shí),對(duì)電工電子課程的學(xué)習(xí)也更有興趣了。雖然此次課程設(shè)計(jì)花費(fèi)了一番功夫,卻讓我收獲了很多,讓我知道了學(xué)無(wú)止境,永遠(yuǎn)不能滿足現(xiàn)有的知識(shí),人生就像在爬山,一座山峰的后面還有更高山峰在等著你。
在這次數(shù)字電子鐘課程設(shè)計(jì)中,也非常感謝同學(xué)的幫助!
第三篇:EDA設(shè)計(jì)報(bào)告
EDA
多 功 能 數(shù) 字 時(shí) 鐘
專業(yè):11級(jí)應(yīng)用電子技術(shù) 班級(jí):二班
學(xué)號(hào):110372021307 姓名:賀成林 指導(dǎo)老師:祝宏
日期:2012年6月29日
一、實(shí)驗(yàn)?zāi)康?/p>
1、課程設(shè)計(jì)是一實(shí)踐教學(xué)環(huán)節(jié),是針對(duì)《數(shù)字電子技術(shù)》課程的要求,結(jié)合實(shí)踐對(duì)學(xué)生進(jìn)行綜合設(shè)計(jì)性訓(xùn)練,在自學(xué)和實(shí)踐訓(xùn)練中培養(yǎng)學(xué)生理論聯(lián)系實(shí)踐和實(shí)踐動(dòng)手能力,獨(dú)立地解決實(shí)際問(wèn)題能力。
2、通過(guò)課程設(shè)計(jì)是使學(xué)生熟悉和了解可編程專用數(shù)字邏輯電路的設(shè)計(jì)、開(kāi)發(fā)流程,熟悉和了解現(xiàn)代EDA設(shè)計(jì)工具,掌握數(shù)字電子系統(tǒng)層次化的設(shè)計(jì)方法。
已知條件:MAX+Plus軟件
基本功能:
1、以數(shù)字形式顯示時(shí)、分、秒的時(shí)間;
2、小時(shí)計(jì)數(shù)器為24進(jìn)制;
3、分秒計(jì)數(shù)器為60進(jìn)制。
二、實(shí)驗(yàn)要求、綜合應(yīng)用《數(shù)字電子技術(shù)基礎(chǔ)》課程中的理論知識(shí)去獨(dú)立地完成一個(gè)設(shè)計(jì)課題;
2、熟悉和了解現(xiàn)代EDA設(shè)計(jì)、編程、編譯、仿真及下載技術(shù)的全過(guò)程。
三、EDA 技術(shù)介紹
1、EDA 技術(shù)概況
EDA 是電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation)的縮寫(xiě),在 20 世 紀(jì) 90 年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測(cè)試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來(lái)的。EDA 技術(shù)就是以計(jì)算機(jī)為工 具,設(shè)計(jì)者在 EDA 軟件平臺(tái)上,用硬件描述語(yǔ)言 HDL 完成設(shè)計(jì)文件,然后由計(jì)算機(jī) 自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局、布線和仿真,直至對(duì)于特 定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA 技術(shù)的出現(xiàn),極大地提 高了電路設(shè)計(jì)的效率和可*性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。
2、ALTERA QUARTUS II 軟件介紹
Quartus II 是 Altera 公司的綜合性 PLD 開(kāi)發(fā)軟件,支持原理圖、VHDL、VerilogHDL 以及 AHDL(Altera Hardware Description Language)等多種 設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件 配置的完整 PLD 設(shè)計(jì)流程。
四、關(guān)鍵詞
數(shù)字計(jì)數(shù)器、動(dòng)態(tài)顯示、快速校分、整點(diǎn)報(bào)時(shí)、時(shí)段控制。
五、實(shí)驗(yàn)步驟
1、秒計(jì)數(shù)器是60進(jìn)制的。當(dāng)下面的74161到9時(shí)等下一個(gè)脈沖來(lái)是向上面的74161計(jì)數(shù),到5時(shí)將兩個(gè)74161共同預(yù)置。從而實(shí)現(xiàn)00—59秒的計(jì)數(shù)功能。
電路圖如下:
進(jìn)行編譯及波形仿真,如下圖: 將上述文件保存并打包,如圖:
2、分計(jì)數(shù)器是60進(jìn)制的。功能如秒計(jì)數(shù)器。其電路圖如下:
波形圖仿真及打包圖如下:
3、小時(shí)計(jì)數(shù)器是24進(jìn)制的。當(dāng)下面的74161到9時(shí)等下一個(gè)脈沖來(lái)是向上面的74161計(jì)數(shù)。但是等到上面的記到2時(shí)下面的將不能超過(guò)4,所以等上面的記到2,下面的記到4時(shí)就將兩個(gè)74161共同預(yù)置。從而實(shí)現(xiàn)00—24秒的計(jì)數(shù)功能。
原理圖如下:
仿真的波形圖及打包的文件圖如下:
4、校時(shí)。校時(shí)是通過(guò)加快時(shí)分的計(jì)數(shù)速度來(lái)快速校準(zhǔn)時(shí)間的。實(shí)際上我們把秒脈沖cps加到分計(jì)數(shù)和時(shí)計(jì)數(shù)上,是他們加快計(jì)數(shù)速度。所以其中我們需要通過(guò)開(kāi)關(guān)來(lái)選擇。
原理圖及打包圖如下:
5、時(shí)段控制:時(shí)段控制是通過(guò)7485集成電路的數(shù)據(jù)比較來(lái)控制的。
原理圖及打包圖如下:
6、整點(diǎn)報(bào)時(shí):整點(diǎn)報(bào)時(shí)是通過(guò)整點(diǎn)時(shí)的二進(jìn)制數(shù)據(jù)規(guī)律來(lái)報(bào)時(shí)的。
原理圖及打包圖如下:
7、將時(shí)分秒打包文件連成多功能數(shù)字電路圖如下:
8、多功能數(shù)字鐘硬件測(cè)試原理圖如下:
9、部分制作過(guò)程圖,如下:
六、實(shí)驗(yàn)工具
裝有QuartusⅡ軟件的電腦,EDA開(kāi)發(fā)板,相關(guān)EDA設(shè)計(jì)方面的書(shū)籍。
七、設(shè)計(jì)中遇到問(wèn)題及解決方法
1、實(shí)驗(yàn)后期的引腳分配及下載方法不當(dāng),實(shí)驗(yàn)所用電腦沒(méi)有
quartus11.0 的 驅(qū)動(dòng)。耗費(fèi)時(shí)間較多。解決方法:參閱西安電子科技大學(xué)出版社出版的《數(shù)字電路設(shè)計(jì)及 Verilog HDL 實(shí)現(xiàn)》第 394 頁(yè)關(guān)于引腳分配和下載驗(yàn)證的介紹;
2、下載驗(yàn)證過(guò)程中時(shí)段控制部分有錯(cuò)誤,原代碼在軟件上仿真沒(méi)有錯(cuò)誤,但是下載到實(shí)驗(yàn)板驗(yàn)證時(shí),出現(xiàn)錯(cuò)誤。解決方法:通過(guò)去請(qǐng)教同學(xué)及查閱相關(guān)資料得到解決。
八、特點(diǎn)和實(shí)用性
利用 QuartusII 軟件,結(jié)合所學(xué)的數(shù)字電路的知識(shí)設(shè)計(jì)一個(gè) 24 時(shí)多功能數(shù) 字鐘,具有正常分、秒計(jì)時(shí),動(dòng)態(tài)顯示、快速校分、整點(diǎn)報(bào)時(shí)、時(shí)段控制的功能。分析整個(gè)電路的工作原理,分別說(shuō)明各子模塊的設(shè)計(jì)原理和調(diào)試、仿真、編 程下載的過(guò)程,并對(duì)最終結(jié)果進(jìn)行總結(jié),最后提出在實(shí)驗(yàn)過(guò)程中出現(xiàn)的問(wèn)題和解 決的方案。通過(guò)實(shí)驗(yàn)掌握一些邏輯組合器件的基本功能和用法,同時(shí)體會(huì)利用軟件設(shè)計(jì) 電路的方便快捷,避免硬件布線的繁瑣,提高效率。
九、心得體會(huì)
1、設(shè)計(jì)必須要有整體概念,提前熟悉軟件。剛開(kāi)始時(shí)沒(méi)頭緒,不知道該怎 樣分塊,進(jìn)度很慢,加上對(duì)軟件不是很熟悉,比如:封裝要注意哪些,哪些不能 運(yùn)行,哪些是不正確的操作等等,走了很多冤枉路。
2、設(shè)計(jì)的模塊要分塊調(diào)試,免得等所有都完工了再調(diào)試出錯(cuò),那樣的話很 難確定是什么出錯(cuò),更加沒(méi)頭緒。有必要的話做一部分后就送到平臺(tái)上調(diào)試,這 樣會(huì)大大減少出錯(cuò)率。
3、沒(méi)有硬件軟件化的概念,開(kāi)始設(shè)計(jì)時(shí)沒(méi)有總體的規(guī)劃,不知道什么是可行 的,什么是封裝,怎樣使搭配組合最優(yōu)化。
4、遇到問(wèn)題先自己摸索,查閱資料要有技巧,避免沒(méi)有目的和思路。明白 自己要解決什么問(wèn)題。同時(shí)請(qǐng)教老師,和同學(xué)交流。良好的溝通很重要。針對(duì)本次的畢業(yè)設(shè)計(jì),用我國(guó)著名的數(shù)學(xué)家的話概括一下我的感受: “科學(xué)上沒(méi)有平坦的大道,真理長(zhǎng)河中有無(wú)數(shù)礁石險(xiǎn)灘。只有不為畏攀登的采藥者,只有不怕 巨浪的弄潮兒,才能登上高峰采得仙草,深入水底覓得驪珠?!?/p>
十、參閱教材及文獻(xiàn)
1、蔣立平編著《數(shù)字電路》.南京理工大學(xué)翻??;
2、南京理工大學(xué)電子技術(shù)中心編著.《EDA 設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)》 南京理工大學(xué),2008 年;
3、譚會(huì)生,張昌凡.《EDA 技術(shù)及應(yīng)用》.西安電子科技大學(xué)出版社,2001年;
4、《數(shù)字電路設(shè)計(jì)及 Verilog HDL 實(shí)現(xiàn)》 西安電子科技大學(xué)出版社出版;
5、《電子線路實(shí)驗(yàn)設(shè)計(jì)與仿真講義》。
第四篇:EDA實(shí)習(xí)報(bào)告
EDA實(shí)驗(yàn)報(bào)告
系別:
班級(jí):
姓名:
學(xué)號(hào):
目錄
1.EDA介紹
2.Quartus II軟件介紹
3.實(shí)習(xí)任務(wù)
4.封裝引腳圖
5.設(shè)計(jì)程序
6.結(jié)果顯示
7.實(shí)習(xí)心得
1.EDA介紹
EDA是電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation)縮寫(xiě)。EDA技術(shù)是以計(jì)算機(jī)為工具,根據(jù)硬件描述語(yǔ)言HDL(Hardware Description language)完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合及優(yōu)化、布局布線、仿真以及對(duì)于特定目標(biāo)芯片的適配編譯和編程下載等工作。硬件描述語(yǔ)言HDL是相對(duì)于一般的計(jì)算機(jī)軟件語(yǔ)言,如:C、PASCAL而言的。HDL語(yǔ)言使用與設(shè)計(jì)硬件電子系統(tǒng)的計(jì)算機(jī)語(yǔ)言,它能描述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接方式。設(shè)計(jì)者可利用HDL程序來(lái)描述所希望的電路系統(tǒng),規(guī)定器件結(jié)構(gòu)特征和電路的行為方式;然后利用綜合器和適配器將此程序編程能控制FPGA和CPLD內(nèi)部結(jié)構(gòu),并實(shí)現(xiàn)相應(yīng)邏輯功能的的門級(jí)或更底層的結(jié)構(gòu)網(wǎng)表文件或下載文件。目前,就FPGA/CPLD開(kāi)發(fā)來(lái)說(shuō),比較常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[1]。
幾乎所有適于大學(xué)生做的數(shù)字邏輯電路實(shí)驗(yàn)都可以在計(jì)算機(jī)上利用EDA(Electronic Design Automatic—電子設(shè)計(jì)自動(dòng)化)軟件進(jìn)行設(shè)計(jì)、仿真,只有極少量外部配件不能在計(jì)算機(jī)上進(jìn)行仿真。因此,在實(shí)驗(yàn)前期階段,即實(shí)驗(yàn)預(yù)習(xí)階段的主要應(yīng)用工具是EDA軟件,利用EDA軟件可以設(shè)計(jì)、仿真實(shí)驗(yàn)課題,進(jìn)行虛擬實(shí)驗(yàn)。通過(guò)虛擬實(shí)驗(yàn)使實(shí)驗(yàn)者在進(jìn)入真實(shí)實(shí)驗(yàn)前就能對(duì)預(yù)做的實(shí)驗(yàn)有相當(dāng)?shù)牧私?,甚至可以預(yù)測(cè)到實(shí)驗(yàn)的結(jié)果。這樣在實(shí)際做實(shí)驗(yàn)時(shí),可以把許多設(shè)計(jì)型實(shí)驗(yàn)的難度降低,同時(shí)能有更多的時(shí)間讓實(shí)驗(yàn)者動(dòng)手做實(shí)驗(yàn),研究問(wèn)題,提高實(shí)驗(yàn)效率。當(dāng)前數(shù)字電路設(shè)計(jì)已由計(jì)算機(jī)輔助設(shè)計(jì)進(jìn)入到以計(jì)算機(jī)為主的設(shè)計(jì)時(shí)代。
2.Quartus II 是Altera公司的綜合性PLD開(kāi)發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫(kù),使用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三放EDA工具。
此外,Quartus II 通過(guò)和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開(kāi)發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開(kāi)發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開(kāi)發(fā)平臺(tái)。
Maxplus II 作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前Altera已經(jīng)停止了對(duì)Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設(shè)計(jì)輔助工具,集成了SOPC和HardCopy設(shè)計(jì)流程,并且繼承了Maxplus II 友好的圖形界面及簡(jiǎn)便的使用方法。
3.1 設(shè)計(jì)信號(hào)發(fā)生器使其能在儀器上顯示正弦、三角、方波、鋸齒波(其中的兩種波形)
2設(shè)計(jì)頻率計(jì)使其能測(cè)出制定波形的頻率
4.波形發(fā)生器封裝引腳圖
5.波形發(fā)生器程序(正弦波,方波)
Boxing4
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY boxing4 IS PORT(RIN:in std_logic;
clk: IN std_logic;SINT:in std_logic_VECTOR(1 downto 0);--set:in std_logic;--_vector;--(1 downto 0);rs,rw,en,lcdon,lcdbon : OUT STD_LOGIC;YOUT:out std_logic_vector(7 downto 0);data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END boxing4;ARCHITECTURE fwm OF boxing4 IS
TYPE states IS(clear_display,set_initial,set_cgram,write_cgram,set_addram1,diaplay_cgram,set_addram2,diaplay_cgrom);--clear_display-清屏;--set_initial-初始化設(shè)置;--set_cgram-設(shè)置 cgram 地址;--write_cgram-字模寫(xiě)入 cgram;--set_addram1-設(shè)置顯示 cgram 字符的 addram 地址;--diaplay_cgram-顯示 cgram 字符;--set_addram2-設(shè)置顯示 cgrom 字符的 addram 地址;--diaplay_cgrom-顯示 cgrom 字符 SIGNAL state:states;TYPE ram_array0 IS ARRAY(0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0);--定義 ram_array0 為二維數(shù)組
TYPE ram_array1 IS ARRAY(0 TO 7)OF ram_array0;--定義 ram_array1 為三維數(shù)組 SIGNAL lcd_clk : STD_LOGIC;SIGNAL data1,data2,data3:INTEGER RANGE 0 TO 9;--signal n:std_logic;SIGNAL net1,net2:std_logic_vector(7 downto 0);--signal net3:std_logic;
COMPONENT choice4_1
PORT(s:in std_logic_vector(1 downto 0);
d1,d2: in std_logic_vector(7 downto 0);
y: out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT fangbo PORT(clkf,rf:in std_logic;
qf:out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT sin PORT(clksin,rsin:in std_logic;
da:out std_logic_vector(7 downto 0));END COMPONENT;BEGIN u1: fangbo PORT MAP(clkf=>CLK,rf=>RIN,qf=>net1);u2: sin PORT MAP(clksin=>CLK,rsin=>RIN,da=>net2);u3: choice4_1 PORT MAP(s=>SINT,d1=>net1,d2=>net2,y=>YOUT);en <=lcd_clk;rw<= '0';lcdon<='1';lcdbon<='1';data1<=1;data2<=2;data3<=5;
PROCESS(clk)
CONSTANT m : INTEGER:=50000;--50M 分頻到 1kHz。
VARIABLE cout : INTEGER RANGE 0 TO 50000000:=0;BEGIN
IF clk'EVENT AND clk='0' THEN cout:=cout+1;
IF cout<=m/2 THEN lcd_clk<='1';
ELSIF cout ELSE cout:=0; END IF; END IF; END PROCESS; PROCESS(lcd_clk)CONSTANT cgram : ram_array1:=(--自定義 8 個(gè) 5*8 字符的字模(X“00”,X“0E”,X“00”,X“0E”,X“00”,X“1F”,X“00”,X“00”),--SAN(X“04”,X“1F”,X“04”,X“07”,X“05”,X“09”,X“13”,X“01”),--FANG(X“00”,X“1f”,X“04”,X“04”,X“17”,X“14”,X“14”,X“1f”),--ZHENG(X“0E”,X“02”,X“0E”,X“08”,X“08”,X“0e”,X“02”,X“0e”),--ZUO XIAN(X“04”,X“1E”,X“04”,X“08”,X“1e”,X“04”,X“09”,X“1f”),--YOU XIAN(X“00”,X“13”,X“0A”,X“03”,X“1a”,X“02”,X“0a”,X“13”),--ZUO BO(X“08”,X“1F”,X“09”,X“1E”,X“14”,X“08”,X“14”,X“03”),--YOU BO(X“18”,X“18”,X“07”,X“08”,X“08”,X“08”,X“07”,X“00”)--℃字符數(shù)據(jù)存儲(chǔ)器); VARIABLE datacnt:INTEGER RANGE 0 TO 15; VARIABLE cnt: STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE num:INTEGER RANGE 0 TO 7;BEGIN--wait until net3='0';RISING_EDGE(lcd_clk); IF RISING_EDGE(lcd_clk)THEN --if sint=“00”then case sint is when “11”=> CASE state IS WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏 WHEN set_initial=> IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--設(shè)置功能:8 位,兩行,5×8/每字符,重復(fù) 3 次 ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--顯示模式:完成一個(gè)字符碼傳送后,AC 自動(dòng)加 1;顯 ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--顯示控制:顯示開(kāi),光標(biāo)關(guān),光標(biāo)不閃爍 ELSE rs<='0';datacnt:=0;state <= set_cgram; END IF; WHEN set_cgram=>rs<='0';--設(shè)置 CGRAM 字符地址 data<=“01000000”+cnt;state<=write_cgram;--設(shè)置 CGRAM 字符地址 000 IF num <8 THEN cnt:=cnt+“00001000”;--設(shè)置 CGRAM 字符地址加 1 END IF; WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址寫(xiě)入對(duì)應(yīng)的 8 個(gè) 5*8 字符字模 data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--寫(xiě)入 CGRAM 字符地址 000 的 5*8--字符字模 IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--寫(xiě)入下一個(gè)自定義--的 5*8 字符字模 IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 個(gè) 5*8 字符字模寫(xiě)--入完成 END IF; END IF; WHEN set_addram1=>rs<='0';--設(shè)置 ADDRAM 地址 1 data<=“10000000”;state<=diaplay_cgram; WHEN diaplay_cgram=>rs<='1';--顯示 ADDRAM 地址對(duì)應(yīng)的 CGRAM 字符 --if sint=“00”then IF datacnt=0 THEN data<=X“02”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“03”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data <= X“04”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“05”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“06”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--顯示 cgrom 中指定的 ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1; ELSE data<=X“20”;datacnt:=0;state <= set_addram2; END IF; WHEN set_addram2=>rs<='0';--設(shè)置 ADDRAM 地址 2 data<=“11000000”;state<=diaplay_cgrom; WHEN diaplay_cgrom=>rs<='1'; IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1; ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1; ELSE data<=X“56”;datacnt:=0;state <= set_addram1; END IF; END CASE; --end if; when “01”=> --elsif sint =“01”then CASE state IS WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏 WHEN set_initial=> IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--設(shè)置功能:8 位,兩行,5×8/每字符,重復(fù) 3 次 ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--顯示模式:完成一個(gè)字符碼傳送后,AC 自動(dòng)加 1;顯 ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--顯示控制:顯示開(kāi),光標(biāo)關(guān),光標(biāo)不閃爍 ELSE rs<='0';datacnt:=0;state <= set_cgram; END IF; WHEN set_cgram=>rs<='0';--設(shè)置 CGRAM 字符地址 data<=“01000000”+cnt;state<=write_cgram;--設(shè)置 CGRAM 字符地址 000 IF num <8 THEN cnt:=cnt+“00001000”;--設(shè)置 CGRAM 字符地址加 1 END IF; WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址寫(xiě)入對(duì)應(yīng)的 8 個(gè) 5*8 字符字模 data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--寫(xiě)入 CGRAM 字符地址 000 的 5*8--字符字模 IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--寫(xiě)入下一個(gè)自定義--的 5*8 字符字模 IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 個(gè) 5*8 字符字模寫(xiě)--入完成 END IF; END IF; WHEN set_addram1=>rs<='0';--設(shè)置 ADDRAM 地址 1 data<=“10000000”;state<=diaplay_cgram; WHEN diaplay_cgram=>rs<='1';--顯示 ADDRAM 地址對(duì)應(yīng)的 CGRAM 字符 --if sint=“00”then IF datacnt=0 THEN data<=X“01”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“05”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data <= X“06”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--顯示 cgrom 中指定的 ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1; ELSE data<=X“20”;datacnt:=0;state <= set_addram2; END IF; WHEN set_addram2=>rs<='0';--設(shè)置 ADDRAM 地址 2 data<=“11000000”;state<=diaplay_cgrom; WHEN diaplay_cgrom=>rs<='1'; IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1; ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1; ELSE data<=X“56”;datacnt:=0;state <= set_addram1; END IF; END CASE; --end if; when others =>null; end case; END IF;end process;END fwm; Choice4-1 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; --程序包 entity choice4_1 is --定義實(shí)體 port(s:in std_logic_vector(1 downto 0); --信號(hào)選擇端口s d1,d2: in std_logic_vector(7 downto 0);--d1d2d3d4分別連接四個(gè)波形發(fā)生模塊 y: out std_logic_vector(7 downto 0));--定義輸出信號(hào)端口 end choice4_1;architecture behav of choice4_1 is --結(jié)構(gòu)體 begin process(s) begin case s is --case when語(yǔ)句進(jìn)行信號(hào)位的選擇 when “01”=>y<=d1; when “11”=>y<=d2; when others=>null; end case;end process; --進(jìn)程結(jié)束 end behav; --結(jié)構(gòu)體結(jié)束 fangbo library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fangbo is port(clkf,rf:in std_logic;qf:out std_logic_vector(7 downto 0));end entity;architecture behav of fangbo is signal a:bit;begin process(clkf,rf)--計(jì)數(shù)分頻 variable cnt:integer range 0 to 256;begin if(rf='0')then a<='0';elsif clkf'event and clkf='1' then if cnt<255 then--進(jìn)行分頻 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;process(clkf,a)--信號(hào)輸出 begin if clkf'event and clkf='1' then if a='1' then qf<=“11111111”;else qf<=“00000000”;end if;end if;end process;end behav; sin library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sin is port(clksin,rsin:in std_logic;da:out BIT_vector(7 downto 0));end entity;architecture behav of sin is signal a:bit;begin process(clksin,rsin)--計(jì)數(shù)分頻 variable cnt:integer range 0 to 256;begin if(rsin='0')then a<='0';elsif clksin'event and clksin='1' then if cnt<4 then--進(jìn)行分頻 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;--process(clksin,a)process(a) variable tmp:std_logic_vector(7 downto 0);variable d:BIT_vector(7 downto 0);begin--if a='0' then--d:=“00000000”;--elsif clksin'event and clksin='1' then if a'event and a='1' then if tmp=“00111111” then tmp:=“00000000”;else tmp:=tmp+1;end if;case tmp is when “00000000”=>d:=“11111111”;when “00000001”=>d:=“11111110”;when “00000010”=>d:=“11111100”;when “00000011”=>d:=“11111001”;when “00000100”=>d:=“11110101”;when “00000101”=>d:=“11101111”;when “00000110”=>d:=“11101001”;when “00000111”=>d:=“11100001”;when “00001000”=>d:=“11011001”;when “00001001”=>d:=“11001111”;when “00001010”=>d:=“11000101”;when “00001011”=>d:=“10111010”;when “00001100”=>d:=“10101110”;when “00001101”=>d:=“10100010”;when “00001110”=>d:=“10010110”;when “00001111”=>d:=“10001010”;when “00010000”=>d:=“01111100”;when “00010001”=>d:=“01100000”;when “00010010”=>d:=“01100011”;when “00010011”=>d:=“01010111”;when “00010100”=>d:=“01001011”;when “00010101”=>d:=“01000000”;when “00010110”=>d:=“00110101”;when “00010111”=>d:=“00101011”;when “00011000”=>d:=“00100010”;when “00011001”=>d:=“00011010”;when “00011010”=>d:=“00010011”;when “00011011”=>d:=“00001101”;when “00011100”=>d:=“00001000”;when “00011101”=>d:=“00000001”;when “00011110”=>d:=“00000001”;when “00011111”=>d:=“00000000”;when “00100000”=>d:=“00000000”;when “00100001”=>d:=“00000001”;when “00100010”=>d:=“00000001”;when “00100011”=>d:=“00001000”;when “00100100”=>d:=“00001101”;when “00100101”=>d:=“00010011”;when “00100110”=>d:=“00011010”;when “00100111”=>d:=“00100010”;when “00101000”=>d:=“00101011”;when “00101001”=>d:=“00110101”;when “00101010”=>d:=“01000000”;when “00101011”=>d:=“01001011”;when “00101100”=>d:=“01010111”;when “00101101”=>d:=“01100011”;when “00101110”=>d:=“01100000”;when “00101111”=>d:=“01111100”;when “00110000”=>d:=“10001001”;when “00110001”=>d:=“10010110”;when “00110010”=>d:=“10100010”;when “00110011”=>d:=“10101110”;when “00110100”=>d:=“10111010”;when “00110101”=>d:=“11000101”;when “00110110”=>d:=“11011001”;when “00110111”=>d:=“11011001”;when “00111000”=>d:=“11100001”;when “00111001”=>d:=“11101001”;when “00111010”=>d:=“11101111”;when “00111011”=>d:=“11110101”;when “00111100”=>d:=“11111001”;when “00111101”=>d:=“11111100”;when “00111110”=>d:=“11111110”;when “00111111”=>d:=“11111111”;when others=>null;end case;end if;da<=d SRL 1;--幅度調(diào)整 end process;end behav; 頻率計(jì) 1、頻率產(chǎn)生器: library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic;q: out std_logic_vector(26 downto 0));end lpm_counter0;architecture syn of lpm_counter0 is signal sub_wire0 : std_logic_vector(26 downto 0);component lpm_counter generic(lpm_direction : string; lpm_port_updown : string;lpm_type : string;lpm_width : natural);port(clock : in std_logic; q : out std_logic_vector(26 downto 0));end component;begin q <= sub_wire0(26 downto 0);lpm_counter_component : lpm_counter generic map(lpm_direction => “up”,lpm_port_updown => “port_unused”,lpm_type => “l(fā)pm_counter”,lpm_width => 27)port map(clock => clock,q => sub_wire0);end syn; 2、測(cè)頻控制信號(hào)發(fā)生器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;--1Hz信號(hào) tsten:out std_logic;--計(jì)數(shù)器使能信號(hào) clr_cnt:out std_logic;--計(jì)數(shù)器清零信號(hào) load:out std_logic);--鎖存器輸出控制信號(hào) end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk)begin if clk'event and clk='1'then div2clk<=not div2clk;--div2clk為0.5Hz end if;end process;process(clk ,div2clk)begin if(clk='0'and div2clk='0')then clr_cnt<='1';--當(dāng)div2clk與clk同時(shí)為零時(shí)計(jì)數(shù)器清零 else clr_cnt<='0';--當(dāng)div2clk處于的高電平時(shí)計(jì)數(shù)器計(jì)數(shù) end if;end process;load<=not div2clk;--鎖存器輸出與計(jì)數(shù)器使能信號(hào)反相 tsten<=div2clk;end art; 3、有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic;--clk:計(jì)數(shù)器時(shí)鐘,clr:清零信號(hào),en:計(jì)數(shù)使能信號(hào) q: out std_logic_vector(3 downto 0);--q:4位計(jì)數(shù)結(jié)果輸出 c10: out std_logic);--計(jì)數(shù)進(jìn)位 end cnt10;architecture art of cnt10 is signal cqi: std_logic_vector(3 downto 0);begin process(clk,clr)begin if clr='1' then cqi<=“0000”;--當(dāng)輸入的clr_cnt為低電平1時(shí)清零 elsif clk'event and clk='1' then if en='1' then--當(dāng)輸入的tesen為高電平1時(shí)允許計(jì)數(shù) if(cqi<9)then cqi<=cqi+1;else cqi<=“0000”;--等于9則計(jì)數(shù)器清零 end if;--當(dāng)輸入的tesen為低電平0時(shí)禁止計(jì)數(shù),鎖定計(jì)數(shù)值 end if;end if;end process;--產(chǎn)生進(jìn)位 process(cqi)begin if cqi=“1001” then c10<='1';--當(dāng)加的9時(shí)產(chǎn)生進(jìn)位輸出 else c10<='0';end if;end process;q<=cqi;end art;4、16位鎖存器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(load: in std_logic;--輸出鎖存控制信號(hào) din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end reg16b;architecture art of reg16b is begin process(load,din)begin if load'event and load='1'then--load為高電平時(shí)teten為低電平,計(jì)數(shù)器禁止 dout<=din;--鎖存輸入的數(shù)據(jù) end if;end process;end art; 5、數(shù)碼管控制器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom is port(clk:in std_logic;--數(shù)碼管掃描頻率 datain: in std_logic_vector(15 downto 0);--鎖存器輸入的16位信號(hào) dataout: out std_logic_vector(3 downto 0);-輸出至譯碼器的4位信號(hào) com: out std_logic_vector(3 downto 0));--輸出數(shù)碼管選擇信號(hào) end ledcom;architecture art of ledcom is signal comclk: std_logic_vector(1 downto 0);begin--comclk同掃描頻率clk循環(huán)變化 process(clk)begin if rising_edge(clk)then if comclk>=3 then comclk <=“00”; else comclk<=comclk+1;end if;end if;end process;--數(shù)碼管選擇 process(comclk)begin case comclk is when “00” => com<=“1000”;when “01” => com<=“0100”;when “10” => com<=“0010”;when “11” => com<=“0001”;when others =>NULL;end case;end process;--對(duì)應(yīng)數(shù)碼管的輸出 process(comclk,datain)begin case comclk is when “11”=> dataout<=datain(3 downto 0);when “10”=> dataout<=datain(7 downto 4);when “01”=> dataout<=datain(11 downto 8);when “00”=> dataout<=datain(15 downto 12);when others =>NULL;end case;end process;end art; 6、七段數(shù)碼管的譯碼器 library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0);--數(shù)碼管控制器輸入四位信號(hào) d_out: out std_logic_vector(7 downto 0));--輸出8位信號(hào) end ymq;--第8位d_out[7]為逗號(hào) architecture art of ymq is begin process(d_in)begin case d_in is--第8位為1高電平逗號(hào)不顯示 when “0000” => d_out<=“11000000”;--0 when “0001” => d_out<=“11111001”;--1 when “0010” => d_out<=“10100100”;--2 when “0011” => d_out<=“10110000”;--3 when “0100” => d_out<=“10011001”;--4 when “0101” => d_out<=“10010010”;--5 when “0110” => d_out<=“10000010”;--6 when “0111” => d_out<=“11111000”;--7 when “1000” => d_out<=“10000000”;--8 when “1001” => d_out<=“10010000”;--9 when others =>NULL;end case;end process;end art; 7、元件聲明及例化將各個(gè)元器件依據(jù)設(shè)計(jì)相連 library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic;led: out std_logic_vector(7 downto 0);ledc: out std_logic_vector(3 downto 0));end lx;architecture art of lx is component lpm_counter0--待調(diào)用的頻率生成器端口定義 PORT(clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(26 DOWNTO 0));end component;--十進(jìn)制計(jì)數(shù)器 component cnt10--待調(diào)用的有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器端口定義 port(clk,clr,en: in std_logic;q: out std_logic_vector(3 downto 0);c10: out std_logic);end component;--16位鎖存器 component reg16b--待調(diào)用的32位鎖存器端口定義 port(load: in std_logic;din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end component;--測(cè)頻控制器 component testpl--待調(diào)用的測(cè)頻控制信號(hào)發(fā)生器端口定義 port(clk:in std_logic;tsten:out std_logic;clr_cnt:out std_logic;load:out std_logic);end component;--數(shù)碼管選擇器 component ledcom--待調(diào)用的數(shù)碼管選擇器端口定義 port(clk:in std_logic;datain: in std_logic_vector(15 downto 0);dataout: out std_logic_vector(3 downto 0);com: out std_logic_vector(3 downto 0));end component;--譯碼器 component ymq--待調(diào)用的譯碼器端口定義 port(d_in: in std_logic_vector(3 downto 0);d_out: out std_logic_vector(7 downto 0));end component;signal clk1,clk2,clk3: std_logic;--clk1為1Hz信號(hào),clk2為被測(cè)信號(hào),clk3為數(shù)碼管掃描信號(hào) signal tsten,clr,load: std_logic;signal c1,c2,c3,c4: std_logic;signal qout,rout: std_logic_vector(15 downto 0);signal datao: std_logic_vector(3 downto 0);begin u0:testpl port map(clk1,tsten,clr,load);u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1);u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2);u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3);u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4);u5:reg16b port map(load,qout(15 downto 0),rout);u6:ledcom port map(clk3,rout,datao,ledc);u8:ymq port map(datao,led);u9:lpm_counter0 port map(clk,q(25)=>clk1,q(15)=>clk2,q(17)=>clk3);end art; 6.結(jié)果顯示 7.實(shí)習(xí)心得 貴州師范大學(xué)學(xué)生 實(shí)習(xí)報(bào)告 科目:EDA實(shí)習(xí) 專業(yè): 電氣工程及其自動(dòng)化 班級(jí): 10電氣 姓名: 李啟應(yīng) 學(xué)號(hào): 101401010202 實(shí)驗(yàn)項(xiàng)目名稱:數(shù)字電子鐘的設(shè)計(jì) 實(shí)驗(yàn)項(xiàng)目性質(zhì):普通試驗(yàn) 所屬課程名稱:VHDL程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)VHDL語(yǔ)言的一些基本特點(diǎn)。2 掌握VHDL程序的基本結(jié)構(gòu)。3掌握VHDL程序設(shè)計(jì)方法。要能夠用vhdl語(yǔ)言讀懂并編寫(xiě)eda程序,對(duì)eda設(shè)計(jì)的總體框架能有較好的把握,掌握各模塊的調(diào)用方式。 二、實(shí)驗(yàn)內(nèi)容和要求 設(shè)計(jì)一個(gè)數(shù)字時(shí)鐘,顯示時(shí)(2位),分(2位),秒(2位),具體要求是:具有時(shí)分秒計(jì)數(shù)顯示功能,以24小時(shí)循環(huán)計(jì)時(shí);數(shù)碼管動(dòng)態(tài)顯示時(shí),分,秒;具有清零功能。 在軟件工具平臺(tái)上,進(jìn)行VHDL語(yǔ)言的各模塊編程輸入、編譯實(shí)現(xiàn)和仿真驗(yàn)證。 三、實(shí)驗(yàn)主要儀器設(shè)備和材料 計(jì)算機(jī),開(kāi)發(fā)環(huán)境MAX-PLUSII,ZY11EDA實(shí)驗(yàn)系統(tǒng),VHDL語(yǔ)言。 四、實(shí)驗(yàn)方法、步驟及結(jié)果測(cè)試 1、設(shè)計(jì)思路: 數(shù)字鐘的主體是計(jì)數(shù)器,它記錄并顯示接收到的秒脈沖個(gè)數(shù),其中秒和分位60進(jìn)制計(jì)數(shù)器,小時(shí)為24進(jìn)制計(jì)數(shù)器,分別產(chǎn)生3位BCD碼。BCD碼經(jīng)譯碼,驅(qū)動(dòng)后接數(shù)碼顯示電路。 根據(jù)實(shí)驗(yàn)要求,將設(shè)計(jì)分為5個(gè)主要部分,時(shí)功能模塊、分功能模塊、秒功能模塊、掃描儀功能模塊和7段LED功能模塊。在時(shí)、分、秒模塊中,包括復(fù)位和預(yù)置數(shù),其主要思路如下: 秒鐘的模塊:設(shè)計(jì)一個(gè)60進(jìn)制的計(jì)數(shù)器,以clk為其時(shí)鐘信號(hào),每60個(gè)clk后產(chǎn) 生一個(gè)進(jìn)位信號(hào)CF給分鐘模塊,作為分鐘進(jìn)程的響應(yīng)信號(hào)。秒鐘模塊VHDL程序見(jiàn)附錄1: 仿真波形如下: 封裝如下圖: 分鐘的模塊:同理于秒鐘的模塊,設(shè)計(jì)一個(gè)60進(jìn)制的計(jì)數(shù)器,以CFM為其時(shí)鐘信號(hào),每60個(gè)CFM后產(chǎn)生一個(gè)進(jìn)位信號(hào)CFM給小時(shí)模塊,作為小時(shí)模塊進(jìn)程的響應(yīng)信號(hào)。分鐘模塊VHDL程序見(jiàn)附錄二: 仿真波形如下: 封裝如下圖: 小時(shí)的模塊:為24進(jìn)制計(jì)數(shù)器,在分的進(jìn)位信號(hào)CFM的激發(fā)下計(jì)數(shù),從0到23的時(shí)候產(chǎn)生一個(gè)信號(hào)CFH,全部清0,重新開(kāi)始計(jì)時(shí)。小時(shí)模塊VHDL程序見(jiàn)附錄三: 仿真波形如下: 封裝如下圖: 掃描儀模塊:在掃描儀內(nèi)部,有一個(gè)3-8譯碼器的片選信號(hào),當(dāng)3-8譯碼器的片選信號(hào)為000時(shí),片選信號(hào)選中7段LED模塊中的秒的個(gè)位,當(dāng)3-8譯碼器的片選信號(hào)為001時(shí),片選信號(hào)選中7段LED模塊中的秒的十位,當(dāng)3-8譯碼器的片選信號(hào)為010時(shí),片選信號(hào)選中7段LED模塊中的分的個(gè)位,當(dāng)3-8譯碼器的片選信號(hào)為011時(shí),片選信號(hào)選中7段LED模塊中的分的十位,當(dāng)3-8譯碼器的片選信號(hào)為100時(shí),片選信號(hào)選中7段LED模塊中的時(shí)的個(gè)位,當(dāng)3-8譯碼器的片選信號(hào)為101時(shí),片選信號(hào)選中7段LED模塊中的時(shí)的十位,就這樣動(dòng)態(tài)掃描,當(dāng)輸入的時(shí)鐘信號(hào)頻率很高的時(shí)候,就形成了我們的時(shí)鐘。 掃描儀模塊VHDL程序見(jiàn)附錄四: 仿真波形如下: 封裝如下圖: 7段LED模塊:根據(jù)動(dòng)態(tài)掃描儀的片選信號(hào)來(lái)依次點(diǎn)亮我們所需的時(shí)間。7段LED模塊VHDL程序見(jiàn)附錄五: 仿真波形如下: 封裝如下圖: 綜合以上5大模塊,把它們用線連接起來(lái)就得到我們的總的電路圖:如下圖所示: 其工作原理為:掃描儀3-8譯碼器的片選信號(hào)根據(jù)時(shí)分秒的輸入選中7段LED模塊,然后再由時(shí)分秒中產(chǎn)生的3位BCD碼來(lái)輸出秒的個(gè)位,十位、時(shí)的個(gè)位,十位、小時(shí)的個(gè)位,十位。 4.總結(jié): 在實(shí)驗(yàn)這兩周的時(shí)間里,我們做過(guò)DC觸發(fā)器、DQ觸發(fā)器、3-8譯碼器、二選一電路和四選一電路等,最后綜合做了數(shù)字時(shí)鐘電路,通過(guò)這次實(shí)習(xí),我對(duì)用VHDL來(lái)編程有了更深的了解,在要編程的時(shí)候,我學(xué)會(huì)了分模塊進(jìn)行,因?yàn)橐婚_(kāi)始的時(shí)候設(shè)計(jì)一個(gè)時(shí)鐘系統(tǒng)比較麻煩,沒(méi)有分模塊之前總是會(huì)有差錯(cuò),而之后思路就會(huì)比較清晰,有明確的方案,在對(duì)照書(shū)本里的編程規(guī)則與語(yǔ)句,就完成了這次的設(shè)計(jì),總之就是獲益良多。附錄1:秒鐘模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port(clk,reset:in std_logic;cf:out std_logic;second1_out:out std_logic_vector(3 downto 0);second10_out:out std_logic_vector(2 downto 0));end entity second;architecture one of second is signal second1n:std_logic_vector(3 downto 0);signal second10n:std_logic_vector(2 downto 0);begin second1_out<=second1n;second10_out<=second10n;process(clk,reset)begin if(reset='1')then second1n<=“0000”;second10n<=“000”;elsif(clk' event and clk='1')then if(second1n=“1001”)then 7 second1n<=“0000”;if(second10n=“101”)then second10n<=“000”;cf<='1';else second10n<=second10n+1;end if;else second1n<=second1n+1;end if;end if;end process;end architecture one;附錄二:分鐘模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port(clk,reset:in std_logic;cf:out std_logic;minute1_out:out std_logic_vector(3 downto 0);minute10_out:out std_logic_vector(2 downto 0));end entity minute;architecture one of minute is signal minute1n:std_logic_vector(3 downto 0);signal minute10n:std_logic_vector(2 downto 0);begin minute1_out<=minute1n;minute10_out<=minute10n;process(clk,reset)begin if(reset='1')then minute1n<=“0000”;minute10n<=“000”;elsif(clk' event and clk='1')then if(minute1n=“1001”)then minute1n<=“0000”;if(minute10n=“101”)then minute10n<=“000”;cf<='1';else minute10n<=minute10n+1;end if;else minute1n<=minute1n+1;end if;end if;end process;end architecture one;附錄三:小時(shí)模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(clk,reset:in std_logic;hour1_out:out std_logic_vector(3 downto 0);hour10_out:out std_logic_vector(1 downto 0));end entity hour;architecture one of hour is signal hour1n:std_logic_vector(3 downto 0);signal hour10n:std_logic_vector(1 downto 0);begin hour1_out<=hour1n;hour10_out<=hour10n;process(clk,reset)begin if(reset='1')then hour1n<=“0000”;hour10n<=“00”;elsif(clk' event and clk='1')then if(hour1n=“1001”or(hour1n=“0011”and hour10n=“0010”))then hour1n<=“0000”;if(hour10n=“10”)then hour10n<=“00”;else hour10n<=hour10n+1;end if;else hour1n<=hour1n+1;end if;end if;end process;end architecture one;附錄四:掃描儀模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity saomiaoyi is port(clk:in std_logic;reset:in std_logic;second1,minute1,hour1:in std_logic_vector(3 downto 0);second_10,minute_10:in std_logic_vector(2 downto 0);hour_10:in std_logic_vector(1 downto 0);dataout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end entity saomiaoyi;architecture one of saomiaoyi is signal count:std_logic_vector(2 downto 0);begin sel<=count;process(clk,reset)begin if(reset='1')then dataout<=“0000”;elsif(clk'event and clk='1')then if count>=“101” then count<=“000”;else count<=count+1;end if;end if;case count is when“000”=>dataout<=second1;when“001”=>dataout<='0'& second_10;when“010”=>dataout<=minute1;when“011”=>dataout<='0'& minute_10;when“100”=>dataout<=hour1;when others =>dataout<=“00”& hour_10;end case;end process;end architecture one; 附錄五:7段LED模塊VHDL程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY led_7 IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END entity led_7;ARCHITECTURE one OF led_7 IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F” 0 WHEN “0001” => LED7S <= “0000110”;--X“06” 1 WHEN “0010” => LED7S <= “1011011”;--X“5B” 2 WHEN “0011” => LED7S <= “1001111”;--X“4F” 3 WHEN “0100” => LED7S <= “1100110”;--X“66” 4 WHEN “0101” => LED7S <= “1101101”;--X“6D” 5 WHEN “0110” => LED7S <= “1111101”;--X“7D” 6 WHEN “0111” => LED7S <= “0000111”;--X“07” 7 WHEN “1000” => LED7S <= “1111111”;--X“7F” 8 WHEN “1001” => LED7S <= “1101111”;--X“6F” 9 WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE one;第五篇:EDA實(shí)習(xí)報(bào)告