如何使用logisim_第1頁
如何使用logisim_第2頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.Logisim的簡單入門一,準(zhǔn)備工作參考:羅老板的計(jì)算機(jī)結(jié)構(gòu)與組成課程Machine Structures. Spring 2010, UC B/cs61c/sp10/軟件環(huán)境:Logisim仿真軟件(需要JAVA虛擬機(jī))/burch/logisim/QuartusII 8.1硬件環(huán)境:PC機(jī)with Windows XPDE2開發(fā)板(DE2 Development and Education Board User Manual)參考書:Computer.Organization.and.Desig

2、n關(guān)于QuartusII的使用教程先來以一個(gè)與門電路的實(shí)驗(yàn),來看一下基本的操作,在Logisim中一個(gè)與門電路生成過程如下:1.按與門的選擇按鈕,添加一個(gè)與門到電路中。2.使用按鈕添加一個(gè)輸入引腳,用于設(shè)置輸入電平。3.添加一個(gè)引腳,通過屬性中設(shè)置Pin的屬性為輸出:這樣得到一個(gè)輸出引腳。4.移動(dòng)以上添加的元素,得到原理圖:注意選中按鈕,此時(shí)可以拖拽連線,那么我們把電路各部分連接如下:5. 接下來通過選中按鈕就可以鼠標(biāo)點(diǎn)擊設(shè)定輸入管腳上的電平為1或0了,輸出引腳也會相應(yīng)改變,輸出結(jié)果。當(dāng)然通過左下方的屬性設(shè)定,還可以設(shè)定當(dāng)前選擇元件的朝向,數(shù)據(jù)位數(shù),輸入端口數(shù)等參數(shù)。6.另外推薦大家后面設(shè)計(jì)的

3、時(shí)候使用一下tunnel這個(gè)工具,代替復(fù)雜的連線,在后面復(fù)雜設(shè)計(jì)的地方,讓你從蜘蛛網(wǎng)一樣的連線中解脫出來,例如上面的電路可以這樣表示:圖中輸入,與門模塊,輸出三部分結(jié)構(gòu)分的很清晰,tunnel的使用使我們的電路設(shè)計(jì)更加規(guī)范,類似logisim中的tunnel工具在其他原理圖工具中類似的工具是經(jīng)常見到的,雖然名字會有不同,用途是一樣的。7.最后是子電路添加方法,選擇Project->Add Circuit,如下圖“:子電路的繪制與上面基本相同,注意的是輸入輸出引腳要連接Pin引腳,并設(shè)定好輸入輸出屬性。右擊子電路選擇Edit Circuit Appearance可以調(diào)整子電路的外觀,通過拖

4、拽將外觀調(diào)整好,后面加到上層電路設(shè)計(jì)中的時(shí)候就不會顯得布線擁擠了。顯然上面的要比下面的元件效果好一些。以上描述的這些技巧與繪制規(guī)范整齊的原理圖是關(guān)系密切的,后面實(shí)際應(yīng)用中設(shè)計(jì)復(fù)雜電路時(shí)會突出顯現(xiàn)出來。幾個(gè)關(guān)鍵的地方:1,請盡量使用標(biāo)準(zhǔn)模塊,如果需要建立自己的模塊,請學(xué)習(xí)標(biāo)準(zhǔn)模塊的設(shè)計(jì)風(fēng)格。2,請合理劃分層次,清楚定義輸入輸出端口,盡量使定義的風(fēng)格和規(guī)范保持一致。3,請使用網(wǎng)絡(luò)標(biāo)識代替直接連線,會使你的原理圖更加清晰易讀。4,為每個(gè)模塊設(shè)計(jì)測試用例,用于測試和說明其使用方法。5,這里用的軟件比羅老板課上用的版本高一點(diǎn),操作有細(xì)微差別。打開QuartusII軟件,程序主界面如下:1, 新建一個(gè)工程

5、點(diǎn)擊File>New Project Wizard,打開創(chuàng)建新工程向?qū)?,這里你將完成工程的基本設(shè)定選項(xiàng)。1, Project name and directory工程的名稱與目錄2, Name of the top-level design entity頂層設(shè)計(jì)實(shí)體的名稱3, Project files and libraries項(xiàng)目文件與庫4, Target device family and device目標(biāo)設(shè)備的族類5, EDA tool settingsEDA工具設(shè)定這里一般設(shè)定好工程名稱和目錄,頂層設(shè)計(jì)實(shí)體名稱以及目標(biāo)設(shè)備族類就可以了,其他的暫時(shí)直接使用默認(rèn)項(xiàng)就可以了。2, 新

6、建一個(gè)設(shè)計(jì)文件通過點(diǎn)擊File>New打開新建文件選擇框,由于我們這里使用原理圖描述實(shí)現(xiàn)的,則文件類型選擇Design Files>Block Diagram/Schematic File,就新建了一個(gè)原理圖文件,將其保存起來,注意命名要跟前面設(shè)置的頂層設(shè)計(jì)實(shí)體名稱相同。3, 編寫設(shè)計(jì)文件接下來開始在文件中繪制原理圖,這里首先完成與門的添加,點(diǎn)擊左側(cè)工具欄中的Symbol Tool按鈕,打開Symbol選擇框,選擇primitives>logic>and2,點(diǎn)擊OK后即可在原理圖中添加一個(gè)2輸入的與門了。在同樣通過Symbol Tool中的加入和primitives&g

