實驗四序列發(fā)生器_第1頁
實驗四序列發(fā)生器_第2頁
實驗四序列發(fā)生器_第3頁
實驗四序列發(fā)生器_第4頁
實驗四序列發(fā)生器_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

南昌大學(xué)實驗報告學(xué)生姓名:學(xué)號:專業(yè)班級:中興101班實驗類型:□驗證□綜合■設(shè)計□創(chuàng)新實驗日期:2023、11、16成績:實驗四序列信號發(fā)生器與檢測器設(shè)計一、實驗?zāi)康?、學(xué)習(xí)VHDL文本輸入法2、學(xué)習(xí)有限狀態(tài)機(jī)的設(shè)計3、利用狀態(tài)機(jī)實現(xiàn)串行序列的輸出與序列的檢測4、繼續(xù)學(xué)習(xí)優(yōu)化設(shè)計二.實驗內(nèi)容與要求2.用有限狀態(tài)機(jī)設(shè)計序列檢測器,實現(xiàn)串行序列11010的檢測器3.假設(shè)檢測到符合要求的序列,那么輸出顯示位為“1〞,否那么為“0〞4.對檢測到的次數(shù)計數(shù)5.整個工程采用頂層文件+底層模塊的原理圖或文本的設(shè)計思路三、實驗儀器PC機(jī)、QuartusII軟件、EDA實驗箱四、實驗思路設(shè)計序列發(fā)生器根本思想為一個信號CQ1計數(shù),給另一個信號CO〔代表序列的每一位〕賦值的方法:先設(shè)定端口CQ1用于產(chǎn)生序列時計數(shù),因為序列共16位,因此端口CQ1為標(biāo)準(zhǔn)邏輯矢量,位寬為4,設(shè)另一個端口M代表序列的每一位,CQ1每計一個數(shù),就給M賦一個值,這樣產(chǎn)生一個16位的序列。由于端口不能參與相關(guān)運(yùn)算,因此在結(jié)構(gòu)體中我分別定義了信號CQ1(標(biāo)準(zhǔn)邏輯矢量,位寬4),信號Q與相應(yīng)的端口CQ1CO對應(yīng),在進(jìn)程中參與相應(yīng)的運(yùn)算,在程序的最后再用端口接收信號:CO<=Q;在進(jìn)程中我采用case–when語句,如當(dāng)CQ1為“0000〞的時候,給另一信號Q賦‘0’,當(dāng)CQ1為“0001〞時,為Q賦‘1’以此類推,且讓CQ1產(chǎn)生循環(huán),即可源源不斷的產(chǎn)生所需序列了,如下表CQ100000001001000110100010101100111Q01110100CQ110001001101010111100110111101111Q11011010序列檢測器序列檢測器設(shè)計的關(guān)鍵在于正確碼的收到必須是連續(xù)的,這就要求檢測器必須記住前一次的正確碼及序列,直到在連續(xù)的檢測中收到的每一位碼都與實驗要求相同。在此,必須利用狀態(tài)轉(zhuǎn)移圖。電路需要分別不間斷記憶:初始狀態(tài)、1、11、110、1101、11010共六種狀態(tài),狀態(tài)轉(zhuǎn)移如圖:11010S0S1S2S3S4S500111假設(shè)檢測到“11010〞序列,那么輸出信號N為1,定義VARIABLEX:STD_LOGIC_VECTOR(3DOWNTO0)進(jìn)行計數(shù),最后把變量X賦給輸出SS,在數(shù)碼管上顯示檢測到序列“11010〞的次數(shù)。3.時鐘脈沖的選擇數(shù)碼管顯示的掃描時鐘需要很快的速度,因此采用1KHz頻率的時鐘;而序列發(fā)生器,為了能夠人眼識別亮滅,那么我選擇采用2000分頻之后得到的0.5Hz頻率五.原理圖輸入法設(shè)計〔程序來源:根本上獨立完成〕1.建立文件夾建立自己的文件夾〔目錄〕,如c:\myeda,進(jìn)入Windows操作系統(tǒng)QuartusII不能識別中文,2.原理圖設(shè)計輸入翻開QuartusII,選菜單File→New,選擇“DeviceDesignFile->BlockDiagram->SchematicFile〞項。點擊“OK〞,在主界面中將翻開“BlockEditor〞窗口。分頻器模塊:〔實體名為DIV〕本設(shè)計使用的FPGA開發(fā)板中使用的芯片是CycloneIIEP2C35F672C8,使用的是10kHz的時鐘脈沖輸入,根據(jù)電路的具體設(shè)計需要,對其進(jìn)行分頻設(shè)計。如圖1所示為系統(tǒng)的分頻模塊,其中模塊Clockout管腳輸出為0.5hz的時鐘脈沖,得出序列發(fā)生器和序列檢測器模塊正常工作的時鐘信號,在Clockin管腳輸出為一個1khz的時鐘脈沖,作用與動態(tài)掃描模塊的正常工作。輸入管腳:Clockin為1khz脈沖輸入;輸出管腳:Clockout為0.5hz脈沖輸出;圖1--時間:2023年11月10號--版本:7.2--功能:分頻器〔2000分頻〕分頻模塊DIV源代碼div.vhd如下:-------分頻程序,從1KHZ中得到0.5HZ的計數(shù)頻率,2000分頻----------LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--這3個程序包足發(fā)應(yīng)付大局部的VHDL程序設(shè)計USEIEEE.STD_LOGIC_Arith.ALL;USEIEEE.STD_LOGIC_Unsigned.ALL;ENTITYDIVISGENERIC(N:Integer:=20000);--此處定義了一個默認(rèn)值N=10000,即電路為10000分頻電路;Port(Clockin:INSTD_LOGIC;ClockOut:OUTSTD_LOGIC);END;ARCHITECTUREDeviderOFDIVISSIGNALCounter:IntegerRANGE0TON-1;SIGNALTemp1:STD_LOGIC; --信號的聲明在結(jié)構(gòu)體內(nèi),進(jìn)程外部BEGIN PROCESS(Clockin)BEGINIFRISING_EDGE(Clockin)THEN IFCounter=N-1THEN counter<=0; Temp1<=NotTemp1; ELSE Counter<=Counter+1; IFCounter=(N/2-1)THEN Temp1<=NOTTemp1; ENDIF;ENDIF;ENDIF;ENDPROCESS;ClockOut<=Temp1;END;序列發(fā)生器模塊:〔實體名為C_OUT〕序列發(fā)生器模塊如圖2所示,其中:輸入管腳:CLK為0.5hz的時鐘脈沖;RST為復(fù)位信號;輸出管腳:CO序列發(fā)生器設(shè)計時用于計數(shù),實現(xiàn)模16計數(shù),以產(chǎn)生16位的序列圖2--時間:2023年11月10號--版本:7.2--功能:產(chǎn)生一個十六位的指定序列-----------------C_OUT------------------------------------------------------------------LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;--為了重載ENTITYC_OUTISPORT(CLK,RST:INSTD_LOGIC;--定義時鐘和復(fù)位信號CO:OUTSTD_LOGIC);--序列發(fā)生器設(shè)計時用于計數(shù),實現(xiàn)模16計數(shù),以產(chǎn)生16位的序列ENDC_OUT;----------------------------------------------------------------------------------------ARCHITECTUREbehavOFC_OUTISSIGNALCQ1:STD_LOGIC_VECTOR(3DOWNTO0);--定義信號進(jìn)行計數(shù).實現(xiàn)模16計數(shù),對應(yīng)依次產(chǎn)生序列的位0到位15;SIGNALQ:STD_LOGIC;BEGINPROCESS(CLK,RST,Q)BEGINIFRST='1'THENCQ1<="0000";Q<='0';--如果復(fù)位,那么計數(shù)器清0,M也清0ELSIFCLK'EVENTANDCLK='1'THENCQ1<=CQ1+1;--時鐘上升沿到來,Q開始計數(shù),產(chǎn)生序列CASECQ1ISWHEN"0000"=>Q<='0';WHEN"0001"=>Q<='1';WHEN"0010"=>Q<='1';WHEN"0011"=>Q<='1';WHEN"0100"=>Q<='0';WHEN"0101"=>Q<='1';WHEN"0110"=>Q<='0';WHEN"0111"=>Q<='0';WHEN"1000"=>Q<='1';WHEN"1001"=>Q<='1';WHEN"1010"=>Q<='0';WHEN"1011"=>Q<='1';WHEN"1100"=>Q<='1';WHEN"1101"=>Q<='0';WHEN"1110"=>Q<='1';WHEN"1111"=>Q<='0';ENDCASE;ENDIF;ENDPROCESS;--序列發(fā)生器到此結(jié)束CO<=Q;ENDbehav;〔3〕序列檢測模塊:〔實體名為SCHK〕序列檢測模塊如圖3所示,其中:輸入管腳:CLK為0.5hz的時鐘脈沖;EN為使能端,為1才正常工作;M為顯示當(dāng)前產(chǎn)生的位;輸出管腳:N為顯示滿足序列要求時,產(chǎn)生‘1’,即為標(biāo)志位。圖3--時間:2023年11月10號--版本:7.2--功能:檢測指定的序列----------SCHK------------------------------------------------------------------------------LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;--為了重載ENTITYSCHKISPORT(CLK,EN,M:INSTD_LOGIC;--EN為使能端,為1才正常工作;M為顯示當(dāng)前產(chǎn)生的位N:OUTSTD_LOGIC);-N為顯示滿足序列要求時,產(chǎn)生‘1’,即為標(biāo)志位ENDSCHK;----------------------------------------------------------------------------------------ARCHITECTUREbehavOFSCHKISTYPESTATEIS(S0,S1,S2,S3,S4,S5);---狀態(tài)機(jī)的定義,5個狀態(tài)SIGNALS:STATE;SIGNALA1,A2,A3,A4,A5:STD_LOGIC;--SIGNALQ:INTEGERRANGE0TO5;--SIGNALD:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALN1:STD_LOGIC;BEGINPROCESS(CLK,S,N1,EN)---序列檢測器進(jìn)程BEGINIFEN='0'THENS<=S0;N1<='0';A5<='0';A4<='0';A3<='0';A2<='0';A1<='0';ELSIFCLK'EVENTANDCLK='0'THENN1<='0';CASESISWHENS0=>ifM='1'thenS<=S1;elseS<=S0;endif;WHENS1=>ifM='1'thenS<=S2;elseS<=S0;endif;WHENS2=>ifM='0'thenS<=S3;elseS<=S2;endif;WHENS3=>ifM='1'thenS<=S4;elseS<=S0;endif;WHENS4=>ifM='0'thenS<=S5;----生成一個11010序列N1<='1';elseS<=S2;endif;--11011010里有一個,同時計數(shù)WHENothers=>S<=S0;ENDCASE;A5<=A4;---移位輸出顯示在led上以便觀看A4<=A3;A3<=A2;A2<=A1;A1<=M;--將最近生產(chǎn)的序列賦給最前端的A1位endif;N<=N1;--顯示檢測到11010,檢測到時它為高電平,它所對應(yīng)二極管亮,否那么二極管滅ENDPROCESS;ENDbehav;〔4〕16進(jìn)制計數(shù)模塊〔實體名:COUNT〕16進(jìn)制計數(shù)模塊如圖4所示,其中:輸入管腳:CLK為檢測到一個序列產(chǎn)生一個脈沖;RST為計數(shù)復(fù)位信號;EN為使能端;輸出管腳:Q[3..0]為計數(shù)的個位;COUNT計數(shù)到達(dá)15時,產(chǎn)生標(biāo)志信號圖4--時間:2023年11月10號--版本:7.2--功能:16進(jìn)制計數(shù)模塊-------------COUNT-----------------------------------------------LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTISPORT(CLK,RST,EN:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDENTITYCOUNT;----------------------------------------------------------------------------------------ARCHITECTUREONEOFCOUNTISBEGINPROCESS(CLK,EN,RST)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFCQI<15THENCQI:=CQI+1;ELSECQI:="0000";ENDIF;ENDIF;ENDIF;IFCQI=15THENCOUT<='1';ELSECOUT<='0';ENDIF;Q<=CQI;ENDPROCESSCOUNT;ENDARCHITECTUREONE;〔5〕數(shù)碼管顯示模塊〔實體名:scan_led〕數(shù)碼管顯示模塊如圖5所示,其中:輸入管腳:CLK為1khz的時鐘脈沖;data1[3..0]為要顯示的數(shù)的個位;data2[3..0]為要顯示的數(shù)的十位;輸出管腳:scan數(shù)碼管顯示碼choose數(shù)碼管位選信號圖5--時間:2023年11月10號--版本:7.2--功能:將計數(shù)結(jié)果在數(shù)碼管顯示---------------scan_led---------------------------------LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYscan_ledISPORT(clk:INSTD_LOGIC;data1,data2:INSTD_LOGIC_VECTOR(3DOWNTO0);scan:OUTSTD_LOGIC_VECTOR(6DOWNTO0);--scan數(shù)碼管顯示碼choose:OUTSTD_LOGIC_VECTOR(2DOWNTO0));--choose數(shù)碼管位選信號ENDENTITY;ARCHITECTUREoneOFscan_ledISSIGNALcout8:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALA:STD_LOGIC_VECTOR(3DOWNTO0);BEGINP1:PROCESS(cout8)—片選BEGINCASEcout8ISWHEN"000"=>choose<="000";A<=data1;WHEN"001"=>choose<="001";A<=data2;WHEN"010"=>choose<="010";A<="0000";WHEN"011"=>choose<="011";A<="0000";WHEN"100"=>choose<="100";A<="0000";WHEN"101"=>choose<="101";A<="0000";WHEN"110"=>choose<="110";A<="0000";WHEN"111"=>choose<="111";A<="0000";WHENOTHERS=>NULL;ENDCASE;ENDPROCESSP1;P2:PROCESS(clk)BEGINIFclk'EVENTANDclk='1'THENcout8<=cout8+1;ENDIF;ENDPROCESSP2;P3:PROCESS(A)—譯碼BEGINCASEAIS WHEN"0000"=>scan<="0111111";--0 WHEN"0001"=>scan<="0000110";--1 WHEN"0010"=>scan<="1011011";--2 WHEN"0011"=>scan<="1001111";--3 WHEN"0100"=>scan<="1100110";--4 WHEN"0101"=>scan<="1101101";--5 WHEN"0110"=>scan<="1111101";--6 WHEN"0111"=>scan<="0000111";--7 WHEN"1000"=>scan<="1111111";--8 WHEN"1001"=>scan<="1101111";--9WHEN"1010"=>scan<="1110111";--A WHEN"1011"=>scan<="1111100";--B WHEN"1100"=>scan<="0111001";--C WHEN"1101"=>scan<="1011110";--D WHEN"1110"=>scan<="1111001";--E WHEN"1111"=>scan<="1110001";--F WHENOTHERS=>NULL; ENDCASE;ENDPROCESSP3;END;2.包裝元件入庫。編譯通過后,單擊File→CreateDefaultSymbol,當(dāng)前文件變成了一個包裝好的自己的單一元件,并被放置在工程路徑指定的目錄中以備后用。3.保存各個模塊的原理圖單擊File→Saveas…按扭,出現(xiàn)對話框,選擇自己的目錄〔如c:\myeda〕,適宜名稱保存剛剛輸入的原理圖,原理圖的擴(kuò)展名為.bdf。4.設(shè)置工程文件〔Project〕以EXP4為工程名命名5.選擇目標(biāo)器件6.放置元件7.添加連線將以上各器件連接成實驗原理圖如下:圖6原理圖設(shè)計8.編譯〔Compiler〕單擊→QuartusIICompiler,跳出Compiler窗口,此編譯器的功能包括網(wǎng)表文件的提取、設(shè)計文件的排錯、邏輯綜合、邏輯分配、適配〔結(jié)構(gòu)綜合〕、時序仿真文件提取和編程下載文件裝配等。單擊Start,開始編譯!如果發(fā)現(xiàn)有錯,排除錯誤后再次編譯。7.仿真,測試工程的正確性〔僅對計數(shù)模塊進(jìn)行仿真測試〕1〕建立新的波形鼓勵文件2〕在波形編輯器窗口添加節(jié)點3〕通過Edit->EndTime來設(shè)定仿真結(jié)束時間為1ms4〕在CLOCK窗口中設(shè)置clk的時鐘周期為10ns時間設(shè)置如下:5〕點擊save保存,輸入波形如下:6)通過Tools下的SimulatorTools項進(jìn)行仿真,然后觀察輸出波形。仿真波形以及分析如下:初步檢驗:對上述問題進(jìn)行調(diào)整當(dāng)使能端EN=1,RST=0時產(chǎn)生序列“〞當(dāng)使能端EN=1,RST=0時產(chǎn)生序列“〞對檢測器進(jìn)行考察:當(dāng)產(chǎn)生一個“11010〞時,N增1,當(dāng)產(chǎn)生一個“11010〞時,N增1,當(dāng)RST=0時,序列輸出端CO=0,不產(chǎn)生序列,且計數(shù)器保持原始計數(shù)當(dāng)RST=0時,序列輸出端CO=0,不產(chǎn)生序列,且計數(shù)器保持原始計數(shù)對序列發(fā)生器清零端進(jìn)行考察:對計數(shù)器的考察:當(dāng)計數(shù)到達(dá)15時,count=1,且從零開始計數(shù)當(dāng)計數(shù)到達(dá)15時,count=1,且從零開始計數(shù)對計數(shù)清零端進(jìn)行考察:當(dāng)RST1=1時,脈沖仍然正常產(chǎn)生,但是計數(shù)清零,為0時,重新計數(shù)當(dāng)RST1=1時,脈沖仍然正常產(chǎn)生,但是計數(shù)清零,為0時,重新計數(shù)對狀態(tài)圖的考察由上可知,仿真結(jié)果與要求一致!六、引腳鎖定和編程下載1.Assignments-.>device->引腳鎖定,參照下載實驗板1K100的引腳號說明書,選擇適當(dāng)?shù)囊_2.引腳鎖定后,保存,必須重新進(jìn)行一次全程編譯,編譯通過后才能編程下載。3、編程下載,用下載線將計算機(jī)并口和試驗箱上的JTAG口接起來,接通電源。選擇Tools—>Programmer菜單,翻開programmer窗口。在mode中選中JTAG,將Program/Configure下的笑方框選中4在開始編程之前,必須正確設(shè)置編程硬件。點擊“HardwareSetup〞按鈕,翻開硬件設(shè)置口。點擊“AddHardware〞翻開硬件添加窗口,在“Hardwaretype〞下拉框中選擇“ByteBlasterMVorByte

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論