第一篇:EDA課程設(shè)計(jì)八位乘法器
EDA課程設(shè)計(jì)報(bào)告
實(shí)驗(yàn)名稱:八位乘法器 實(shí)驗(yàn)地點(diǎn):@@@@ 班級:@@@@@ 學(xué)號:@@@@@ 姓名:@@@@
目錄
一.引言
1.1 EDA技術(shù)的概念?? 1.2 EDA技術(shù)的特點(diǎn)?? 1.3 EDA設(shè)計(jì)流程?? 1.4 VHDL介紹??
二. 八位乘法器的設(shè)計(jì)要求與設(shè)計(jì)思路??2.1 設(shè)計(jì)目的??
2.2 設(shè)計(jì)要求??
三. 八位乘法器的綜合設(shè)計(jì)??
3.1 八位乘法器功能??
3.2 八位乘法器設(shè)計(jì)方案??
3.3 八位乘法器實(shí)體設(shè)計(jì)??
3.4 八位乘法器VHDL設(shè)計(jì)??
3.5八位乘法器仿真圖形?? 心得體會?? 參考文獻(xiàn)??
一、引言
1.1 EDA技術(shù)的概念
EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)的縮寫,在20世紀(jì)90年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來的。EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。
1.2 EDA技術(shù)的特點(diǎn)
利用EDA技術(shù)進(jìn)行電子系統(tǒng)的設(shè)計(jì),具有以下幾個特點(diǎn):① 用軟件的方式設(shè)計(jì)硬件;② 用軟件方式設(shè)計(jì)的系統(tǒng)到硬件系統(tǒng)的轉(zhuǎn)換是由有關(guān)的開發(fā)軟件自動完成的;③ 設(shè)計(jì)過程中可用有關(guān)軟件進(jìn)行各種仿真;④ 系統(tǒng)可現(xiàn)場編程,在線升級;⑤ 整個系統(tǒng)可集成在一個芯片上,體積小、功耗低、可靠性高。因此,EDA技術(shù)是現(xiàn)代電子設(shè)計(jì)的發(fā)展趨勢。1.3 EDA設(shè)計(jì)流程 典型的EDA設(shè)計(jì)流程如下:
1、文本/原理圖編輯與修改。首先利用EDA工具的文本或圖形編輯器將設(shè)計(jì)者的設(shè)計(jì)意圖用文本或圖形方式表達(dá)出來。
2、編譯。完成設(shè)計(jì)描述后即可通過編譯器進(jìn)行排錯編譯,變成特定的文本格式,為下一步的綜合做準(zhǔn)備。
3、綜合。將軟件設(shè)計(jì)與硬件的可實(shí)現(xiàn)性掛鉤,是將軟件轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。
4、行為仿真和功能仿真。利用產(chǎn)生的網(wǎng)表文件進(jìn)行功能仿真,以便了解設(shè)計(jì)描述與設(shè)計(jì)意圖的一致性。
5、適配。利用FPGA/CPLD布局布線適配器將綜合后的網(wǎng)表文件針對某
一具體的目標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件配臵、邏輯分割、邏輯優(yōu)化、布局布線。適配報(bào)告指明了芯片內(nèi)資源的分配與利用、引腳鎖定、設(shè)計(jì)的布爾方程描述情況。
6、功能仿真和時(shí)序仿真。
7、下載。如果以上的所有過程都沒有發(fā)現(xiàn)問題,就可以將適配器產(chǎn)生的下載文件通過FPGA/CPLD下載電纜載入目標(biāo)芯片中。
8、硬件仿真與測試。1.4硬件描述語言(VHDL)
VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可是部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對一個設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本。
1.用VHDL代碼而不是用原理圖進(jìn)行設(shè)計(jì),意味著整個電路板的模型及性能可用計(jì)算機(jī)模擬進(jìn)行驗(yàn)證。
2.VHDL元件的設(shè)計(jì)與工藝無關(guān),與工藝獨(dú)立,方便工藝轉(zhuǎn)換。3.VHDL支持各種設(shè)計(jì)方法,自頂向下、自底向上或者混合的都可以。4.可以進(jìn)行從系統(tǒng)級到邏輯級的描述,即混合描述。
5.VHDL區(qū)別于其他的HDL,已形成標(biāo)準(zhǔn),其代碼在不同的系統(tǒng)中可交換建模。二、八位乘法器的設(shè)計(jì)要求與設(shè)計(jì)思路
2.1 設(shè)計(jì)目的
本次設(shè)計(jì)的目的就是通過實(shí)踐深入理解EDA技術(shù)并掌握VHDL硬件描述語言的設(shè)計(jì)方法和思想。通過學(xué)習(xí)的VHDL語言結(jié)合電子電路的設(shè)計(jì)知識理論聯(lián)系實(shí)際,掌握所學(xué)的課程知識和基本單元電路的綜合設(shè)計(jì)應(yīng)用。通過對八位乘法器的設(shè)計(jì),鞏固和綜合運(yùn)用所學(xué)知識,提高設(shè)計(jì)能力,提高分析、解決
計(jì)算機(jī)技術(shù)實(shí)際問題的獨(dú)立工作能力。2.2 設(shè)計(jì)要求。
設(shè)計(jì)一個乘法器的模塊,接受實(shí)驗(yàn)系統(tǒng)上的連續(xù)脈沖,當(dāng)給定啟動/清零指令時(shí),能自動發(fā)出CLK信號驅(qū)動乘法預(yù)算,當(dāng)8個脈沖后自動停止。設(shè)計(jì)一個純組合電路的8*8等于16位的乘法器(選擇不同的流水線方式),具體說明并比較這幾種乘法器的邏輯資源占用情況和運(yùn)行速度情況。通過獨(dú)立的設(shè)計(jì),能夠完整的完成老師分配的課程設(shè)計(jì)任務(wù)。通過對電梯控制系統(tǒng)的設(shè)計(jì),掌握所學(xué)EDA課程的基本知識和對VHDL語言的綜合設(shè)計(jì)應(yīng)用。通過課程設(shè)計(jì),提高設(shè)計(jì)能力,提高分析解決實(shí)際問題的能力,并在設(shè)計(jì)中了解硬件編程的流程和思路,為以后工作和發(fā)揮技術(shù)打下基礎(chǔ)。三、八位乘法器的綜合設(shè)計(jì)
3.1 八位乘法器功能
由8位加法器構(gòu)成的以時(shí)序邏輯方式設(shè)計(jì)的8位乘法器,此乘法器具有一定的實(shí)用價(jià)值。其乘法原理是:乘法通過逐項(xiàng)位移相加原理來實(shí)現(xiàn),從被乘數(shù)的最低位開始,若為1,則乘數(shù)左移后與上一次和相加;若為0,左移后以全零相加,直至被乘數(shù)的最高位。圖中,ARICTL是乘法運(yùn)算控制電路,它的START(可鎖定于引腳I/O 49)信號的上跳沿與高電平有兩個功能,即16位寄存器清零和被乘數(shù)A[7..0]向移位寄存器SREG8B加載:它的低電平則作為乘法使能信號。乘法時(shí)鐘信號從ARICTL的CLK輸入。當(dāng)被乘數(shù)加載于8位右移寄存器SREG8B后,隨著每一時(shí)鐘節(jié)拍,最低位在前,由低位至高位逐位移出。當(dāng)為1時(shí),與門ANDARITH打開,8為乘數(shù)B[7..0]在同一節(jié)拍進(jìn)入8位加法器,與上一次鎖存在16位鎖存器REG16B中的高8位進(jìn)行相加,其和在下一時(shí)鐘節(jié)拍的上升沿被鎖進(jìn)此鎖存器。而當(dāng)被乘數(shù)移出位為0時(shí),與門全零輸出。如此往復(fù),直至8個時(shí)鐘脈沖后,由ARICTL的控制,乘法運(yùn)算過程自動中止。ARIEND輸出高電平,以此可點(diǎn)亮一發(fā)光管,以示乘法結(jié)束。此時(shí)REG16B的輸出值即為最后乘積。
3.2 八位乘法器設(shè)計(jì)方案
方案一:八位直接寬位加法器,它的速度較快,但十分耗費(fèi)硬件資源,對于工業(yè)化設(shè)計(jì)是不合理的。
方案二:由兩個四位加法器組合八位加法器,其中四位加法器是四位二進(jìn)制并行加法器,它的原理簡單,資源利用率和進(jìn)位速度等方面較好,綜合各方面的考慮,決定采用第二種方案。
3.3 八位加法器設(shè)計(jì)思路
純組合邏輯構(gòu)成的乘法器雖然工作速度較快,但過于占用硬件資源,難以實(shí)現(xiàn)寬位乘法器,由八位加法器構(gòu)成的以時(shí)序邏輯方式設(shè)計(jì)的八位乘法器,具有一定的使用價(jià)值。而且由FPGA構(gòu)成實(shí)驗(yàn)系統(tǒng)后,可以很容易的用ASIC大型集成芯片來完成,性價(jià)比高,可操作性強(qiáng)。其乘法原理是:乘法通過逐項(xiàng)移位相加原理來完成,從被乘數(shù)的最低位開始,若為1,則乘數(shù)左移后于上一次的和相加;若為0左移后以全零相加,直至被乘數(shù)的最高位。3.5八位乘法器各功能模塊VHDL描述
1.library ieee;--四位二進(jìn)制并行加法器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b is port(cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end;architecture one of add4b is signal sint,aa,bb:std_logic_vector(4 downto 0);begin aa<='0' & a;bb<='0' & b;sint<=aa+bb+cin;5
s<=sint(3 downto 0);cout<=sint(4);end;2.library ieee--由兩個四位二進(jìn)制并行加法器級聯(lián)而成的八位二進(jìn)制加法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b is port(cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end;architecture one of adder8b is component add4b--對要調(diào)用的元件add4b的端口進(jìn)行說明
port(cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal carryout: std_logic;begin u1:add4b port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);u2:add4b port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);end;3.library ieee--一位乘法器;6
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity andarith is port(abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end;architecture one of andarith is begin process(abin,din)begin for i in 0 to 7 loop dout(i)<=din(i)and abin;end loop;end process;end;4.library ieee;--乘法運(yùn)算控制器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl is port(clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end;architecture one of arictl is signal cnt4b:std_logic_vector(3 downto 0);begin rstall<=start;process(clk,start)begin
if start='1' then cnt4b<=“0000”;elsif clk'event and clk='1' then if cnt4b<8 then--小于8則計(jì)數(shù),等于8則表明乘法運(yùn)算已經(jīng)結(jié)束
cnt4b<=cnt4b+1;end if;end if;end process;process(clk,cnt4b,start)begin if start='0' then if cnt4b<8 then clkout<=clk;ariend<='0';else clkout<='0';ariend<='1';end if;else clkout<=clk;ariend<='0';end if;end process;end;5.library ieee;--16位鎖存器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end;architecture one of reg16b is signal r16s:std_logic_vector(15 downto 0);
begin process(clk,clr)begin if clr='1' then r16s<=“***0”;elsif clk'event and clk='1' then r16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end process;q<=r16s;end;6.library ieee;--8位右移寄存器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sreg8b is port(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end;architecture one of sreg8b is signal reg8:std_logic_vector(7 downto 0);begin process(clk,load)begin if clk'event and clk='1' then if load='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1);end if;end if;
end process;qb<=reg8(0);end;7.library ieee;--8位乘法器頂層設(shè)計(jì) use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mult8x8 is port(clk:in std_logic;start:in std_logic;a,b:in std_logic_vector(7 downto 0);dout:out std_logic_vector(15 downto 0);ariend:out std_logic);end;architecture struc of mult8x8 is component adder8b is port(cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end component;component andarith is port(abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end component;component arictl is port(clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end component;
component reg16b is port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end component;component sreg8b is port(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;signal gndint :std_logic;signal intclk :std_logic;signal rstall :std_logic;signal qb :std_logic;signal andsd :std_logic_vector(7 downto 0);signal dtbin :std_logic_vector(8 downto 0);signal dtbout :std_logic_vector(15 downto 0);begin dout<=dtbout;gndint<='0';u1:arictl port map(clk,start,intclk,rstall,ariend);u2:sreg8b port map(intclk,rstall,b,qb);u3:andarith port map(qb,a,andsd);u4:adder8b port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));u5:reg16b port map(intclk,rstall,dtbin,dtbout);end;3.5八位乘法器仿真圖形 輸入波形圖
輸出波形圖
時(shí)序RTL電路
心得體會
@@@@@這個自己編去吧。。
參考文獻(xiàn)
⑴ 王愛英.計(jì)算機(jī)組成與結(jié)構(gòu).北京:清華大學(xué)出版社,2001.2 ⑵ 黃仁欣.EDA技術(shù)實(shí)用教程.北京:清華大學(xué)出版社,2006 ⑶ 曹昕燕,周鳳臣,聶春燕.EDA技術(shù)實(shí)驗(yàn)與課程設(shè)計(jì).北京:清華大學(xué)出版社,2006.5 ⑷ 楊亦華,延明.數(shù)字電路EDA入門.北京:北京郵電大學(xué)出版社,2003 ⑸ 鄒彥,莊嚴(yán),鄒寧,王宇鴻《EDA技術(shù)與數(shù)字系統(tǒng)設(shè)計(jì)>北京:電子工業(yè)出版社,2008 ⑹ 潘松 ,黃繼業(yè)《EDA技術(shù)與VHDL》,北京,清華大學(xué)出版社,2006(7)潘松 ,黃繼業(yè)《EDA技術(shù)實(shí)用教程》,北京,科學(xué)出版社,2006
第二篇:EDA 課程設(shè)計(jì)
《電子系統(tǒng)設(shè)計(jì)自動化》課程設(shè)計(jì)報(bào)告
學(xué) 院: 機(jī)電工程學(xué)院
題 目: 數(shù)字時(shí)鐘電路設(shè)計(jì) 課 程: 《電子系統(tǒng)設(shè)計(jì)自動化》課程設(shè)計(jì) 專業(yè)班級: 電信10級2 班 學(xué)生姓名: 劉星 秦玉杰 王艷艷 學(xué) 號: 1004101035 1004101036 1004101038
完成日期:2013年 12 月 27 日
摘要:
EDA(Electronic Design Automation)電子設(shè)計(jì)自動化,就是以大規(guī)??删幊唐骷樵O(shè)計(jì)載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達(dá)方式,通過相關(guān)的軟件,自動完成用軟件方式設(shè)計(jì)的電子系統(tǒng)到硬件系統(tǒng),最終形成集成電子系統(tǒng)或?qū)S眉尚酒?。本次?shí)習(xí)利用QuartusII為設(shè)計(jì)軟件、VHDL為硬件描述語言,結(jié)合所學(xué)的數(shù)字電路的知識設(shè)計(jì)一個24時(shí)多功能數(shù)字鐘,具有正常時(shí)、分、秒計(jì)時(shí),動態(tài)顯示,清零、快速校時(shí)校分、整點(diǎn)報(bào)時(shí)、花樣顯示等功能。利用硬件描述語言VHDL對設(shè)計(jì)系統(tǒng)的各個子模塊進(jìn)行邏輯描述,采用模塊化的設(shè)計(jì)思想完成頂層模塊的設(shè)計(jì),通過軟件編譯、邏輯化簡、邏輯分割、邏輯綜合優(yōu)化、邏輯布線、邏輯仿真,最終將設(shè)計(jì)的軟件系統(tǒng)下載設(shè)計(jì)實(shí)驗(yàn)系統(tǒng),對設(shè)計(jì)的系統(tǒng)進(jìn)行硬件測試。
一、課程設(shè)計(jì)基本要求和任務(wù)
《EDA課程設(shè)計(jì)》是繼《模擬電子技術(shù)基礎(chǔ)》、《數(shù)字電子技術(shù)基礎(chǔ)》課程后,電信專業(yè)學(xué)生在電子技術(shù)實(shí)驗(yàn)技能方面綜合性質(zhì)的實(shí)驗(yàn)訓(xùn)練課程,是電子技術(shù)基礎(chǔ)的一個部分。1.1 目的和任務(wù)
(1)通過課程設(shè)計(jì)使學(xué)生能熟練掌握一種EDA軟件(QUARTUSII)的使用方法,能熟練進(jìn)行設(shè)計(jì)輸入、編譯、管腳分配、下載等過程,為以后進(jìn)行工程實(shí)際問題的研究打下設(shè)計(jì)基礎(chǔ)。
(2)通過課程設(shè)計(jì)使學(xué)生能利用EDA軟件(QUARTUSII)進(jìn)行至少一 個電子技術(shù)綜合問題的設(shè)計(jì),設(shè)計(jì)輸入可采用圖形輸入法或VHDL硬件描述語言輸入法。(3)通過課程設(shè)計(jì)使學(xué)生初步具有分析、尋找和排除電子電路中常見 故障的能力。
(4)通過課程設(shè)計(jì)使學(xué)生能獨(dú)立寫出嚴(yán)謹(jǐn)?shù)?、有理論根?jù)的、實(shí)事求是的、文理通順的字跡端正的課程設(shè)計(jì)報(bào)告。1.2 功能要求:
(1)具有時(shí)、分、秒計(jì)數(shù)顯示功能,以24小時(shí)循環(huán)計(jì)時(shí)。(2)時(shí)鐘計(jì)數(shù)顯示時(shí)有LED燈的花樣顯示。(3)具有調(diào)節(jié)小時(shí)、分鐘、秒及清零的功能。(4)具有整點(diǎn)報(bào)時(shí)功能。
1.3 總體方框圖:
本系統(tǒng)可以由秒計(jì)數(shù)器、分鐘計(jì)數(shù)器、小時(shí)計(jì)數(shù)器、整點(diǎn)報(bào)時(shí)、分的調(diào)整以及小時(shí)的調(diào)整和一個頂層文件構(gòu)成。采用自頂向下的設(shè)計(jì)方法,子模塊利用VHDL語言設(shè)計(jì),頂層文件用原理圖的設(shè)計(jì)方法。顯示:小時(shí)采用24進(jìn)制,而分鐘均是采用6進(jìn)制和10進(jìn)制的組合。1.4 設(shè)計(jì)原理:
數(shù)字鐘電路設(shè)計(jì)要求所設(shè)計(jì)電路就有以下功能:時(shí)、分、秒計(jì)時(shí)顯示,清零,時(shí)、分調(diào)節(jié),整點(diǎn)報(bào)時(shí)及花樣顯示。分、秒計(jì)時(shí)原理相似,可以采用60進(jìn)制BCD碼計(jì)數(shù)器進(jìn)計(jì)時(shí);小時(shí)采用24進(jìn)制BCD碼進(jìn)行計(jì)時(shí);在設(shè)計(jì)時(shí)采用試驗(yàn)電路箱上的模式7電路,不需要進(jìn)行譯碼電路的設(shè)計(jì);所設(shè)計(jì)電路具有驅(qū)動揚(yáng)聲器和花樣顯示的LED燈信號產(chǎn)生。試驗(yàn)箱模式7的電路如圖一所示:圖一模式七實(shí)驗(yàn)電路圖
1.5 性能指標(biāo)及功能設(shè)計(jì):
(1)時(shí)鐘計(jì)數(shù):完成時(shí)、分、秒的正確計(jì)時(shí)并且顯示所計(jì)的數(shù)字;對秒、分——60進(jìn)制計(jì)數(shù),即從0到59循環(huán)計(jì)數(shù),時(shí)鐘——24進(jìn)制計(jì)數(shù),即從0到23循環(huán)計(jì)數(shù),并且在數(shù)碼管上顯示數(shù)值。
2.2 模塊劃分自頂向下分解
2.3 模塊描述
時(shí)鐘計(jì)時(shí)模塊完成時(shí)、分、秒計(jì)數(shù),及清零、調(diào)節(jié)時(shí)和分鐘的功能。時(shí)、分、秒計(jì)數(shù)的原理相同,均為BCD碼輸出的計(jì)數(shù)器,其中分和秒均為六十進(jìn)制BCD碼計(jì)數(shù)器,小時(shí)為二十四進(jìn)制BCD碼計(jì)數(shù)器。設(shè)計(jì)一個具有異步清零和設(shè)置輸出功能的六十進(jìn)制BCD碼計(jì)數(shù)器,再設(shè)計(jì)一個具有異步清零和設(shè)置輸出功能的二十四進(jìn)制計(jì)數(shù)器,然后將它們通過一定的組合構(gòu)成時(shí)鐘計(jì)時(shí)模塊。各個輸入/輸出端口的作用為:
(1)clk為計(jì)時(shí)時(shí)鐘信號,reset為異步清零信號;
(2)sethour為小時(shí)設(shè)置信號,setmin為分鐘設(shè)置信號;(3)daout[5?0]為小時(shí)的BCD碼輸出, daout[6...0]為秒和分鐘的BCD碼輸出,enmin和enhour為使能輸出信號。
(4)在時(shí)鐘整點(diǎn)的時(shí)候產(chǎn)生揚(yáng)聲器驅(qū)動信號和花樣顯示信號。由時(shí)鐘計(jì)時(shí)模塊中分鐘的進(jìn)行信號進(jìn)行控制。當(dāng)contr_en為高電平時(shí),將輸入信號clk送到輸出端speak用于驅(qū)動揚(yáng)聲器,同時(shí)在clk的控制下,輸出端lamp[2..0]進(jìn)行循環(huán)移位,從而控制LED燈進(jìn)行花樣顯示。輸出控制模塊有揚(yáng)聲器控制器和花樣顯示控制器兩個子模塊組成 2.4 頂層電路圖
頂層文件是由四個模塊組成,分別是時(shí)、分、秒計(jì)數(shù)器和報(bào)警的VHDL語言封裝而成。經(jīng)過鎖定引腳再重新編譯獲得如下頂層原理電路圖:
三、方案實(shí)現(xiàn)
3.1 各模塊仿真及描述
(1)秒計(jì)數(shù)器模塊仿真圖:將標(biāo)準(zhǔn)秒信號送入”秒計(jì)數(shù)器”,秒計(jì)數(shù)器采用60進(jìn)制計(jì)數(shù)器,每累計(jì)60秒發(fā)出一個分脈沖信號,該信號將作為分計(jì)數(shù)器的時(shí)鐘脈沖,daout代表秒輸出。
(2)分計(jì)數(shù)器電路仿真圖:也采用60進(jìn)制計(jì)數(shù)器,每累計(jì)60分鐘,發(fā)出一個時(shí)脈沖信號,該信號將被送到時(shí)計(jì)數(shù)器,daout端口代表分鐘輸出
(3)小時(shí)計(jì)數(shù)器電路仿真圖:時(shí)計(jì)數(shù)器采用12進(jìn)制計(jì)時(shí)器,可實(shí)現(xiàn)對24小時(shí)累 計(jì)。每累計(jì)12小時(shí),發(fā)出一個脈沖信號。
引腳配置完成后再進(jìn)行一次全程編譯,無誤則可以下載到試驗(yàn)箱上進(jìn)行硬件測試。硬件驗(yàn)證的方法如下:選擇實(shí)驗(yàn)?zāi)J?;時(shí)鐘脈沖clk與clock0(1024Hz)信號相連;鍵8和鍵5均為低電平,時(shí)鐘正常計(jì)時(shí),數(shù)碼管1和2顯示秒,數(shù)碼管4和5顯示分鐘,數(shù)碼管7和8顯示小時(shí);鍵8為高電平時(shí),時(shí)鐘清零;鍵5為高電平時(shí),按下鍵7和鍵4進(jìn)行調(diào)時(shí)調(diào)分操作;當(dāng)時(shí)鐘為整點(diǎn)的時(shí)候,三個發(fā)光二極管進(jìn)行循環(huán)移位操作,同時(shí)揚(yáng)聲器發(fā)聲。
五、心得體會
經(jīng)過源程序的編輯、邏輯綜合、邏輯適配、編程下載成功后,在EDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件驗(yàn)證時(shí)卻發(fā)現(xiàn)實(shí)驗(yàn)結(jié)果不正確,揚(yáng)聲器無法發(fā)聲。經(jīng)檢查,自己設(shè)計(jì)的管腳文件有錯。將管腳鎖定文件修改后,重新進(jìn)行邏輯適配、編程下載成功后,實(shí)驗(yàn)結(jié)果仍然不正確,百思不得其解。無奈之下,決定重頭開始排查每一步的細(xì)節(jié),確定各個模塊的功能完全實(shí)現(xiàn)并且頂層模塊功能正確。修改之后,重新進(jìn)行邏輯適配、編程下載驗(yàn)證,實(shí)驗(yàn)結(jié)果完全正確。
這次EDA課程設(shè)計(jì)歷時(shí)兩個星期,在整整兩個星期的日子里,不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多書本上學(xué)不到的知識,同時(shí)鍛煉了自己的能力,使自己對以后的路有了更加清楚的認(rèn)識,對未來有了更多的信心。這次課程設(shè)計(jì),進(jìn)一步加深了我對EDA的了解,使我對QuartusII的基本操作有所了解,使我對應(yīng)用軟件的方法設(shè)計(jì)硬件系統(tǒng)有了更加濃厚的興趣。通過這次課程設(shè)計(jì),我懂得了理論與實(shí)際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合,從實(shí)踐中得出結(jié)論,才能真正提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中,我遇到許多問題,畢竟是第一次應(yīng)用VHDL進(jìn)行硬件電路系統(tǒng)的設(shè)計(jì),許多EDA的知識還沒有充分的掌握,遇到困難也是在所難免的,同時(shí)發(fā)現(xiàn)了自己的不足之處:學(xué)習(xí)知識表面化,沒有深入了解它們的原理。總的來說,這次設(shè)計(jì)的數(shù)字時(shí)鐘電路還是比較成功的,盡管在設(shè)計(jì)中遇到了很多問題,最后在老師的辛勤指導(dǎo)、同學(xué)的幫助和自己不斷思考下,終于迎刃而解,有點(diǎn)小小的成就感,覺得平時(shí)所學(xué)的知識有了實(shí)用的價(jià)值,達(dá)到了理論與實(shí)際相結(jié)合的目的。最后,對給過我?guī)椭乃型瑢W(xué)和指導(dǎo)老師再次表示忠心的感謝!
參考文獻(xiàn)
[1] 崔健明.《電子電工EDA仿真技術(shù)》 高等教育出版社 2000年 [2] 盧杰,賴毅.《VHDL與數(shù)字電路設(shè)計(jì)》 科學(xué)出版社 2001年 [3] 潘松,黃繼業(yè).《EDA技術(shù)實(shí)用教程》 科學(xué)出版社 2002年 [4] 朱運(yùn)利.《EDA技術(shù)應(yīng)用》 電子工業(yè)出版社 2004年 [5] 張明.《VHDL實(shí)用教程》 電子科技大學(xué)出版社 1999年
[6] 彭介華.《電子技術(shù)課程設(shè)計(jì)與指導(dǎo)》 高等教育出版 1997年
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS PORT(clk,clk1,reset,sethour:IN STD_LOGIC;enhour:OUT STD_LOGIC;daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY minute;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enhour_1, enhour_2: STD_LOGIC;--enmin_1為59分時(shí)的進(jìn)位信號 BEGIN--enmin_2由clk調(diào)制后的手動調(diào)時(shí)脈沖信號串 daout<=count;enhour_2<=(sethour and clk1);--sethour為手動調(diào)時(shí)控制信號,高電平有效 enhour<=(enhour_1 or enhour_2);PROCESS(clk,reset,sethour)BEGIN IF(reset='0')THEN--若reset為0,則異步清零 count<=“0000000”;ELSIF(clk'event and clk='1')THEN--否則,若clk上升沿到 IF(count(3 DOWNTO 0)=“1001”)THEN--若個位計(jì)時(shí)恰好到“1001”即9 IF(count <16#60#)THEN--又若count小于16#60#,即60 IF(count=“1011001”)THEN--又若已到59D enhour_1<='1';--則置進(jìn)位為1 count<=“0000000”;--count復(fù)0 ELSE count<=count+7;--若count未到59D,則加7,即作“加6校正” END IF;--使前面的16#60#的個位轉(zhuǎn)變?yōu)?421BCD的容量 ELSE count<=“0000000”;--count復(fù)0(有此句,則對無效狀態(tài)電路可自啟動)END IF;--END IF(count<16#60#)ELSIF(count <16#60#)THEN count<=count+1;--若count<16#60#則count加1 enhour_1<='0' after 100 ns;--沒有發(fā)生進(jìn)位 ELSE count<=“0000000”;--否則,若count不小于16#60# count復(fù)0 END IF;--END IF(count(3 DOWNTO 0)=“1001”)END IF;--END IF(reset='0')END process;END fun;
3、時(shí)計(jì)數(shù)器模塊的VHDL語言:
LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
IF(clk'event and clk='1')THEN IF(dain=“0000000”)THEN speak<=count1(1);IF(count1>=“10”)THEN count1<=“00”;--count1為三進(jìn)制加法計(jì)數(shù)器 ELSE count1<=count1+1;END IF;END IF;END IF;END PROCESS speaker;lamper:PROCESS(clk)BEGIN IF(rising_edge(clk))THEN IF(count<=“10”)THEN IF(count=“00”)THEN lamp<=“001”;--ELSIF(count=“01”)THEN lamp<=“010”;ELSIF(count=“10”)THEN lamp<=“100”;END IF;count<=count+1;ELSE count<=“00”;END IF;END IF;END PROCESS lamper;END fun;
循環(huán)點(diǎn)亮三只燈
第三篇:《EDA課程設(shè)計(jì)》
《EDA課程設(shè)計(jì)》
課程設(shè)計(jì)題目:
基于單片機(jī)的溫濕度采集系統(tǒng)
姓
名:
xxx
學(xué)
班
時(shí)
地
號:
xxxx
級:
xxxx
間:
2014.4.21~ 2013.5.5
點(diǎn):
xxxxx
指 導(dǎo)
老
師:
xxxxx
目錄
一、電路原理圖..................................................................................2
二、電路PCB圖(或?qū)嵨飯D).........................................................2
三、電路效果圖..................................................................................3
四、設(shè)計(jì)總結(jié)......................................................................................3 附錄(單片機(jī)源代碼)......................................................................4
一、電路原理圖
二、電路PCB圖(或?qū)嵨飯D)
三、電路效果圖
四、設(shè)計(jì)總結(jié)
EDA的實(shí)驗(yàn)還是挺有趣的,比較講究動手能力,當(dāng)然也不能忽略團(tuán)體合作??偟膩碚f本次實(shí)驗(yàn)還是成功了,雖然每個環(huán)節(jié)都遇到了困難。在生成原理圖的過程中,就曾把導(dǎo)線畫成了Placeline而不是Placewire,還有芯片的引腳應(yīng)該用NET符號而不是用文本符號,所以這些錯誤都導(dǎo)致我花在原理圖上的時(shí)間多了點(diǎn)。而在生成PCB電路圖的過程中遇到的困難則是自動布線之后,還有電源的幾個腳需要手動布線,所以各個元件之間的位置要布置好,以免發(fā)生短路。腐蝕的時(shí)候,由于腐蝕的時(shí)間太長了,有些碳都化開了,導(dǎo)致里面的銅被腐蝕掉了,所以又為我的工作增加了困難。在焊接的時(shí)候,要注意元件的正負(fù)極,還要檢測錫是否都與那些銅連接上了。最終把LED和 DHT11的程序燒進(jìn)去就行了。
本次實(shí)驗(yàn)我還是能多多少少學(xué)到點(diǎn)什么的,總的來說還是希望能有多一點(diǎn)這樣的實(shí)習(xí)。
附錄(單片機(jī)源代碼)
//51單片機(jī)控制溫濕度傳感器DHT11
LCD1602上顯示當(dāng)前機(jī)最小系統(tǒng)。//LCD 讀進(jìn)去 寫出來 #include
//定義無符號整型 #define uchar unsigned char typedef bit BOOL;
//此聲明一個布爾型變量即真或假// uchar data_byte,num,i;uchar RH,RL,TH,TL,flag;uchar shuzi[4];unsigned char code num1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
sbit dht=P2^4;
//dht11data端接單片機(jī)的P2^4口//
//***************
延
時(shí)
函
數(shù)************************************* void delay(uchar ms)//延時(shí)模塊//延時(shí)1毫秒
{
}
void delay1()
//一個for循環(huán)大概需要8個多機(jī)器周期
//一個機(jī)器周期為1us晶振為12MHz也就是說本函數(shù)延時(shí)8us{
} uchar i;
while(ms--)
for(i=0;i<110;i++);
uchar i;
for(i=0;i<1;i++);void display(void){ // if(flag==0)// {
P2=0x07;
P0=num1[shuzi[2]];delay(1);// }
// if(flag==1)// {
P2=0x0b;
P0=num1[shuzi[3]];delay(1);// } // if(flag==2)// {
P2=0x0d;
P0=num1[shuzi[0]];delay(1);// } // if(flag==3)// {
P2=0x0e;P0=num1[shuzi[1]];delay(1);// } }
//**************************dht11
測
試
某
塊*************************************// void start()//開始信號
{
dht=1;
delay1();
//主機(jī)發(fā)出8us高電平,開始信號開始發(fā)出 dht=0;
delay(25);
// 主機(jī)把總線拉低必須大于18ms
DHT11能檢測到起始信號
dht=1;
//delay1();
//以下三個延時(shí)函數(shù)差不多為24usdelay1();delay1();
20-40us
}
uchar receive_byte()
//接收一個字節(jié) 8位// {
uchar i,temp;
for(i=0;i<8;i++)//接收8bit的數(shù)據(jù)
{
while(!dht);
//等待40-50us的低電平開始信號結(jié)束
delay1();
//開始信號結(jié)束之后延時(shí)26us-28us
delay1();delay1();
temp=0;
//時(shí)間為26us-28usif(dht==1)
temp=1;
//如果26us-28us
'0'
數(shù)據(jù)為'1'
while(dht);
//
'0'為26us-28us
'1'為70us
} data_byte<<=1;
//data_byte|=temp;
//接收每一位的數(shù)據(jù),相或保存數(shù)據(jù)
return data_byte;}
void receive()//接收數(shù)據(jù)// {
uchar T_H,T_L,R_H,R_L,check,num_check,i;start();
//開始信號//調(diào)用開始信號子函數(shù)
dht=1;
//主機(jī)設(shè)為輸入判斷從機(jī)DHT11響應(yīng)信號
if(!dht)
//判斷從機(jī)是否有低電平響應(yīng)信號// {
while(!dht);//判斷從機(jī)發(fā)出 40us 的低電平響應(yīng)信號是否結(jié)束//
while(dht);
//判斷從機(jī)發(fā)出 40us 的高電平是否結(jié)束 如結(jié)束則從機(jī)進(jìn)入發(fā)送數(shù)據(jù)狀態(tài),主機(jī)進(jìn)入數(shù)據(jù)接收狀態(tài)
數(shù)
//兩個while語句加起來就是DHT11的響應(yīng)信號
R_H=receive_byte();//濕度高位
調(diào)用接受一個字節(jié)的子函
R_L=receive_byte();//濕度低位
T_H=receive_byte();//溫度高位
T_L=receive_byte();//溫度低位
check=receive_byte();//校驗(yàn)位
//結(jié)束信號
dht=0;
//當(dāng)最后一bit數(shù)據(jù)接完畢后主機(jī)拉低電平50us// for(i=0;i<7;i++)//差不多8us的延時(shí)
delay1();
dht=1;
//總線由上拉電阻拉高進(jìn)入空閑狀態(tài)
num_check=R_H+R_L+T_H+T_L;
if(num_check==check)//判斷讀到的四個數(shù)據(jù)之和是否與校驗(yàn)位相同
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
check=num_check;}
shuzi[0]=RH/10;shuzi[1]=RH%10;shuzi[2]=TH/10;shuzi[3]=TH%10;
} }
void main()//主函數(shù)模塊// { while(1)
//進(jìn)入死循環(huán)
{
receive();
//接收數(shù)據(jù)
display();
} }
第四篇:EDA課程設(shè)計(jì)
考試序號:28
自動打鈴系統(tǒng)設(shè)計(jì)說明書
學(xué) 生 姓 名:周文江
學(xué)
號:14112502521
專 業(yè) 班 級:1102
報(bào)告提交日期:2013.11.26
湖 南 理 工 學(xué) 院 物 電 學(xué) 院
目錄
一、題目及要求簡介……………3 1.設(shè)計(jì)題目…………………3 2.總體要求簡介……………3
二、設(shè)計(jì)方案說明……………3
三、系統(tǒng)采用器件以及模塊說明………3 1.系統(tǒng)框圖…………4 2.選擇的FPGA芯片及配置………4 3.系統(tǒng)端口和模塊說明…………5
四、各部分仿真結(jié)果………5
五、調(diào)試及總結(jié)………6
六、參考文獻(xiàn)……7
七、附錄………7
一、題目及要求簡介
1、設(shè)計(jì)題目
設(shè)計(jì)一個多功能自動打鈴系統(tǒng)
2、總體要求簡介
① 基本計(jì)時(shí)和顯示功能(24小時(shí)制顯示),包括:
1.24小時(shí)制顯示 2.動態(tài)掃描顯示; 3.顯示格式:88-88-88 ② 能設(shè)置當(dāng)前時(shí)間(含時(shí)、分)③ 能實(shí)現(xiàn)基本打鈴功能,規(guī)定:
06:00起床鈴,打鈴5s
二、設(shè)計(jì)方案說明
本次設(shè)計(jì)主要采用Verilog HDL硬件描述性語言、分模塊法設(shè)計(jì)的自動打鈴系統(tǒng)。由于這次用的開發(fā)板提供的是50M晶振。首先要對時(shí)鐘進(jìn)行分頻,當(dāng)計(jì)時(shí)到2FA_F07F時(shí)完成1s分頻,通過計(jì)時(shí)到60s產(chǎn)生分鐘進(jìn)位信號,再通過60分鐘產(chǎn)生時(shí)鐘進(jìn)位信號。最后通過6個寄存器對時(shí)分秒進(jìn)行鎖存最終輸出到8個數(shù)碼管上完成顯示。當(dāng)顯示時(shí)鐘和默認(rèn)鬧鐘時(shí)鐘相等時(shí),驅(qū)動打鈴模塊。通過key_mode,key_turn,key_change查看鬧鐘,時(shí)鐘顯示,調(diào)整時(shí)鐘。
三、系統(tǒng)采用器件以及模塊說明
1.系統(tǒng)框圖如下:
:下如圖框統(tǒng)系
2.選擇的FPGA芯片及配置:本次系統(tǒng)設(shè)計(jì)采用的FPGA芯片是Alter公司生產(chǎn)的Cyclone II EP2C8Q208C8。該芯片是208個管腳,138個IO,并且具有兩個內(nèi)部PLL,而且內(nèi)嵌乘法器,8K的邏輯門,資源相當(dāng)豐富。完成這次自動打鈴系統(tǒng)的設(shè)計(jì)總共消耗250個LE單元,22個IO口,131個寄存器。經(jīng)過綜合后,本系統(tǒng)最高能實(shí)現(xiàn)145M的運(yùn)行速度。通過Quartus II 軟件觀察到內(nèi)部的RTL圖如下
3.系統(tǒng)端口和模塊說明
(1)分頻部分
分頻器的作用是對50Mhz的系統(tǒng)時(shí)鐘信號進(jìn)行分頻,得到頻率為1hz的信號,即為1S的計(jì)時(shí)信號。
(2)按鍵部分
按鍵key_mode--0為顯示計(jì)時(shí),1為鬧鐘顯示,2為調(diào)整時(shí)間。按鍵key_turn—0為調(diào)整小時(shí),1為調(diào)整分鐘。按鍵key_change—每按一次加1(3)計(jì)時(shí)部分
通過sec_L,sec_H,min_L,min_H,hour_L,hour_H 6個寄存器對時(shí)分秒進(jìn)行鎖存然后送入數(shù)碼管顯示
(4)鬧鐘模塊
當(dāng)設(shè)定的鬧鐘時(shí)間和數(shù)碼管上顯示的時(shí)間相等時(shí)驅(qū)動鬧鐘,完成打鈴,持續(xù)時(shí)間5s。
(5)數(shù)碼管顯示模塊
顯示模塊是由8個位選8個段選構(gòu)成的顯示模塊,利用人眼的余暉效果完成動態(tài)掃描,顯示時(shí)間。
四、各部分仿真結(jié)果
測試文件如下:
module clock_tb;reg sysclk,rst_b;reg key_mode,key_turn,key_change;wire buzzer;
wire [7:0] led_sel,led_data;clock I_clock(.sysclk(sysclk),.rst_b(rst_b),.key_mode(key_mode),.key_change(key_change),.key_turn(key_turn),.buzzer(buzzer),.led_sel(led_sel),.led_data(led_data));initial begin sysclk = 1'b1;rst_b = 1'b0;//復(fù)位信號
#30 rst_b = 1'b1;end always #10 sysclk = ~sysclk;//輸入的系統(tǒng)時(shí)鐘,20ns的周期 endmodule
五、調(diào)試及總結(jié)
本次課程設(shè)計(jì)總共花費(fèi)了四天左右的時(shí)間,設(shè)計(jì)了自動打鈴系統(tǒng)。通過這次的設(shè)計(jì)更加熟悉了對EDA技術(shù)的了解和認(rèn)識,在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設(shè)計(jì)方法,使得設(shè)計(jì)更加的簡單和明了。在調(diào)試過程中,有些代碼的設(shè)計(jì)不規(guī)范性,導(dǎo)致時(shí)序相當(dāng)緩慢,甚至編譯綜合都會報(bào)錯。在不斷的修改下,發(fā)現(xiàn)時(shí)序電路和組合邏輯最好分開寫,這樣便于查錯,和修改代碼。畢竟Verilog HDL語言不同于C語言,不能以軟件的思想來設(shè)計(jì),而是要利用電路的思想來編程,這樣可以更好的節(jié)省資源,使得時(shí)序也比較的簡單明了。在以后的學(xué)習(xí)及程序設(shè)計(jì)當(dāng)中,我們一定要倍加小心,在程序出現(xiàn)不正常運(yùn)行的情況下要耐心調(diào)試,盡量做到精益求精。
最后通過這次EDA方面的課程設(shè)計(jì),提高了我們對EDA領(lǐng)域及通信電路設(shè)計(jì)領(lǐng)域的認(rèn)識,有利于培養(yǎng)我們在通信電路EDA方面的設(shè)計(jì)能力。有利于鍛煉我們獨(dú)立分析問題和解決問題的能力。
六、文獻(xiàn)參考
[1].王金明、左自強(qiáng) 編,《EDA技術(shù)與Verilog設(shè)計(jì)》科學(xué)出版社
2008.8 [2].杜慧敏、李宥謀、趙全良 編,《基于Verilog的FPGA設(shè)計(jì)基礎(chǔ)》 西安電子科技大學(xué)出版社 2006.2 [3].韓彬 編,《從零開始走進(jìn)FPGA世界》杭州無線電愛好者協(xié)會出版社 2011.8.20
七、附錄(實(shí)物圖及源碼)
module clock(//Input
sysclk,rst_b,key_mode,key_change,key_turn,//Output
buzzer,led_sel,led_data);
input sysclk,rst_b;//sysclk--global system clock,rst_b--global reset signal input key_mode;//mode choose.0--Timing function.1--Alarm clock function.2--adjust function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer;//device buzzer output [7:0] led_sel;//led tube bit choose
output [7:0] led_data;//led_tube 8 bit data choose
parameter init_hour = 8'h12;parameter init_min = 8'h59;parameter init_sec = 8'h50;//initial time :12:59:50 parameter init_alarm_hour = 8'h06;parameter init_alarm_min = 8'h30;//initial alarm time : 06:30:0 parameter Count_1s = 28'h2FA_F07F;//count time 1s;
reg [7:0] sec;reg [7:0] min;reg [7:0] hour;reg [3:0] min_L;//minute low 4 bit reg [3:0] min_H;//minute high 4 bit reg [3:0] hour_L;//hour low 4 bit reg [3:0] hour_H;//hour high 4 bit reg [23:0] key_time;//press key away shake reg key_mode_n;//press key_mode next state reg key_change_n;//press key_change next state reg key_turn_n;//press key_turn next state wire key_mode_press;//sure Button press key_mode wire key_turn_press;//sure button press key_turn wire key_change_press;//sure button press key_change
always @(posedge sysclk)key_mode_n <= key_mode;assign key_mode_press =(!key_mode)&&(key_mode_n);always @(posedge sysclk)key_turn_n <= key_turn;assign key_turn_press =(!key_turn)&&(key_turn_n);always @(posedge sysclk)key_change_n <= key_change;assign key_change_press =(!key_change)&&(key_change_n);
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)key_time <= 24'h0;else if(key_time!= 24'h0)
key_time <= key_time + 24'h1;else if((key_time == 24'h0)&&(key_mode_press || key_change_press || key_turn_press))key_time <= key_time + 24'h1;
end
reg [1:0] mode_num;//key mode..0--Timing function.1--Alarm clock function.2--adjust function always @(posedge sysclk or negedge rst_b)begin if(!rst_b)mode_num <= 2'b00;else if(mode_num == 2'h3)mode_num <= 2'h0;else if(key_mode_press &&(key_time == 24'h0))
mode_num <= mode_num + 2'h1;end
always @(*)begin if(mode_num == 2'h1)begin
min = init_alarm_min;hour = init_alarm_hour;end else begin
min = {min_H,min_L};hour = {hour_H,hour_L};end end
reg fm;//choose turn hour or minute always @(posedge sysclk or negedge rst_b)begin if(!rst_b)fm <= 1'b0;else if(key_turn_press &&(mode_num == 2'h2)&&(key_time == 24'h0))
fm <= ~fm;end
reg [27:0] time_cnt;///count time reg [27:0] time_cnt_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)time_cnt <= 28'h0;else time_cnt <= time_cnt_n;end
always @(*)begin if(time_cnt == Count_1s)time_cnt_n <= 28'h0;else if(mode_num!= 2'h0)time_cnt_n <= time_cnt;else time_cnt_n <= time_cnt + 28'h1;end
reg [3:0] sec_L;//second low 4 bit reg [3:0] sec_H;//second high 4 bit wire sec_cb;//second carry bit signal assign sec_cb =(sec_L == 4'h9)&&(sec_H == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
sec_L <= init_sec[3:0];sec_H <= init_sec[7:4];end else if((sec_L == 4'h9)&&(sec_H!= 4'h5)&&(time_cnt == Count_1s))begin
sec_L <= 4'h0;sec_H <= sec_H + 4'h1;end else if(sec_cb &&(time_cnt == Count_1s))begin
sec_L <= 4'h0;sec_H <= 4'h0;end else if(time_cnt == Count_1s)
sec_L <= sec_L + 4'h1;end
wire min_cb;//minute carry bit signal assign min_cb =(min_L == 4'h9)&&(min_H == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
min_L <= init_min[3:0];min_H <= init_min[7:4];end else if((sec_cb)&&(min_L!=4'h9)&&(time_cnt == Count_1s))
min_L <= min_L + 4'h1;else if((sec_cb)&&(min_L == 4'h9)&&(min_H!= 4'h5)&&(time_cnt == Count_1s))begin
min_L <= 4'h0;min_H <= min_H + 4'h1;end else if((sec_cb)&&(min_cb)&&(time_cnt == Count_1s))begin
min_L <= 4'h0;min_H <= 4'h0;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_L!= 4'h9))
min_L = min_L + 4'h1;else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(min_L == 4'h9)&&(min_H!=4'h5))begin
min_L = 4'h0;min_H = min_H + 4'h1;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_L == 4'h9)&&(min_H ==4'h5))begin
min_L = 4'h0;min_H = 4'h0;end end
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
hour_L <= init_hour[3:0];hour_H <= init_hour[7:4];end else if((sec_cb)&&(min_cb)&&(hour_L!= 4'h9)&&(hour_H!= 4'h2)&&(time_cnt == Count_1s))
hour_L <= hour_L + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_L!= 4'h3)&&(hour_H == 4'h2)&&(time_cnt == Count_1s))
hour_L <= hour_L + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_L == 4'h9)&&(hour_H!= 4'h2)&&(time_cnt == Count_1s))begin
hour_L <= 4'h0;hour_H <= hour_H + 4'h1;end else if((sec_cb)&&(min_cb)&&(hour_L == 4'h3)&&(hour_H == 4'h2)&&(time_cnt == Count_1s))begin
hour_L <= 4'h0;hour_H <= 4'h0;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L!= 4'h9)&&(hour_H!=4'h2))
hour_L <= hour_L + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L!= 4'h3)&&(hour_H ==4'h2))
hour_L <= hour_L + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_L == 4'h9)&&(hour_H!=4'h2))begin
hour_L <= 4'h0;hour_H <= hour_H + 4'h1;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(hour_L == 4'h3)&&(hour_H ==4'h2))begin
hour_L <= 4'h0;hour_H <= 4'h0;end end
wire buzzer_en;assign buzzer_en =(init_alarm_min == {min_H,min_L})&&(init_alarm_hour == {hour_H,hour_L});
led_tube I_led_tube(.sysclk(sysclk),.rst_b(rst_b),.scan_time(24'h1F090),.data0({1'h1,sec_L}),.data1({1'h1,sec_H}),.data2({1'h1,4'hA}),.data3({1'h1,min[3:0]}),.data4({1'h1,min[7:4]}),.data5({1'h1,4'hA}),.data6({1'h1,hour[3:0]}),.data7({1'h1,hour[7:4]}),.led_data(led_data),.led_sel(led_sel));buzzer I_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule
第五篇:EDA課程設(shè)計(jì)論文
目錄
一、摘要
二、概述
2.1目的與要求 2.2實(shí)驗(yàn)儀器與設(shè)備 2.3實(shí)驗(yàn)注意事項(xiàng) 2.4設(shè)計(jì)環(huán)境
三、實(shí)驗(yàn)內(nèi)容
四、4位加法器設(shè)計(jì)實(shí)現(xiàn)過程
4.1元件選擇
4.2編輯半加器的原理圖 4.3編譯設(shè)計(jì)圖形文件 4.4生成元件符號 4.5功能仿真設(shè)計(jì)文件 ① 建立波形文件 ② 輸入信號節(jié)點(diǎn)
③ 設(shè)置波形參量
④ 設(shè)定仿真時(shí)間寬度 ⑤ 加入輸入信號 ⑥ 波形文件存盤 ⑦ 進(jìn)行仿真
4.6 1位全加器的實(shí)現(xiàn)過程 4.7 四位加法器實(shí)現(xiàn)過程
五、收獲與心得體會
一、摘要
隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的飛速發(fā)展,電子線路的設(shè)計(jì)工作也日益顯得重要。經(jīng)過人工設(shè)計(jì)、制作實(shí)驗(yàn)板、調(diào)試再修改的多次循環(huán)才定型的傳統(tǒng)產(chǎn)品設(shè)計(jì)方法必然被計(jì)算機(jī)輔助設(shè)計(jì)所取代,因?yàn)檫@種費(fèi)時(shí)費(fèi)力又費(fèi)資源的設(shè)計(jì)調(diào)試方法既增加了產(chǎn)品開發(fā)的成本,又受到實(shí)驗(yàn)工作場地及儀器設(shè)備的限制。
20世紀(jì)90年代,國際上電子和計(jì)算機(jī)技術(shù)較先進(jìn)的國家,一直在積極探索新的電子電路設(shè)計(jì)方法,并在設(shè)計(jì)方法、工具等方面進(jìn)行了徹底的變革,取得了巨大成功。在電子技術(shù)設(shè)計(jì)領(lǐng)域,可編程邏輯器件(如CPLD、FPGA)的應(yīng)用,已得到廣泛的普及,這些器件為數(shù)字系統(tǒng)的設(shè)計(jì)帶來了極大的靈活性。這些器件可以通過軟件編程而對其硬件結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),從而使得硬件的設(shè)計(jì)可以如同軟件設(shè)計(jì)那樣方便快捷。這一切極大地改變了傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計(jì)方法、設(shè)計(jì)過程和設(shè)計(jì)觀念,促進(jìn)了EDA技術(shù)的迅速發(fā)展。
EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言VHDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動強(qiáng)度。
利用EDA工具,電子設(shè)計(jì)師可以從概念、算法、協(xié)議等開始設(shè)計(jì)電子系統(tǒng),大量工作可以通過計(jì)算機(jī)完成,并可以將電子產(chǎn)品從電路設(shè)計(jì)、性能分析到設(shè)計(jì)出IC版圖或PCB版圖的整個過程的計(jì)算機(jī)上自動處理完成。
現(xiàn)在對EDA的概念或范疇用得很寬。包括在機(jī)械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機(jī)制造過程中,從設(shè)計(jì)、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。
二、概述
2.1目的與要求
1、學(xué)習(xí)MAX+plusⅡ工具軟件的基本功能和使用方法。
2、學(xué)習(xí)使用原理圖輸入法設(shè)計(jì)半加器,掌握原理圖輸入法的操作步驟。
3、初步掌握設(shè)計(jì)電路原理圖的編輯、編譯、仿真等操作方法。每次實(shí)驗(yàn)前,學(xué)生須仔細(xì)閱讀本實(shí)驗(yàn)指導(dǎo)書的相關(guān)內(nèi)容:
1)明確實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容; 2)明確實(shí)驗(yàn)原理與步驟;
3)復(fù)習(xí)與實(shí)驗(yàn)內(nèi)容有關(guān)的理論知識;
4)預(yù)習(xí)儀器設(shè)備的使用方法、操作規(guī)程及注意事項(xiàng)。
2.2實(shí)驗(yàn)儀器與設(shè)備
1、PC機(jī)
2、MAX+plus II 軟件
2.3實(shí)驗(yàn)注意事項(xiàng)
1.實(shí)驗(yàn)開始前,應(yīng)先檢查本人的計(jì)算機(jī)是否安裝相關(guān)軟件,了解其軟件的使用方法和要求。
2.實(shí)驗(yàn)時(shí)每個同學(xué)應(yīng)單獨(dú)設(shè)計(jì)程序、操作、記錄實(shí)驗(yàn)結(jié)果等,使每個同學(xué)受到全面訓(xùn)練。
3.測量數(shù)據(jù)或觀察現(xiàn)象要認(rèn)真細(xì)致,實(shí)事求是。使用計(jì)算機(jī)要符合操作規(guī)程,切勿隨便重啟頻繁開關(guān)計(jì)算機(jī)。
4.未經(jīng)許可,不得動用其它人的儀器設(shè)備或計(jì)算機(jī)等物。
5.實(shí)驗(yàn)結(jié)束后,實(shí)驗(yàn)記錄交指導(dǎo)教師查看并認(rèn)為無誤后,離開機(jī)房。最后,應(yīng)清理計(jì)算機(jī),備份編寫程序。
6.愛護(hù)公物,發(fā)生儀器設(shè)備等損壞事故時(shí),應(yīng)及時(shí)報(bào)告指導(dǎo)教師,按有關(guān)實(shí)驗(yàn)管理規(guī)定處理。
7.自覺遵守學(xué)校和實(shí)驗(yàn)室管理的其它有關(guān)規(guī)定。
2.4設(shè)計(jì)環(huán)境
QuartusII design
是
最
高
級
和
復(fù)
雜的,用
于system-on-a-programmable-chip(SOPC)的設(shè)計(jì)環(huán)境。QuartusII design 提
供完善的 timing closure 和 LogicLock? 基于塊的設(shè)計(jì)流程。QuartusII design是唯一一個包括以timing closure 和 基于塊的設(shè)計(jì)流為基本特征的programmable logic device(PLD)的軟件。Quartus II 設(shè)計(jì)軟件改進(jìn)了性能、提升了功能性、解決了潛在的設(shè)計(jì)延遲等,在工業(yè)領(lǐng)域率先提供FPGA與mask-programmed devices開發(fā)的統(tǒng)一工作流程。
Altera Quartus II 作為一種可編程邏輯的設(shè)計(jì)環(huán)境, 由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。
三、實(shí)驗(yàn)內(nèi)容
以Altera公司的MAX+plus II為工具軟件,采用原理圖輸入法設(shè)計(jì)半加器h_adder,生成元件符號,并仿真驗(yàn)證設(shè)計(jì)結(jié)果。
四、4位加法器設(shè)計(jì)實(shí)現(xiàn)過程
4.1元件選擇
在MAX+plus II工具軟件的元件庫中已經(jīng)有與門、或門、與非門和異或門等元件,在設(shè)計(jì)中可直接調(diào)用這些元件,實(shí)現(xiàn)電路設(shè)計(jì)。
圖1 半加器原理圖
在元件選擇對話框的符號庫“Symbol Libraries”欄目中,用鼠標(biāo)雙擊基本元件庫文件夾“d:maxplus2max2libprim”后,在符號文件“Symbol Files”欄目中列出了該庫的基本元件的元件名,例如and2(二輸入端的與門)、xor(異或門)、VCC(電源)、input(輸入)和output(輸出)等。在元件選擇對話框的符號名“Symbol Name”欄目內(nèi)直接輸入xor,或者在“Symbol Files”欄目中,用
鼠標(biāo)雙擊“xor”元件名,即可得到異或門的元件符號。用上述同樣的方法也可以得到其他元件符號。
4.2編輯半加器的原理圖
半加器邏輯電路圖如圖1所示,它由1個異或門和1個與門構(gòu)成,a、b是輸入端,SO是和輸出端,CO是向高位的進(jìn)位輸出端。
在元件選擇對話框的符號名“Symbol Name”欄目內(nèi)直接輸入xor,或者在“Symbol Files”欄目中,用鼠標(biāo)雙擊“xor”元件名,即可得到異或門的元件符號。用上述同樣的方法也可以得到與門及輸入端和輸出端的元件符號。用鼠標(biāo)雙擊輸入或輸出元件中原來的名稱,使其變黑后就可以進(jìn)行名稱修改,用這種方法把兩個輸入端的名稱分別更改為“a”和“b”,把兩個輸出端的名稱分別更改為“SO”和“CO”,然后按照圖1所示的半加器邏輯電路的連接方式,用鼠標(biāo)將相應(yīng)的輸入端和輸出端及電路內(nèi)部連線連接好,并以“h_adder.gdf”(注意后綴是.gdf)為文件名,存在自己建立的工程目錄d:myedamygdf內(nèi)。進(jìn)行存盤操作時(shí),系統(tǒng)在彈出的存盤操作對話框中,自動保留了上一次存盤時(shí)的文件名和文件目錄,不要隨意單擊“OK”按鈕結(jié)束存盤,一定要填入正確的文件名并選擇正確的工程目錄后,才能單擊“OK”按鈕存盤,這是上機(jī)實(shí)驗(yàn)時(shí)最容易忽略和出錯的地方。
4.3編譯設(shè)計(jì)圖形文件
設(shè)計(jì)好的圖形文件一定要通過MAX+plus II的編譯。在MAX+plus II集成環(huán)境下,執(zhí)行“MAX+plus”菜單下的“Compiler”命令,在彈出的編譯對話框中單擊“Start”按鈕,即可對h_adder.gdf文件進(jìn)行編譯。
在編譯中,MAX+plus II自動完成編譯網(wǎng)表提取(Compiler Netlist Extractor)、數(shù)據(jù)庫建立(Database Builder)、邏輯綜合(Logic Synthesizer)、邏輯分割(Partitioner)、適配(Fitter)、延時(shí)網(wǎng)表提取(Timing SNF Extractor)和編程文件匯編(Assembler)等操作,并檢查設(shè)計(jì)文件是否正確。存在錯誤的設(shè)計(jì)文件是不能將編譯過程進(jìn)行到底的,此時(shí)計(jì)算機(jī)會中斷編譯,并在編譯(Compiler)對話框中指出錯誤類型和個數(shù)。
4.4生成元件符號
在MAX+plus II集成環(huán)境下,執(zhí)行“File”菜單下的“Create Default Symbol”
命令,將通過編譯的GDF文件生成一個元件符號,并保存在工程目錄中。這個元件符號可以被其他圖形設(shè)計(jì)文件調(diào)用,實(shí)現(xiàn)多層次的系統(tǒng)電路設(shè)計(jì)。
4.5功能仿真設(shè)計(jì)文件
仿真,也稱為模擬(Simulation);是對電路設(shè)計(jì)的一種間接的檢測方法。對電路設(shè)計(jì)的邏輯行為和功能進(jìn)行模擬檢測,可以獲得許多設(shè)計(jì)錯誤及改進(jìn)方面的信息。對于大型系統(tǒng)的設(shè)計(jì),能進(jìn)行可靠、快速、全面的仿真尤為重要。
① 建立波形文件
進(jìn)行仿真時(shí)需要先建立仿真文件。在Max+p1us II環(huán)境執(zhí)行“File”的“New”命令,再選擇彈出的對話框中的Waveform Editor fi1e項(xiàng),波形編輯窗口即被打開。
② 輸入信號節(jié)點(diǎn)
在波形編輯方式下,執(zhí)行“Node”的“Nodes from SNF”命令,彈出輸入節(jié)點(diǎn)“Enter Nodes from SNF”對話框,在對話框中首先單擊“List”按鈕,這時(shí)在對話框左邊的“Available Nodes&Groups”(可利用的節(jié)點(diǎn)與組)框中將列出該設(shè)計(jì)項(xiàng)目的全部信號節(jié)點(diǎn)。若在仿真中只需要觀察部分信號的波形,則首先用鼠標(biāo)將選中的信號名點(diǎn)黑,然后單擊對話框中間的“=>”按鈕,選中的信號即進(jìn)入到對話框右邊的“Selected Nodes&Groups”(被選擇的節(jié)點(diǎn)與組)框中。如果需要刪除“被選擇的節(jié)點(diǎn)與組”框中的節(jié)點(diǎn)信號,也可以用鼠標(biāo)將其名稱點(diǎn)黑,然后單擊對話框中間的“<="按鈕。節(jié)點(diǎn)信號選擇完畢后,單擊“OK”按鈕即可。
③ 設(shè)置波形參量
在波形編輯對話框中調(diào)入了半加器的所有節(jié)點(diǎn)信號后,還需要為半加器輸入信號a和b設(shè)定必要的測試電平等相關(guān)的仿真參數(shù)。如果希望能夠任意設(shè)置輸入電平位置或設(shè)置輸入時(shí)鐘信號的周期,可以在Options選項(xiàng)中,取消網(wǎng)格對齊Snap to Grid的選擇(取消鉤)。
④ 設(shè)定仿真時(shí)間寬度
在仿真對話框,默認(rèn)的仿真時(shí)間域是1μS。如果希望有足夠長的時(shí)間觀察仿真結(jié)果,可以選擇“File”命令菜單中的“End Time”選項(xiàng),在彈出的“End Time”對證框中,填入適當(dāng)?shù)姆抡鏁r(shí)間域(如5μS)即可。
⑤ 加入輸入信號
為輸入信號a和b設(shè)定測試電平的方法及相關(guān)操作如教材圖2.1.3所示,利用必要的功能鍵為a和b加上適當(dāng)?shù)碾娖剑员惴抡婧竽軠y試so和co輸出信號。
⑥ 波形文件存盤
以“h_adder.scf”(注意后綴是.scf)為文件名,存在自己建立的工程目錄d:myedamygdf內(nèi)。在波形文件存盤時(shí),系統(tǒng)將本設(shè)計(jì)電路的波形文件名自動設(shè)置為“h_adder.scf”,因此可以直接單擊確定按鈕。
⑦ 進(jìn)行仿真
4.6 1位全加器的實(shí)現(xiàn)過程
1位全加器可以用兩個半加器及一個或門連接而成。其原理圖如圖2所示。在Quartus7.2圖形編輯方式下,在用戶目錄中找到自己設(shè)計(jì)的半加器元件h_adder,并把它調(diào)入原理圖編輯框中(調(diào)入兩個),另外從d:maxplus2max2libprim元件庫中調(diào)出一個兩輸入端的或門,并加入相應(yīng)的輸入和輸出元件,按照圖1所示電路連線,得到1位全加器電路的設(shè)計(jì)結(jié)果。電路中的a和b是兩個1位二進(jìn)制加數(shù)輸入,cin是低位來的進(jìn)位輸入,sum是和輸出,cout是向高位進(jìn)位輸出。
圖2 1位全加器原理圖
按以上步驟進(jìn)行仿真,仿真圖如下:
1位全加器仿真圖
4.7 四位加法器實(shí)現(xiàn)過程
在一位全加器的基礎(chǔ)上設(shè)計(jì)四位全加器,其原理圖如圖所示
圖3 四位加法器原理圖
按以上操作進(jìn)行仿真,仿真圖如:
五、收獲與心得體會
本次的EDA課程設(shè)計(jì)歷時(shí)一星期,時(shí)間雖短,但通過一個星期的實(shí)踐,使我對EDA技術(shù)有了更進(jìn)一步的了解。同時(shí),大致懂得了一個課題制作的具體流程和實(shí)施方法。另外,課程設(shè)計(jì)對QuartusⅡ軟件的使用要求較高,從而使我能較為熟練的運(yùn)用此軟件。在設(shè)計(jì)時(shí),采用模塊化的設(shè)計(jì)思路使得問題變的簡單明了,大大縮短了時(shí)間,降低了發(fā)生錯誤的機(jī)侓,也便于修改和更新。
課程設(shè)計(jì)中,需要找很多資料,在當(dāng)今的信息化環(huán)境中,雖然資料很多,但需要仔細(xì)斟酌才能找到所要的。這次的課程設(shè)計(jì)很好的鍛煉了這種能力。此外,與同學(xué)和老師的交流必不可少,我從中也學(xué)到了不少東西。
課程設(shè)計(jì)是一次很好的鍛煉機(jī)會,我從中學(xué)的很多知識對將來的學(xué)習(xí)和工作都有很大的幫助,十分感謝學(xué)校能提供這樣一個機(jī)會。