7、t;pin>output加入輸入和輸出引腳,然后在原理圖中把他們用Orthogonal Node Tool即導(dǎo)線連接起來,雙擊輸入輸出引腳,為他們設(shè)定好名字,pinA,pinB,pinC,就完成了原理圖中的設(shè)計(jì)。4, 編譯(分析綜合)點(diǎn)擊Processing>Start>Start Analysis & Synthesis,進(jìn)行分析綜合,就好像是對程序進(jìn)行編譯,等待片刻,如果沒有錯(cuò)誤,編譯報(bào)告會輸出出來。5, 配置管腳接下來配置管腳,就是設(shè)定剛才加入的輸入輸出管腳與實(shí)驗(yàn)板上FPGA芯片外部引腳之間的對應(yīng)關(guān)系,設(shè)定好這個(gè),我們設(shè)計(jì)的與門電路才能通過FPGA外部引腳與實(shí)驗(yàn)

8、板上的其他設(shè)備連接起來,我們才好觀察到電路的設(shè)計(jì)效果。點(diǎn)擊Assignment>Pins,打開Pin Planner設(shè)定框,這里查看實(shí)驗(yàn)板的說明文件,我們使用兩個(gè)撥動(dòng)開關(guān)來連接輸入引腳,用一個(gè)led燈來連接輸出引腳,對照說明中的表格,為pinA,pinB,pinC分配PIN_N25,PIN_N26和PIN_AE23,設(shè)定好后點(diǎn)擊Assignment>Device進(jìn)入設(shè)定框,點(diǎn)擊Device and Pin Options按鈕,在Device and Pin Option框中的Unused Pins標(biāo)簽下將Reserve all unused pins設(shè)定為As output dri

9、vingground。因?yàn)槲覀兊脑O(shè)計(jì)最終會以電路的表達(dá)形式工作,錯(cuò)誤的設(shè)計(jì)極其容易導(dǎo)致實(shí)驗(yàn)板的損壞。6, 下載程序當(dāng)然我們實(shí)際設(shè)計(jì)中可能會用到波形仿真工具進(jìn)行驗(yàn)證,進(jìn)行時(shí)間分析驗(yàn)證,甚至要設(shè)定布局布線等工作,反復(fù)迭代修正,才能完成一個(gè)復(fù)雜電路的設(shè)計(jì),不過這里這個(gè)與門的demo很簡單,完成以上設(shè)計(jì)工作后,可以開始編譯了,點(diǎn)擊Processing>Start Compilation開始吧。如果沒有錯(cuò)誤,輸出編譯報(bào)告,就可以準(zhǔn)備下載到實(shí)驗(yàn)板上去了。點(diǎn)擊Tool>Programmer,打開下載工具。這里我們選擇使用JTAG的下載方式,注意先給實(shí)驗(yàn)板上電,點(diǎn)擊Start開始,等待片刻,走完下

10、載進(jìn)度條,下載完成。7, 完成現(xiàn)在你可以在實(shí)驗(yàn)板上通過SW0和SW1來設(shè)定與門的輸入了,實(shí)驗(yàn)板上的LEDR0相應(yīng)的亮或者滅。我們實(shí)現(xiàn)的與門在哪呢.就在你面前實(shí)驗(yàn)板的芯片中,實(shí)際上實(shí)驗(yàn)板的芯片中有很多電路單元,通過我們的編程選擇我們需要的電路單元用連線連接起來,在通過配置引腳連接到FPGA芯片的外部引腳上,F(xiàn)PGA是焊接在PCB板上的,PCB板上的銅線把FPGA引腳與外部設(shè)備比如開關(guān),發(fā)光二極管等連接起來,我們的電路就真正的連接到了這個(gè)系統(tǒng)當(dāng)中了。他們之間的連接關(guān)系在圖中表示出來。8,總結(jié)經(jīng)過了這么多繁雜的步驟,我們僅僅完成的是一個(gè)簡單的與門電路,好在通過這個(gè)過程我們只是了解一下FPGA設(shè)計(jì)的基

11、本過程與簡單操作,熟悉了這個(gè)流程,以上步驟還是很清楚的,而且實(shí)現(xiàn)一個(gè)復(fù)雜的設(shè)計(jì)也基本是沿這個(gè)過程走的。后面我們用FPGA實(shí)現(xiàn)一個(gè)CPU也可以這樣下載到FPGA芯片當(dāng)中,這可是一個(gè)真正的電路,真正工作的CPU,麻雀雖小五臟俱全,不再是僅僅在電腦上仿真了,你必然會滿心歡喜。而且實(shí)際中,這樣的設(shè)計(jì)(當(dāng)然還有一些其他的工作要做),是能夠送到工廠中去生產(chǎn)真正的ASIC專用電路,也就是真正的,我們能摸到能使用的CPU,會有這樣的一天。1, 使用MegaWizard添加一個(gè)RAM模塊。RAM模塊屬于原理圖設(shè)計(jì)中一個(gè)較為復(fù)雜的模塊,并非如一個(gè)簡單的二輸入與門那樣直接添加就可以了,還有一些參數(shù)需要配置和設(shè)定。在

