目 錄
一章CPTH+實(shí)驗(yàn)系統(tǒng)簡(jiǎn)介
一、CPTH+實(shí)驗(yàn)系統(tǒng)組成……………………………………………………2
二、CPTH+實(shí)驗(yàn)系統(tǒng)使用………………………………………………………2
二章 十六位機(jī)(FPGA)擴(kuò)展實(shí)驗(yàn)板簡(jiǎn)介…………………………………2
一、FPGA實(shí)驗(yàn)板主要功能…………………………………………………2
二、FPGA實(shí)驗(yàn)板組成………………………………………………………2
三、FPGA實(shí)驗(yàn)板軟件簡(jiǎn)介……………………………………………………4
四、FPGA實(shí)驗(yàn)板使用…………………………………………………………5
三章 QuartusⅡ開發(fā)環(huán)境使用入門…………………………………………6
四章 十六位機(jī)擴(kuò)展實(shí)驗(yàn)………………………………………………………13
分部實(shí)驗(yàn)一、十六位ALU實(shí)驗(yàn)………………………………………………13
分部實(shí)驗(yàn)二、十六位寄存器實(shí)驗(yàn)……………………………………………14
分部實(shí)驗(yàn)三、十六位寄存器組實(shí)驗(yàn)…………………………………………14
分部實(shí)驗(yàn)四、十六位指令計(jì)數(shù)器PC實(shí)驗(yàn)……………………………………15
分部實(shí)驗(yàn)五、中斷控制實(shí)驗(yàn)…………………………………………………17
實(shí)驗(yàn)六、 十六位模型機(jī)的總體實(shí)驗(yàn)………………………………………18
一章CPTH+實(shí)驗(yàn)系統(tǒng)簡(jiǎn)介
一,CPTH+實(shí)驗(yàn)系統(tǒng)組成:
CPTH+是我公司新推出的八位機(jī)帶十六位機(jī)接口的計(jì)算機(jī)組成原理和系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)儀。CPTH+在原CPTH主板的基礎(chǔ)上增加十六位機(jī)接口,通過選配CPT16十六位機(jī)擴(kuò)展實(shí)驗(yàn)板(也稱FPGA實(shí)驗(yàn)板),完成十六位機(jī)計(jì)算機(jī)組成原理實(shí)驗(yàn)。
CPTH+主板以八位機(jī)模式,用TTL74系列器件+CPLD構(gòu)建模型機(jī)部件,讓學(xué)生以可視方式觀察CPU內(nèi)各部件工作過程和模型機(jī)的實(shí)現(xiàn)。CPT16_1C6實(shí)驗(yàn)板以十六位機(jī)模式,用15萬門EP1C6Q240C8N FPGA芯片構(gòu)建模型機(jī)所有部件,并配置64K×16位存儲(chǔ)器,在對(duì)八位機(jī)了解的基礎(chǔ)上,讓學(xué)生對(duì)十六位計(jì)算機(jī)組成原理有更深刻的理解,實(shí)現(xiàn)質(zhì)的飛躍,為FPGA設(shè)計(jì)CPU打下基礎(chǔ)。
二,CPTH+實(shí)驗(yàn)系統(tǒng)使用
CPTH+有兩種使用方式:八位機(jī)和十六位機(jī)兩種實(shí)驗(yàn)方式。
(1)八位機(jī)方式:
CPTH+主板是八位機(jī)模式,只需把通信選擇開關(guān)“KT”撥向“CPTH”一側(cè),即可構(gòu)成八位計(jì)算機(jī)組成原理和系統(tǒng)結(jié)構(gòu)的實(shí)驗(yàn)系統(tǒng)。具體使用詳見《CPTH超強(qiáng)型計(jì)算機(jī)組成原理和系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書》。
(2)十六位機(jī)方式:
把選配的CPT16十六位機(jī)擴(kuò)展實(shí)驗(yàn)板,對(duì)應(yīng)插入“CPTH+主板”上的座,然后把通信選擇開關(guān)“KT”撥向“CPT16”一側(cè),即可構(gòu)成十六位計(jì)算機(jī)組成原理的實(shí)驗(yàn)系統(tǒng)。具體使用詳見下面各章節(jié)的說明。
二章 十六位機(jī)(FPGA)擴(kuò)展實(shí)驗(yàn)板簡(jiǎn)介
一、FPGA實(shí)驗(yàn)板主要功能
FPGA(CPT16_1C6)實(shí)驗(yàn)板主要是基于EDA設(shè)計(jì)的計(jì)算機(jī)組成原理的實(shí)驗(yàn)板,它的核心器件是Altera公司的Cyclone 系列15萬門EP1C6Q240C8N的FPGA芯片。用該FPGA實(shí)驗(yàn)板,通過VHDL語言編程,可設(shè)計(jì)16位機(jī)的部件和模型機(jī),學(xué)生將設(shè)計(jì)好的電路下載到FPGA芯片上,實(shí)現(xiàn)16位機(jī)的部件和模型機(jī)功能;也可完成其它設(shè)計(jì)性實(shí)驗(yàn)和課程設(shè)計(jì)實(shí)驗(yàn)。
二、FPGA實(shí)驗(yàn)板組成
(1)AT89S52單片機(jī),主要用于接收PC機(jī)命令,完成16位程序存儲(chǔ)器讀寫,管理模型機(jī)運(yùn)行、暫停等功能。
(2)ispLSI 1032E是邏輯控制芯片,負(fù)責(zé)單片機(jī)和模型機(jī)總線切換。
(3)EP1C6是模型機(jī)主控芯片,相應(yīng)管腳已連好,JTAG (By.II)是EP1C6芯片的標(biāo)配下載接口,再配合FPGA實(shí)驗(yàn)板的PC機(jī)調(diào)試軟件,可方便地進(jìn)行各種實(shí)驗(yàn)。
(4)IDT71V016是64K×16位存儲(chǔ)器,是模型機(jī)的程序存儲(chǔ)器,能保存大容量程序。
(5)六位8段數(shù)碼管,用于顯示模型機(jī)內(nèi)部寄存器、總線的值,在設(shè)計(jì)時(shí)可將需要觀察的內(nèi)部寄存器、總線值送A,再通過OUT指令送到數(shù)碼管顯示。三只GAL16V8是六位數(shù)碼管16進(jìn)制譯碼器。
(6)L7~L0是8個(gè)發(fā)光二極管,用于顯示模型機(jī)內(nèi)部狀態(tài),例如:進(jìn)位標(biāo)志、零標(biāo)志、中斷申請(qǐng)標(biāo)志等。
(7)K0(7…0)~K4(7…0)是40個(gè)開關(guān),用于輸入外部信號(hào),例如,在做單步實(shí)驗(yàn)時(shí),這些開關(guān)可用來輸入地址總線值、數(shù)據(jù)總線值、控制信號(hào)等。
(8) EP1C6 右方的EX1座表示46 個(gè)擴(kuò)展的IO 信號(hào),當(dāng)實(shí)驗(yàn)中需要另外的輸入輸出腳時(shí)可以使用這些擴(kuò)展腳。
實(shí)驗(yàn)板框圖
(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實(shí)驗(yàn)板軟件簡(jiǎn)介
雙擊“CPTH計(jì)算機(jī)組成原理”快捷圖標(biāo),在CPTH主界面上,按“打開FPGA擴(kuò)展窗口”按鈕,即可打FPGA擴(kuò)展板界面,此界面給出了存儲(chǔ)器窗口和功能按鍵,如下圖。
①存儲(chǔ)器窗口給出了64K×16位存儲(chǔ)器內(nèi)容,用鼠標(biāo)左鍵單擊存儲(chǔ)單元,數(shù)據(jù)變蘭色后,即可修改存儲(chǔ)器中的數(shù)據(jù)。
②八個(gè)功能按鍵
·[連續(xù)脈沖],為模型機(jī)提供連續(xù)的高頻脈沖信號(hào)。
·[單脈沖],為模型機(jī)提供單脈沖信號(hào)。
·[暫停],當(dāng)模型機(jī)連續(xù)運(yùn)行時(shí),可暫停程序的運(yùn)行。
·[復(fù)位],使模型機(jī)復(fù)位。
·[產(chǎn)生中斷],為模型機(jī)提供中斷信號(hào)源。
·[連接CPT16],使FPGA實(shí)驗(yàn)板和PC機(jī)CPTH調(diào)試軟件聯(lián)接。
·[保存文件],是將存儲(chǔ)器窗口中的數(shù)據(jù)寫到磁盤上。
·[調(diào)入文件],從磁盤上讀入數(shù)據(jù)文件,在此窗口中顯示。
·[FPGA編程],是將QuartusⅡ開發(fā)環(huán)境中生成的*.rbf格式文件下載到EP1C6的芯片中,在下載過程中有下載進(jìn)度顯示。
·[打開編程文件],從磁盤上讀入*.rbf格式文件。
四、FPGA實(shí)驗(yàn)板使用
(1)用串口/USB通信線(出產(chǎn)配置為串口),連接CPTH+主板和PC機(jī)相應(yīng)RS232接口,把選配的CPT16十六位機(jī)擴(kuò)展實(shí)驗(yàn)板,對(duì)應(yīng)插入“CPTH+主板”上的座,然后把通信選擇開關(guān)“KT”撥向“CPT16”一側(cè),接通CPTH+實(shí)驗(yàn)儀電源。
(2)在QuartusⅡ軟件中,用VHDL語言設(shè)計(jì)模型機(jī)電路,然后編譯、引腳鎖定,再編譯生成*.sof,再轉(zhuǎn)化為*.rbf格式。如已有*.rbf,步驟(2)可省。
(3)雙擊“CPTH計(jì)算機(jī)組成原理”快捷圖標(biāo),在CPTH主界面上,按“打開FPGA擴(kuò)展窗口”按鈕,單擊按鍵“連接CPT16”,連機(jī)后其余按鍵字體變黑色可用,在CPTH主界面上點(diǎn)擊打開文件圖標(biāo),例如選擇“EX6.asm”,點(diǎn)擊編譯下載,下載完畢后,把源文件生成的機(jī)器碼自動(dòng)下載到16位存儲(chǔ)器中;然后點(diǎn)擊“打開編程文件”,選擇cpt16.rbf文件,再點(diǎn)擊“FPGA編程”,把模型機(jī)電路的cpt16.rbf下載到EP1C6的芯片中。也可用《三章 QuartusⅡ開發(fā)環(huán)境使用入門》中器件編程方法下載。
(4)點(diǎn)擊“連續(xù)脈沖”按鍵,程序連續(xù)運(yùn)行,點(diǎn)擊“產(chǎn)生中斷”按鍵,看FPGA實(shí)驗(yàn)板數(shù)碼管顯示應(yīng)加“1”變化,點(diǎn)擊“暫停”按鍵,可使程序暫停運(yùn)行。
三章 QuartusⅡ開發(fā)環(huán)境使用入門
十六位機(jī)FPGA 擴(kuò)展實(shí)驗(yàn)板上用的15萬門大規(guī)?删幊绦酒EP1C6 是altera 公司Cyclone產(chǎn)品,altera 公司是世界上大的FPGA/CPLD 生產(chǎn)商,其 QuartusⅡ6.0 開發(fā)環(huán)境也是電子工程師常用的軟件,在QuartusⅡ6.0 開發(fā)環(huán)境中可以完成設(shè)計(jì)輸入(原理圖、VHDL)、設(shè)計(jì)編譯、設(shè)計(jì)校驗(yàn)、編程下載等EDA 設(shè)計(jì)的所有步驟。以QuartusⅡ6.0為例我們來了解在開發(fā)環(huán)境下EDA 設(shè)計(jì)的流程
1、建立設(shè)計(jì)項(xiàng)目。
啟動(dòng)軟件,打開QuartusⅡ6.0 開發(fā)環(huán)境,選擇菜單[File]的[New Project…]功能。
點(diǎn)擊“NEXT”出現(xiàn)如圖對(duì)話框,在…Name 框內(nèi)填上項(xiàng)目名例如alu。
點(diǎn)擊二次“NEXT”,選擇器件,點(diǎn)擊二次“NEXT”完成項(xiàng)目名創(chuàng)建。
2、建立設(shè)計(jì)文件。
輸入VHDL 程序。選擇菜單[File]的[New]功能,選擇“VHDL FILE”,點(diǎn)擊“OK”。
在空的文本窗口中輸入VHDL 語言,文件名保存為alu.vhdl。
3、把文件添加到項(xiàng)目中
選擇菜單[project]的[add/remove…]功能,選擇文件“alu.vhdl”,把a(bǔ)lu.vhdl文件添加到alu項(xiàng)目中。
4、項(xiàng)目編譯
選擇菜單[tools]的[compiler tool]功能, 點(diǎn)擊 “start”開始編譯當(dāng)前alu項(xiàng)目,編譯后如下圖。
5、管腳鎖定
選擇菜單[assignments]的[pin planner]功能。例如把選中的信號(hào)名:A[0]拖拉到EP1C6引腳圖相應(yīng)引腳號(hào)上,以此類推進(jìn)行鎖定。鎖完后重新編譯。
6、器件編程
通過重新項(xiàng)目編譯后生成的*.SOF文件用于下載。在我們例子中使用的是EP1C6為Cyclone系列,下面我們對(duì)其進(jìn)行編程:
a、先關(guān)閉實(shí)驗(yàn)板電源,將下載電纜一端插入LPT1(并行口,打印機(jī)口),另一端插入CPT16位機(jī)(FPGA)實(shí)驗(yàn)板的JTAG(By.II)座,打開實(shí)驗(yàn)板電源;
b、從菜單“TOOLS”下選擇“Programmer”,點(diǎn)擊“Hardware serup”選擇“ByteBlaster II(LPT1)”,編程模式Mode選擇“JTAG”,添加要編程的文件*.SOF,然后點(diǎn)擊“Start”開始編程。到目前為止,我們已完成一個(gè)完整的設(shè)計(jì)。
7,編程文件格式轉(zhuǎn)換
點(diǎn)擊file\convert prog...后,按下圖設(shè)置, 設(shè)置完后點(diǎn)擊“ok”,把*.sof*轉(zhuǎn)換.rbf。
四章 十六位機(jī)擴(kuò)展實(shí)驗(yàn)
分部實(shí)驗(yàn)一、十六位ALU 實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,用VHDL
語言編寫程序,下載到EP1C6 FPGA 中,實(shí)現(xiàn)十六位模型機(jī)的ALU 功能。
實(shí)驗(yàn)?zāi)康?/span>: 了解十六位模型機(jī)中算術(shù)、邏輯運(yùn)算單元(ALU)的工作原理和實(shí)現(xiàn)方法學(xué)
習(xí)用VHDL 語言描述硬件邏輯。學(xué)習(xí)使用EDA 開發(fā)環(huán)境。
實(shí)驗(yàn)說明:
在ALU.VHD程序中,A 為累加器,W 為工作寄存器,均為十六位寄存器,W 的值由K1、 K0 兩組開關(guān)共十六位輸入,A 的值由K2 、K3 兩組開關(guān)輸入,S0、S1、S2 為運(yùn)算控制位,接在K4開關(guān)組的0、1、2 個(gè)開關(guān)上,根據(jù)S0、S1、S2 的不同,ALU 實(shí)現(xiàn)的功能參見下表,D為運(yùn)算結(jié)果輸出顯示在四位八段管LED0..LED3上,CIn 為進(jìn)位輸入,由K4 開關(guān)組的3 個(gè)開關(guān)輸入,COut 為進(jìn)位輸出,用發(fā)光二極管L0 顯示其狀態(tài)。
S2 | S1 | S0 | ALU 實(shí)現(xiàn)的功能 |
0 | 0 | 0 | D = A+W 運(yùn)算結(jié)果為A 加W |
0 | 0 | 1 | D = A-W 運(yùn)算結(jié)果為A 減W |
0 | 1 | 0 | D = A|W 運(yùn)算結(jié)果為A 邏輯或W |
0 | 1 | 1 | D = A&W 運(yùn)算結(jié)果為A 邏輯與W |
1 | 0 | 0 | D = A+W+CIn 運(yùn)算結(jié)果為A 加W 加進(jìn)位 |
1 | 0 | 1 | D = A-W-CIn 運(yùn)算結(jié)果為A 減W 減進(jìn)位 |
1 | 1 | 0 | D = ~A 運(yùn)算結(jié)果為A 取反 |
1 | 1 | 1 | D = A 運(yùn)算結(jié)果為A A 直接輸出 |
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境,選擇“Open Project ...” 打開“EP1C6\” 下的ALU 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解ALU.VHD(源程序見隨機(jī)光盤)。了解模型機(jī)中ALU 的實(shí)現(xiàn)原理。
3、對(duì)ALU 項(xiàng)目進(jìn)行綜合/編譯,生成ALU.SOF 文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載ALU.rbf。
4、打開CPTH的開發(fā)環(huán)境,打開FPGA 擴(kuò)展板的界面。
5、按“連接CPT16”鍵,將實(shí)驗(yàn)板連接到計(jì)算機(jī)上。
6、撥動(dòng)K0 、K1 輸入W 的值,撥動(dòng)K2、 K3 輸入A 的值,撥動(dòng)K4 的0、1、2 位設(shè)置運(yùn)算方式,撥動(dòng)K4 的3 位,設(shè)置進(jìn)位,觀察八段管LED3-LED0 的運(yùn)算結(jié)果,觀察發(fā)光二極管L0 是否有進(jìn)位輸出。
分部實(shí)驗(yàn)二、十六位寄存器實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實(shí)現(xiàn)十六位模型機(jī)的寄存器輸入輸出功能。
實(shí)驗(yàn)?zāi)康?/span>: 了解十六位模型機(jī)中寄存器的工作原理和實(shí)現(xiàn)方法。學(xué)習(xí)用VHDL 語言描述硬
件邏輯。學(xué)習(xí)使用EDA 開發(fā)環(huán)境。
實(shí)驗(yàn)說明:
在REG.VHD程序中,D 為輸入數(shù)據(jù),R 為寄存器,均為十六位寄存器,D 的值由K1、 K0 兩組開關(guān)共十六位輸入,R 為內(nèi)部寄存器,用八段管LED3-LED0 顯示,EN 為寄存器選通信號(hào),接在K4開關(guān)組的0 個(gè)開關(guān)上,RST 為復(fù)位信號(hào),接在開關(guān)組K4 的7 個(gè)開關(guān)上,CLK 為時(shí)鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境選擇“Open Project ... ”打開“EP1C6\” 下的REG 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解REG.VHD(源程序見隨機(jī)光盤),了解寄存器的實(shí)現(xiàn)原理。
3、對(duì)REG 項(xiàng)目進(jìn)行綜合/編譯生成REG.sof 文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載REG.rbf。
4、打開CPTH的開發(fā)環(huán)境,打開FPGA 擴(kuò)展板的界面。
5、按“連接CPT16”鍵將實(shí)驗(yàn)板連接到計(jì)算機(jī)。
6、撥動(dòng)K4 的7 位到“1”的位置,輸出“復(fù)位”信號(hào),觀察八段管LED3…LED0 (R 寄存器的輸出顯示)是否清零,再將K4 的7 位回到 “0” 位時(shí),撥動(dòng)K0 、K1 輸入D 的值,撥動(dòng)K4 的0 位,設(shè)置寄存器選通信號(hào)“EN”為有效狀態(tài)(“0” 有效),按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),觀察八段管LED3 …LED0 ,看看是否將D 的值存入寄存器R 中并顯示出來,撥動(dòng)開關(guān)組K1、 K0 改變D 的值,再將“EN”置于無效狀態(tài)(“1” 位置),按“單脈沖” 產(chǎn)生時(shí)鐘信號(hào),觀察八段管LED3 …LED0 是否會(huì)隨著改變。
分部實(shí)驗(yàn)三、十六位寄存器組實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實(shí)現(xiàn)十六位模型機(jī)的多個(gè)寄存器輸入輸出功能。
實(shí)驗(yàn)?zāi)康模?/span> 了解十六位模型機(jī)中寄存器組的工作原理和實(shí)現(xiàn)方法。學(xué)習(xí)用VHDL 語言描述硬件邏輯。學(xué)習(xí)使用EDA 開發(fā)環(huán)境。
實(shí)驗(yàn)說明:
在REGS.VHD程序中,D 為輸入數(shù)據(jù),為十六位寄存器,D 的值由K1、 K0 兩組開關(guān)共十六位輸入,R0..R3 為內(nèi)部寄存器,R 用做內(nèi)部寄存器顯示輸出,用八段管LED3..LED0 顯示其值,SA、SB 為寄存器選擇控制信號(hào),接在K4 開關(guān)組的0、1 個(gè)開關(guān)上,RD 為寄存器讀信號(hào),接K4的2 個(gè)開關(guān)上,WR 為寄存器寫信號(hào),接在K4 的3 個(gè)開關(guān)上, RST 為復(fù)位信號(hào),接在開關(guān)組K4 的7 個(gè)開關(guān)上,CLK 為時(shí)鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境,選擇“Open Project ... ”打開“EP1C6\ ”下的REGS 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解REGS.VHD(源程序見隨機(jī)光盤)。了解模型中寄存器組的實(shí)現(xiàn)原理。
3、對(duì)REGS 項(xiàng)目進(jìn)行綜合/編譯,生成REGS.SOF 文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載REGS.rbf。
4、打開CPTH的開發(fā)環(huán)境,打開FPGA 擴(kuò)展板的界面。
5、按“連接CPT16”鍵將實(shí)驗(yàn)板連接到計(jì)算機(jī)。
6、撥動(dòng)K4 的7 位到“1” 的位置,輸出“復(fù)位”信號(hào),觀察八段管LED3…LED0(R 寄存器的輸出顯示)是否清零,然后將K4的2( RD 信號(hào))、3(WR 信號(hào))位置成1狀態(tài),使讀寫信號(hào)都處于無效狀態(tài)。
9、寄存器組寫實(shí)驗(yàn):將K4 的7 位回到時(shí)“0”位,撥動(dòng)K0、K1 輸入D 的值,撥動(dòng)K4的0、1位設(shè)成“00”, 選擇寄存器R0,撥動(dòng)K4 的3 位,設(shè)置寄存器寫信號(hào)“WR” 為有效狀態(tài)(“0”有效),按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),將D 寫入寄存器R0 中。撥動(dòng)K0、K1 開關(guān)組,改變D 值,再改變K4 的0、1 位設(shè)成“01”, 選擇寄存器R1 ,按“單脈沖”給出時(shí)鐘信號(hào),將D 存入寄存器R1中,如此將不同的十六位數(shù)據(jù)分別存R0..R3 寄存器中。
10、寄存器組讀實(shí)驗(yàn):將K4 的3 位(WR 信號(hào))設(shè)成“1” 使其無效,將K4 的0、1兩位撥成“00”, 選擇寄存器R0, 再將K4 的2 位(RD 信號(hào))設(shè)成“0”,讀出R0中的數(shù)據(jù),并輸出到八段管LED3…LED0 上顯示。撥動(dòng)K4 的2 位,使RD 信號(hào)無效,改變K4 的0、1 兩位選擇寄存器R1, 再撥動(dòng)K4 的2 位使RD 信號(hào)有效,讀出R1 的值并顯示在八段管LED3…LED0 上。如此,讀出寄存器R2、R3 的值,并觀察與寫入的數(shù)據(jù)是否相同。
分部實(shí)驗(yàn)四、十六位指令計(jì)數(shù)器PC 實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,用VHDL語言編寫程序,下載到EP1C6 FPGA 中,實(shí)現(xiàn)十六位模型機(jī)的指令計(jì)數(shù)器功能。
實(shí)驗(yàn)?zāi)康模?/span> 了解十六位模型機(jī)中指令計(jì)數(shù)器(PC)的工作原理和實(shí)現(xiàn)方法。學(xué)習(xí)用VHDL語言描述硬件邏輯。學(xué)習(xí)使用EDA 開發(fā)環(huán)境。
實(shí)驗(yàn)說明: 下為十六位模型機(jī)中PC 的VHDL 語言:
在PC.VHD程序中,D 為十六位輸入數(shù)據(jù),用于表示跳轉(zhuǎn)條件滿足時(shí),跳轉(zhuǎn)的目標(biāo)地址。D 的值由K1、K0 兩組開關(guān)輸入。PC 為指令計(jì)數(shù)器(PC),用八段數(shù)碼管LED3…LED0 顯示其值。 C、Z 接在K4 開關(guān)組的0、1 個(gè)開關(guān)上,用于模擬模型機(jī)中的進(jìn)位標(biāo)志和零標(biāo)志信號(hào),ELP 接K4 的2 個(gè)開關(guān)上,為程序跳轉(zhuǎn)控制信號(hào),為“1” 時(shí)不允許預(yù)置PC, 為“0” 時(shí),根據(jù)指令碼的3、2 位和C、Z 狀態(tài)來控制程序是否跳轉(zhuǎn)(見下表說明)。PC1 接在K4 的3 個(gè)開關(guān)上,表示PC 加1 控制信號(hào)。 IR2、IR3 接在K4 的4、5 個(gè)開關(guān)上,表示程序指令的2 位和3 位,在本模型機(jī)實(shí)驗(yàn)中,這兩用于控制程序的跳轉(zhuǎn)(見下表說明)。RST 為復(fù)位信號(hào),接在開關(guān)組K4 的7 個(gè)開關(guān)上,CLK 為時(shí)鐘脈沖,由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 為內(nèi)部信號(hào),用于控制PC 是否能被預(yù)置。
當(dāng)ELP = 1 時(shí),LDPC = 1 ,不允許PC 被預(yù)置。
當(dāng)ELP = 0 時(shí),LDPC 由IR3 、IR2 、C、 Z 定。
當(dāng)IR3 、IR2 = 1X 時(shí),LDPC = 0, D 的值在CLK 上升沿打入PC,實(shí)現(xiàn)程序的JMP( 直接跳轉(zhuǎn))功能。
當(dāng)IR3 、IR2 = 00 時(shí),LDPC = C 取反,當(dāng)C = 1 時(shí),D 的值在CLK 上升沿打入PC實(shí)現(xiàn)程序的JC(有進(jìn)位跳轉(zhuǎn))功能。
當(dāng)IR3 、IR2 = 01 時(shí),LDPC = Z 取反,當(dāng)Z = 1 時(shí),D 的值在CLK 上升沿打入PC實(shí)現(xiàn)程序的JZ(累加器為零跳轉(zhuǎn))功能。
本實(shí)驗(yàn)中,RST = 1 時(shí),指令計(jì)數(shù)器PC 被清0, 當(dāng)LDPC = 0 時(shí),在CLK 上升沿D 的值打入PC, 當(dāng)PC1 = 1 時(shí),在CLK 上升沿PC 加1。
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境,選擇“Open Project ... ”打開“EP1C6\ ”下的PC 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解PC.VHD(源程序見隨機(jī)光盤),了解模型機(jī)中指令計(jì)數(shù)器的實(shí)現(xiàn)原理。
3、對(duì)PC 項(xiàng)目進(jìn)行綜合/編譯,生成PC.SOF 文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載PC.rbf。
4、打開CPTH的開發(fā)環(huán)境,打開FPGA 擴(kuò)展板的界面。
5、按“連接CPT16”鍵將實(shí)驗(yàn)板連接到計(jì)算機(jī)。
6、撥動(dòng)K4 的7 位到“1” 的位置輸出“復(fù)位”信號(hào),使電路處于復(fù)位狀態(tài)。觀察八段管LED3…LED0(PC 輸出顯示)是否清零。
7、PC+1 實(shí)驗(yàn):將K4 的2 (ELP 信號(hào))、3 (PC1 信號(hào))位置成“1” 狀態(tài),使跳轉(zhuǎn)控制信號(hào)處于PC+1 狀態(tài)。再將K4 的7 位回到時(shí)“0” 位,退出“復(fù)位”狀態(tài),按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),觀察八段管LED3… LED0 的顯示,看看PC 是否加1, 再給出單脈沖,觀察PC 是否再次加1。
8、直接跳轉(zhuǎn)實(shí)驗(yàn):使撥動(dòng)K0、 K1 輸入D 的值,設(shè)置跳轉(zhuǎn)的目標(biāo)地址,撥動(dòng)K4 的2位設(shè)成“0”, 使ELP 信號(hào)為低,撥動(dòng)K4 的5 位,將其設(shè)成“1” 使IR3 為高,將跳轉(zhuǎn)控制設(shè)成“直接跳轉(zhuǎn)”方式,按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),將D 寫入PC 中,觀察八段管LED3…LED0, 看看PC 是否轉(zhuǎn)到目標(biāo)地址。
9、條件跳轉(zhuǎn)實(shí)驗(yàn)1:撥動(dòng)K4 的4、5 位,使IR2、 IR3 置成“00”, 將跳轉(zhuǎn)控制設(shè)置成“判進(jìn)位跳轉(zhuǎn)”方式。將K4 的0 位設(shè)置成“1”, 表示有進(jìn)位,按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),觀察八段管LED3…LED0 ,看看PC 是否轉(zhuǎn)到D 所指定的目標(biāo)地址。再將K4 的0 撥成“0”, 表示無進(jìn)位,給出一個(gè)單脈沖,觀察LED3…LED0, 看看PC 是否加1。
10、條件跳轉(zhuǎn)實(shí)驗(yàn)2: 撥動(dòng)K4 的5、4 位,使IR3、IR2 置成“01”, 將跳轉(zhuǎn)控制設(shè)置成“判零跳轉(zhuǎn)”方式。將K4 的1 位設(shè)置成“1”, 表示累加器為零,按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),觀察八段管LED3…LED0, 看看PC 是否轉(zhuǎn)到D 所指定的目標(biāo)地址。再將K4 的1 撥成“0”, 表示累加器不為零,給出一個(gè)單脈沖,觀察LED3…LED0, 看看PC是否加1。
分部實(shí)驗(yàn)五、中斷控制實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,用VHDL語言編寫程序,下載到EP1K1C6 FPGA 中,實(shí)現(xiàn)十六位模型機(jī)中斷控制功能。
實(shí)驗(yàn)?zāi)康模?/span> 了解十六位模型機(jī)中中斷控制的工作原理和實(shí)現(xiàn)方法。學(xué)習(xí)用VHDL 語言描述硬件邏輯。學(xué)習(xí)使用EDA 開發(fā)環(huán)境。
實(shí)驗(yàn)說明:
在INT.VHD程序中,IREN 接K4 的0 位,表示程序執(zhí)行過程中的取指令操作,中斷請(qǐng)求信號(hào)只有在此信號(hào)有效時(shí)(取指令時(shí))才會(huì)被響應(yīng)。IENT 接K4 的1 位,用于在中斷返回時(shí),清除中斷請(qǐng)求寄存器和中斷響應(yīng)寄存器。ICEN 為輸出信號(hào)接發(fā)光二極管L2, 此信號(hào)用于控制讀中斷指令。ACK 接發(fā)光二極管L1, 顯示中斷響應(yīng)信號(hào)。REQ 接發(fā)光二極管L0,顯示中斷請(qǐng)求信號(hào)。RST 為復(fù)位信號(hào),接在開關(guān)組K4 的7 個(gè)開關(guān)上,I_REQ 為中斷申請(qǐng)輸入信號(hào),由FPGA界面上“產(chǎn)生中斷”按鍵輸出到FPGA 擴(kuò)展板上,CLK 為時(shí)鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境,選擇“Open Project ... ”打開“EP1C6\” 下的INT 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解INT.VHD(源程序見隨機(jī)光盤),了解寄存器的實(shí)現(xiàn)原理。
3、對(duì)INT 項(xiàng)目進(jìn)行綜合/編譯生成INT.SOF 文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載INT.rbf。
4、打開CPTH的開發(fā)環(huán)境,打開FPGA 擴(kuò)展板的界面。
5、按“連接CPT16”鍵將實(shí)驗(yàn)板連接到計(jì)算機(jī)。
6、撥動(dòng)K4 的7 位到“1” 的位置輸出“復(fù)位”信號(hào),將K4 的0、1 位撥到“1”的位置,使IREN 和EINT 都處于無效狀態(tài),將內(nèi)部的中斷請(qǐng)求寄存器,中斷響應(yīng)寄存器都清零,使其能響應(yīng)中斷,此時(shí)只有L2發(fā)光二極管亮。
7、中斷申請(qǐng):將K4 的7 位回到時(shí)“0” 位,使電路正常工作。按下FPGA界面上“產(chǎn)生中斷”按鍵申請(qǐng)中斷,FPGA 擴(kuò)展板上的L0 發(fā)光二極管變亮,表示有中斷申請(qǐng)。
8、中斷響應(yīng):將K4 的0 位撥成“0”, 也就使IREN 有效,表示取指令操作,擴(kuò)展板上的L2 發(fā)光二極管變熄滅,表示已經(jīng)響應(yīng)中斷。
9、中斷處理:按動(dòng)FPGA界面上“單脈沖” 按鍵,產(chǎn)生一個(gè)時(shí)鐘信號(hào),擴(kuò)展板上L2、L1、L0 發(fā)光二極管都亮,表示取指操作取出中斷處理指令來執(zhí)行。
10、中斷退出:將K4 的0 位撥成“1”, IREN 置成無效,將K4 的1 位撥成“0” ,將EINT 置成有效,發(fā)光二極管L2 變亮、L1、L0 變暗,中斷申請(qǐng)寄存器和中斷響應(yīng)寄存器清零,表示可以接受下一次中斷申請(qǐng)。
實(shí)驗(yàn)六 十六位模型機(jī)的總體實(shí)驗(yàn)
實(shí)驗(yàn)要求: 用CPT16 的擴(kuò)展實(shí)驗(yàn)板上的開關(guān)做為輸入、八段數(shù)碼管做為輸出,以上面介紹的分部實(shí)驗(yàn)為基礎(chǔ),用VHDL 語言編寫程序,下載到EP1C6 FPGA 芯片中,實(shí)現(xiàn)一個(gè)十六位模型機(jī),模型機(jī)要有完整的指令系統(tǒng),中斷處理系統(tǒng)、輸入輸出系統(tǒng)。
實(shí)驗(yàn)?zāi)康模?/span> 了解十六位模型機(jī)整機(jī)的工作原理和實(shí)現(xiàn)方法。用VHDL 語言描述硬件邏輯讓FPGA 能實(shí)現(xiàn)復(fù)雜的運(yùn)算、處理功能。
實(shí)驗(yàn)程序:MOV A, #00H
LOOP:
OUT
JMP LOOP
ORG 0E0H
ADD A, #01
RETI
END
實(shí)驗(yàn)說明:“CPT16.VHD ”為一個(gè)完整的十六位模型機(jī)的VHDL 程序,另見隨機(jī)光盤。
在總體實(shí)驗(yàn)中,rst 為復(fù)位信號(hào),接在開關(guān)組K4 的7 個(gè)開關(guān)上。i_req 為中斷申請(qǐng)輸入信號(hào),由FPGA界面上“產(chǎn)生中斷”按鍵輸出到FPGA 擴(kuò)展板上。clk 為時(shí)鐘脈沖,由FPGA界面上“單脈沖” 按鍵提供。keyin 輸入端口,接在擴(kuò)展板的K1、K0 開關(guān)組上,用于輸入外部信號(hào)。portout 為輸出端口,接到LED3…LED0 四個(gè)八段數(shù)碼管上,用于顯示輸出信號(hào)。mem_d 為十六位存儲(chǔ)器的數(shù)據(jù)線,mem_a 為十六位存儲(chǔ)器的地址線,mem_rd為存儲(chǔ)器讀控制信號(hào),mem_wr 為存儲(chǔ)器寫控制信號(hào),mem_cs 為存儲(chǔ)器片選信號(hào),mem_bh 為
存儲(chǔ)器高8 位數(shù)據(jù)選擇信號(hào),mem_bl 為存儲(chǔ)器低8 位數(shù)據(jù)選擇信號(hào)。
實(shí)驗(yàn)步驟:
1、打開Quartus 的EDA 開發(fā)環(huán)境,選擇“Open Project ... ”打開“EP1C6\” 下的CPT16 項(xiàng)目(Quartus 的EDA 開發(fā)環(huán)境的使用可參見三章)。
2、充分理解CPT16.VHD(源程序見隨機(jī)光盤)。 了解十六們模型機(jī)的實(shí)現(xiàn)原理。
3、對(duì)CPT16 項(xiàng)目進(jìn)行綜合/編譯,生成CPT16.sof文件,點(diǎn)擊“programmer”,選擇“JTAG”模式編程,點(diǎn)擊“start”即可下載。也可用CPTH的開發(fā)環(huán)境中FPGA 擴(kuò)展板的界面上的“FPGA編程”按鈕下載CPT16.rbf。
4、打開CPTH的開發(fā)環(huán)境,再打開FPGA 擴(kuò)展板的界面,按“連接CPT16”鍵將實(shí)驗(yàn)板連接到計(jì)算機(jī),在開發(fā)環(huán)境的主界面中,打開“\DJCPTH\ASM\” 目錄下“EX6.ASM” 程序,編譯下載“EX6. ASM”,下載完畢后,把源文件生成的機(jī)器碼自動(dòng)下載到16位存儲(chǔ)器中。
5、在FPGA 擴(kuò)展板的界面,點(diǎn)擊“連續(xù)脈沖”按鍵,程序連續(xù)運(yùn)行,點(diǎn)擊“產(chǎn)生中斷”按鍵,產(chǎn)生中斷請(qǐng)示信號(hào)讓模型機(jī)中斷,在中斷處理程序中,我們將累加器A 加1中斷。返回后輸出累加器中的內(nèi)容。重復(fù)點(diǎn)擊“產(chǎn)生中斷” 按鍵,產(chǎn)生多個(gè)中斷請(qǐng)示信號(hào),讓模型機(jī)多次中斷,累加器多次加1送數(shù)碼管顯示,觀察LED3…LED0輸出,是否滿足設(shè)計(jì)要求。點(diǎn)擊“暫停”按鍵,可使程序暫停運(yùn)行,點(diǎn)擊“復(fù)位”按鍵,可使模型機(jī)復(fù)位。
原創(chuàng)作者:北京愛歐德儀器設(shè)備有限公司