




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
EDA項目教程
——基于VHDL與FPGA主編:于潤偉項目7數字系統設計實訓本章要點
數字系統層次化設計元件例化語句的應用
數字系統的功能測試7.1籃球比賽24秒計時器7.1.1項目說明1.任務書國際籃聯修改的藍球比賽規則中,有一個關于24秒進攻的規則,即從獲取球權到投籃擊中籃框、命中、被侵犯(對方犯規)、球出界,其有效時間合計不能超過24秒,否則被判違例,將失去球權。另外,對非投籃的防守犯規、腳踢球或者出界球等判罰之后,如果所剩時間超過14秒(包括14秒),開球后繼續計時;如果所剩時間少于14秒(不包括14秒),將從14秒開始計時。(1)能夠設置24秒倒計時和14秒倒計時,遞減時間隔為1秒;(2)計時器遞減到零時,數碼管顯示“00”,同時發出聲音報警信號;(3)設置外部操作開關,控制計時器的清零、啟動計時、暫停和繼續計時。啟動、暫停、繼續計時用1個按鈕開關控制,按下為“啟動”或“繼續”、抬起為“暫?!?。設計一個用2個數碼管顯示的籃球比賽24秒計時器,具體要求如下:
2.計劃書(1)閱讀、討論項目要求,明確項目內容;(2)研究項目設計方案,分析參考程序;(3)編輯、編譯、仿真參考程序,確定一個項目實現方案;(4)測試24秒計時器,評價性能和應用效果。1.項目分析
籃球比賽24秒計時器的主要功能是倒計時,工作人員按動“清零”按鈕,顯示24秒,這時按動“14秒設置”鍵則顯示14秒;按下“啟動/暫停/繼續”按鈕,開始倒計時;計時過程中,抬起(再按1次)“啟動/暫停/繼續”按鈕,計時暫停,保持顯示時間;再次按下“啟動/暫停/繼續”按鈕,從停止的時間開始繼續倒計時;時間結束時顯示00,不再變化同時發出報警信號。整個系統可分為計時控制模塊和顯示控制模塊兩個部分。7.1.2設計方案
7.1.2設計方案1.項目分析籃球比賽24秒計時器的主要功能是倒計時,工作人員按動“清零”按鈕,顯示24秒,這時按動“14秒設置”鍵則顯示14秒;按下“啟動/暫停/繼續”按鈕,開始倒計時;計時過程中,抬起(再按1次即可)“啟動/暫停/繼續”按鈕,計時暫停,顯示時間不變;再次按下“啟動/暫停/繼續”按鈕,從停止的時間開始繼續計時;時間結束時顯示00,不再變化同時發出報警信號。整個系統可分為計時控制模塊和顯示控制模塊2個部分。24秒計時器系統框圖
計時模塊完成24秒或14秒倒計時功能。設系統時鐘為CLK(1Hz)、14秒預置端為PLD、啟動/暫停/繼續控制端為ENB、清零端為CLR;報警信號輸出端為WARN、十位數字輸出端為DDOUT、個位數字輸出端為SSOUT,文件名為BSJSB。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;2.計時模塊ENTITYBSJSBISPORT(CLR,PLD,ENB,CLK:INSTD_LOGIC;WARN:OUTSTD_LOGIC;--報警信號DDOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--十位SSOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--個位ENDENTITYBSJSB;ARCHITECTUREARTOFBSJSBISBEGINPROCESS(CLK,CLR,ENB)ISVARIABLETMPA:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLETMPB:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLETMPWARN:STD_LOGIC;BEGINIFCLR='1'THENTMPA:="0100";TMPB:="0010";TMPWARN:='0';ELSIFCLK'EVENTANDCLK='1'THENIFPLD='1'THENTMPB:="0001";TMPA:="0100";ELSIFENB='1'THENIFTMPA="0000"THENIFTMPB/="0000"THENTMPA:="1001";TMPB:=TMPB-1;ELSETMPWARN:='1';ENDIF;ELSETMPA:=TMPA-1;ENDIF;ENDIF;ENDIF;SSOUT<=TMPA;DDOUT<=TMPB;WARN<=TMPWARN;ENDPROCESS;ENDARCHITECTUREART;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYsdispISPORT(D:INSTD_LOGIC_VECTOR(3DOWNTO0);--4位數據輸入端S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--七位數碼輸出端ENDsdisp;ARCHITECTUREAOFsdispISBEGINPROCESS(D)BEGIN3.顯示模塊CASEDISWHEN"0000"=>S<="1111110";--0WHEN"0001"=>S<="0110000";--1WHEN"0010"=>S<="1101101";--2WHEN"0011"=>S<="1111001";--3WHEN"0100"=>S<="0110011";--4WHEN"0101"=>S<="1011011";--5WHEN"0110"=>S<="1011111";--6WHEN"0111"=>S<="1110000";--7WHEN"1000"=>S<="1111111";--8WHEN"1001"=>S<="1111011";--9WHENOTHERS=>S<="0000000";--其他狀態不顯示,
數碼管全暗ENDCASE;ENDPROCESS;ENDA;1.頂層文件設計
這里采用元件例化語句連接各個模塊的文本設計方式。(1)新建項目。在項目建立向導的添加文件對話框中輸入BASKCOUNT.VHD(文件名),單擊【Add】按鈕,添加該文件;再單擊添加文件對話框的Filename右側的按鈕,選擇BSJSB.VHD文件所在的文件夾,選中BSJSB.VHD文件,單擊【Add】按鈕,添加該文件;再次單擊添加文件對話框的Filename右側的按鈕,選擇DISP.VHD文件所在的文件夾,選中DISP.VHD文件,單擊【Add】按鈕,添加DISP.VHD文件。7.1.3項目實現(2)建立文本文件,編輯頂層文件設計程序。在程序實體中定義整個系統的輸入和輸出,設系統時鐘為CLK(1Hz)、14秒預置端為PLD、啟動/暫停/繼續控制端為ENB、清零端為CLR;報警信號輸出端為WARN、顯示輸出信號為S0和S1,接2個7段數碼管;結構體中定義2臨時信號,代表十位數字輸出端DDOUT和個位數字輸出端SSOUT;文件名為BASKCOUNT。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBASKCOUNTISPORT(CLR,PLD,ENB,CLK:INSTD_LOGIC;WARN:OUTSTD_LOGIC;S0,S1:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYBASKCOUNT;ARCHITECTUREARTOFBASKCOUNTISCOMPONENTBSJSBISPORT(CLR,PLD,ENB,CLK:INSTD_LOGIC;WARN:OUTSTD_LOGIC;DDOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);SSOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENTBSJSB;COMPONENTDISPISPORT(D:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDCOMPONENTDISP;SIGNALTEMPDD:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALTEMPSS:STD_LOGIC_VECTOR(3DOWNTO0);BEGINU0:BSJSBPORTMAP(CLR,PLD,ENB,CLK,WARN,TEMPDD,TEMPSS);U1:DISPPORTMAP(TEMPDD,S0);U2:DISPPORTMAP(TEMPSS,S1);ENDARCHITECTUREART;7.1.4功能擴展與項目評價1.功能擴展在完成項目的任務要求后,考慮以下內容:(1)蜂鳴器的長音改成斷續音。(2)不顯示十位數碼管無效的數碼“0”,例如09顯示9、08顯示為8。(3)倒計時的最后5秒,每減少1秒就發出1個提示信號(蜂鳴器短音)。(4)增加手動設置時間(預置數)功能。(5)將顯示模塊改成2位一體共陰極數碼管動態顯示。2.項目評價
項目評價是在教師的主持下,通過項目負責人的講解演示,評估項目的完成情況,評價內容如下:(1)功能評價?;@球比賽計時器能否完成比賽計時、計時誤差是多少、操作是否方便等方面。(2)演示過程評價。主要評價演示過程中操作是否熟練、回答問題是否準確等方面。(3)拓展功能完成情況評價。7.2數字頻率計7.2.1項目說明1.任務書設計一個能測量方波信號頻率的簡易數字頻率計,測量結果用十進制數顯示,測量的頻率范圍是1~9999Hz,用四位數碼管顯示測量頻率。2.計劃書(1)閱讀、討論項目要求,明確項目內容;(2)研究設計方案,分析方案中的參考程序;(3)完成數字頻率計的設計;(4)測量數字信號,計算頻率計的誤差。7.2.2設計方案1.項目分析方波信號的頻率就是在單位時間內產生的脈沖個數,表達式為f=N/T,其中f為被測信號的頻率;N為計數器所累計的脈沖數;T為產生N個脈沖所需的時間。計數器在1秒時間內所計的結果,就是被測信號的頻率。簡易數字頻率計可以分為測頻控制模塊和譯碼顯示模塊2個部分。2.系統框圖該模塊將1Hz的系統工作時鐘脈沖2分頻,取前半個周期產生脈寬為1秒的控制時鐘脈沖,作為計數器的閘門信號,當控制時鐘為上升沿(由低變高)時,開始計數;當控制時鐘為下降沿(由高變低)時,輸出計數值;最后還要在下次控制時鐘上升沿到來之前,產生清零信號,將計數器清零,為下次計數作準備。設系統時鐘脈沖為CLK(1Hz)、被測信號為TEST,輸出信號為DOUT(十六位),文件名為FREQ。2.測頻控制模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFREQISPORT(TEST:INSTD_LOGIC;--被測信號CLK:INSTD_LOGIC;--系統時鐘脈沖DOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0));--計數值ENDENTITYFREQ;ARCHITECTUREARTOFFREQISSIGNALCLR,EN:STD_LOGIC;--CLR清零信號、EN計數使能信號SIGNALDATA:STD_LOGIC_VECTOR(15DOWNTO0);--計數值寄存器,與DOUT對應BEGINPROCESS(CLK,CLR,EN)IS--產生寬度為1秒的閘門信號進程BEGINIFCLK'EVENTANDCLK='1'THEN--檢查CLK的上升沿EN<=NOTEN;ENDIF;ENDPROCESS;
CLR<=NOTCLKANDNOTEN;--CLK和EN同時為低電平時,產生清零信號PROCESS(TEST,CLR)IS--計數進程BEGINIFCLR='1'THENDATA<="0000000000000000";--清零ELSIFRISING_EDGE(TEST)THEN--RISING_EDGE檢查信號上升沿--下面的IF語句可以將十六進制數轉換成十進制數IFDATA(11DOWNTO0)="100110011001"THENDATA<=DATA+"011001100111";ELSIFDATA(7DOWNTO0)="10011001"THENDATA<=DATA+"01100111";ELSIFDATA(3DOWNTO0)="1001"THENDATA<=DATA+"0111";ELSEDATA<=DATA+'1';ENDIF;ENDIF;ENDPROCESS;PROCESS(DATA,EN)IS--控制時鐘下降沿輸出計數值進程BEGINIFFALLING_EDGE(EN)THENDOUT<=DATA;--FALLING_EDGE檢查信號下降沿ENDIF;ENDPROCESS;ENDART;
譯碼顯示模塊采用共陰極7段數碼管靜態顯示方式實現。可使用項目四中數碼管靜態顯示的程序,也可以調用籃球比賽計時器中生成的模塊sdisp。2.譯碼顯示模塊7.2.3項目實現(1)新建項目。在項目建立向導的添加文件對話框中輸入SDF.VHD(文件名),單擊【Add】按鈕,添加該文件;再單擊添加文件對話框的Filename右側的按鈕,選擇FREQ.VHD文件所在的文件夾,選中FREQ.VHD文件,再次單擊【Add】按鈕,添加該文件;再次單擊添加文件對話框的Filename右側的按鈕,選擇DISP.VHD所在的文件夾,選中DISP.VHD文件,再次單擊【Add】按鈕,添加DISP.VHD文件。(2)建立文本文件,編輯頂層文件設計程序。在程序實體中,定義整個系統的輸入和輸出,設系統時鐘脈沖為CLK(1Hz)、被測信號為TEST,輸出的顯示信號為S0、S1、S2和S3,接4個7段數碼管;結構體中描述模塊的連接關系,需要定義臨時信號,代表模塊之間的連線。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSDFISPORT(TEST:INSTD_LOGIC;--被測信號CLK:INSTD_LOGIC;--系統時鐘脈沖S0,S1,S2,S3:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--顯示信號ENDENTITYSDF;ARCHITECTUREARTOFSDFISCOMPONENTFREQIS--測頻控制模塊的例化聲明PORT(TEST:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCOMPONENTFREQ;COMPONENTDISPIS--顯示模塊的例化聲明PORT(D:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDCOMPONENTDISP;SIGNALTEMPDOUT:STD_LOGIC_VECTOR(15DOWNTO0);--定義臨時信號SIGNALTEMPD:STD_LOGIC_VECTOR(3DOWNTO0);--定義臨時信號BEGINU0:FREQPORTMAP(TEST,CLK,TEMPDOUT);--測頻控制模塊的端口映射U1:DISPPORTMAP(TEMPDOUT(3DOWNTO0),S0);--顯示模塊的端口映射(個位)U2:DISPPORTMAP(TEMPDOUT(7DOWNTO4),S1);--顯示模塊的端口映射(十位)U3:DISPPORTMAP(TEMPDOUT(11DOWNTO8),S2);--顯示模塊的端口映射(百位)U4:DISPPORTMAP(TEMPDOUT(15DOWNTO12),S3);--顯示模塊的端口映射(千位)ENDARCHITECTUREART;數字頻率計的仿真波形7.2.4功能擴展與項目評價在完成項目的任務要求后,考慮以下內容:(1)將輸出的靜態顯示改為4位一體共陰極數碼管動態顯示。(2)通過改變閘門時間(2秒),提高測量精度。(3)將元件例化語句的位置映射改成名稱映射。2.項目評價項目評價是在教師的主持下,通過項目負責人的講解演示,評估項目的完成情況,評價內容如下:(1)項目的功能描述情況。(2)團隊合作和任務分配情況。(3)簡易數字頻率計的設計完成情況。(4)簡易數字頻率計的操作和信號測量誤差分析。7.3電子密碼鎖7.3.1項目說明1.任務書設計一個具有4×3掃描鍵盤(不需要去抖動)、4個數碼管動態顯示,能夠設置和輸入四位密碼的電子密碼鎖,具體要求如下:(1)每按下一個數字鍵,就輸入一個數碼,并在4個數碼管的最右方顯示出該數值,同時將先前輸入的數據依序左移一個數字位置;(2)有數碼清除鍵,按下該鍵可清除前面所有的輸入數碼,清除后數碼管顯示“0000”;(3)有密碼設置鍵,在鎖開的狀態下,按下該鍵,會將當前數碼管顯示的數字設置成新密碼;(4)有密碼鎖鎖定鍵,按下該鍵可將密碼鎖上鎖;(5)有密碼鎖開鎖鍵,按下該鍵,會檢查輸入的密碼是否正確,密碼正確即開鎖。(6)為保證密碼鎖主人能夠隨時開鎖,設有萬能密碼(3581),用于解除其他人設置的密碼。2.計劃書(1)討論、分析項目要求,明確項目內容;(2)檢索閱讀相關的參考資料,研究項目設計方案;(3)制定計劃并分組后,實現設計方案中的各個模塊;(4)完成項目并測試功能;(5)撰寫項目開發報告。(6)項目演示、講解設計方案,完成項目評價。7.3.2設計方案1.項目分析輸入模塊外接的一個4×3矩陣式鍵盤,數字0~9作為密碼數字輸入按鍵,功能按鍵“*”作為密碼鎖鎖定鍵,功能按鍵“#”作為密碼鎖開鎖鍵/數碼清除鍵,密碼正確,開鎖后清除輸入的數碼;密碼不正確,不開鎖直接清除輸入的數碼。輸入模塊需要產生鍵盤掃描信號和控制模塊工作時鐘信號,并對輸入的按鍵信號進行譯碼。設系統時鐘脈沖為CLK(1KHz)、按鍵輸入端為KEYIN;鍵盤掃描信號輸出端為SCAN、數字按鍵輸出端為DATAOUT、功能按鍵輸出端為FUNOUT、數字鍵輸出標志為DF、功能鍵輸出標志為FF、控制電路工作時鐘輸出端為CLKOUT;文件名為INPUTBLOCK。2.輸入模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYinputblockISPORT(CLK:INSTD_LOGIC;--系統時鐘脈沖KEYIN:INSTD_LOGIC_VECTOR(2DOWNTO0);--按鍵輸入SCAN:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DATAOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數字輸出FUNOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--功能輸出DF:OUTSTD_LOGIC;--數字輸出標志FF:OUTSTD_LOGIC;--功能輸出標志CLKOUT:OUTSTD_LOGIC);--控制電路工作時鐘信號ENDENTITYinputblock;ARCHITECTUREARTOFinputblockISSIGNALTEMPCLK:STD_LOGIC;--控制電路工作時鐘信
號寄存器SIGNALKEYSCAN:STD_LOGIC_VECTOR(1DOWNTO0);--掃描控制信號寄存器SIGNALN,F:STD_LOGIC_VECTOR(3DOWNTO0);--數字、功能按鍵譯碼值的寄存器SIGNALTEMPDF,TEMPFF:STD_LOGIC;--數字、功能按鍵標志值的寄存器BEGINCOUNTER:BLOCKIS--掃描信號發生塊SIGNALQ:STD_LOGIC_VECTOR(5DOWNTO0);SIGNALSEL:STD_LOGIC_VECTOR(3DOWNTO0);--掃描控制信號寄存器BEGINIFCLK'EVENTANDCLK='1'THENQ<=Q+1;ENDIF;KEYSCAN<=Q(5DOWNTO4);--32分頻,
產生掃描控制信號00→01→10→11TEMPCLK<=Q(0);--2分頻ENDPROCESS;SEL<="1110"WHENKEYSCAN=0ELSE--條件信號
賦值語句"1101"WHENKEYSCAN=1ELSE"1011"WHENKEYSCAN=2ELSE"0111"WHENKEYSCAN=3ELSE"1111";SCAN<=SEL;--掃描信號1110→1101→1011→0111ENDBLOCKCOUNTER;KEYDECODER:BLOCKIS--掃描鍵盤譯碼塊SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0);--按鍵信號寄存器BEGINPROCESS(TEMPCLK)BEGINZ<=KEYSCAN&KEYIN;--連接KEYSCAN和KEYINIFTEMPCLK'EVENTANDTEMPCLK='1'THENCASEZISWHEN"11101"=>N<="0000";--0WHEN"00011"=>N<="0001";--1WHEN"00101"=>N<="0010";--2WHEN"00110"=>N<="0011";--3WHEN"01011"=>N<="0100";--4WHEN"01101"=>N<="0101";--5WHEN"01110"=>N<="0110";--6WHEN"10011"=>N<="0111";--7WHEN"10101"=>N<="1000";--8WHEN"10110"=>N<="1001";--9WHENOTHERS=>N<="1111";ENDCASE;ENDIF;IFTEMPCLK'EVENTANDTEMPCLK='1'THENCASEZISWHEN"11011"=>F<="0100";--密碼鎖鎖定鍵"*"WHEN"11110"=>F<="0001";--密碼鎖開鎖鍵"#"WHENOTHERS=>F<="1100";ENDCASE;ENDIF;ENDPROCESS;TEMPDF<=NOT(N(3)ANDN(2)ANDN(1)ANDN(0));--N不是1111TEMPFF<=NOT(F(3)ANDF(2));--F(3)和F(2)不是11ENDBLOCKKEYDECODER;DATAOUT<=N;FUNOUT<=F;DF<=TEMPDF;FF<=TEMPFF;CLKOUT<=TEMPCLK;ENDARCHITECTUREART;
控制模塊包括按鍵數據的緩沖存儲、密碼的清除修改、密碼核對、鎖控制(鎖定/開鎖)、萬能密碼(3581)設置等部分,能夠實現以下功能:(1)如果按下數字鍵,第一個數碼會從數碼管的最右端開始顯示,此后每按一個數碼時,數碼管上的數碼左移1位,以便將新的數碼顯示出來。(2)要更改輸入的數碼,按功能鍵“#”清除所有輸入的數碼,再重新輸入4位數碼。3.控制模塊(3)當輸入的數碼超過4個時,電路不予理會,也不再顯示第4個以后的數碼。(4)在鎖打開的狀態下,輸入一個4位的數碼,按下密碼鎖鎖定鍵“*”,可將密碼鎖鎖定,并將輸入的4位數碼作為密碼自動存儲,同時清除輸入的密碼。(5)在鎖鎖定的狀態下,輸入一個4位數碼,按下密碼鎖開鎖鍵“#”,檢查輸入的密碼是否正確,若密碼正確則開鎖,并清除顯示的密碼;輸入的密碼不正確,不開鎖直接清除輸入的密碼。
設工作時鐘輸入端為CLKIN、數字按鍵輸入端為DATAIN、功能按鍵輸入端為FUNIN、數字鍵輸入標志為DFIN、功能鍵輸入標志為FFIN;鎖控制信號ENLOCK(1鎖定、0開鎖)、密碼信號輸出端為KEYBCD;文件名為ctrlblock。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYctrlblockISPORT(DATAIN:INSTD_LOGIC_VECTOR(3DOWNTO0);FUNIN:INSTD_LOGIC_VECTOR(3DOWNTO0);DFIN:INSTD_LOGIC;FFIN:INSTD_LOGIC;CLKIN:INSTD_LOGIC;ENLOCK:OUTSTD_LOGIC;KEYBCD:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDENTITYctrlblock;ARCHITECTUREARTOFctrlblockISSIGNALACC:STD_LOGIC_VECTOR(15DOWNTO0);--ACC用于暫存鍵盤輸入的信息SIGNALNC:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALRST,TMLOCK:STD_LOGIC;SIGNALR1,R0:STD_LOGIC;BEGINCOUNT:BLOCKIS--清零信號的產生塊BEGINPROCESS(CLKIN)BEGINIFCLKIN'EVENTANDCLKIN='1'THENR1<=R0;R0<=FFIN;ENDIF;RST<=R1ANDNOTR0;--在按下的功能鍵松開后(從1變成0)產生清零信號ENDPROCESS;ENDBLOCKCOUNT;KEYINPUT:BLOCKIS--按鍵輸入數據的存儲、清零塊BEGINPROCESS(DFIN,RST)ISBEGINIFRST='1'THENACC<="0000000000000000";--按鍵輸入數據清零NC<="000";ELSIFDFIN'EVENTANDDFIN='1'THENIFNC<4THENACC<=ACC(11DOWNTO0)&DATAIN;--按鍵輸
入數據左移NC<=NC+1;ENDIF;ENDIF;ENDPROCESS;ENDBLOCKKEYINPUT;LOCKCTRL:BLOCKIS--鎖定/開鎖控制塊BEGINPROCESS(CLKIN,FUNIN)ISVARIABLEREG:STD_LOGIC_VECTOR(15DOWNTO0);--REG用于存儲輸入的密碼 BEGINIF(CLKIN'EVENTANDCLKIN='1')THENIFNC=4THENIFFUNIN="0100"THEN--鎖定控制信號(0100)有效REG:=ACC;--密碼存儲TMLOCK<='1';--鎖定ELSIFFUNIN="0001"THEN--開鎖控制信號(0001)有效IFREG=ACCTHEN--密碼核對TMLOCK<='0';--開鎖ENDIF;ELSIFACC="0011010110000001"THEN--設置“3581”
為萬能密碼TMLOCK<='0';--開鎖ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDBLOCKLOCKCTRL;ENLOCK<=TMLOCK;--輸出鎖定信號,1鎖定、0開鎖KEYBCD<=ACC;--輸出密碼信息ENDARCHITECTUREART;采用4位一體數碼管動態顯示方式。設CLK為系統時鐘脈沖(1KHz以上,頻率太低,顯示的數碼會閃動)、A、B、C、D為顯示數據、COM為數碼管的選通信號、SEG為數碼管的驅動信號,實體名為ddisp。參考程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;4.顯示模塊
ENTITYddispISPORT(CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);C:INSTD_LOGIC_VECTOR(3DOWNTO0);D:INSTD_LOGIC_VECTOR(3DOWNTO0);--A、B、C、D為顯示數據COM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數碼管的選通信號SEG:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--數碼管的顯示驅動信號ENDENTITYddisp;ARCHITECTUREARTOFddispISSIGNALCNT:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALBCD:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN--周期性變化的
信號CNTIFCNT="11"THENCNT<="00";ELSECNT<=CNT+'1';ENDIF;ENDIF;ENDPROCESS;PROCESS(CNT)BEGINCASECNTISWHEN"00"=>BCD<=A;COM<="1110";--COM選通信號低電平有效WHEN"01"=>BCD<=B;COM<="1101";WHEN"10"=>BCD<=C;COM<="1011";WHEN"11"=>BCD<=D;COM<="0111";WHENOTHERS=>BCD<="0000";COM<="1111";ENDCASE;CASEBCDIS--譯碼器WHEN"0000"=>SEG<="1111110";--0WHEN"0001"=>SEG<="0110000";--1WHEN"0010"=>SEG<="1101101";--2WHEN"0011"=>SEG<="1111001";--3WHEN"0100"=>SEG<="0110011";--4WHEN"0101"=>SEG<="1011011";--5WHEN"0110"=>SEG<="1011111";--6WHEN"0111"=>SEG<="1110000";--7WHEN"1000"=>SEG<="1111111";--8WHEN"1001"=>SEG<="1111011";--9WHENOTHERS=>SEG<="0000000";ENDCASE;ENDPROCESS;ENDART;7.3.3項目實現這里采用文本設計方式,文件名為KEYLOCK。(1)新建項目。在項目建立向導的添加文件對話框中輸入KEYLOCK.VHD(文件名),單擊【Add】按鈕,添加該文件,然后依次添加輸入模塊INPUTBLOCK.VHD和控制模塊CTRLBLOCK.VHD;再單擊添加文件對話框的Filename右側的按鈕,添加第5章的動態顯示程序DDISP.VHD文件。(2)建立文本文件,編輯頂層文件。實體中定義整個系統的輸入和輸出,設系統時鐘脈沖為CLK(1KHz)、按鍵輸入信號為KEYIN;鍵盤行掃描信號為SCAN、鎖控制信號ENLOCK、數碼管選通信號COM、7段數碼管顯示驅動端SEG;再定義幾個臨時信號,代表模塊之間的連線。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYKEYLOCKISPORT(CLK:INSTD_LOGIC;--系統時鐘脈沖KEYIN:INSTD_LOGIC_VECTOR(2DOWNTO0);--按鍵輸入SCAN:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--掃描信號ENLOCK:OUTSTD_LOGIC;COM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數碼管的選通信號SEG:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYKEYLOCK;ARCHITECTUREARTOFKEYLOCKISCOMPONENTINPUTBLOCKISPORT(CLK:INSTD_LOGIC;--系統時鐘脈沖KEYIN:INSTD_LOGIC_VECTOR(2DOWNTO0);--按鍵輸入SCAN:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DATAOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數字輸出FUNOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--功能輸出DF:OUTSTD_LOGIC;--數字輸出標志FF:OUTSTD_LOGIC;--功能輸出標志CLKOUT:OUTSTD_LOGIC);--控制電路工作時鐘信號ENDCOMPONENTINPUTBLOCK;COMPONENTCTRLBLOCKISPORT(DATAIN:INSTD_LOGIC_VECTOR(3DOWNTO0);FUNIN:INSTD_LOGIC_VECTOR(3DOWNTO0);DFIN:INSTD_LOGIC;FFIN:INSTD_LOGIC;CLKIN:INSTD_LOGIC;ENLOCK:OUTSTD_LOGIC;KEYBCD:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDCOMPONENTCTRLBLOCK;COMPONENTDDISPISPORT(CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);C:INSTD_LOGIC_VECTOR(3DOWNTO0);D:INSTD_LOGIC_VECTOR(3DOWNTO0);--A、B、C、D為顯示數據COM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--數碼管的選通信號SEG:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--數碼管的顯示驅動信號ENDCOMPONENTDDISP;SIGNALTMDAT:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALTMFUN:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALTMD:STD_LOGIC;SIGNALTMF:STD_LOGIC;SIGNALTMCLK:STD_LOGIC;SIGNALTMKEY:STD_LOGIC_VECTOR(15DOWNTO0);BEGINU0:INPUTBLOCKPORTMAP(CLK,KEYIN,SCAN,TMDAT,TMFUN,TMD,TMF,TMCLK);U1:CTRLBLOCKPORTMAP(TMDAT,TMFUN,TMD,TMF,TMCLK,ENLOCK,TMKEY);U2:DDISPPORTMAP(TMCLK,TMKEY(3DOWNTO0),TMKEY(7DOWNTO4),TMKEY(11DOWNTO8),TMKEY(15DOWNTO12),COM,SEG);ENDARCHITECTUREART;系統通過仿真后,根據EDA實驗開發平臺的實際情況,選擇可編程邏輯器件,鎖定管腳進行編程下載。驗證電子密碼鎖功能時,先輸入數碼,觀察顯示數碼管,這時按動“#”鍵,能夠清除輸入的數碼;再輸入數碼,數碼能夠左移顯示,并且只顯示前4個數碼,記錄這4個作為密碼的數碼,按動“*”鍵,鎖控制信號應為高電平,表示密碼鎖鎖定;輸入記錄的密碼或輸入萬能密碼(3581),按動“#”鍵,鎖控制信號應為低電平,表示密碼鎖開鎖,同時清除顯示的密碼。2.系統的硬件驗證7.3.4功能擴展與項目評價1.功能擴展在完成項目的任務要求后,考慮以下內容:(1)增加密碼位數到五位。(2)將掃描鍵盤改為編碼鍵盤。(3)動態顯示改為靜態顯示。(4)元件例化語句中的位置映射改為名稱映射。(5)項目實現部分,將文本編輯方式改成原理圖編輯方式。2.項目評價
評價重點是項目的分析能力和程序設計調試能力,包括以下幾個方面:(1)方案的研究能力。能否找到系統設計的重點和難點,能否實現已有的設計方案,并指出其設計特點。(2)功能評價。主要評價密碼鎖使用是否方便、題目要求的功能能否實現、密碼鎖工作是否穩定可靠等方面。(3)答辯過程評價。主要評價對設計方案的理解程度如何?思路是否清晰?回答問題是否準確?語言是否流暢等。7.4智力競賽搶答器7.4.1項目說明1.任務書設計一個可容納3組參賽者的智力競賽器,具體要求如下:(1)每組設置一個按鈕供搶答使用。搶答器具有第一信號鑒別功能,使除第一搶答者外的按鈕不起作用;第一信號鑒別電路得到信號后,用指示燈顯示搶答組別;(2)設置一個主持人復位按鈕,主持人按動復位按鈕后,顯示搶答組別的3個指示燈熄滅;主持人宣讀題目,如果有選手提前搶答(對應的組別指示燈亮),視為犯規;設置一個計時電路,由主持人預先設置答題時間,答題超時視為犯規;(3)每組設置一個計分電路,由主持人記分,答對一次加1分,答錯和犯規不減分,但失去下一題的搶答機會;滿分為9分,積滿9分的選手本輪勝出,清零后開始下一輪搶答。2.計劃書(1)討論、分析項目要求,明確項目內容;(2)檢索閱讀相關的參考資料,研究項目設計方案;(3)制定計劃并分組后,實現設計方案中的各個模塊;(4)完成項目并測試功能;(5)撰寫項目開發報告。(6)項目演示、講解設計方案,完成項目評價。7.4.2設計方案1.項目分析3組搶答理論上應該有8種可能情況,但由于芯片的速度非??欤瑑山M以上同時搶答成功的可能性極小,因此可設計成只有3種情況,簡化電路的復雜性。搶答按鈕帶自鎖功能,按下即鎖定,再次按下才能抬起。設復位端為RESET、搶答按鈕分別為A、B、C;輸出到組別顯示的信號為SA、SB、SC;輸出到計分模塊的搶答結果為STATES;文件名為XHJB。2.第一信號鑒別模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYXHJBISPORT(RESET:INSTD_LOGIC;A,B,C:INSTD_LOGIC;SA,SB,SC:OUTSTD_LOGIC;STATES:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDENTITYXHJB;ARCHITECTUREARTOFXHJBISCONSTANTW1:STD_LOGIC_VECTOR:="001";CONSTANTW2:STD_LOGIC_VECTOR:="010";CONSTANTW3:STD_LOGIC_VECTOR:="100";SIGNALW:STD_LOGIC_VECTOR(2DOWNTO0);BEGINPROCESS(RESET,A,B,C)ISBEGINIFRESET='1'THENW<="000";SA<='0';SB<='0';SC<='0';ELSIF(A='1'ANDB='0'ANDC='0')THENSA<='1';SB<='0';SC<='0';W<=W1;ELSIF(A='0'ANDB='1'ANDC='0')THENSA<='0';SB<='1';SC<='0';W<=W2;ELSIF(A='0'ANDB='0'ANDC='1')THENSA<='0';SB<='0';SC<='1';W<=W3;ENDIF;STATES<=W;ENDPROCESS;ENDARCHITECTUREART;采用十進制加法計數器,主持人根據選手答題情況,按動加分按鈕,每次可給答題組加1分;按動清零按鈕,所有答題組的分數清零,開始下輪搶答。設清零端為CLR、加分按鈕為ADD、選擇端為CHOSE;輸出到計分顯示模塊的信號為AA、BB、CC;文件名為JFBLOCK。3.計分模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJFBLOCKISPORT(CLR,ADD:INSTD_LOGIC;CHOSE:INSTD_LOGIC_VECTOR(2DOWNTO0);AA,BB,CC:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYJFBLOCK;ARCHITECTUREARTOFJFBLOCKISBEGINPROCESS(CLR,ADD,CHOSE)ISVARIABLETEMPAA:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLETEMPBB:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLETEMPCC:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIF(ADD'EVENTANDADD='1')THENIFCLR='1'THENTEMPAA:="0000";TEMPBB:="0000";TEMPCC:="0000";ELSIFCHOSE="001"THENTEMPAA:=TEMPAA+'1';ELSIFCHOSE="010"THENTEMPBB:=TEMPBB+'1';ELSIFCHOSE="100"THENTEMPCC:=TEMPCC+'1';ENDIF;ENDIF;AA<=TEMPAA;BB<=TEMPBB;CC<=TEMPCC;ENDPROCESS;ENDARCHITECTUREART;主持人復位后,按下預置按鈕,可設置答題時間為19秒或39秒,若沒有設置答題時間,則限定在59秒以內;抬起預置按鈕,按下計時使能按鈕,開始倒計時,時間結束時顯示00,直到下次按動復位鍵。設系統工作時鐘為CLK(1Hz)、復位端為RESET、計時使能端為EN、預置端為LDN、預置按鈕為TA(19秒)和TB(39秒);輸出的時間顯示信號為QA和QB;文件名為JSBLOCK。4.計時模塊LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJSBLOCKISPORT(CLR,LDN,EN,CLK:INSTD_LOGIC;TA,TB:INSTD_LOGIC;QA:OUTSTD_LOGIC_VECTOR(3DOWNTO0);QB:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYJSBLOCK;ARCHITECTUREARTOFJSBLOCKISBEGINPROCESS(CLR,CLK)ISVARIABLETMPA:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLETMPB:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFCLR='1'THENTMPA:="1001";TMPB:="0101";ELSIFCLK'EVENTANDCLK='1'THENIFLDN='1'THENIFTA='1'THENTMPB:="0001";ENDIF;IFTB='1'THENTMPB:="0011";ENDIF;ELSIFEN='1'THENIFTMPA="0000"THENIFTMPB/="0000"THENTMPA:="1001";TMPB:=TMPB-1;ENDIF;ELSETMPA:=TMPA-1;ENDIF;ENDIF;ENDIF;QA<=TMPA;QB<=TMPB;ENDPROCESS;ENDARCHITECTUREART;IFLDN='1'THENIFTA='1'THENTMPB:="0001";ENDIF;IFTB='1'THENTMPB:="0011";ENDIF;ELSIFEN='1'THENIFTMPA="0000"THENIFTMPB/="0000"THENTMPA:="1001";TMPB:=TMPB-1;ENDIF;ELSETMPA:=TMPA-1;ENDIF;ENDIF;ENDIF;QA<=TMPA;QB<=TMPB;ENDPROCESS;ENDARCHITECTUREART;
由時間顯示、組別顯示和計分顯示模塊組成,時間顯示和計分顯示使用6位一體共陰極數碼管動態顯示,組別顯示使用發光二極管。6位一體共陰極數碼管動態顯示參考程序如下。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;5.顯示模塊ENTITYddispISPORT(CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);C:INSTD_LOGIC_VECTOR(3DOWNTO0);D:INSTD_LOGIC_VECTOR(3DOWNTO0);E:INSTD_LOGIC_VECTOR(3DOWNTO0);--A、B、C、D、E為顯示數據COM:OUTSTD_LOGIC_VECTOR(4DOWNTO0);--數碼管的選通信號SEG:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--數碼管的顯示驅動信號ENDENTITYddisp;ARCHITECTUREARTOFddispISSIGNALCNT:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALBCD:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN--周期性變化的信號CNTIFCNT="100"THENCNT<="000";ELSECNT<=CNT+'1';ENDIF;ENDIF;ENDPROCESS;PROCESS(CNT)BEGINCASECNTISWHEN"000"=>BCD<=A;COM<="11110";--COM選通信號低電平有效WHEN"001"=>BCD<=B;COM<="11101";WHEN"010"=>BCD<=C;COM<="11011";WHEN"011"=>BCD<=D;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 快速應對2025年稅法考試試題及答案
- SMT用免清洗型軟釬膏高質量錫基合金焊粉項目效益評估報告
- 代用燃料汽車轉換裝置項目效益評估報告
- 冬季道路施工排水措施
- 孩童成長保障金一次性結算協議
- 教育培訓機構預收費資金監管與學員綜合素質提升合同
- 四年級語文上冊 第七單元學習計劃
- 抖音短視頻知識付費內容合作運營與市場拓展協議
- 精神疾病患者監護權變更后探視權中止及康復協議
- 康復中心運營管理與康復康復機構合作承包協議
- 電網工程設備材料信息參考價2025年第一季度
- 江蘇南京茉莉環境投資有限公司招聘筆試題庫2025
- 吸氧并發癥預防及處理
- 針刺傷預防與處理(中華護理學會團體標準)
- 2024年安徽省初中學業水平考試生物試題含答案
- 2024年浙江省中考英語試題卷(含答案解析)
- MOOC 理解馬克思-南京大學 中國大學慕課答案
- 說明書hid500系列變頻調速器使用說明書s1.1(1)
- 最美中鋁人申報表
- 柑橘采摘機器人的結構設計說明書
- 國家網絡安全檢查操作指南
評論
0/150
提交評論