12、QuartusII中添加一個(gè)類似RAM的復(fù)雜模塊需要用到MegaWizard,通過使用MegaWizard添加一個(gè)RAM模塊,可以了解如何用MegaWizard為庫提供的模塊配置參數(shù)。依然是使用Symbol tool打開添加模塊對話框,MagaWizard的模塊多數(shù)在megafunctions目錄下,我們使用的是megafunctions>storage>lpm_ram_dq,勾選上Launch MegaWizard Plug-In,OK,打開MegaWizard Plug-In Manager,選擇為庫文件生成的文件類型,有AHDL語言,VHDL語言和Verilog HDL語言三

13、種選擇,根據(jù)需要和自己對他們的熟悉程度選擇,設(shè)定為其生成的目錄文件,建議生成到工程所在目錄下,并在其名稱基礎(chǔ)上加上些有意義的后綴。接下來是關(guān)于模塊具體參數(shù)的設(shè)定,不同的模塊會有所不同,這里請先按照圖中的配置方式選擇,使用8位容量32個(gè)字的RAM,不帶有輸出口寄存功能。為了讓RAM有一個(gè)初始值,我們要為其寫個(gè)初始化數(shù)據(jù)文件,下面選中Yes, use this file for the memory content data,并設(shè)定好文件路徑名稱。下一步是生成文件的清單,最后Finish將生成模塊添加到設(shè)計(jì)文件中。2,添加總線與提取總線上一位數(shù)據(jù)的方法。以上是通過MegaWizard添加模塊的方法

14、,用相同的方法,我們可以添加lpm_add_sub模塊。本例中涉及到的就是以上兩種模塊,通過聯(lián)系和實(shí)踐,可以測試試驗(yàn)一下其他的模塊。接下來添加輸入輸出引腳,這個(gè)前面介紹過,這里有點(diǎn)不同的是,輸出引腳是8位的,這個(gè)在命名的時(shí)候后面加上7.0就表示是個(gè)8位的輸出,例如fib_res7.0,如果要用到其中一位就是名字加上下方括號跟標(biāo)號,例如fib_res5。3,用手動(dòng)按鈕作為時(shí)鐘信號測試。實(shí)驗(yàn)板上的時(shí)鐘太快了,不利于我們觀察,那就用仿真時(shí)學(xué)的辦法,加一個(gè)輸入按鈕,模擬時(shí)鐘,按一下,時(shí)鐘跳一下,于是加了一個(gè)輸入引腳,用于連接實(shí)驗(yàn)板上的按鈕開關(guān)。輸入引腳后面要加一個(gè)非門,因?yàn)閷?shí)驗(yàn)板上松開按鈕時(shí)候輸入是高

15、電平,所以用一個(gè)非門也就是反相器來取反向。需要指出的是,用手動(dòng)按鈕做時(shí)鐘信號來測試是一個(gè)權(quán)宜的方法,實(shí)際的設(shè)計(jì)中是不推薦的,包括組合電路的輸出用做時(shí)鐘信號都是不好的設(shè)計(jì)習(xí)慣,因?yàn)闀r(shí)序電路工作的時(shí)鐘要求波形穩(wěn)定,組合邏輯電路中產(chǎn)生波形的毛刺對其工作影響較大,造成錯(cuò)誤的數(shù)據(jù)或不可預(yù)測的結(jié)果。4,常量的加入。由于加入的ram模塊至少含有32個(gè)字的存儲,只需用到其中一個(gè),地址線置零就可以了,每次時(shí)鐘來臨都進(jìn)行寫入操作,那么寫入使能始終設(shè)為Enable。那么這些常量該怎么設(shè)定呢.在原理圖設(shè)計(jì)中,有GND和VCC兩個(gè)常量,分別代表邏輯1和邏輯0,將他們引入到電路中就可以了,多位數(shù)據(jù)合并到一條總線上是將各位

16、數(shù)據(jù)用逗號隔開,添加到總線命名中。5,讓你的電路更加清晰。前面介紹到,當(dāng)電路規(guī)模愈加復(fù)雜時(shí),將各模塊直接連接到一起會嚴(yán)重影響其清晰美觀,那么推薦的方式是采用網(wǎng)絡(luò)標(biāo)識的形式,也可以為GND,VCC添加一個(gè)網(wǎng)絡(luò)標(biāo)識,把他們改名為b1和b0如圖,那么內(nèi)存地址我們可以寫為b0 ,b0, b0, b0,b0。再把上圖整理一下,看看效果是否好一點(diǎn)了。6,初始化RAM中數(shù)據(jù)7,波形仿真工具這里在學(xué)習(xí)一下使用QuartusII自帶的波形仿真工具,新建一個(gè)Vector Waveform File。在圖中位置右擊,搜索添加Node和Bus,在Insert Node or Bus框中點(diǎn)擊Node Finder按鈕,

17、彈出Node Finder框,點(diǎn)擊List將所有輸入輸出節(jié)點(diǎn)列出,添加到Selected Nodes中,OK。選中clk_button,點(diǎn)擊工具欄的Overwrite Clock,在Clock框中填好起始時(shí)間,結(jié)束時(shí)間,時(shí)鐘周期等參數(shù),為其添加一個(gè)時(shí)鐘輸入。在編譯過整個(gè)工程后,如無錯(cuò)誤,點(diǎn)擊Start Simulation,片刻后,仿真波形輸出出來,仿真結(jié)果如圖,由于只是8位存儲器,所以233后面的數(shù)結(jié)果會有問題,但是仿真結(jié)果與我們設(shè)計(jì)的電路所應(yīng)得到的輸出效果是一致的。8, 總結(jié)這里我們學(xué)習(xí)了利用MegaWizard添加megafunctions庫中的復(fù)雜模塊,學(xué)習(xí)了如何使用Node和Bus,

