2021太原理工大學(xué)EDAFPGA八路搶答器應(yīng)用設(shè)計課程設(shè)計
太原理工大學(xué)EDAFPGA八路搶答器應(yīng)用設(shè)計課程設(shè)計一、設(shè)計目的1、加深對VHDL語言設(shè)計的理解;2、通過對搶答器的設(shè)計加深對CPLD/FPG課程理解3、通過對搶答器的設(shè)計了解簡易集成電路的設(shè)計思路。二、設(shè)計要求1設(shè)計具有一個可容納8組參賽者的數(shù)字智力搶答器,每組設(shè)置一個搶答按鈕供搶答者使用。2主持人按鍵清零,數(shù)碼管顯示0,進(jìn)入搶答狀態(tài);3.主持人發(fā)出開始命令,8人開始搶答,若有人先按下?lián)尨鸢粹o,數(shù)碼管顯示該組號碼,其他人再按搶答按鈕,系統(tǒng)不再響應(yīng);4.設(shè)置記分電路,可顯示每組選手的分?jǐn)?shù);5.設(shè)置計時顯示。三、設(shè)計方案根據(jù)系統(tǒng)設(shè)計要求可知,系統(tǒng)的輸入信號有:各組的搶答按鈕A、B、C、D、E、F、G、H,系統(tǒng)清零信號CLR,系統(tǒng)時鐘信號CLK,計分復(fù)位信號RET,加分按鈕信號ADD,計時預(yù)置控制信號LDN,計時使能信號EN,計時預(yù)置調(diào)整信號按鈕AN、BN,系統(tǒng)的輸出信號有:4個組搶答成功與否的指示燈控制信號輸出口LEDA、LEDB、LEDC、LEDD、LEDE、LEDF、LEDG、LEDH,4個組搶答時的計時數(shù)碼管顯示控制信號若干,搶答成功組別顯示的控制信號若干,各組計分動態(tài)顯示的控制信號若干。本次課程設(shè)計的主要目的旨在通過獨(dú)立完成一個“搶答器”的設(shè)計,達(dá)到對EDA技術(shù)的熟練掌握,提升對CPLD/FPGA技術(shù)及應(yīng)用課程所學(xué)內(nèi)容的掌握和應(yīng)用。以計算機(jī)為工具,設(shè)計者在EDA軟件平臺上,用硬件描述語言VHDL完成設(shè)計文件,然后由計算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作?;赩HDL程序設(shè)計中擁有輸入設(shè)計流程 ,其包括設(shè)計輸入,綜合,適配,仿真測試和編程下載等方法。與其他應(yīng)用軟件相比,他提供了更強(qiáng)大、更直觀便捷和操作靈活的原理圖輸入設(shè)計功能,同時還配備了更豐富的適用于各種需要的元件庫,其中包括基本的邏輯元件,宏功能元件,以及類似于IP核的參數(shù)可設(shè)置的宏功能塊LPM庫。設(shè)計者不必具備許多諸如編程技術(shù),硬件描述語言等知識就能迅速入門,完成較大規(guī)模的電路設(shè)計系統(tǒng)。能進(jìn)行任意層次的數(shù)字系統(tǒng)設(shè)計,傳統(tǒng)的數(shù)字電路實(shí)驗(yàn)只能完成單一層次的設(shè)計。能對系統(tǒng)中的任意層次,或任一元件的功能進(jìn)行精確的時序仿真。通過時序仿真能迅速定位電路系統(tǒng)中的錯誤所在,并及時糾正。四:設(shè)計模塊方框圖根據(jù)搶答器的功能要求,可以得出如下模塊系統(tǒng)結(jié)構(gòu)圖:五模塊功能分析1 搶答輸入開關(guān)電路該電路由8個開關(guān)按鍵組成,每一個選手與一個開關(guān)對應(yīng)。開關(guān)為常開型,即當(dāng)按下開關(guān)時,開關(guān)自動的彈開斷開,此時輸入搶答信號自動變?yōu)楦唠娖剑划?dāng)按下?lián)尨痖_關(guān)時,開關(guān)閉合,輸入搶答信號為低電平。2 鎖存器當(dāng)只要有一個且為任意一個搶答輸入信號產(chǎn)生時,觸發(fā)器電路被觸發(fā),在輸出端產(chǎn)生相應(yīng)的開關(guān)電平信息,同時為避免之后的搶答開關(guān)按鈕也按下產(chǎn)生錯亂,最先產(chǎn)生的輸出電平變化又反饋回來將觸發(fā)器鎖定住,并保持輸出的電平信息。這樣就避免了搶答先后發(fā)生紊亂不清楚的現(xiàn)象發(fā)生。3 編碼器編碼器的作用是將開關(guān)信息轉(zhuǎn)化為8421BCD碼,以提供數(shù)字顯示電路所需要的編碼輸入。4 譯碼器譯碼器的作用是將編碼器輸出的8421BCD碼轉(zhuǎn)化為數(shù)碼管需要的邏輯狀態(tài),譯碼器由七段共陰二極管組成,高位在左,低位在右,如當(dāng)輸入譯碼器的信號為“1101101”時,數(shù)碼管的七個段g,f,e,d,c,b,a 分別接1,1,0,1,1,0,1,接有高電平的段亮,于是數(shù)碼管顯示為“5”。5 解鎖器當(dāng)觸發(fā)鎖存電路被鎖存后,若要進(jìn)行下一輪的重新?lián)尨穑瑒t需要將鎖存器解鎖,可通過強(qiáng)迫是復(fù)位控制置為1,使鎖存處于等待鎖存狀態(tài),以準(zhǔn)備進(jìn)行下一輪的搶答。8路搶答器源VHDL程序,(包含倒計時dqs,數(shù)碼shuma,計分器jfq程序)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; entity qiangdaqi isport( rst: in std_logic;clk: in std_logic;key : in std_logic;en:in std_logic;q1,q2,q3,q4,q5,q6,q7,q8: in std_logic; shuma: out std_logic_vector( 6 downto 0); led: out std_logic_vector( 7 downto 0);jfq: out std_logic_vector( 6 downto 0);djs: out std_logic_vector( 6 downto 0);end qiangdaqi;architecture Behavioral of qiangdaqi issignal s: std_logic_vector(3 downto 0);signal q: std_logic_vector(7 downto 0);signal max: std_logic;signal b: std_logic_vector(3 downto 0):="0000" signal A: std_logic_vector(3 downto 0):="0011" signal cnt: std_logic_vector( 25 downto 0); signal clks: std_logic;beginprocess(rst,clk,clks)beginif rst=0 thencntelsif clkevent and clk=1 thencntend if;clksend process;process(en,A,clks)beginif clksevent and clks=1 and en=1 then case A iswhen "0000" => djswhen "0001" => djswhen "0010" => djswhen "0011" => djswhen others => null;end case;if a/="0000" thenaend if;end if;end process;process(rst,clk)beginqif rst=0 thenselsif clkevent and clk=1 and A="0000"thencase q iswhen "10000000" => swhen "01000000" => swhen "00100000" => swhen "00010000" => swhen "00001000" => swhen "00000100" => swhen "00000010" => swhen "00000001" => swhen others=>null;end case;end if;end process;process(rst,clk,s,A)beginif rst=0 thenmaxelsif clkevent and clk=1 and A="0000" thenif s>0 thenmaxend if;end if;end process;process(rst,max,s,A)beginif rst=0 thenshumaelsif maxevent and max=1 and A="0000" thenif s(3)=0 and s(2)=0 and s(1)=0 and s(0)=0 then shumaelsif s(3)=0 and s(2)=0 and s(1)=0 and s(0)=1then shumaelsif s(3)=0 and s(2)=0 and s(1)=1 and s(0)=0thenshumaelsif s(3)=0 and s(2)=0 and s(1)=1 and s(0)=1then shumaelsif s(3)=0 and s(2)=1 and s(1)=0 and s(0)=0then shumaelsif s(3)=0 and s(2)=1 and s(1)=0 and s(0)=1then shumaelsif s(3)=0 and s(2)=1 and s(1)=1 and s(0)=0then shumaelsif s(3)=0 and s(2)=1 and s(1)=1 and s(0)=1then shumaelsif s(3)=1 and s(2)=0 and s(1)=0 and s(0)=0 then shumaend if;end if;end process;process(rst,max,s,A)beginif rst=0 thenledelsif maxevent and max=1 and A="0000" thenif s(3)=0 and s(2)=0 and s(1)=0 and s(0)=0then ledelsif s(3)=0 and s(2)=0 and s(1)=0 and s(0)=1then ledelsif s(3)=0 and s(2)=0 and s(1)=1 and s(0)=0then ledelsif s(3)=0 and s(2)=0 and s(1)=1 and s(0)=1then ledelsif s(3)=0 and s(2)=1 and s(1)=0 and s(0)=0then ledelsif s(3)=0 and s(2)=1 and s(1)=0 and s(0)=1then ledelsif s(3)=0 and s(2)=1 and s(1)=1 and s(0)=0then ledelsif s(3)=0 and s(2)=1 and s(1)=1 and s(0)=1 then ledelsif s(3)=1 and s(2)=0 and s(1)=0 and s(0)=0then ledend if;end if;end process;process(key,b)beginif keyevent and key=1 thenbend if ;if b="1010" thenbend if;case b iswhen "0000" => jfqend case;end process;end Behavioral;實(shí)驗(yàn)結(jié)果圖:實(shí)物圖顯示六:調(diào)試引腳鎖定完成,便進(jìn)行硬件下載命令。試驗(yàn)箱接通電源后,便進(jìn)行實(shí)驗(yàn)驗(yàn)證,按下清零鍵res,然后按下?lián)尨鸬拈_關(guān)按鈕,當(dāng)下按的是第幾個編號,數(shù)碼管顯示的就是該編號,再按其他的搶答按鈕已無反應(yīng),表示搶答成功,該鎖存模塊電路時正確的。然后再按下清零鍵rest,再逐一嘗試其他的搶答開關(guān)按鈕,觀察是否都能正常工作,如果都正常工作,則表示該8路智能搶答器設(shè)計正確。打開實(shí)驗(yàn)箱,講導(dǎo)線連接到對應(yīng)的引腳上,按下復(fù)位鍵,此時只有發(fā)光二級管是亮的,然后按下一號組,同時顯示器上顯示1,這時再按下2,顯示器仍然顯示1.按下復(fù)位鍵,先按2,再按3,顯示器顯示2。這個時候?qū)嶒?yàn)成功七、實(shí)驗(yàn)心得通過這次的EDA課程設(shè)計,讓我熟練地掌握了EDA設(shè)計Quartus II10.0軟件的操作,使用VHDL語言,對應(yīng)填寫管教,安裝硬件驅(qū)動,連接EDA實(shí)驗(yàn)箱出來結(jié)果,之前學(xué)會了基本的課程設(shè)計以及編譯仿真的操作,這次的智能搶答器又讓我學(xué)到很多,但是其中也遇到了很多困難。我們小組三個人,由我們共同來完成這個設(shè)計實(shí)驗(yàn)。在設(shè)計的過程中我進(jìn)一步了解了設(shè)計的步驟和原理,進(jìn)一步加深了對CPLD/FPGA應(yīng)用設(shè)計這門課的理解,增強(qiáng)了以后學(xué)習(xí)的興趣,為以后的工作積累了一定的經(jīng)驗(yàn)。這讓我們知道了以前并不了解的知識。