目 錄
一章CPTH+實驗系統簡介
一、CPTH+實驗系統組成……………………………………………………2
二、CPTH+實驗系統使用………………………………………………………2
二章 十六位機(FPGA)擴展實驗板簡介…………………………………2
一、FPGA實驗板主要功能…………………………………………………2
二、FPGA實驗板組成………………………………………………………2
三、FPGA實驗板軟件簡介……………………………………………………4
四、FPGA實驗板使用…………………………………………………………5
三章 QuartusⅡ開發環境使用入門…………………………………………6
四章 十六位機擴展實驗………………………………………………………13
分部實驗一、十六位ALU實驗………………………………………………13
分部實驗二、十六位寄存器實驗……………………………………………14
分部實驗三、十六位寄存器組實驗…………………………………………14
分部實驗四、十六位指令計數器PC實驗……………………………………15
分部實驗五、中斷控制實驗…………………………………………………17
實驗六、 十六位模型機的總體實驗………………………………………18
一章CPTH+實驗系統簡介
一,CPTH+實驗系統組成:
CPTH+是我公司新推出的八位機帶十六位機接口的計算機組成原理和系統結構實驗儀。CPTH+在原CPTH主板的基礎上增加十六位機接口,通過選配CPT16十六位機擴展實驗板(也稱FPGA實驗板),完成十六位機計算機組成原理實驗。
CPTH+主板以八位機模式,用TTL74系列器件+CPLD構建模型機部件,讓學生以可視方式觀察CPU內各部件工作過程和模型機的實現。CPT16_1C6實驗板以十六位機模式,用15萬門EP1C6Q240C8N FPGA芯片構建模型機所有部件,并配置64K×16位存儲器,在對八位機了解的基礎上,讓學生對十六位計算機組成原理有更深刻的理解,實現質的飛躍,為FPGA設計CPU打下基礎。
二,CPTH+實驗系統使用
CPTH+有兩種使用方式:八位機和十六位機兩種實驗方式。
(1)八位機方式:
CPTH+主板是八位機模式,只需把通信選擇開關“KT”撥向“CPTH”一側,即可構成八位計算機組成原理和系統結構的實驗系統。具體使用詳見《CPTH超強型計算機組成原理和系統結構實驗指導書》。
(2)十六位機方式:
把選配的CPT16十六位機擴展實驗板,對應插入“CPTH+主板”上的座,然后把通信選擇開關“KT”撥向“CPT16”一側,即可構成十六位計算機組成原理的實驗系統。具體使用詳見下面各章節的說明。
二章 十六位機(FPGA)擴展實驗板簡介
一、FPGA實驗板主要功能
FPGA(CPT16_1C6)實驗板主要是基于EDA設計的計算機組成原理的實驗板,它的核心器件是Altera公司的Cyclone 系列15萬門EP1C6Q240C8N的FPGA芯片。用該FPGA實驗板,通過VHDL語言編程,可設計16位機的部件和模型機,學生將設計好的電路下載到FPGA芯片上,實現16位機的部件和模型機功能;也可完成其它設計性實驗和課程設計實驗。
二、FPGA實驗板組成
(1)AT89S52單片機,主要用于接收PC機命令,完成16位程序存儲器讀寫,管理模型機運行、暫停等功能。
(2)ispLSI 1032E是邏輯控制芯片,負責單片機和模型機總線切換。
(3)EP1C6是模型機主控芯片,相應管腳已連好,JTAG (By.II)是EP1C6芯片的標配下載接口,再配合FPGA實驗板的PC機調試軟件,可方便地進行各種實驗。
(4)IDT71V016是64K×16位存儲器,是模型機的程序存儲器,能保存大容量程序。
(5)六位8段數碼管,用于顯示模型機內部寄存器、總線的值,在設計時可將需要觀察的內部寄存器、總線值送A,再通過OUT指令送到數碼管顯示。三只GAL16V8是六位數碼管16進制譯碼器。
(6)L7~L0是8個發光二極管,用于顯示模型機內部狀態,例如:進位標志、零標志、中斷申請標志等。
(7)K0(7…0)~K4(7…0)是40個開關,用于輸入外部信號,例如,在做單步實驗時,這些開關可用來輸入地址總線值、數據總線值、控制信號等。
(8) EP1C6 右方的EX1座表示46 個擴展的IO 信號,當實驗中需要另外的輸入輸出腳時可以使用這些擴展腳。
實驗板框圖
(9)EP1C6的管腳連接表
K0.0 | 118 | K3.0 | 85 | D0 | 43 | A8 | 62 | OUT0 | 225 | LDE0 |
K0.1 | 117 | K3.1 | 84 | D1 | 46 | A9 | 64 | OUT1 | 224 |
K0.2 | 116 | K3.2 | 83 | D2 | 45 | A10 | 63 | OUT2 | 223 |
K0.3 | 115 | K3.3 | 82 | D3 | 48 | A11 | 65 | OUT3 | 222 |
K0.4 | 114 | K3.4 | 81 | D4 | 47 | A12 | 53 | OUT4 | 221 | LDE1 |
K0.5 | 113 | K3.5 | 80 | D5 | 49 | A13 | 50 | OUT5 | 220 |
K0.6 | 108 | K3.6 | 79 | D6 | 59 | A14 | 55 | OUT6 | 219 |
K0.7 | 107 | K3.7 | 78 | D7 | 56 | A15 | 54 | OUT7 | 218 |
K1.0 | 106 | K4.0 | 77 | D8 | 61 | CS | 44 | OUT8 | 217 | LED2 |
K1.1 | 105 | K4.1 | 76 | D9 | 60 | WR | 57 | OUT9 | 226 |
K1.2 | 104 | K4.2 | 75 | D10 | 58 | RD | 8 | OUT10 | 227 |
K1.3 | 103 | K4.3 | 74 | D11 | 17 | BH | 11 | OUT11 | 228 |
K1.4 | 102 | K4.4 | 73 | D12 | 16 | BL | 12 | OUT12 | 233 | LED3 |
K1.5 | 101 | K4.5 | 68 | D13 | 15 | | | OUT13 | 234 |
K1.6 | 100 | K4.6 | 67 | D14 | 14 | RST | 21 | OUT14 | 235 |
K1.7 | 99 | K4.7 | 66 | D15 | 13 | CK | 20 | OUT15 | 236 |
K2.0 | 98 | L0 | 216 | A0 | 42 | I-REQ | 19 | OUT16 | 237 | LED4 |
K2.1 | 97 | L1 | 215 | A1 | 41 | P10 | 18 | OUT17 | 238 |
K2.2 | 96 | L2 | 214 | A2 | 38 | | | OUT18 | 239 |
K2.3 | 95 | L3 | 213 | A3 | 39 | | | OUT19 | 240 |
K2.4 | 94 | L4 | 208 | A4 | 204 | | | OUT20 | 1 | LED5 |
K2.5 | 93 | L5 | 207 | A5 | 5 | | | OUT21 | 2 |
K2.6 | 87 | L6 | 206 | A6 | 6 | | | OUT22 | 3 |
K2.7 | 86 | L7 | 205 | A7 | 7 | | | OUT23 | 4 |
三、FPGA實驗板軟件簡介
雙擊“CPTH計算機組成原理”快捷圖標,在CPTH主界面上,按“打開FPGA擴展窗口”按鈕,即可打FPGA擴展板界面,此界面給出了存儲器窗口和功能按鍵,如下圖。
①存儲器窗口給出了64K×16位存儲器內容,用鼠標左鍵單擊存儲單元,數據變蘭色后,即可修改存儲器中的數據。
②八個功能按鍵
·[連續脈沖],為模型機提供連續的高頻脈沖信號。
·[單脈沖],為模型機提供單脈沖信號。
·[暫停],當模型機連續運行時,可暫停程序的運行。
·[復位],使模型機復位。
·[產生中斷],為模型機提供中斷信號源。
·[連接CPT16],使FPGA實驗板和PC機CPTH調試軟件聯接。
·[保存文件],是將存儲器窗口中的數據寫到磁盤上。
·[調入文件],從磁盤上讀入數據文件,在此窗口中顯示。
·[FPGA編程],是將QuartusⅡ開發環境中生成的*.rbf格式文件下載到EP1C6的芯片中,在下載過程中有下載進度顯示。
·[打開編程文件],從磁盤上讀入*.rbf格式文件。
四、FPGA實驗板使用
(1)用串口/USB通信線(出產配置為串口),連接CPTH+主板和PC機相應RS232接口,把選配的CPT16十六位機擴展實驗板,對應插入“CPTH+主板”上的座,然后把通信選擇開關“KT”撥向“CPT16”一側,接通CPTH+實驗儀電源。
(2)在QuartusⅡ軟件中,用VHDL語言設計模型機電路,然后編譯、引腳鎖定,再編譯生成*.sof,再轉化為*.rbf格式。如已有*.rbf,步驟(2)可省。
(3)雙擊“CPTH計算機組成原理”快捷圖標,在CPTH主界面上,按“打開FPGA擴展窗口”按鈕,單擊按鍵“連接CPT16”,連機后其余按鍵字體變黑色可用,在CPTH主界面上點擊打開文件圖標,例如選擇“EX6.asm”,點擊編譯下載,下載完畢后,把源文件生成的機器碼自動下載到16位存儲器中;然后點擊“打開編程文件”,選擇cpt16.rbf文件,再點擊“FPGA編程”,把模型機電路的cpt16.rbf下載到EP1C6的芯片中。也可用《三章 QuartusⅡ開發環境使用入門》中器件編程方法下載。
(4)點擊“連續脈沖”按鍵,程序連續運行,點擊“產生中斷”按鍵,看FPGA實驗板數碼管顯示應加“1”變化,點擊“暫停”按鍵,可使程序暫停運行。
三章 QuartusⅡ開發環境使用入門
十六位機FPGA 擴展實驗板上用的15萬門大規模可編程芯片EP1C6 是altera 公司Cyclone產品,altera 公司是世界上大的FPGA/CPLD 生產商,其 QuartusⅡ6.0 開發環境也是電子工程師常用的軟件,在QuartusⅡ6.0 開發環境中可以完成設計輸入(原理圖、VHDL)、設計編譯、設計校驗、編程下載等EDA 設計的所有步驟。以QuartusⅡ6.0為例我們來了解在開發環境下EDA 設計的流程
1、建立設計項目。
啟動軟件,打開QuartusⅡ6.0 開發環境,選擇菜單[File]的[New Project…]功能。
點擊“NEXT”出現如圖對話框,在…Name 框內填上項目名例如alu。
點擊二次“NEXT”,選擇器件,點擊二次“NEXT”完成項目名創建。
2、建立設計文件。
輸入VHDL 程序。選擇菜單[File]的[New]功能,選擇“VHDL FILE”,點擊“OK”。
在空的文本窗口中輸入VHDL 語言,文件名保存為alu.vhdl。
3、把文件添加到項目中
選擇菜單[project]的[add/remove…]功能,選擇文件“alu.vhdl”,把alu.vhdl文件添加到alu項目中。
4、項目編譯
選擇菜單[tools]的[compiler tool]功能, 點擊 “start”開始編譯當前alu項目,編譯后如下圖。
5、管腳鎖定
選擇菜單[assignments]的[pin planner]功能。例如把選中的信號名:A[0]拖拉到EP1C6引腳圖相應引腳號上,以此類推進行鎖定。鎖完后重新編譯。
6、器件編程
通過重新項目編譯后生成的*.SOF文件用于下載。在我們例子中使用的是EP1C6為Cyclone系列,下面我們對其進行編程:
a、先關閉實驗板電源,將下載電纜一端插入LPT1(并行口,打印機口),另一端插入CPT16位機(FPGA)實驗板的JTAG(By.II)座,打開實驗板電源;
b、從菜單“TOOLS”下選擇“Programmer”,點擊“Hardware serup”選擇“ByteBlaster II(LPT1)”,編程模式Mode選擇“JTAG”,添加要編程的文件*.SOF,然后點擊“Start”開始編程。到目前為止,我們已完成一個完整的設計。
7,編程文件格式轉換
點擊file\convert prog...后,按下圖設置, 設置完后點擊“ok”,把*.sof*轉換.rbf。
四章 十六位機擴展實驗
分部實驗一、十六位ALU 實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,用VHDL
語言編寫程序,下載到EP1C6 FPGA 中,實現十六位模型機的ALU 功能。
實驗目的: 了解十六位模型機中算術、邏輯運算單元(ALU)的工作原理和實現方法學
習用VHDL 語言描述硬件邏輯。學習使用EDA 開發環境。
實驗說明:
在ALU.VHD程序中,A 為累加器,W 為工作寄存器,均為十六位寄存器,W 的值由K1、 K0 兩組開關共十六位輸入,A 的值由K2 、K3 兩組開關輸入,S0、S1、S2 為運算控制位,接在K4開關組的0、1、2 個開關上,根據S0、S1、S2 的不同,ALU 實現的功能參見下表,D為運算結果輸出顯示在四位八段管LED0..LED3上,CIn 為進位輸入,由K4 開關組的3 個開關輸入,COut 為進位輸出,用發光二極管L0 顯示其狀態。
S2 | S1 | S0 | ALU 實現的功能 |
0 | 0 | 0 | D = A+W 運算結果為A 加W |
0 | 0 | 1 | D = A-W 運算結果為A 減W |
0 | 1 | 0 | D = A|W 運算結果為A 邏輯或W |
0 | 1 | 1 | D = A&W 運算結果為A 邏輯與W |
1 | 0 | 0 | D = A+W+CIn 運算結果為A 加W 加進位 |
1 | 0 | 1 | D = A-W-CIn 運算結果為A 減W 減進位 |
1 | 1 | 0 | D = ~A 運算結果為A 取反 |
1 | 1 | 1 | D = A 運算結果為A A 直接輸出 |
實驗步驟:
1、打開Quartus 的EDA 開發環境,選擇“Open Project ...” 打開“EP1C6\” 下的ALU 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解ALU.VHD(源程序見隨機光盤)。了解模型機中ALU 的實現原理。
3、對ALU 項目進行綜合/編譯,生成ALU.SOF 文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載ALU.rbf。
4、打開CPTH的開發環境,打開FPGA 擴展板的界面。
5、按“連接CPT16”鍵,將實驗板連接到計算機上。
6、撥動K0 、K1 輸入W 的值,撥動K2、 K3 輸入A 的值,撥動K4 的0、1、2 位設置運算方式,撥動K4 的3 位,設置進位,觀察八段管LED3-LED0 的運算結果,觀察發光二極管L0 是否有進位輸出。
分部實驗二、十六位寄存器實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實現十六位模型機的寄存器輸入輸出功能。
實驗目的: 了解十六位模型機中寄存器的工作原理和實現方法。學習用VHDL 語言描述硬
件邏輯。學習使用EDA 開發環境。
實驗說明:
在REG.VHD程序中,D 為輸入數據,R 為寄存器,均為十六位寄存器,D 的值由K1、 K0 兩組開關共十六位輸入,R 為內部寄存器,用八段管LED3-LED0 顯示,EN 為寄存器選通信號,接在K4開關組的0 個開關上,RST 為復位信號,接在開關組K4 的7 個開關上,CLK 為時鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實驗步驟:
1、打開Quartus 的EDA 開發環境選擇“Open Project ... ”打開“EP1C6\” 下的REG 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解REG.VHD(源程序見隨機光盤),了解寄存器的實現原理。
3、對REG 項目進行綜合/編譯生成REG.sof 文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載REG.rbf。
4、打開CPTH的開發環境,打開FPGA 擴展板的界面。
5、按“連接CPT16”鍵將實驗板連接到計算機。
6、撥動K4 的7 位到“1”的位置,輸出“復位”信號,觀察八段管LED3…LED0 (R 寄存器的輸出顯示)是否清零,再將K4 的7 位回到 “0” 位時,撥動K0 、K1 輸入D 的值,撥動K4 的0 位,設置寄存器選通信號“EN”為有效狀態(“0” 有效),按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,觀察八段管LED3 …LED0 ,看看是否將D 的值存入寄存器R 中并顯示出來,撥動開關組K1、 K0 改變D 的值,再將“EN”置于無效狀態(“1” 位置),按“單脈沖” 產生時鐘信號,觀察八段管LED3 …LED0 是否會隨著改變。
分部實驗三、十六位寄存器組實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實現十六位模型機的多個寄存器輸入輸出功能。
實驗目的: 了解十六位模型機中寄存器組的工作原理和實現方法。學習用VHDL 語言描述硬件邏輯。學習使用EDA 開發環境。
實驗說明:
在REGS.VHD程序中,D 為輸入數據,為十六位寄存器,D 的值由K1、 K0 兩組開關共十六位輸入,R0..R3 為內部寄存器,R 用做內部寄存器顯示輸出,用八段管LED3..LED0 顯示其值,SA、SB 為寄存器選擇控制信號,接在K4 開關組的0、1 個開關上,RD 為寄存器讀信號,接K4的2 個開關上,WR 為寄存器寫信號,接在K4 的3 個開關上, RST 為復位信號,接在開關組K4 的7 個開關上,CLK 為時鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實驗步驟:
1、打開Quartus 的EDA 開發環境,選擇“Open Project ... ”打開“EP1C6\ ”下的REGS 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解REGS.VHD(源程序見隨機光盤)。了解模型中寄存器組的實現原理。
3、對REGS 項目進行綜合/編譯,生成REGS.SOF 文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載REGS.rbf。
4、打開CPTH的開發環境,打開FPGA 擴展板的界面。
5、按“連接CPT16”鍵將實驗板連接到計算機。
6、撥動K4 的7 位到“1” 的位置,輸出“復位”信號,觀察八段管LED3…LED0(R 寄存器的輸出顯示)是否清零,然后將K4的2( RD 信號)、3(WR 信號)位置成1狀態,使讀寫信號都處于無效狀態。
9、寄存器組寫實驗:將K4 的7 位回到時“0”位,撥動K0、K1 輸入D 的值,撥動K4的0、1位設成“00”, 選擇寄存器R0,撥動K4 的3 位,設置寄存器寫信號“WR” 為有效狀態(“0”有效),按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,將D 寫入寄存器R0 中。撥動K0、K1 開關組,改變D 值,再改變K4 的0、1 位設成“01”, 選擇寄存器R1 ,按“單脈沖”給出時鐘信號,將D 存入寄存器R1中,如此將不同的十六位數據分別存R0..R3 寄存器中。
10、寄存器組讀實驗:將K4 的3 位(WR 信號)設成“1” 使其無效,將K4 的0、1兩位撥成“00”, 選擇寄存器R0, 再將K4 的2 位(RD 信號)設成“0”,讀出R0中的數據,并輸出到八段管LED3…LED0 上顯示。撥動K4 的2 位,使RD 信號無效,改變K4 的0、1 兩位選擇寄存器R1, 再撥動K4 的2 位使RD 信號有效,讀出R1 的值并顯示在八段管LED3…LED0 上。如此,讀出寄存器R2、R3 的值,并觀察與寫入的數據是否相同。
分部實驗四、十六位指令計數器PC 實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實現十六位模型機的指令計數器功能。
實驗目的: 了解十六位模型機中指令計數器(PC)的工作原理和實現方法。學習用VHDL語言描述硬件邏輯。學習使用EDA 開發環境。
實驗說明: 下為十六位模型機中PC 的VHDL 語言:
在PC.VHD程序中,D 為十六位輸入數據,用于表示跳轉條件滿足時,跳轉的目標地址。D 的值由K1、K0 兩組開關輸入。PC 為指令計數器(PC),用八段數碼管LED3…LED0 顯示其值。 C、Z 接在K4 開關組的0、1 個開關上,用于模擬模型機中的進位標志和零標志信號,ELP 接K4 的2 個開關上,為程序跳轉控制信號,為“1” 時不允許預置PC, 為“0” 時,根據指令碼的3、2 位和C、Z 狀態來控制程序是否跳轉(見下表說明)。PC1 接在K4 的3 個開關上,表示PC 加1 控制信號。 IR2、IR3 接在K4 的4、5 個開關上,表示程序指令的2 位和3 位,在本模型機實驗中,這兩用于控制程序的跳轉(見下表說明)。RST 為復位信號,接在開關組K4 的7 個開關上,CLK 為時鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
ELP | IR3 | IR2 | C | Z | LDPC |
1 | X | X | X | X | 1 |
0 | 0 | 0 | 1 | X | 0 |
0 | 0 | 0 | 0 | X | 1 |
0 | 0 | 1 | X | 1 | 0 |
0 | 0 | 1 | X | 0 | 1 |
0 | 1 | X | X | X | 0 |
上表中,LDPC 為內部信號,用于控制PC 是否能被預置。
當ELP = 1 時,LDPC = 1 ,不允許PC 被預置。
當ELP = 0 時,LDPC 由IR3 、IR2 、C、 Z 定。
當IR3 、IR2 = 1X 時,LDPC = 0, D 的值在CLK 上升沿打入PC,實現程序的JMP( 直接跳轉)功能。
當IR3 、IR2 = 00 時,LDPC = C 取反,當C = 1 時,D 的值在CLK 上升沿打入PC實現程序的JC(有進位跳轉)功能。
當IR3 、IR2 = 01 時,LDPC = Z 取反,當Z = 1 時,D 的值在CLK 上升沿打入PC實現程序的JZ(累加器為零跳轉)功能。
本實驗中,RST = 1 時,指令計數器PC 被清0, 當LDPC = 0 時,在CLK 上升沿D 的值打入PC, 當PC1 = 1 時,在CLK 上升沿PC 加1。
實驗步驟:
1、打開Quartus 的EDA 開發環境,選擇“Open Project ... ”打開“EP1C6\ ”下的PC 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解PC.VHD(源程序見隨機光盤),了解模型機中指令計數器的實現原理。
3、對PC 項目進行綜合/編譯,生成PC.SOF 文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載PC.rbf。
4、打開CPTH的開發環境,打開FPGA 擴展板的界面。
5、按“連接CPT16”鍵將實驗板連接到計算機。
6、撥動K4 的7 位到“1” 的位置輸出“復位”信號,使電路處于復位狀態。觀察八段管LED3…LED0(PC 輸出顯示)是否清零。
7、PC+1 實驗:將K4 的2 (ELP 信號)、3 (PC1 信號)位置成“1” 狀態,使跳轉控制信號處于PC+1 狀態。再將K4 的7 位回到時“0” 位,退出“復位”狀態,按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,觀察八段管LED3… LED0 的顯示,看看PC 是否加1, 再給出單脈沖,觀察PC 是否再次加1。
8、直接跳轉實驗:使撥動K0、 K1 輸入D 的值,設置跳轉的目標地址,撥動K4 的2位設成“0”, 使ELP 信號為低,撥動K4 的5 位,將其設成“1” 使IR3 為高,將跳轉控制設成“直接跳轉”方式,按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,將D 寫入PC 中,觀察八段管LED3…LED0, 看看PC 是否轉到目標地址。
9、條件跳轉實驗1:撥動K4 的4、5 位,使IR2、 IR3 置成“00”, 將跳轉控制設置成“判進位跳轉”方式。將K4 的0 位設置成“1”, 表示有進位,按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,觀察八段管LED3…LED0 ,看看PC 是否轉到D 所指定的目標地址。再將K4 的0 撥成“0”, 表示無進位,給出一個單脈沖,觀察LED3…LED0, 看看PC 是否加1。
10、條件跳轉實驗2: 撥動K4 的5、4 位,使IR3、IR2 置成“01”, 將跳轉控制設置成“判零跳轉”方式。將K4 的1 位設置成“1”, 表示累加器為零,按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,觀察八段管LED3…LED0, 看看PC 是否轉到D 所指定的目標地址。再將K4 的1 撥成“0”, 表示累加器不為零,給出一個單脈沖,觀察LED3…LED0, 看看PC是否加1。
分部實驗五、中斷控制實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,用VHDL語言編寫程序,下載到EP1K1C6 FPGA 中,實現十六位模型機中斷控制功能。
實驗目的: 了解十六位模型機中中斷控制的工作原理和實現方法。學習用VHDL 語言描述硬件邏輯。學習使用EDA 開發環境。
實驗說明:
在INT.VHD程序中,IREN 接K4 的0 位,表示程序執行過程中的取指令操作,中斷請求信號只有在此信號有效時(取指令時)才會被響應。IENT 接K4 的1 位,用于在中斷返回時,清除中斷請求寄存器和中斷響應寄存器。ICEN 為輸出信號接發光二極管L2, 此信號用于控制讀中斷指令。ACK 接發光二極管L1, 顯示中斷響應信號。REQ 接發光二極管L0,顯示中斷請求信號。RST 為復位信號,接在開關組K4 的7 個開關上,I_REQ 為中斷申請輸入信號,由FPGA界面上“產生中斷”按鍵輸出到FPGA 擴展板上,CLK 為時鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實驗步驟:
1、打開Quartus 的EDA 開發環境,選擇“Open Project ... ”打開“EP1C6\” 下的INT 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解INT.VHD(源程序見隨機光盤),了解寄存器的實現原理。
3、對INT 項目進行綜合/編譯生成INT.SOF 文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載INT.rbf。
4、打開CPTH的開發環境,打開FPGA 擴展板的界面。
5、按“連接CPT16”鍵將實驗板連接到計算機。
6、撥動K4 的7 位到“1” 的位置輸出“復位”信號,將K4 的0、1 位撥到“1”的位置,使IREN 和EINT 都處于無效狀態,將內部的中斷請求寄存器,中斷響應寄存器都清零,使其能響應中斷,此時只有L2發光二極管亮。
7、中斷申請:將K4 的7 位回到時“0” 位,使電路正常工作。按下FPGA界面上“產生中斷”按鍵申請中斷,FPGA 擴展板上的L0 發光二極管變亮,表示有中斷申請。
8、中斷響應:將K4 的0 位撥成“0”, 也就使IREN 有效,表示取指令操作,擴展板上的L2 發光二極管變熄滅,表示已經響應中斷。
9、中斷處理:按動FPGA界面上“單脈沖” 按鍵,產生一個時鐘信號,擴展板上L2、L1、L0 發光二極管都亮,表示取指操作取出中斷處理指令來執行。
10、中斷退出:將K4 的0 位撥成“1”, IREN 置成無效,將K4 的1 位撥成“0” ,將EINT 置成有效,發光二極管L2 變亮、L1、L0 變暗,中斷申請寄存器和中斷響應寄存器清零,表示可以接受下一次中斷申請。
實驗六 十六位模型機的總體實驗
實驗要求: 用CPT16 的擴展實驗板上的開關做為輸入、八段數碼管做為輸出,以上面介紹的分部實驗為基礎,用VHDL 語言編寫程序,下載到EP1C6 FPGA 芯片中,實現一個十六位模型機,模型機要有完整的指令系統,中斷處理系統、輸入輸出系統。
實驗目的: 了解十六位模型機整機的工作原理和實現方法。用VHDL 語言描述硬件邏輯讓FPGA 能實現復雜的運算、處理功能。
實驗程序:MOV A, #00H
LOOP:
OUT
JMP LOOP
ORG 0E0H
ADD A, #01
RETI
END
實驗說明:“CPT16.VHD ”為一個完整的十六位模型機的VHDL 程序,另見隨機光盤。
在總體實驗中,rst 為復位信號,接在開關組K4 的7 個開關上。i_req 為中斷申請輸入信號,由FPGA界面上“產生中斷”按鍵輸出到FPGA 擴展板上。clk 為時鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。keyin 輸入端口,接在擴展板的K1、K0 開關組上,用于輸入外部信號。portout 為輸出端口,接到LED3…LED0 四個八段數碼管上,用于顯示輸出信號。mem_d 為十六位存儲器的數據線,mem_a 為十六位存儲器的地址線,mem_rd為存儲器讀控制信號,mem_wr 為存儲器寫控制信號,mem_cs 為存儲器片選信號,mem_bh 為
存儲器高8 位數據選擇信號,mem_bl 為存儲器低8 位數據選擇信號。
實驗步驟:
1、打開Quartus 的EDA 開發環境,選擇“Open Project ... ”打開“EP1C6\” 下的CPT16 項目(Quartus 的EDA 開發環境的使用可參見三章)。
2、充分理解CPT16.VHD(源程序見隨機光盤)。 了解十六們模型機的實現原理。
3、對CPT16 項目進行綜合/編譯,生成CPT16.sof文件,點擊“programmer”,選擇“JTAG”模式編程,點擊“start”即可下載。也可用CPTH的開發環境中FPGA 擴展板的界面上的“FPGA編程”按鈕下載CPT16.rbf。
4、打開CPTH的開發環境,再打開FPGA 擴展板的界面,按“連接CPT16”鍵將實驗板連接到計算機,在開發環境的主界面中,打開“\DJCPTH\ASM\” 目錄下“EX6.ASM” 程序,編譯下載“EX6. ASM”,下載完畢后,把源文件生成的機器碼自動下載到16位存儲器中。
5、在FPGA 擴展板的界面,點擊“連續脈沖”按鍵,程序連續運行,點擊“產生中斷”按鍵,產生中斷請示信號讓模型機中斷,在中斷處理程序中,我們將累加器A 加1中斷。返回后輸出累加器中的內容。重復點擊“產生中斷” 按鍵,產生多個中斷請示信號,讓模型機多次中斷,累加器多次加1送數碼管顯示,觀察LED3…LED0輸出,是否滿足設計要求。點擊“暫停”按鍵,可使程序暫停運行,點擊“復位”按鍵,可使模型機復位。
原創作者:北京愛歐德儀器設備有限公司