18、以及如何使用節(jié)點(diǎn)標(biāo)識取代直接連線,是原理圖層次劃分更加清楚,另外還有如何進(jìn)行波形仿真,對設(shè)計(jì)進(jìn)行有效驗(yàn)證,基本在Logisim中可能用到的常用功能在QuartusII設(shè)計(jì)工具中都能找到。會使用Logisim構(gòu)建一個(gè)電路,相應(yīng)使用QuartusII工具的原理圖設(shè)計(jì)也不會有難度了,當(dāng)然他們庫中包含的模塊還有些不同,但一般常見的標(biāo)準(zhǔn)模塊QuartusII都有,而是是我們在實(shí)際設(shè)計(jì)中會用到的標(biāo)準(zhǔn)接口標(biāo)準(zhǔn)功能的模塊,要好好了解熟悉他們的用法。設(shè)計(jì)一個(gè)7段數(shù)碼管的控制邏輯電路,用于控制數(shù)碼管顯示,后面他將作為一個(gè)子模塊添加到我們的頂層設(shè)計(jì)中。1, 7段數(shù)碼管譯碼電路 HexSeg(binary)0x111

19、1110010x3101100000x4100110010x5100100100x6100000100x7111110000x8100000000x9100100000xA100010000xD101000010xF10001110共陽極數(shù)碼管編碼表有的同學(xué)可能看到真值表就開始畫卡諾圖了,呵呵,其實(shí)可以偷一點(diǎn)懶,看看圖中這種實(shí)現(xiàn)。通過使用選擇器實(shí)現(xiàn)的這種譯碼電路,完成了一個(gè)真值表到電路的轉(zhuǎn)換,并且實(shí)現(xiàn)結(jié)構(gòu)清晰,可讀性很好。1, 創(chuàng)建7段數(shù)碼管的子電路為設(shè)計(jì)好的數(shù)碼管譯碼電路創(chuàng)建硬件描述語言文件,點(diǎn)擊File>Create/Updata>Create HDL Design File

20、for Current File。為設(shè)計(jì)好的數(shù)碼管譯碼電路創(chuàng)建一個(gè)封裝,點(diǎn)擊File>Create/Updata>Create Symbol File for Current File,這樣我們在頂層設(shè)計(jì)中就可以調(diào)用這個(gè)子電路了。2, 把子電路應(yīng)用到頂層設(shè)計(jì)中添加剛才創(chuàng)建的子電路,點(diǎn)擊Assignment>Settings,在Settings對話框中的Libraries中添加剛才子電路的目錄,現(xiàn)在在Symbol中可以看到剛才創(chuàng)建的子電路模塊了,我們再添加一個(gè)計(jì)數(shù)器,以及需要的輸入輸出引腳,完成我們的設(shè)計(jì)吧。3, 總結(jié)這個(gè)例子主要是聯(lián)系子電路的創(chuàng)建以及如何將子電路應(yīng)用到頂層設(shè)計(jì)

21、中,在復(fù)雜設(shè)計(jì)中,分層設(shè)計(jì)的方法是必須要掌握的。至此,QuartusII中的原理圖設(shè)計(jì)的基本操作方法就足夠我們使用了,Logisim中所能完成的操作,在QuartusII中都能夠?qū)?yīng)起來,所以建議后面的設(shè)計(jì)中,我們來參考課件中的使用Logisim設(shè)計(jì)簡單CPU的方法,對應(yīng)在QuartusII中實(shí)現(xiàn)一個(gè)真正的CPU。由于Logisim是一個(gè)仿真軟件,使用較QuartusII方便一些,可以先行做實(shí)驗(yàn),然后再用QuartusII實(shí)現(xiàn)設(shè)計(jì)方案。至此,我們要真正開始CPU設(shè)計(jì)了,前面的內(nèi)容是給不熟悉QuartusII的同學(xué)熱身用的。這里都是假定同學(xué)們已經(jīng)熟悉了QuartusII基本操作,會使用原理圖設(shè)計(jì)

22、方法設(shè)計(jì)電路,并且會使用MegaWizard添加標(biāo)準(zhǔn)模塊,會分層設(shè)計(jì)電路。需要說明的是,我們選擇使用原理圖的設(shè)計(jì)方法,是考慮與羅老板的課件相結(jié)合,能夠?qū)φ誏ogisim的操作,使同學(xué)們在學(xué)會使用Logisim軟件仿真設(shè)計(jì)出一個(gè)CPU后,平滑的過度過來。另外原理圖的設(shè)計(jì)更加直觀一點(diǎn),更容易入門。當(dāng)然由于實(shí)際設(shè)計(jì)中主流的方式還是使用硬件設(shè)計(jì)語言,推薦大家了解一下Verilog HDL,VHDL或System C等語言。1,設(shè)計(jì)總攬我們這里設(shè)計(jì)的是一個(gè)簡單的16位處理器(即每個(gè)指令字長為16位,寄存器也是16位),該處理器有四個(gè)寄存器($r0到$r3)。具有獨(dú)立的數(shù)據(jù)和指令內(nèi)存(即有兩個(gè)內(nèi)存,一個(gè)指

23、令內(nèi)存,一個(gè)數(shù)據(jù)內(nèi)存)。需要注意的是由于器件的限制,也為了讓事情更簡單一些,我們以半字(16位)為單位對內(nèi)存編址。這和MIPS 不同,MIPS指令是字長是32位,而內(nèi)存是以字節(jié)(8位)為單位編址。2,準(zhǔn)備步驟第一步:熟悉一下QuartusII的操作,這個(gè)在前面我們已經(jīng)完成了,對應(yīng)于Logisim中操作都介紹到了,后面完成Proj3所需要的技術(shù)也都具備了(當(dāng)然,想深入的了解數(shù)字電路設(shè)計(jì),可能需要更多),也就是說如果能夠用Logisim完成Proj3,用QuartusII實(shí)現(xiàn)也不再話下。第二步:做一下相關(guān)的實(shí)驗(yàn),了解QuartusII下的一些模塊和組件,如何建立簡單模塊,如何將簡單模塊構(gòu)建到一起,

