




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Logisim的簡單入門一,準備工作參考:羅老板的計算機結構與組成課程Machine Structures. Spring 2010, UC Berkeley/cs61c/sp10/軟件環(huán)境:Logisim仿真軟件(需要JAVA虛擬機)/burch/logisim/QuartusII 8.1硬件環(huán)境:PC機with Windows XPDE2開發(fā)板(DE2 Development and Education Board User Manual)參考書:關于QuartusII的使用教程先
2、來以一個與門電路的實驗,來看一下基本的操作,在Logisim中一個與門電路生成過程如下:1.按與門的選擇按鈕,添加一個與門到電路中。2.使用按鈕添加一個輸入引腳,用于設置輸入電平。3.添加一個引腳,通過屬性中設置Pin的屬性為輸出:這樣得到一個輸出引腳。4.移動以上添加的元素,得到原理圖:注意選中按鈕,此時可以拖拽連線,那么我們把電路各部分連接如下:5. 接下來通過選中按鈕就可以鼠標點擊設定輸入管腳上的電平為1或0了,輸出引腳也會相應改變,輸出結果。當然通過左下方的屬性設定,還可以設定當前選擇元件的朝向,數據位數,輸入端口數等參數。6.另外推薦大家后面設計的時候使用一下tunnel這個工具,代
3、替復雜的連線,在后面復雜設計的地方,讓你從蜘蛛網一樣的連線中解脫出來,例如上面的電路可以這樣表示:圖中輸入,與門模塊,輸出三部分結構分的很清晰,tunnel的使用使我們的電路設計更加規(guī)范,類似logisim中的tunnel工具在其他原理圖工具中類似的工具是經常見到的,雖然名字會有不同,用途是一樣的。7.最后是子電路添加方法,選擇Project->Add Circuit,如下圖“:子電路的繪制與上面基本相同,注意的是輸入輸出引腳要連接Pin引腳,并設定好輸入輸出屬性。右擊子電路選擇Edit Circuit Appearance可以調整子電路的外觀,通過拖拽將外觀調整好,后面加到上層電路設計
4、中的時候就不會顯得布線擁擠了。顯然上面的要比下面的元件效果好一些。以上描述的這些技巧與繪制規(guī)范整齊的原理圖是關系密切的,后面實際應用中設計復雜電路時會突出顯現出來。 幾個關鍵的地方:1,請盡量使用標準模塊,如果需要建立自己的模塊,請學習標準模塊的設計風格。2,請合理劃分層次,清楚定義輸入輸出端口,盡量使定義的風格和規(guī)范保持一致。3,請使用網絡標識代替直接連線,會使你的原理圖更加清晰易讀。4,為每個模塊設計測試用例,用于測試和說明其使用方法。5,這里用的軟件比羅老板課上用的版本高一點,操作有細微差別。打開QuartusII軟件,程序主界面如下:1, 新建一個工程點擊File>Ne
5、w Project Wizard,打開創(chuàng)建新工程向導,這里你將完成工程的基本設定選項。1, Project name and directory工程的名稱與目錄2, Name of the top-level design entity頂層設計實體的名稱3, Project files and libraries項目文件與庫4, Target device family and device目標設備的族類5, EDA tool settingsEDA工具設定這里一般設定好工程名稱和目錄,頂層設計實體名稱以及目標設備族類就可以了,其他的暫時直接使用默認項就可以了。2, 新建一個設計文件通過點擊F
6、ile>New打開新建文件選擇框,由于我們這里使用原理圖描述實現的,則文件類型選擇Design Files>Block Diagram/Schematic File,就新建了一個原理圖文件,將其保存起來,注意命名要跟前面設置的頂層設計實體名稱相同。3, 編寫設計文件接下來開始在文件中繪制原理圖,這里首先完成與門的添加,點擊左側工具欄中的Symbol Tool按鈕,打開Symbol選擇框,選擇primitives>logic>and2,點擊OK后即可在原理圖中添加一個2輸入的與門了。在同樣通過Symbol Tool中的加入和primitives>pin>out
7、put加入輸入和輸出引腳,然后在原理圖中把他們用Orthogonal Node Tool即導線連接起來,雙擊輸入輸出引腳,為他們設定好名字,pinA,pinB,pinC,就完成了原理圖中的設計。4, 編譯(分析綜合)點擊Processing>Start>Start Analysis & Synthesis,進行分析綜合,就好像是對程序進行編譯,等待片刻,如果沒有錯誤,編譯報告會輸出出來。5, 配置管腳接下來配置管腳,就是設定剛才加入的輸入輸出管腳與實驗板上FPGA芯片外部引腳之間的對應關系,設定好這個,我們設計的與門電路才能通過FPGA外部引腳與實驗板上的其他設備連接起來,
8、我們才好觀察到電路的設計效果。點擊Assignment>Pins,打開Pin Planner設定框,這里查看實驗板的說明文件,我們使用兩個撥動開關來連接輸入引腳,用一個led燈來連接輸出引腳,對照說明中的表格,為pinA,pinB,pinC分配PIN_N25,PIN_N26和PIN_AE23,設定好后點擊Assignment>Device進入設定框,點擊Device and Pin Options按鈕,在Device and Pin Option框中的Unused Pins標簽下將Reserve all unused pins設定為As output drivingground。因
9、為我們的設計最終會以電路的表達形式工作,錯誤的設計極其容易導致實驗板的損壞。6, 下載程序當然我們實際設計中可能會用到波形仿真工具進行驗證,進行時間分析驗證,甚至要設定布局布線等工作,反復迭代修正,才能完成一個復雜電路的設計,不過這里這個與門的demo很簡單,完成以上設計工作后,可以開始編譯了,點擊Processing>Start Compilation開始吧。如果沒有錯誤,輸出編譯報告,就可以準備下載到實驗板上去了。點擊Tool>Programmer,打開下載工具。這里我們選擇使用JTAG的下載方式,注意先給實驗板上電,點擊Start開始,等待片刻,走完下載進度條,下載完成。7,
10、 完成現在你可以在實驗板上通過SW0和SW1來設定與門的輸入了,實驗板上的LEDR0相應的亮或者滅。我們實現的與門在哪呢?就在你面前實驗板的芯片中,實際上實驗板的芯片中有很多電路單元,通過我們的編程選擇我們需要的電路單元用連線連接起來,在通過配置引腳連接到FPGA芯片的外部引腳上,FPGA是焊接在PCB板上的,PCB板上的銅線把FPGA引腳與外部設備比如開關,發(fā)光二極管等連接起來,我們的電路就真正的連接到了這個系統(tǒng)當中了。他們之間的連接關系在圖中表示出來。8,總結經過了這么多繁雜的步驟,我們僅僅完成的是一個簡單的與門電路,好在通過這個過程我們只是了解一下FPGA設計的基本過程與簡單操作,熟悉了
11、這個流程,以上步驟還是很清楚的,而且實現一個復雜的設計也基本是沿這個過程走的。后面我們用FPGA實現一個CPU也可以這樣下載到FPGA芯片當中,這可是一個真正的電路,真正工作的CPU,麻雀雖小五臟俱全,不再是僅僅在電腦上仿真了,你必然會滿心歡喜。而且實際中,這樣的設計(當然還有一些其他的工作要做),是能夠送到工廠中去生產真正的ASIC專用電路,也就是真正的,我們能摸到能使用的CPU,會有這樣的一天。1, 使用MegaWizard添加一個RAM模塊。RAM模塊屬于原理圖設計中一個較為復雜的模塊,并非如一個簡單的二輸入與門那樣直接添加就可以了,還有一些參數需要配置和設定。在QuartusII中添加
12、一個類似RAM的復雜模塊需要用到MegaWizard,通過使用MegaWizard添加一個RAM模塊,可以了解如何用MegaWizard為庫提供的模塊配置參數。依然是使用Symbol tool打開添加模塊對話框,MagaWizard的模塊多數在megafunctions目錄下,我們使用的是megafunctions>storage>lpm_ram_dq,勾選上Launch MegaWizard Plug-In,OK,打開MegaWizard Plug-In Manager,選擇為庫文件生成的文件類型,有AHDL語言,VHDL語言和Verilog HDL語言三種選擇,根據需要和自己對
13、他們的熟悉程度選擇,設定為其生成的目錄文件,建議生成到工程所在目錄下,并在其名稱基礎上加上些有意義的后綴。接下來是關于模塊具體參數的設定,不同的模塊會有所不同,這里請先按照圖中的配置方式選擇,使用8位容量32個字的RAM,不帶有輸出口寄存功能。為了讓RAM有一個初始值,我們要為其寫個初始化數據文件,下面選中Yes, use this file for the memory content data,并設定好文件路徑名稱。下一步是生成文件的清單,最后Finish將生成模塊添加到設計文件中。2,添加總線與提取總線上一位數據的方法。以上是通過MegaWizard添加模塊的方法,用相同的方法,我們可以
14、添加lpm_add_sub模塊。本例中涉及到的就是以上兩種模塊,通過聯系和實踐,可以測試試驗一下其他的模塊。接下來添加輸入輸出引腳,這個前面介紹過,這里有點不同的是,輸出引腳是8位的,這個在命名的時候后面加上7.0就表示是個8位的輸出,例如fib_res7.0,如果要用到其中一位就是名字加上下方括號跟標號,例如fib_res5。3,用手動按鈕作為時鐘信號測試。實驗板上的時鐘太快了,不利于我們觀察,那就用仿真時學的辦法,加一個輸入按鈕,模擬時鐘,按一下,時鐘跳一下,于是加了一個輸入引腳,用于連接實驗板上的按鈕開關。輸入引腳后面要加一個非門,因為實驗板上松開按鈕時候輸入是高電平,所以用一個非門也就
15、是反相器來取反向。需要指出的是,用手動按鈕做時鐘信號來測試是一個權宜的方法,實際的設計中是不推薦的,包括組合電路的輸出用做時鐘信號都是不好的設計習慣,因為時序電路工作的時鐘要求波形穩(wěn)定,組合邏輯電路中產生波形的毛刺對其工作影響較大,造成錯誤的數據或不可預測的結果。4,常量的加入。由于加入的ram模塊至少含有32個字的存儲,只需用到其中一個,地址線置零就可以了,每次時鐘來臨都進行寫入操作,那么寫入使能始終設為Enable。那么這些常量該怎么設定呢?在原理圖設計中,有GND和VCC兩個常量,分別代表邏輯1和邏輯0,將他們引入到電路中就可以了,多位數據合并到一條總線上是將各位數據用逗號隔開,添加到總
16、線命名中。5,讓你的電路更加清晰。前面介紹到,當電路規(guī)模愈加復雜時,將各模塊直接連接到一起會嚴重影響其清晰美觀,那么推薦的方式是采用網絡標識的形式,也可以為GND,VCC添加一個網絡標識,把他們改名為b1和b0如圖,那么內存地址我們可以寫為b0 ,b0, b0, b0,b0。再把上圖整理一下,看看效果是否好一點了。6,初始化RAM中數據7,波形仿真工具這里在學習一下使用QuartusII自帶的波形仿真工具,新建一個Vector Waveform File。在圖中位置右擊,搜索添加Node和Bus,在Insert Node or Bus框中點擊Node Finder按鈕,彈出Node Finde
17、r框,點擊List將所有輸入輸出節(jié)點列出,添加到Selected Nodes中,OK。選中clk_button,點擊工具欄的Overwrite Clock,在Clock框中填好起始時間,結束時間,時鐘周期等參數,為其添加一個時鐘輸入。在編譯過整個工程后,如無錯誤,點擊Start Simulation,片刻后,仿真波形輸出出來,仿真結果如圖,由于只是8位存儲器,所以233后面的數結果會有問題,但是仿真結果與我們設計的電路所應得到的輸出效果是一致的。8, 總結這里我們學習了利用MegaWizard添加megafunctions庫中的復雜模塊,學習了如何使用Node和Bus,以及如何使用節(jié)點標識取代
18、直接連線,是原理圖層次劃分更加清楚,另外還有如何進行波形仿真,對設計進行有效驗證,基本在Logisim中可能用到的常用功能在QuartusII設計工具中都能找到。會使用Logisim構建一個電路,相應使用QuartusII工具的原理圖設計也不會有難度了,當然他們庫中包含的模塊還有些不同,但一般常見的標準模塊QuartusII都有,而是是我們在實際設計中會用到的標準接口標準功能的模塊,要好好了解熟悉他們的用法。設計一個7段數碼管的控制邏輯電路,用于控制數碼管顯示,后面他將作為一個子模塊添加到我們的頂層設計中。1, 7段數碼管譯碼電路 HexSeg(binary)0x0110000000x1111
19、110010x2101001000x3101100000x4100110010x5100100100x6100000100x7111110000x8100000000x9100100000xA100010000xB100000110xC110001100xD101000010xE100001100xF10001110共陽極數碼管編碼表有的同學可能看到真值表就開始畫卡諾圖了,呵呵,其實可以偷一點懶,看看圖中這種實現。通過使用選擇器實現的這種譯碼電路,完成了一個真值表到電路的轉換,并且實現結構清晰,可讀性很好。1, 創(chuàng)建7段數碼管的子電路為設計好的數碼管譯碼電路創(chuàng)建硬件描述語言文件,點擊File&
20、gt;Create/Updata>Create HDL Design File for Current File。為設計好的數碼管譯碼電路創(chuàng)建一個封裝,點擊File>Create/Updata>Create Symbol File for Current File,這樣我們在頂層設計中就可以調用這個子電路了。2, 把子電路應用到頂層設計中添加剛才創(chuàng)建的子電路,點擊Assignment>Settings,在Settings對話框中的Libraries中添加剛才子電路的目錄,現在在Symbol中可以看到剛才創(chuàng)建的子電路模塊了,我們再添加一個計數器,以及需要的輸入輸出引腳,完
21、成我們的設計吧。3, 總結這個例子主要是聯系子電路的創(chuàng)建以及如何將子電路應用到頂層設計中,在復雜設計中,分層設計的方法是必須要掌握的。至此,QuartusII中的原理圖設計的基本操作方法就足夠我們使用了,Logisim中所能完成的操作,在QuartusII中都能夠對應起來,所以建議后面的設計中,我們來參考課件中的使用Logisim設計簡單CPU的方法,對應在QuartusII中實現一個真正的CPU。由于Logisim是一個仿真軟件,使用較QuartusII方便一些,可以先行做實驗,然后再用QuartusII實現設計方案。至此,我們要真正開始CPU設計了,前面的內容是給不熟悉QuartusII的
22、同學熱身用的。這里都是假定同學們已經熟悉了QuartusII基本操作,會使用原理圖設計方法設計電路,并且會使用MegaWizard添加標準模塊,會分層設計電路。需要說明的是,我們選擇使用原理圖的設計方法,是考慮與羅老板的課件相結合,能夠對照Logisim的操作,使同學們在學會使用Logisim軟件仿真設計出一個CPU后,平滑的過度過來。另外原理圖的設計更加直觀一點,更容易入門。當然由于實際設計中主流的方式還是使用硬件設計語言,推薦大家了解一下Verilog HDL,VHDL或System C等語言。1,設計總攬我們這里設計的是一個簡單的16位處理器(即每個指令字長為16位,寄存器也是16位),
23、該處理器有四個寄存器($r0到$r3)。具有獨立的數據和指令內存(即有兩個內存,一個指令內存,一個數據內存)。需要注意的是由于器件的限制,也為了讓事情更簡單一些,我們以半字(16位)為單位對內存編址。這和MIPS 不同,MIPS指令是字長是32位,而內存是以字節(jié)(8位)為單位編址。2,準備步驟第一步:熟悉一下QuartusII的操作,這個在前面我們已經完成了,對應于Logisim中操作都介紹到了,后面完成Proj3所需要的技術也都具備了(當然,想深入的了解數字電路設計,可能需要更多),也就是說如果能夠用Logisim完成Proj3,用QuartusII實現也不再話下。第二步:做一下相關的實驗,
24、了解QuartusII下的一些模塊和組件,如何建立簡單模塊,如何將簡單模塊構建到一起,成為復雜的模塊,直至成為一個系統(tǒng)。MegaWizard中提供的是數字電路中常見的標準模塊,我們的設計中要用到其中一些模塊,所以熟悉他們,熟練應用是完成設計的前提。3, 閱讀ISA第三步:閱讀ISAISA(Instruction Set Architecture)是硬件設計師跟軟件設計師之間的協(xié)議,他規(guī)定了硬件設計師設計的CPU所需要具備的功能,以及軟件設計師所能夠使用的CPU指令。設計一個CPU首先要設計一個ISA,之后才是軟硬件設計:軟件設計師設計匯編器,編譯器;硬件設計師設計CPU。我們需要的ISA在Pr
25、oj3這里已經給出了,如下表:通過查詢 opcode字段(高四位,即15-12位)的值,可知半字編碼所對應的指令。注意,表中的opcode不到16個,而funct也不到8個。原因是指令少一些,使同學們更容易實現(呵呵,好象比老師上課講的CPU指令數還是多了很多)。(如果需要更加細致的了解原理,請認真學習羅老板課件中關于單指令周期CPU設計的這幾節(jié)課的內容。)我們可以了解到需要實現的幾個基本模塊:1, 指令指針寄存器PC2, 指令存儲器ROM3, 寄存器文件4, ALU5, 內存單元6, 控制邏輯單元一個大體的CPU的結構圖:4,總結從分析結果來看,我們需要的實現的幾個模塊都在圖中表現出來了,他
26、們之間的關系也基本如上圖所示,更詳細的說明請參考羅老板的課件吧。我們要設計中可能用到的庫中的模塊有以下幾種,寄存器模塊,RAM,ROM,算術以及邏輯運算單元比如加法器,移位,與或門等。當然還有前面我們講到的數據選擇器,這個會在Controller中用到,另外在每個單元模塊前做數據選擇也會用到。第四步:制作一個寄存器組(也稱寄存器文件)模塊(組件)。1,輸入與輸出根據前面設計總攬中得到的模塊間的關系,設計出輸入輸出端口,包括rs,rt,rw,另外是rsBus,rtBus,當然還有使能控制,時鐘,reset等。2,寄存器作為第一小步你可以先放四個寄存器,然后做出一個輸出,即可選擇四個寄存器中的任意
27、一個的值輸出。注意:用MegaWizard生成模塊文件的時候,別忘了加一個后綴,因為這里都是子模塊設計,后面要應用到頂層設計中去,為避免各個子模塊設計中引入的標準模塊文件重名,推薦加一個子模塊名字的后綴,例如lpm_dff_reg0,就表示reg模塊中引入的lpm_dff模塊。3, 輸入輸出數據選擇器四個寄存器不能同時全部加到兩個數據輸出端口rsBus和rtBus上,rwBus一次也只能對一個寄存器寫入,那么就需要相應的數據選擇以及寫使能控制。4, 整體設計全部完成好的原理圖如下:各個部分之間的關系如結構框圖:5, 總結從設計一開始要養(yǎng)成良好的繪圖習慣,以結構清晰為原則,設計按照一定順序完成,
28、比如這里的順序就是:輸入輸出端口>核心模塊>數據通路控制另外將各部分功能用注釋文字標好,方便閱讀。書接上回第四步:制作一個ALU輸入輸出端口ALU的輸入輸出相對簡單,輸入是兩個操作數和一個操作符,輸出是計算結果。各運算單元為了節(jié)省片上資源,加減法器使用一個,用一根選擇線控制加或減,邏輯左右移位也是用一根選擇線控制左右移。數據通路選擇上面的各運算單元是并行工作的,對于輸入的兩個操作數,幾個運算單元都會計算結果,至于輸出哪一個,要通過后面的數據選擇器來控制了。選擇器的選擇開關接的是操作符,這樣輸出結果就是操作數對應的操作運算得到的的結果了。第五步:制作一個PC指針寄存器4,PC指針寄存
29、器關于PC指針的操作很多,有一般指令所需的PC+1操作(這里是+1操作,與課件中+4稍有不同,因為我們后面設計ROM的時候按16位數據線設計,每個地址存儲的是16位數據,那么PC+1就能讀取完整的一條指令),另外還有絕對跳轉需要的PC = (PC & 0xF000) | address,beq和bne指令所需的PC = PC + 1 + offset。設計模塊要求模塊完成的功能盡量單一,模塊的功能定義要清楚,上面跳轉所需的address,判斷所需的offset都是從指令中提取的,全部設計到PC寄存器模塊中來,會使設計一下子變得復雜。在實現PC寄存器模塊時,需要更多的外部信息,從而使頂層
30、設計的修改會影響到子電路。所以PC寄存器就是由輸入輸出端口和一個寄存器組成,其余部分要放到控制邏輯和頂層設計中去。5,總結ALU暫時可以僅實現ADD,SUB,AND,OR以及移位,比較運算,將來再擴展更多功能。(對于各種運算單元有兩種辦法實現,其一是自己用基本的與或非門電路搭建,其二是直接使用QuartusII的MegaWizard庫實現)。PC寄存器的實現也很簡單,基本在前面的基礎上,完成一個ALU和一個PC寄存器不會遇到任何困難,我們這里關注的是模塊的劃分,模塊功能的定義,高內聚,低耦合的設計不只是軟件設計中提倡的,這也是硬件設計中推薦的。原來很多道理是相通的數據存儲在RAM里,程序存儲在
31、ROM里,這是大家經常聽到的,那么怎么設計一個存儲數據的RAM和一個存儲程序的ROM呢?這里我們就來親手試驗一下。有一點要說明的QuartusII中提供的ROM和Logisim中提供的ROM模塊有一點點不同,他們相差一根時鐘線,雖然只有這一點不同,但卻是很重要的一點,這就涉及到了一個組合邏輯實現的ROM與時序邏輯實現的ROM的區(qū)別。這里給出了QuartusII中的兩種實現方式,一種是用庫中提供的模塊,另一種是組合邏輯的實現方式,關于兩者的不同究竟會產生怎樣的影響,后面我們再詳細討論。第六步:實現一個RAM直接上圖吧,基本操作的問題不多敘述了,有問題的話請查看前面的學習或者參考QuartusII
32、的教程。第七步:ROM的實現用組合邏輯實現ROM的方法用組合邏輯實現的ROM其本質是電路,如果感覺難以理解,你可以認為你的程序就是一堆門電路按某種順序排列表示出來的,而不是存在真正意義的存儲器當中,我們寫程序的時候其實是搭建了一個電路。這里給出一種實現方法這是一個16個字的16位ROM,是用選擇器實現的(前面說過了選擇器是個有用的好東西),由于只有16個存儲單元,所以4位地址就能表示出來,ROM中的內容就是接到選擇器data0x到data15x上的數據,每一次對ROM的編程寫入,就是將綜合的電路下載到FPGA實驗板中。2,用時序電路實現ROM實際的ROM應該是可以在系統(tǒng)編程的,也就是說不改變電
33、路結構,能夠把程序寫入ROM。在QuartusII軟件中庫提供的ROM是時序電路實現的,我們時序電路實現的ROM跟RAM的形式是一樣的,看圖就知道了。其實在QuartusII中ROM也是通過一個RAM實現的,引入的ROM中有這樣的代碼COMPONENT altsyncramGENERIC (clock_enable_input_a : STRING;clock_enable_output_a : STRING;init_file : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT (clo
34、ck0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END COMPONENT;這里altsyncram經過封裝,也就是MegaWizard的配置,引出相應的引腳,就成了一個ROM模塊交給我們,在我們設計中調用了(上面是一段VHDL語言的代碼,關于VHDL語言就不在這里詳細介紹了)。最后需要注意的是這個ROM模塊用到我們頂層設計的時候不能用CPU的時鐘,而是單獨為其提供一個刷新輸出數據的高速時鐘。在介紹完整個CPU后,我們會把這樣做的原
35、因連同說明組合邏輯與時序邏輯實現ROM的不同一起討論。當然如果你現在有興趣可以在自己的CPU設計中使用這個ROM模塊的時候為其加上CPU的時鐘,看看效果。1,再次推薦使用庫在設計中,推薦大家使用庫中的模塊,因為庫中的模塊都是經過精心設計驗證好的電路,并在長期的設計實踐中反復驗證的成熟方案,另外還有可能經過了專門的優(yōu)化。比如下面我們將用到一個比較典型的模塊選擇器,選擇器的一個比較典型的應用是根據已知邏輯關系,通過選擇通路數據得出電路,就是說如果知道真值表的話,選擇的通路設定為常量,選擇開關為輸入的邏輯值,通過這種類似解碼的電路結構很容易的實現組合邏輯的功能,并且在程序、電路結構上有很好的可讀性,
36、結構也很清晰。在下面控制邏輯開關表中,我們就使用了這種方法。2,推薦的指令實現順序這里給一個推薦指令的實現順序:lui和ori指令andi和addi指令R指令j指令beq,bne,lw和sw指令3,頂層設計的條理按照老師課上講的CPU的幾個模塊,大致也為頂層設計劃分出幾塊來,每一塊的核心是前面設計的模塊電路,由于要增加控制邏輯以及對輸入數據進行處理,信號進入模塊前,先通過選擇端連接控制邏輯的選擇器,根據指令不同,控制邏輯打開關閉不同的開關,控制選擇輸入每個模塊的數據。大致的示意圖為這樣模塊間數據是各個核心模塊的輸出,由于核心模塊是采用的標準的庫模塊設計的,其輸出數據的形式是標準的易被多數人接受
37、的,從而使我們不必更多的考慮分塊間數據的表示形式,無需再依賴更多的外部信息。頂層設計是由這樣一個一個的分塊電路組成的,這是整個頂層設計圖其中輸入選擇都是由選擇器實現的,可見選擇器在設計中的應用是十分頻繁的。接下來對于一條條的指令,就是控制一個個選擇器選擇哪個數據輸入到模塊中了,控制邏輯就是把指令譯碼為一個個的通路選擇開關。我們把各部分模塊控制參數的信息集中到這里,各個控制位的設定情況可以通過下表得出:根據表中的信息,控制邏輯開關表電路也是用一個選擇器實現,下圖中給出了一個實現方法,圖中可以清晰的從表中的位開關設置找到對應的數據位。4,寫程序測試在你完成了CPU設計后,需要編寫程序在CPU上運行
38、以測試CPU能否工作。試著將以下匯編指令翻譯成機器碼:add $2,$1,$0add $1,$1,$0add $1,$2,$0然后將機器碼存入指令內存中。如果你成功地完成了此最簡單的CPU,則時鐘每跳一次,將執(zhí)行一條指令。為了你看到一些有意義的結果,你可能需要手動設置一下各個寄存器的初值,這在仿真中可以較容易的實現,如將寄存器1的值設為1,寄存器2的值設為2,寄存器3的值設為3。但是硬件實現時候就要想一些別的方法了,前面推薦大家優(yōu)先實現lui和ori指令就是這個道理。首先讓你的CPU能運行l(wèi)ui和ori指令是非常重要的,因為在程序中通過他們使CPU中的寄存器載入數據,讓其他測試的數據初始化成為
39、可能。在前面最后組合各功能模塊,實現每條命令的控制邏輯時強烈推薦優(yōu)先完成這兩條指令,待這兩條指令工作正常后,就可以用來測試其他指令了。為了更好的觀察輸出結果一個數碼管顯示是必要的,應用這種選擇器似的解碼電路就能實現,選擇端輸入的要顯示的16進制數據,各數據通路上的常量為0f的數碼管字段編碼,這是一個典型的譯碼電路實現,當然使用ROM查表的方法也可以實現,不過要多一個刷新時鐘,前面我們實現過數碼管的譯碼電路了,使用它就可以了。寫幾個程序測試你的CPU,把一條條指令都調試好,至此,你的Proj3中的CPU設計作業(yè)就完成了。前面我們以盡量快的速度完成了Proj3的任務,但是還有一些問題遺留下來,這里
40、我們就來討論下這些問題。1, Logisim與QuartusII的比較前面已經提到,使用QuartusII進行數字電路設計,更多情況下使用的是硬件描述語言,硬件描述語言功能更加強大,標準更加規(guī)范,應用十分廣泛。這里選擇使用原理圖的設計描述方式是為了讓我們容易的從Logisim過渡過來。從前面的內容來看,我們實驗課上使用到的Logisim軟件實現Proj3中CPU的設計所涉及到的操作,在QuartusII中對應的實現方式都一一對應的演示了,當然QuartusII軟件的庫中包含的電路模塊可能會與Logisim中的有所差別。Logisim是一款可視化的仿真軟件,我們也是在學習羅老板的計算機組成原理課
41、上第一次了解到的,基本算是實驗用的,實驗演示很方便。QuartusII是Altera公司用于自家器件設備的數字電路設計的軟件,我們做實驗用的DE2板子上的FPGA芯片就是Altera公司的,QuartusII軟件可以完成硬件電路設計的整個流程。Logisim的仿真表現效果比較直觀,直接通過點擊就能完成輸入輸出設定,模塊間連線上的電平在電路實時運行中通過連線顏色表示出來。寄存器,RAM中的數據都能進行設定,包括在電路實時運行時。QuartusII中仿真的方式也很多,比如自帶波形仿真功能,另外可以使用第三方的仿真軟件如ModelSim等。但是如果想直觀的觀察電路實時運行狀態(tài)則不太容易,無論是設定電路初始狀態(tài),修改寄存器與RAM中的存儲內容等,都不是很容易,所以要先實現一些簡單模塊,并設法將電路運行狀態(tài)通過外部設備表現出來,設定一些調試開關,幫助設定電路狀態(tài)。2, 為什么是時序邏輯的ROM這個問題可以這樣解釋,組合電路的ROM相當于使用電路搭建的,向ROM中寫入一個程序,就相當于做一個電路。我們使用計算機,寫一個程序進CPU,應該是能夠在系統(tǒng)的把程序下載到ROM中,而不是把這個CPU拆了,重新設計一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省省級聯測2024-2025學年高二下學期6月期末考試地理試卷(含答案)
- 部編版四年級上冊第五單元《麻雀》教案
- 山東考生歷史題目及答案
- 日語會話類題目及答案
- 平面與立體相交2
- 2023-2024學年湖北省武漢市武昌區(qū)高二下學期6月期末考試數學試題(解析版)
- 2025屆廣東省廣州市高三下學期一??荚囌Z文試題(解析版)
- 環(huán)境工程經濟分析課件
- 合成樹脂乳液內墻涂料產品質量河南省監(jiān)督抽查實施細則
- 拖拉機產品質量監(jiān)督抽查實施細則
- 2025-2030工程監(jiān)理行業(yè)市場深度分析及競爭格局與投資價值研究報告
- GB 10770-2025食品安全國家標準嬰幼兒罐裝輔助食品
- 單病種質量管理實施方案
- Unit9SectionB2a-2e課件-人教版八年級英語下冊
- KRONES灌裝檢測工作原理及工藝參數調整
- SJG 01-2010 深圳市地基基礎勘察設計規(guī)范
- 裝修業(yè)務居間推廣合同
- 物業(yè)維修流程培訓
- 大學美育(同濟大學)學習通測試及答案
- 2024年中考模擬試卷數學(湖南卷)
- 醫(yī)院培訓課件:《便攜式血糖儀臨床操作和質量管理》
評論
0/150
提交評論