基于VHDL的數值比較器、數據選擇器、移位寄存器、60進制計數器、復雜ALU設計實驗報告_第1頁
基于VHDL的數值比較器、數據選擇器、移位寄存器、60進制計數器、復雜ALU設計實驗報告_第2頁
基于VHDL的數值比較器、數據選擇器、移位寄存器、60進制計數器、復雜ALU設計實驗報告_第3頁
基于VHDL的數值比較器、數據選擇器、移位寄存器、60進制計數器、復雜ALU設計實驗報告_第4頁
基于VHDL的數值比較器、數據選擇器、移位寄存器、60進制計數器、復雜ALU設計實驗報告_第5頁
已閱讀5頁,還剩61頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

于、60雜設計實驗報告VHDL告級:電子號:名:1兩器實的悉QuartusII。習。容:計三實要求:(1)熟掌握QuartusII開發環下可程輯件進行序設的套流程;2)設輸使插語模板(Insert((3)在QuartusII開發環下設程進時序仿,生的置件下載實板進最的物試證。四實原理:為:比較器特性表ABIn_sIn_l較器路示圖A>B×1A[3:0]B[3:0]A<B×0YeA=B010001YsComparerIn_lA=B100100In_eA=B001010A=B000×××A=B×11×××A=B1×1×××A=B11××××五、程序編寫、調試及仿真(芯片型號:MAX?系列EPM1270T144C5)(1)程序編寫:libraryieee;useieee.std_logic_1164.all;2entityVhdl1isport(a,b:instd_logic_vector(3downto0);ins,inl,ine:instd_logic;ys,ye,yl:outstd_logic);endVhdl1;architectureoneofVhdl1issignaltemps,tempe:std_logic;beginys<=temps;ye<=tempe;yl<=tempsnortempe;process(a,b,ine)beginif(a=bandine='1')thentempe<='1';elsetempe<='0';endif;endprocess;process(a,b,ins)beginif(a<b)thentemps<='1';elsif(a=bandins='1')thentemps<='1';elsetemps<='0';endif;endprocess;endone;(2)功能仿真:3(3)芯片引腳設定:(4)適配下載結果六、結果分析本實驗實現了兩位二進制數的比較。當兩位二進制數的高位不相等時,不在進行低位的比較,直接判斷出結果;當兩位二進制數的高位相等時,則借助判斷二進制數的低位是否相等來進行兩位二進制數的大小判斷。七、實驗注意事項實體(entity)名稱與文件名稱一致;時序仿真時,波形編輯后先保存波形文件再進行時序仿真分配管腳后,需要重現編譯,然后才能下載。設計流程:新建項目,新建源文件,輸入語言編譯,仿真,分配管腳,編譯,下載仿真流程:新建波形文件,導入管腳信號并編輯輸入信號仿真下載的時候選擇硬件為:USB-Blaster[USB-0]4Experiment2Designing8to1-Multiplxer一、實驗目的:熟悉QuartusII的開發環境、熟練掌握編程開發流程。學習VHDL的基本語法及編程設計。二、實驗內容:八選一數據選擇器設計三、實驗要求:(1)熟練掌握開發環境下對可編程邏輯器件進行程序化設計的整套流程;2)設計輸入使用插入語言模板(InsertTemplate);((3)在開發環境下對設計程序進行時序仿真,將生成的配置文件下載到實驗板,進行最終的實物測試驗證。四、實驗原理:電路功能表及其電路外部符號如下:電路功能表SbMux8-1SbA2A1A0YD01×××D1D2D00000D3D4D10001D5D20010D6D7D30011A2D40100A1D50101A0D60110D70111五、程序編寫、調試及仿真(芯片型號:MAX?系列EPM1270T144C5)(1)程序編寫:libraryieee;useieee.std_logic_1164.all;5ENTITYmux8_1ISPORT(d:INSTD_LOGIC_VECTOR(7DOWNTO0);sel:INSTD_LOGIC_VECTOR(2DOWNTO0);sb:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux8_1;ARCHITECTURErtlOFmux8_1ISBEGINPROCESS(d,sel,sb)BEGINIf(sb='0')thencase(sel)isWhen"000"=>y<=d(0);When"001"=>y<=d(1);When"010"=>y<=d(2);When"011"=>y<=d(3);When"100"=>y<=d(4);When"101"=>y<=d(5);When"110"=>y<=d(6);When"111"=>y<=d(7);Whenothers=>y<='X';endcase;elsey<='0';endif;ENDPROCESS;ENDrtl;(2)功能仿真和芯片時序仿真:(3)芯片引腳設定:6(4)適配下載結果六、實驗結論本實驗實現了8選1數據選擇器的設計,通過選擇信號的變化來選擇位數據d[7:0]的哪一位。關于sel的選擇信號和每一位的對應關系自己可以自行設計。七、實驗注意事項實體(entity)名稱與文件名稱一致;時序仿真時,波形編輯后先保存波形文件再進行時序仿;分配管腳后,需要重現編譯,然后才能下載。設計流程:新建項目,新建源文件,輸入語,編譯,仿真,分配管腳,編譯,下載仿真流程:新建波形文件,導入管腳信號并編輯輸入信,仿真下載的時候選擇硬件為:USB-Blaster[USB-0]。7Experiment3Designingmodule_60一、實驗目的:熟悉QuartusII的開發環境、熟練掌握編程開發流程。學習數字系統中層次化設計技巧、結構化設計的程序設計學習顯示譯碼電路分頻電路、計數電路的程序設計二、實驗內容:基于數碼管顯示的進制計數器設計三、實驗要求:熟練掌握QuartusII開發環境下對可編程邏輯器件進行程序化設計的整套流程;將50MHz信號分頻為信號,以1Hz為進制計數器使能信號,實現進制計數功能;計數進位持續時間1s用LED顯示,計數結果用兩位數碼管顯示設計位同步時序電路,在QuartusII開發環境下對設計程序進行時序仿;(5)將生成的配置文件下載到實驗板,進行最終的實物測試驗證四、實驗原理:先對50MHz時鐘信號分頻得到1Hz,然后調用兩個進制計數器,計數到59時回到初始0的計數狀態,每個10進制計數的技術結果通過顯示譯碼送到兩位數碼管上顯示,結構框圖如下:8五、程序編寫、調試及仿真(芯片型號:MAX?系列EPM1270T144C5)(1)程序編寫:、60進制計數器頂層程序:libraryieee;useieee.std_logic_1164.all;entitycount_60isport(clk,rst:instd_logic;count_data10,count_data1:outstd_logic_vector(6downto0);en_out:outstd_logic);endcount_60;architecturertlofcount_60iscomponentsec_outport(clk,rst:instd_logic;en_out:outstd_logic);endcomponent;componentcount_10port(clk,rst,en_in,ld:instd_logic;data_in:instd_logic_vector(3downto0);data_out:outstd_logic_vector(3downto0);en_out:outstd_logic);endcomponent;componentdis_decodeport(data_in:instd_logic_vector(3downto0);dis_num:outstd_logic_vector(6downto0));endcomponent;signalcont_tmp10,cont_tmp1,data_in:std_logic_vector(3downto0);signalld,sec_en,sec_en10,min_out:std_logic;beginld<=sec_en10andcont_tmp10(2)andcont_tmp10(0);data_in<="0000";en_out<=cont_tmp10(2)andcont_tmp10(0)andcont_tmp1(3)andcont_tmp1(0);U0:sec_outportmap(clk,rst,sec_en);U1:count_10portmap(clk,rst,sec_en,ld,data_in,cont_tmp1,sec_en10);U2:count_10portmap(clk,rst,sec_en10,ld,data_in,cont_tmp10,min_out);U3:dis_decodeportmap(cont_tmp1,count_data1);9U4:dis_decodeportmap(cont_tmp10,count_data10);endrtl;、10進制計數器libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitycount_10isport(clk,rst,en_in,ld:instd_logic;data_in:instd_logic_vector(3downto0);data_out:outstd_logic_vector(3downto0);en_out:outstd_logic);endcount_10;architecturertlofcount_10issignalcont_tmp:std_logic_vector(3downto0);beginen_out<=en_inandcont_tmp(3)andcont_tmp(0);data_out<=cont_tmp;process(clk,rst)beginif(rst='0')thencont_tmp<="0000";elsif(clk'eventandclk='1')thenif(ld='1')thencont_tmp<=data_in;elsif(en_in='1')thenif(cont_tmp="1001")thencont_tmp<="0000";elsecont_tmp<=cont_tmp+'1';endif;endif;endif;endprocess;endrtl;、LED譯碼器10libraryieee;useieee.std_logic_1164.all;entitydis_decodeisport(data_in:instd_logic_vector(3downto0);dis_num:outstd_logic_vector(6downto0));enddis_decode;architecturertlofdis_decodeisbeginwithdata_inselectdis_num<="0111111"WHEN"0000","0000110"WHEN"0001","1011011"WHEN"0010","1001111"WHEN"0011","1100110"WHEN"0100","1101101"WHEN"0101","1111101"WHEN"0110","0000111"WHEN"0111","1111111"WHEN"1000","1101111"WHEN"1001","0000000"WHENothers;endrtl;、50M分頻器libraryieee;useieee.std_logic_1164.all;entitysec_outisport(clk,rst:instd_logic;en_out:outstd_logic);endsec_out;architecturertlofsec_outiscomponentdivide_5port(clk,rst,en_in:instd_logic;en_out:outstd_logic);endcomponent;componentdivide_10port(clk,rst,en_in:instd_logic;en_out:outstd_logic);endcomponent;signalen0,en1,en2,en3,en4,en5,en6,en7:std_logic;11beginen_out<=en7;U0:divide_5portmap(clk,rst,'1',en0);U1:divide_10portmap(clk,rst,en0,en1);U2:divide_10portmap(clk,rst,en1,en2);U3:divide_10portmap(clk,rst,en2,en3);U4:divide_10portmap(clk,rst,en3,en4);U5:divide_10portmap(clk,rst,en4,en5);U6:divide_10portmap(clk,rst,en5,en6);U7:divide_10portmap(clk,rst,en6,en7);endrtl;、5分頻libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitydivide_5isport(clk,rst,en_in:instd_logic;en_out:outstd_logic);enddivide_5;architecturertlofdivide_5issignalcont_tmp:std_logic_vector(2downto0);beginen_out<=en_inandcont_tmp(2);process(clk,rst)beginif(rst='0')thencont_tmp<="000";elsif(clk'eventandclk='1')thenif(en_in='1')thenif(cont_tmp="100")thencont_tmp<="000";elsecont_tmp<=cont_tmp+'1';endif;endif;endif;endprocess;endrtl;12、10分頻libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitydivide_10isport(clk,rst,en_in:instd_logic;en_out:outstd_logic);enddivide_10;architecturertlofdivide_10issignalcont_tmp:std_logic_vector(3downto0);beginen_out<=en_inandcont_tmp(3)andcont_tmp(0);process(clk,rst)beginif(rst='0')thencont_tmp<="0000";elsif(clk'eventandclk='1')thenif(en_in='1')thenif(cont_tmp="1001")thencont_tmp<="0000";elsecont_tmp<=cont_tmp+'1';endif;endif;endif;endprocess;endrtl;(2)功能仿真和芯片時序仿真:、5分頻仿真波形13、50分頻仿真波形950*603*10M,因為要有個大數據量,仿真不容易進行,所以在此我們改編仿真50分頻的波形。、10進制計數器仿真波形、LED譯碼器、60進制計數器仿真波形14(3)芯片引腳設定:(4)適配下載結果六、實驗總結本實驗實現了60進制計數器的功能設計,該實驗涉及到了分頻器、譯碼器、10進制計數器的設計以及從元件例化,然后到調用的層次化、結構化系統設計的方法,整個程序層次清晰,易于理解和實現。15Experiment4Designingshift_register一、實驗目的:熟悉QuartusII的開發環境、熟練掌握編程開發流程以及的基本語法。學習數字系統中移位寄存器設計及其VHDL程二、實驗內容:移位寄存器設計三、驗求:熟練握QuartusII開環下可程輯件行序設的套流程;設計同時電路在開環下設程進時仿真;將生的置件載實板進最的物試證四、驗理:根據制位key_in、ld、ctr、clr來制位存的態其路意及電特表為比較特表比較器電路示意圖loadkey_inctr0××××data_in[3:0]復位data_q[3:0])clk10××置數clr110×保持Shift_registerload110×保持ctr右移key_in左移srsl五、程序編寫、調試及仿真(1)程序編寫:(芯片型號:MAX?系列EPM1270T144C5)libraryieee;useieee.std_logic_1164.all;ENTITYshiftIS16PORT(clr,clk,ld,ctr,key_in,sr,sl:INSTD_LOGIC;data_in:INSTD_LOGIC_VECTOR(3downto0);data_q:OUTSTD_LOGIC_VECTOR(3downto0));ENDshift;ARCHITECTUREarcOFshiftISsignaldata_tmp:STD_LOGIC_VECTOR(3downto0);signalkey_en:std_logic;BEGINdata_q<=data_tmp;PROCESS(clr,clk)BEGINIF(clr='0')THENdata_tmp<="0000";ELSIF(clk'EVENTANDclk='1')THENIFld='0'THENdata_tmp<=data_in;ELSIF(key_in='1'ANDctr='0')THENdata_tmp<=sr&data_tmp(3downto1);--youyiELSIF(key_in='1'ANDctr='1')THENdata_tmp<=data_tmp(2downto0)&sl;--zuoyiENDIF;ENDIF;ENDPROCESS;ENDarc;(2)功能仿真和芯片時序仿真:(3)芯片引腳設定:17(4)適配下載結果六、實驗結論本實驗實現了4位簡單移位寄存器的設計,通過來使寄存器清零。當時鐘上升沿到來的時候:ld='0'時,實現將送到輸出端data_out[3:0],實現置數功能;key_in='1'并且ctr='1'時,將sl據送到到次態data_tmp[0],而現態data_tmp[2:0]則轉變為次態data_tmp[3:1]從而實現左移功能;key_in='1'并且ctr='0'時,將sr數據送到到次態data_tmp[3],而現態data_tmp[3:1]則轉變為次態data_tmp[2:0]從而實現右移功能。18Experiment5DesigningbasicALU一、實驗目的:熟悉的開發環境、熟練掌握編程開發流程以及的基本語法。學習邏輯功能模塊的設計二、實驗內容:4bit基本ALU單元的設計三、實驗要求:要求設計的單元具有4bit、減加算術運算和邏輯與、或運算將生成的配置文件下載到實驗板,進行最終的實物測試驗證四、實驗原理:算術運算和邏輯運算通過功能選擇信號的不同取值實現,對應的電路示意圖和功能表如下:功能選擇輸出執行動作S1S0加法00F=A+B減法01F=A-BF=A?B邏輯與10F=A?B邏輯或11五、程序編寫、調試及仿真(1)程序編寫:LIBRARYieee;USEieee.std_logic_1164.all;19USEieee.std_logic_arith.all;USEieee.std_logic_unsigned.all;ENTITYalu_4bitISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);Cin:INSTD_LOGIC;S:INSTD_LOGIC_VECTOR(1DOWNTO0);BCDout:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Cout:OUTSTD_LOGIC);ENDalu_4bit;ARCHITECTUREarchOFalu_4bitISSIGNALc1,c2,Y1,Y2,Y3,Y4:STD_LOGIC_VECTOR(3DOWNTO0);BEGINBCDout<=Y1whens="00"elseY2whens="01"elseY3whens="10"elseY4whens="11"else"XXXX";cout<=c1(3)whens="00"elsec2(3)whens="01"else'0';add:PROCESS(A,B,Cin,c1)BEGINY1(0)<=A(0)XORB(0)XORCin;c1(0)<=(A(0)ANDB(0))OR(cinAND(A(0)ORB(0)));GEN1:FORIIN1TO3LOOPY1(I)<=A(I)XORB(I)XORC1(I-1);c1(I)<=A(I))(c1(I-1)B(I))B(I));LOOP;PROCESSBEGINY2(0)<=B(0);c2(0)A(0))B(0))B(0))((NOTA(0))cin);I13LOOPY2(I)<=B(I)c2(I)<=A(I))(c2(I-1)B(I))OR(NOTB(I));LOOP;PROCESSBEGINY3(3)<=Y3(2)<=Y3(1)<=A(1)andB(1);Y3(0)<=A(0)andB(0);ENDPROCESSlogic_and;logic_or:PROCESS(A,B)BEGINY4(3)<=A(3)orB(3);Y4(2)<=A(2)orB(2);Y4(1)<=A(1)orB(1);Y4(0)<=A(0)orB(0);ENDPROCESSlogic_or;ENDarch;(2)功能仿真和芯片時序仿真:(3)芯片引腳設定:21(4)適配下載結果六、實驗總結本實驗實現了考慮帶有進位、借位和加、減算術運算和位邏輯與、邏輯或的基本運算,利用兩位控制信號來決定程序做何種運算。在加減運算中處理非最低位是采用了IIN1TO3LOOP….ENDLOOP;的循序,縮短了程序。在邏輯與或運算中進、借位端無效,使用了并行賦值語句來完成。22Experiment6DesigningComplexALU一、實驗目的:(1)熟悉QuartusII的開發環境、熟練掌握編程開發流程以及的基本語法。(2)學習邏輯功能模塊的設計二、實驗內容:復雜ALU單元的設計三、實驗要求:(1)熟練掌握QuartusII開發環境下對可編程邏輯器件進行程序化設計的整套流程;設計的單元具有加、減加算術運算和邏輯與、或運算;(2)(3)在開發環境下對設計程序進行時序仿真,將生成的配置文件下載到實驗板,進行最終的實物測試驗證;四、實驗原理:算術運算和邏輯運算通過功能選擇信號的不同取值實現,對應的電路示意圖和功能表如下:功能選擇輸出執行動作CinS2S1S00加法000F=A+B1帶進位加法000F=A+B+1230減法001F=A-B1帶借位減法001F=A-B-10傳遞(無進位)010F=A1A加1010F=A+10傳遞(無借位)011F=A1A減1011F=A-1F=A?B邏輯與100XF=A?B邏輯或101XF=A?B異或110X邏輯反11XF=~A五、程序編寫、調試及仿真(芯片型號:MAX?系列EPM1270T144C5)(1)程序編寫:LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_arith.all;USEieee.std_logic_unsigned.all;ENTITYC_alu_4bitIS--4bitsALUPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);Cin,C0:INSTD_LOGIC;S:INSTD_LOGIC_VECTOR(2DOWNTO0);BCDout:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Cout:OUTSTD_LOGIC);ENDC_alu_4bit;ARCHITECTUREarchOFC_alu_4bitISSIGNALc1,c2,c3,c4,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,Y10,Y11,Y12:STD_LOGIC_VECTOR(3DOWNTO0);BEGINBCDout<=Y1when(s="000"andCin='0')else--jiaY2when(s="000"andCin='1')else--c_jiaY3when(s="001"andCin='0')else--jianY4when(s="001"andCin='1')else--c_jainY5when(s="010"andCin='0')else--遞(無進位)Y6when(s="010"andCin='1')else--A1Y7when(s="011"andCin='0')else--遞(無借位)Y8when(s="011"andCin='1')else--A1Y9when(s="100")else--andY10when(s="101")else--or24Y11when(s="110")else--xorY12when(s="111")else--not"XXXX";cout<=c1(3)when(s="000"andCin='1')elsec2(3)when(s="001"andCin='1')elsec3(3)when(s="010"andCin='1')elsec4(3)when(s="011"andCin='1')else'0';--arithmeticoperatoradd:PROCESS(A,B)BEGINGEN1:FORIIN0TO3LOOPY1(I)<=A(I)XORB(I);ENDLOOP;ENDPROCESSadd;c_add:PROCESS(A,B,C0,c1)BEGINY2(0)<=A(0)XORB(0)XORC0;c1(0)<=(A(0)ANDB(0))OR(C0AND(A(0)ORB(0)));GEN1:FORIIN1TO3LOOPY2(I)<=A(I)XORB(I)XORC1(I-1);c1(I)<=A(I))(c1(I-1)B(I))B(I));LOOP;PROCESSc_add;BEGINPROCESSBEGINY4(0)<=B

溫馨提示

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

評論

0/150

提交評論