24、成為復(fù)雜的模塊,直至成為一個(gè)系統(tǒng)。MegaWizard中提供的是數(shù)字電路中常見的標(biāo)準(zhǔn)模塊,我們的設(shè)計(jì)中要用到其中一些模塊,所以熟悉他們,熟練應(yīng)用是完成設(shè)計(jì)的前提。3, 閱讀ISA第三步:閱讀ISAISA(Instruction Set Architecture)是硬件設(shè)計(jì)師跟軟件設(shè)計(jì)師之間的協(xié)議,他規(guī)定了硬件設(shè)計(jì)師設(shè)計(jì)的CPU所需要具備的功能,以及軟件設(shè)計(jì)師所能夠使用的CPU指令。設(shè)計(jì)一個(gè)CPU首先要設(shè)計(jì)一個(gè)ISA,之后才是軟硬件設(shè)計(jì):軟件設(shè)計(jì)師設(shè)計(jì)匯編器,編譯器;硬件設(shè)計(jì)師設(shè)計(jì)CPU。我們需要的ISA在Proj3這里已經(jīng)給出了,如下表:通過查詢 opcode字段(高四位,即15-12位)的值

25、,可知半字編碼所對應(yīng)的指令。注意,表中的opcode不到16個(gè),而funct也不到8個(gè)。原因是指令少一些,使同學(xué)們更容易實(shí)現(xiàn)(呵呵,好象比老師上課講的CPU指令數(shù)還是多了很多)。(如果需要更加細(xì)致的了解原理,請認(rèn)真學(xué)習(xí)羅老板課件中關(guān)于單指令周期CPU設(shè)計(jì)的這幾節(jié)課的內(nèi)容。)我們可以了解到需要實(shí)現(xiàn)的幾個(gè)基本模塊:1, 指令指針寄存器PC2, 指令存儲器ROM3, 寄存器文件4, ALU5, 內(nèi)存單元6, 控制邏輯單元一個(gè)大體的CPU的結(jié)構(gòu)圖:4,總結(jié)從分析結(jié)果來看,我們需要的實(shí)現(xiàn)的幾個(gè)模塊都在圖中表現(xiàn)出來了,他們之間的關(guān)系也基本如上圖所示,更詳細(xì)的說明請參考羅老板的課件吧。我們要設(shè)計(jì)中可能用到的

26、庫中的模塊有以下幾種,寄存器模塊,RAM,ROM,算術(shù)以及邏輯運(yùn)算單元比如加法器,移位,與或門等。當(dāng)然還有前面我們講到的數(shù)據(jù)選擇器,這個(gè)會在Controller中用到,另外在每個(gè)單元模塊前做數(shù)據(jù)選擇也會用到。第四步:制作一個(gè)寄存器組(也稱寄存器文件)模塊(組件)。1,輸入與輸出根據(jù)前面設(shè)計(jì)總攬中得到的模塊間的關(guān)系,設(shè)計(jì)出輸入輸出端口,包括rs,rt,rw,另外是rsBus,rtBus,當(dāng)然還有使能控制,時(shí)鐘,reset等。2,寄存器作為第一小步你可以先放四個(gè)寄存器,然后做出一個(gè)輸出,即可選擇四個(gè)寄存器中的任意一個(gè)的值輸出。注意:用MegaWizard生成模塊文件的時(shí)候,別忘了加一個(gè)后綴,因?yàn)檫@

27、里都是子模塊設(shè)計(jì),后面要應(yīng)用到頂層設(shè)計(jì)中去,為避免各個(gè)子模塊設(shè)計(jì)中引入的標(biāo)準(zhǔn)模塊文件重名,推薦加一個(gè)子模塊名字的后綴,例如lpm_dff_reg0,就表示reg模塊中引入的lpm_dff模塊。3, 輸入輸出數(shù)據(jù)選擇器四個(gè)寄存器不能同時(shí)全部加到兩個(gè)數(shù)據(jù)輸出端口rsBus和rtBus上,rwBus一次也只能對一個(gè)寄存器寫入,那么就需要相應(yīng)的數(shù)據(jù)選擇以及寫使能控制。4, 整體設(shè)計(jì)全部完成好的原理圖如下:各個(gè)部分之間的關(guān)系如結(jié)構(gòu)框圖:5, 總結(jié)從設(shè)計(jì)一開始要養(yǎng)成良好的繪圖習(xí)慣,以結(jié)構(gòu)清晰為原則,設(shè)計(jì)按照一定順序完成,比如這里的順序就是:輸入輸出端口>核心模塊>數(shù)據(jù)通路控制另外將各部分功能用

28、注釋文字標(biāo)好,方便閱讀。書接上回第四步:制作一個(gè)ALU輸入輸出端口ALU的輸入輸出相對簡單,輸入是兩個(gè)操作數(shù)和一個(gè)操作符,輸出是計(jì)算結(jié)果。各運(yùn)算單元為了節(jié)省片上資源,加減法器使用一個(gè),用一根選擇線控制加或減,邏輯左右移位也是用一根選擇線控制左右移。數(shù)據(jù)通路選擇上面的各運(yùn)算單元是并行工作的,對于輸入的兩個(gè)操作數(shù),幾個(gè)運(yùn)算單元都會計(jì)算結(jié)果,至于輸出哪一個(gè),要通過后面的數(shù)據(jù)選擇器來控制了。選擇器的選擇開關(guān)接的是操作符,這樣輸出結(jié)果就是操作數(shù)對應(yīng)的操作運(yùn)算得到的的結(jié)果了。第五步:制作一個(gè)PC指針寄存器4,PC指針寄存器關(guān)于PC指針的操作很多,有一般指令所需的PC+1操作(這里是+1操作,與課件中+4稍

29、有不同,因?yàn)槲覀兒竺嬖O(shè)計(jì)ROM的時(shí)候按16位數(shù)據(jù)線設(shè)計(jì),每個(gè)地址存儲的是16位數(shù)據(jù),那么PC+1就能讀取完整的一條指令),另外還有絕對跳轉(zhuǎn)需要的PC = (PC & 0xF000) | address,beq和bne指令所需的PC = PC + 1 + offset。設(shè)計(jì)模塊要求模塊完成的功能盡量單一,模塊的功能定義要清楚,上面跳轉(zhuǎn)所需的address,判斷所需的offset都是從指令中提取的,全部設(shè)計(jì)到PC寄存器模塊中來,會使設(shè)計(jì)一下子變得復(fù)雜。在實(shí)現(xiàn)PC寄存器模塊時(shí),需要更多的外部信息,從而使頂層設(shè)計(jì)的修改會影響到子電路。所以PC寄存器就是由輸入輸出端口和一個(gè)寄存器組成,其余部分要

30、放到控制邏輯和頂層設(shè)計(jì)中去。5,總結(jié)ALU暫時(shí)可以僅實(shí)現(xiàn)ADD,SUB,AND,OR以及移位,比較運(yùn)算,將來再擴(kuò)展更多功能。(對于各種運(yùn)算單元有兩種辦法實(shí)現(xiàn),其一是自己用基本的與或非門電路搭建,其二是直接使用QuartusII的MegaWizard庫實(shí)現(xiàn))。PC寄存器的實(shí)現(xiàn)也很簡單,基本在前面的基礎(chǔ)上,完成一個(gè)ALU和一個(gè)PC寄存器不會遇到任何困難,我們這里關(guān)注的是模塊的劃分,模塊功能的定義,高內(nèi)聚,低耦合的設(shè)計(jì)不只是軟件設(shè)計(jì)中提倡的,這也是硬件設(shè)計(jì)中推薦的。原來很多道理是相通的數(shù)據(jù)存儲在RAM里,程序存儲在ROM里,這是大家經(jīng)常聽到的,那么怎么設(shè)計(jì)一個(gè)存儲數(shù)據(jù)的RAM和一個(gè)存儲程序的ROM呢

31、.這里我們就來親手試驗(yàn)一下。有一點(diǎn)要說明的QuartusII中提供的ROM和Logisim中提供的ROM模塊有一點(diǎn)點(diǎn)不同,他們相差一根時(shí)鐘線,雖然只有這一點(diǎn)不同,但卻是很重要的一點(diǎn),這就涉及到了一個(gè)組合邏輯實(shí)現(xiàn)的ROM與時(shí)序邏輯實(shí)現(xiàn)的ROM的區(qū)別。這里給出了QuartusII中的兩種實(shí)現(xiàn)方式,一種是用庫中提供的模塊,另一種是組合邏輯的實(shí)現(xiàn)方式,關(guān)于兩者的不同究竟會產(chǎn)生怎樣的影響,后面我們再詳細(xì)討論。第六步:實(shí)現(xiàn)一個(gè)RAM直接上圖吧,基本操作的問題不多敘述了,有問題的話請查看前面的學(xué)習(xí)或者參考QuartusII的教程。第七步:ROM的實(shí)現(xiàn)用組合邏輯實(shí)現(xiàn)ROM的方法用組合邏輯實(shí)現(xiàn)的ROM其本質(zhì)是電

32、路,如果感覺難以理解,你可以認(rèn)為你的程序就是一堆門電路按某種順序排列表示出來的,而不是存在真正意義的存儲器當(dāng)中,我們寫程序的時(shí)候其實(shí)是搭建了一個(gè)電路。這里給出一種實(shí)現(xiàn)方法這是一個(gè)16個(gè)字的16位ROM,是用選擇器實(shí)現(xiàn)的(前面說過了選擇器是個(gè)有用的好東西),由于只有16個(gè)存儲單元,所以4位地址就能表示出來,ROM中的內(nèi)容就是接到選擇器data0x到data15x上的數(shù)據(jù),每一次對ROM的編程寫入,就是將綜合的電路下載到FPGA實(shí)驗(yàn)板中。2,用時(shí)序電路實(shí)現(xiàn)ROM實(shí)際的ROM應(yīng)該是可以在系統(tǒng)編程的,也就是說不改變電路結(jié)構(gòu),能夠把程序?qū)懭隦OM。在QuartusII軟件中庫提供的ROM是時(shí)序電路實(shí)現(xiàn)的

33、,我們時(shí)序電路實(shí)現(xiàn)的ROM跟RAM的形式是一樣的,看圖就知道了。其實(shí)在QuartusII中ROM也是通過一個(gè)RAM實(shí)現(xiàn)的,引入的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 (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGI

34、C_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END COMPONENT;這里altsyncram經(jīng)過封裝,也就是MegaWizard的配置,引出相應(yīng)的引腳,就成了一個(gè)ROM模塊交給我們,在我們設(shè)計(jì)中調(diào)用了(上面是一段VHDL語言的代碼,關(guān)于VHDL語言就不在這里詳細(xì)介紹了)。最后需要注意的是這個(gè)ROM模塊用到我們頂層設(shè)計(jì)的時(shí)候不能用CPU的時(shí)鐘,而是單獨(dú)為其提供一個(gè)刷新輸出數(shù)據(jù)的高速時(shí)鐘。在介紹完整個(gè)CPU后,我們會把這樣做的原因連同說明組合邏輯與時(shí)序邏輯實(shí)現(xiàn)ROM的不同一起討論。當(dāng)然如果你現(xiàn)在有興趣可以在自己的

35、CPU設(shè)計(jì)中使用這個(gè)ROM模塊的時(shí)候?yàn)槠浼由螩PU的時(shí)鐘,看看效果。1,再次推薦使用庫在設(shè)計(jì)中,推薦大家使用庫中的模塊,因?yàn)閹熘械哪K都是經(jīng)過精心設(shè)計(jì)驗(yàn)證好的電路,并在長期的設(shè)計(jì)實(shí)踐中反復(fù)驗(yàn)證的成熟方案,另外還有可能經(jīng)過了專門的優(yōu)化。比如下面我們將用到一個(gè)比較典型的模塊選擇器,選擇器的一個(gè)比較典型的應(yīng)用是根據(jù)已知邏輯關(guān)系,通過選擇通路數(shù)據(jù)得出電路,就是說如果知道真值表的話,選擇的通路設(shè)定為常量,選擇開關(guān)為輸入的邏輯值,通過這種類似解碼的電路結(jié)構(gòu)很容易的實(shí)現(xiàn)組合邏輯的功能,并且在程序、電路結(jié)構(gòu)上有很好的可讀性,結(jié)構(gòu)也很清晰。在下面控制邏輯開關(guān)表中,我們就使用了這種方法。2,推薦的指令實(shí)現(xiàn)順序這里

36、給一個(gè)推薦指令的實(shí)現(xiàn)順序:lui和ori指令andi和addi指令R指令j指令beq,bne,lw和sw指令3,頂層設(shè)計(jì)的條理按照老師課上講的CPU的幾個(gè)模塊,大致也為頂層設(shè)計(jì)劃分出幾塊來,每一塊的核心是前面設(shè)計(jì)的模塊電路,由于要增加控制邏輯以及對輸入數(shù)據(jù)進(jìn)行處理,信號進(jìn)入模塊前,先通過選擇端連接控制邏輯的選擇器,根據(jù)指令不同,控制邏輯打開關(guān)閉不同的開關(guān),控制選擇輸入每個(gè)模塊的數(shù)據(jù)。大致的示意圖為這樣模塊間數(shù)據(jù)是各個(gè)核心模塊的輸出,由于核心模塊是采用的標(biāo)準(zhǔn)的庫模塊設(shè)計(jì)的,其輸出數(shù)據(jù)的形式是標(biāo)準(zhǔn)的易被多數(shù)人接受的,從而使我們不必更多的考慮分塊間數(shù)據(jù)的表示形式,無需再依賴更多的外部信息。頂層設(shè)計(jì)是

37、由這樣一個(gè)一個(gè)的分塊電路組成的,這是整個(gè)頂層設(shè)計(jì)圖其中輸入選擇都是由選擇器實(shí)現(xiàn)的,可見選擇器在設(shè)計(jì)中的應(yīng)用是十分頻繁的。接下來對于一條條的指令,就是控制一個(gè)個(gè)選擇器選擇哪個(gè)數(shù)據(jù)輸入到模塊中了,控制邏輯就是把指令譯碼為一個(gè)個(gè)的通路選擇開關(guān)。我們把各部分模塊控制參數(shù)的信息集中到這里,各個(gè)控制位的設(shè)定情況可以通過下表得出:根據(jù)表中的信息,控制邏輯開關(guān)表電路也是用一個(gè)選擇器實(shí)現(xiàn),下圖中給出了一個(gè)實(shí)現(xiàn)方法,圖中可以清晰的從表中的位開關(guān)設(shè)置找到對應(yīng)的數(shù)據(jù)位。4,寫程序測試在你完成了CPU設(shè)計(jì)后,需要編寫程序在CPU上運(yùn)行以測試CPU能否工作。試著將以下匯編指令翻譯成機(jī)器碼:add $2,$1,$0add

38、$1,$1,$0add $1,$2,$0然后將機(jī)器碼存入指令內(nèi)存中。如果你成功地完成了此最簡單的CPU,則時(shí)鐘每跳一次,將執(zhí)行一條指令。為了你看到一些有意義的結(jié)果,你可能需要手動(dòng)設(shè)置一下各個(gè)寄存器的初值,這在仿真中可以較容易的實(shí)現(xiàn),如將寄存器1的值設(shè)為1,寄存器2的值設(shè)為2,寄存器3的值設(shè)為3。但是硬件實(shí)現(xiàn)時(shí)候就要想一些別的方法了,前面推薦大家優(yōu)先實(shí)現(xiàn)lui和ori指令就是這個(gè)道理。首先讓你的CPU能運(yùn)行l(wèi)ui和ori指令是非常重要的,因?yàn)樵诔绦蛑型ㄟ^他們使CPU中的寄存器載入數(shù)據(jù),讓其他測試的數(shù)據(jù)初始化成為可能。在前面最后組合各功能模塊,實(shí)現(xiàn)每條命令的控制邏輯時(shí)強(qiáng)烈推薦優(yōu)先完成這兩條指令,待

39、這兩條指令工作正常后,就可以用來測試其他指令了。為了更好的觀察輸出結(jié)果一個(gè)數(shù)碼管顯示是必要的,應(yīng)用這種選擇器似的解碼電路就能實(shí)現(xiàn),選擇端輸入的要顯示的16進(jìn)制數(shù)據(jù),各數(shù)據(jù)通路上的常量為0f的數(shù)碼管字段編碼,這是一個(gè)典型的譯碼電路實(shí)現(xiàn),當(dāng)然使用ROM查表的方法也可以實(shí)現(xiàn),不過要多一個(gè)刷新時(shí)鐘,前面我們實(shí)現(xiàn)過數(shù)碼管的譯碼電路了,使用它就可以了。寫幾個(gè)程序測試你的CPU,把一條條指令都調(diào)試好,至此,你的Proj3中的CPU設(shè)計(jì)作業(yè)就完成了。前面我們以盡量快的速度完成了Proj3的任務(wù),但是還有一些問題遺留下來,這里我們就來討論下這些問題。1, Logisim與QuartusII的比較前面已經(jīng)提到,使

40、用QuartusII進(jìn)行數(shù)字電路設(shè)計(jì),更多情況下使用的是硬件描述語言,硬件描述語言功能更加強(qiáng)大,標(biāo)準(zhǔn)更加規(guī)范,應(yīng)用十分廣泛。這里選擇使用原理圖的設(shè)計(jì)描述方式是為了讓我們?nèi)菀椎膹腖ogisim過渡過來。從前面的內(nèi)容來看,我們實(shí)驗(yàn)課上使用到的Logisim軟件實(shí)現(xiàn)Proj3中CPU的設(shè)計(jì)所涉及到的操作,在QuartusII中對應(yīng)的實(shí)現(xiàn)方式都一一對應(yīng)的演示了,當(dāng)然QuartusII軟件的庫中包含的電路模塊可能會與Logisim中的有所差別。Logisim是一款可視化的仿真軟件,我們也是在學(xué)習(xí)羅老板的計(jì)算機(jī)組成原理課上第一次了解到的,基本算是實(shí)驗(yàn)用的,實(shí)驗(yàn)演示很方便。QuartusII是Altera公

41、司用于自家器件設(shè)備的數(shù)字電路設(shè)計(jì)的軟件,我們做實(shí)驗(yàn)用的DE2板子上的FPGA芯片就是Altera公司的,QuartusII軟件可以完成硬件電路設(shè)計(jì)的整個(gè)流程。Logisim的仿真表現(xiàn)效果比較直觀,直接通過點(diǎn)擊就能完成輸入輸出設(shè)定,模塊間連線上的電平在電路實(shí)時(shí)運(yùn)行中通過連線顏色表示出來。寄存器,RAM中的數(shù)據(jù)都能進(jìn)行設(shè)定,包括在電路實(shí)時(shí)運(yùn)行時(shí)。QuartusII中仿真的方式也很多,比如自帶波形仿真功能,另外可以使用第三方的仿真軟件如ModelSim等。但是如果想直觀的觀察電路實(shí)時(shí)運(yùn)行狀態(tài)則不太容易,無論是設(shè)定電路初始狀態(tài),修改寄存器與RAM中的存儲內(nèi)容等,都不是很容易,所以要先實(shí)現(xiàn)一些簡單模塊,并設(shè)法將電路運(yùn)行狀態(tài)通過外部設(shè)備表現(xiàn)出來,設(shè)定一些調(diào)試開關(guān),幫助設(shè)定電路狀態(tài)。2, 為什么是時(shí)序邏輯的ROM這個(gè)問題可以這樣解釋,組合電路的ROM相當(dāng)于使用電路搭建的,向ROM中寫入一個(gè)程序,就相當(dāng)于做一個(gè)電路。我們使用計(jì)算機(jī),寫一個(gè)程序進(jìn)CPU,應(yīng)該是能夠在系統(tǒng)的把程序下載到ROM中,而不是把這個(gè)CPU拆了,重新設(shè)計(jì)一個(gè),這樣來說,用

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論