![如何使用logisim_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/30/cb694223-06a7-4b7e-929b-89248aa775da/cb694223-06a7-4b7e-929b-89248aa775da1.gif)
![如何使用logisim_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/30/cb694223-06a7-4b7e-929b-89248aa775da/cb694223-06a7-4b7e-929b-89248aa775da2.gif)
![如何使用logisim_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/30/cb694223-06a7-4b7e-929b-89248aa775da/cb694223-06a7-4b7e-929b-89248aa775da3.gif)
![如何使用logisim_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/30/cb694223-06a7-4b7e-929b-89248aa775da/cb694223-06a7-4b7e-929b-89248aa775da4.gif)
![如何使用logisim_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/30/cb694223-06a7-4b7e-929b-89248aa775da/cb694223-06a7-4b7e-929b-89248aa775da5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Logisim的簡(jiǎn)單入門(mén)一,準(zhǔn)備工作參考:羅老板的計(jì)算機(jī)結(jié)構(gòu)與組成課程Machine Structures. Spring 2010, UC Berkeley/cs61c/sp10/軟件環(huán)境:Logisim仿真軟件(需要JAVA虛擬機(jī))/burch/logisim/QuartusII 8.1硬件環(huán)境:PC機(jī)with Windows XPDE2開(kāi)發(fā)板(DE2 Development and Education Board User Manual)參考書(shū):Computer.Organiza
2、tion.and.Design關(guān)于QuartusII的使用教程先來(lái)以一個(gè)與門(mén)電路的實(shí)驗(yàn),來(lái)看一下基本的操作,在Logisim中一個(gè)與門(mén)電路生成過(guò)程如下:1.按與門(mén)的選擇按鈕,添加一個(gè)與門(mén)到電路中。2.使用按鈕添加一個(gè)輸入引腳,用于設(shè)置輸入電平。3.添加一個(gè)引腳,通過(guò)屬性中設(shè)置Pin的屬性為輸出:這樣得到一個(gè)輸出引腳。4.移動(dòng)以上添加的元素,得到原理圖:注意選中按鈕,此時(shí)可以拖拽連線,那么我們把電路各部分連接如下:5. 接下來(lái)通過(guò)選中按鈕就可以鼠標(biāo)點(diǎn)擊設(shè)定輸入管腳上的電平為1或0了,輸出引腳也會(huì)相應(yīng)改變,輸出結(jié)果。當(dāng)然通過(guò)左下方的屬性設(shè)定,還可以設(shè)定當(dāng)前選擇元件的朝向,數(shù)據(jù)位數(shù),輸入端口數(shù)等參數(shù)
3、。6.另外推薦大家后面設(shè)計(jì)的時(shí)候使用一下tunnel這個(gè)工具,代替復(fù)雜的連線,在后面復(fù)雜設(shè)計(jì)的地方,讓你從蜘蛛網(wǎng)一樣的連線中解脫出來(lái),例如上面的電路可以這樣表示:圖中輸入,與門(mén)模塊,輸出三部分結(jié)構(gòu)分的很清晰,tunnel的使用使我們的電路設(shè)計(jì)更加規(guī)范,類(lèi)似logisim中的tunnel工具在其他原理圖工具中類(lèi)似的工具是經(jīng)常見(jiàn)到的,雖然名字會(huì)有不同,用途是一樣的。7.最后是子電路添加方法,選擇Project->Add Circuit,如下圖“:子電路的繪制與上面基本相同,注意的是輸入輸出引腳要連接Pin引腳,并設(shè)定好輸入輸出屬性。右擊子電路選擇Edit Circuit Appearance
4、可以調(diào)整子電路的外觀,通過(guò)拖拽將外觀調(diào)整好,后面加到上層電路設(shè)計(jì)中的時(shí)候就不會(huì)顯得布線擁擠了。顯然上面的要比下面的元件效果好一些。以上描述的這些技巧與繪制規(guī)范整齊的原理圖是關(guān)系密切的,后面實(shí)際應(yīng)用中設(shè)計(jì)復(fù)雜電路時(shí)會(huì)突出顯現(xiàn)出來(lái)。 幾個(gè)關(guān)鍵的地方:1,請(qǐng)盡量使用標(biāo)準(zhǔn)模塊,如果需要建立自己的模塊,請(qǐng)學(xué)習(xí)標(biāo)準(zhǔn)模塊的設(shè)計(jì)風(fēng)格。2,請(qǐng)合理劃分層次,清楚定義輸入輸出端口,盡量使定義的風(fēng)格和規(guī)范保持一致。3,請(qǐng)使用網(wǎng)絡(luò)標(biāo)識(shí)代替直接連線,會(huì)使你的原理圖更加清晰易讀。4,為每個(gè)模塊設(shè)計(jì)測(cè)試用例,用于測(cè)試和說(shuō)明其使用方法。5,這里用的軟件比羅老板課上用的版本高一點(diǎn),操作有細(xì)微差別。打開(kāi)QuartusII
5、軟件,程序主界面如下:1, 新建一個(gè)工程點(diǎn)擊File>New Project Wizard,打開(kāi)創(chuàng)建新工程向?qū)?,這里你將完成工程的基本設(shè)定選項(xiàng)。1, Project name and directory工程的名稱(chēng)與目錄2, Name of the top-level design entity頂層設(shè)計(jì)實(shí)體的名稱(chēng)3, Project files and libraries項(xiàng)目文件與庫(kù)4, Target device family and device目標(biāo)設(shè)備的族類(lèi)5, EDA tool settingsEDA工具設(shè)定這里一般設(shè)定好工程名稱(chēng)和目錄,頂層設(shè)計(jì)實(shí)體名稱(chēng)以及目標(biāo)設(shè)備族類(lèi)就可以了,其
6、他的暫時(shí)直接使用默認(rèn)項(xiàng)就可以了。2, 新建一個(gè)設(shè)計(jì)文件通過(guò)點(diǎn)擊File>New打開(kāi)新建文件選擇框,由于我們這里使用原理圖描述實(shí)現(xiàn)的,則文件類(lèi)型選擇Design Files>Block Diagram/Schematic File,就新建了一個(gè)原理圖文件,將其保存起來(lái),注意命名要跟前面設(shè)置的頂層設(shè)計(jì)實(shí)體名稱(chēng)相同。3, 編寫(xiě)設(shè)計(jì)文件接下來(lái)開(kāi)始在文件中繪制原理圖,這里首先完成與門(mén)的添加,點(diǎn)擊左側(cè)工具欄中的Symbol Tool按鈕,打開(kāi)Symbol選擇框,選擇primitives>logic>and2,點(diǎn)擊OK后即可在原理圖中添加一個(gè)2輸入的與門(mén)了。在同樣通過(guò)Symbol T
7、ool中的加入和primitives>pin>output加入輸入和輸出引腳,然后在原理圖中把他們用Orthogonal Node Tool即導(dǎo)線連接起來(lái),雙擊輸入輸出引腳,為他們?cè)O(shè)定好名字,pinA,pinB,pinC,就完成了原理圖中的設(shè)計(jì)。4, 編譯(分析綜合)點(diǎn)擊Processing>Start>Start Analysis & Synthesis,進(jìn)行分析綜合,就好像是對(duì)程序進(jìn)行編譯,等待片刻,如果沒(méi)有錯(cuò)誤,編譯報(bào)告會(huì)輸出出來(lái)。5, 配置管腳接下來(lái)配置管腳,就是設(shè)定剛才加入的輸入輸出管腳與實(shí)驗(yàn)板上FPGA芯片外部引腳之間的對(duì)應(yīng)關(guān)系,設(shè)定好這個(gè),我們?cè)O(shè)計(jì)
8、的與門(mén)電路才能通過(guò)FPGA外部引腳與實(shí)驗(yàn)板上的其他設(shè)備連接起來(lái),我們才好觀察到電路的設(shè)計(jì)效果。點(diǎn)擊Assignment>Pins,打開(kāi)Pin Planner設(shè)定框,這里查看實(shí)驗(yàn)板的說(shuō)明文件,我們使用兩個(gè)撥動(dòng)開(kāi)關(guān)來(lái)連接輸入引腳,用一個(gè)led燈來(lái)連接輸出引腳,對(duì)照說(shuō)明中的表格,為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
9、pins設(shè)定為As output drivingground。因?yàn)槲覀兊脑O(shè)計(jì)最終會(huì)以電路的表達(dá)形式工作,錯(cuò)誤的設(shè)計(jì)極其容易導(dǎo)致實(shí)驗(yàn)板的損壞。6, 下載程序當(dāng)然我們實(shí)際設(shè)計(jì)中可能會(huì)用到波形仿真工具進(jìn)行驗(yàn)證,進(jìn)行時(shí)間分析驗(yàn)證,甚至要設(shè)定布局布線等工作,反復(fù)迭代修正,才能完成一個(gè)復(fù)雜電路的設(shè)計(jì),不過(guò)這里這個(gè)與門(mén)的demo很簡(jiǎn)單,完成以上設(shè)計(jì)工作后,可以開(kāi)始編譯了,點(diǎn)擊Processing>Start Compilation開(kāi)始吧。如果沒(méi)有錯(cuò)誤,輸出編譯報(bào)告,就可以準(zhǔn)備下載到實(shí)驗(yàn)板上去了。點(diǎn)擊Tool>Programmer,打開(kāi)下載工具。這里我們選擇使用JTAG的下載方式,注意先給實(shí)驗(yàn)板上
10、電,點(diǎn)擊Start開(kāi)始,等待片刻,走完下載進(jìn)度條,下載完成。7, 完成現(xiàn)在你可以在實(shí)驗(yàn)板上通過(guò)SW0和SW1來(lái)設(shè)定與門(mén)的輸入了,實(shí)驗(yàn)板上的LEDR0相應(yīng)的亮或者滅。我們實(shí)現(xiàn)的與門(mén)在哪呢?就在你面前實(shí)驗(yàn)板的芯片中,實(shí)際上實(shí)驗(yàn)板的芯片中有很多電路單元,通過(guò)我們的編程選擇我們需要的電路單元用連線連接起來(lái),在通過(guò)配置引腳連接到FPGA芯片的外部引腳上,F(xiàn)PGA是焊接在PCB板上的,PCB板上的銅線把FPGA引腳與外部設(shè)備比如開(kāi)關(guān),發(fā)光二極管等連接起來(lái),我們的電路就真正的連接到了這個(gè)系統(tǒng)當(dāng)中了。他們之間的連接關(guān)系在圖中表示出來(lái)。8,總結(jié)經(jīng)過(guò)了這么多繁雜的步驟,我們僅僅完成的是一個(gè)簡(jiǎn)單的與門(mén)電路,好在通過(guò)
11、這個(gè)過(guò)程我們只是了解一下FPGA設(shè)計(jì)的基本過(guò)程與簡(jiǎn)單操作,熟悉了這個(gè)流程,以上步驟還是很清楚的,而且實(shí)現(xiàn)一個(gè)復(fù)雜的設(shè)計(jì)也基本是沿這個(gè)過(guò)程走的。后面我們用FPGA實(shí)現(xiàn)一個(gè)CPU也可以這樣下載到FPGA芯片當(dāng)中,這可是一個(gè)真正的電路,真正工作的CPU,麻雀雖小五臟俱全,不再是僅僅在電腦上仿真了,你必然會(huì)滿心歡喜。而且實(shí)際中,這樣的設(shè)計(jì)(當(dāng)然還有一些其他的工作要做),是能夠送到工廠中去生產(chǎn)真正的ASIC專(zhuān)用電路,也就是真正的,我們能摸到能使用的CPU,會(huì)有這樣的一天。1, 使用MegaWizard添加一個(gè)RAM模塊。RAM模塊屬于原理圖設(shè)計(jì)中一個(gè)較為復(fù)雜的模塊,并非如一個(gè)簡(jiǎn)單的二輸入與門(mén)那樣直接添加
12、就可以了,還有一些參數(shù)需要配置和設(shè)定。在QuartusII中添加一個(gè)類(lèi)似RAM的復(fù)雜模塊需要用到MegaWizard,通過(guò)使用MegaWizard添加一個(gè)RAM模塊,可以了解如何用MegaWizard為庫(kù)提供的模塊配置參數(shù)。依然是使用Symbol tool打開(kāi)添加模塊對(duì)話框,MagaWizard的模塊多數(shù)在megafunctions目錄下,我們使用的是megafunctions>storage>lpm_ram_dq,勾選上Launch MegaWizard Plug-In,OK,打開(kāi)MegaWizard Plug-In Manager,選擇為庫(kù)文件生成的文件類(lèi)型,有AHDL語(yǔ)言,V
13、HDL語(yǔ)言和Verilog HDL語(yǔ)言三種選擇,根據(jù)需要和自己對(duì)他們的熟悉程度選擇,設(shè)定為其生成的目錄文件,建議生成到工程所在目錄下,并在其名稱(chēng)基礎(chǔ)上加上些有意義的后綴。接下來(lái)是關(guān)于模塊具體參數(shù)的設(shè)定,不同的模塊會(huì)有所不同,這里請(qǐng)先按照?qǐng)D中的配置方式選擇,使用8位容量32個(gè)字的RAM,不帶有輸出口寄存功能。為了讓RAM有一個(gè)初始值,我們要為其寫(xiě)個(gè)初始化數(shù)據(jù)文件,下面選中Yes, use this file for the memory content data,并設(shè)定好文件路徑名稱(chēng)。下一步是生成文件的清單,最后Finish將生成模塊添加到設(shè)計(jì)文件中。2,添加總線與提取總線上一位數(shù)據(jù)的方法。以上
14、是通過(guò)MegaWizard添加模塊的方法,用相同的方法,我們可以添加lpm_add_sub模塊。本例中涉及到的就是以上兩種模塊,通過(guò)聯(lián)系和實(shí)踐,可以測(cè)試試驗(yàn)一下其他的模塊。接下來(lái)添加輸入輸出引腳,這個(gè)前面介紹過(guò),這里有點(diǎn)不同的是,輸出引腳是8位的,這個(gè)在命名的時(shí)候后面加上7.0就表示是個(gè)8位的輸出,例如fib_res7.0,如果要用到其中一位就是名字加上下方括號(hào)跟標(biāo)號(hào),例如fib_res5。3,用手動(dòng)按鈕作為時(shí)鐘信號(hào)測(cè)試。實(shí)驗(yàn)板上的時(shí)鐘太快了,不利于我們觀察,那就用仿真時(shí)學(xué)的辦法,加一個(gè)輸入按鈕,模擬時(shí)鐘,按一下,時(shí)鐘跳一下,于是加了一個(gè)輸入引腳,用于連接實(shí)驗(yàn)板上的按鈕開(kāi)關(guān)。輸入引腳后面要加一
15、個(gè)非門(mén),因?yàn)閷?shí)驗(yàn)板上松開(kāi)按鈕時(shí)候輸入是高電平,所以用一個(gè)非門(mén)也就是反相器來(lái)取反向。需要指出的是,用手動(dòng)按鈕做時(shí)鐘信號(hào)來(lái)測(cè)試是一個(gè)權(quán)宜的方法,實(shí)際的設(shè)計(jì)中是不推薦的,包括組合電路的輸出用做時(shí)鐘信號(hào)都是不好的設(shè)計(jì)習(xí)慣,因?yàn)闀r(shí)序電路工作的時(shí)鐘要求波形穩(wěn)定,組合邏輯電路中產(chǎn)生波形的毛刺對(duì)其工作影響較大,造成錯(cuò)誤的數(shù)據(jù)或不可預(yù)測(cè)的結(jié)果。4,常量的加入。由于加入的ram模塊至少含有32個(gè)字的存儲(chǔ),只需用到其中一個(gè),地址線置零就可以了,每次時(shí)鐘來(lái)臨都進(jìn)行寫(xiě)入操作,那么寫(xiě)入使能始終設(shè)為Enable。那么這些常量該怎么設(shè)定呢?在原理圖設(shè)計(jì)中,有GND和VCC兩個(gè)常量,分別代表邏輯1和邏輯0,將他們引入到電路中就
16、可以了,多位數(shù)據(jù)合并到一條總線上是將各位數(shù)據(jù)用逗號(hào)隔開(kāi),添加到總線命名中。5,讓你的電路更加清晰。前面介紹到,當(dāng)電路規(guī)模愈加復(fù)雜時(shí),將各模塊直接連接到一起會(huì)嚴(yán)重影響其清晰美觀,那么推薦的方式是采用網(wǎng)絡(luò)標(biāo)識(shí)的形式,也可以為GND,VCC添加一個(gè)網(wǎng)絡(luò)標(biāo)識(shí),把他們改名為b1和b0如圖,那么內(nèi)存地址我們可以寫(xiě)為b0 ,b0, b0, b0,b0。再把上圖整理一下,看看效果是否好一點(diǎn)了。6,初始化RAM中數(shù)據(jù)7,波形仿真工具這里在學(xué)習(xí)一下使用QuartusII自帶的波形仿真工具,新建一個(gè)Vector Waveform File。在圖中位置右擊,搜索添加Node和Bus,在Insert Node or B
17、us框中點(diǎn)擊Node Finder按鈕,彈出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í)鐘輸入。在編譯過(guò)整個(gè)工程后,如無(wú)錯(cuò)誤,點(diǎn)擊Start Simulation,片刻后,仿真波形輸出出來(lái),仿真結(jié)果如圖,由于只是8位存儲(chǔ)器,所以233后面的數(shù)結(jié)果會(huì)有問(wèn)題,但是仿真結(jié)果與我們?cè)O(shè)計(jì)的電路所應(yīng)得到的輸出效果是一致的。8, 總結(jié)這里我們學(xué)習(xí)了利用MegaWizard添加megafunctions庫(kù)中的復(fù)
18、雜模塊,學(xué)習(xí)了如何使用Node和Bus,以及如何使用節(jié)點(diǎn)標(biāo)識(shí)取代直接連線,是原理圖層次劃分更加清楚,另外還有如何進(jìn)行波形仿真,對(duì)設(shè)計(jì)進(jìn)行有效驗(yàn)證,基本在Logisim中可能用到的常用功能在QuartusII設(shè)計(jì)工具中都能找到。會(huì)使用Logisim構(gòu)建一個(gè)電路,相應(yīng)使用QuartusII工具的原理圖設(shè)計(jì)也不會(huì)有難度了,當(dāng)然他們庫(kù)中包含的模塊還有些不同,但一般常見(jiàn)的標(biāo)準(zhǔn)模塊QuartusII都有,而是是我們?cè)趯?shí)際設(shè)計(jì)中會(huì)用到的標(biāo)準(zhǔn)接口標(biāo)準(zhǔn)功能的模塊,要好好了解熟悉他們的用法。設(shè)計(jì)一個(gè)7段數(shù)碼管的控制邏輯電路,用于控制數(shù)碼管顯示,后面他將作為一個(gè)子模塊添加到我們的頂層設(shè)計(jì)中。1, 7段數(shù)碼管譯碼電路
19、 HexSeg(binary)0x0110000000x1111110010x2101001000x3101100000x4100110010x5100100100x6100000100x7111110000x8100000000x9100100000xA100010000xB100000110xC110001100xD101000010xE100001100xF10001110共陽(yáng)極數(shù)碼管編碼表有的同學(xué)可能看到真值表就開(kāi)始畫(huà)卡諾圖了,呵呵,其實(shí)可以偷一點(diǎn)懶,看看圖中這種實(shí)現(xiàn)。通過(guò)使用選擇器實(shí)現(xiàn)的這種譯碼電路,完成了一個(gè)真值表到電路的轉(zhuǎn)換,并且實(shí)現(xiàn)結(jié)構(gòu)清晰,可讀性很好。1, 創(chuàng)建7段數(shù)碼管的子
20、電路為設(shè)計(jì)好的數(shù)碼管譯碼電路創(chuàng)建硬件描述語(yǔ)言文件,點(diǎn)擊File>Create/Updata>Create HDL Design File for Current File。為設(shè)計(jì)好的數(shù)碼管譯碼電路創(chuàng)建一個(gè)封裝,點(diǎn)擊File>Create/Updata>Create Symbol File for Current File,這樣我們?cè)陧攲釉O(shè)計(jì)中就可以調(diào)用這個(gè)子電路了。2, 把子電路應(yīng)用到頂層設(shè)計(jì)中添加剛才創(chuàng)建的子電路,點(diǎn)擊Assignment>Settings,在Settings對(duì)話框中的Libraries中添加剛才子電路的目錄,現(xiàn)在在Symbol中可以看到剛才創(chuàng)建
21、的子電路模塊了,我們?cè)偬砑右粋€(gè)計(jì)數(shù)器,以及需要的輸入輸出引腳,完成我們的設(shè)計(jì)吧。3, 總結(jié)這個(gè)例子主要是聯(lián)系子電路的創(chuàng)建以及如何將子電路應(yīng)用到頂層設(shè)計(jì)中,在復(fù)雜設(shè)計(jì)中,分層設(shè)計(jì)的方法是必須要掌握的。至此,QuartusII中的原理圖設(shè)計(jì)的基本操作方法就足夠我們使用了,Logisim中所能完成的操作,在QuartusII中都能夠?qū)?yīng)起來(lái),所以建議后面的設(shè)計(jì)中,我們來(lái)參考課件中的使用Logisim設(shè)計(jì)簡(jiǎn)單CPU的方法,對(duì)應(yīng)在QuartusII中實(shí)現(xiàn)一個(gè)真正的CPU。由于Logisim是一個(gè)仿真軟件,使用較QuartusII方便一些,可以先行做實(shí)驗(yàn),然后再用QuartusII實(shí)現(xiàn)設(shè)計(jì)方案。至此,我們
22、要真正開(kāi)始CPU設(shè)計(jì)了,前面的內(nèi)容是給不熟悉QuartusII的同學(xué)熱身用的。這里都是假定同學(xué)們已經(jīng)熟悉了QuartusII基本操作,會(huì)使用原理圖設(shè)計(jì)方法設(shè)計(jì)電路,并且會(huì)使用MegaWizard添加標(biāo)準(zhǔn)模塊,會(huì)分層設(shè)計(jì)電路。需要說(shuō)明的是,我們選擇使用原理圖的設(shè)計(jì)方法,是考慮與羅老板的課件相結(jié)合,能夠?qū)φ誏ogisim的操作,使同學(xué)們?cè)趯W(xué)會(huì)使用Logisim軟件仿真設(shè)計(jì)出一個(gè)CPU后,平滑的過(guò)度過(guò)來(lái)。另外原理圖的設(shè)計(jì)更加直觀一點(diǎn),更容易入門(mén)。當(dāng)然由于實(shí)際設(shè)計(jì)中主流的方式還是使用硬件設(shè)計(jì)語(yǔ)言,推薦大家了解一下Verilog HDL,VHDL或System C等語(yǔ)言。1,設(shè)計(jì)總攬我們這里設(shè)計(jì)的是一個(gè)
23、簡(jiǎn)單的16位處理器(即每個(gè)指令字長(zhǎng)為16位,寄存器也是16位),該處理器有四個(gè)寄存器($r0到$r3)。具有獨(dú)立的數(shù)據(jù)和指令內(nèi)存(即有兩個(gè)內(nèi)存,一個(gè)指令內(nèi)存,一個(gè)數(shù)據(jù)內(nèi)存)。需要注意的是由于器件的限制,也為了讓事情更簡(jiǎn)單一些,我們以半字(16位)為單位對(duì)內(nèi)存編址。這和MIPS 不同,MIPS指令是字長(zhǎng)是32位,而內(nèi)存是以字節(jié)(8位)為單位編址。2,準(zhǔn)備步驟第一步:熟悉一下QuartusII的操作,這個(gè)在前面我們已經(jīng)完成了,對(duì)應(yīng)于Logisim中操作都介紹到了,后面完成Proj3所需要的技術(shù)也都具備了(當(dāng)然,想深入的了解數(shù)字電路設(shè)計(jì),可能需要更多),也就是說(shuō)如果能夠用Logisim完成Proj3
24、,用QuartusII實(shí)現(xiàn)也不再話下。第二步:做一下相關(guān)的實(shí)驗(yàn),了解QuartusII下的一些模塊和組件,如何建立簡(jiǎn)單模塊,如何將簡(jiǎn)單模塊構(gòu)建到一起,成為復(fù)雜的模塊,直至成為一個(gè)系統(tǒng)。MegaWizard中提供的是數(shù)字電路中常見(jiàn)的標(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ì)師
25、設(shè)計(jì)匯編器,編譯器;硬件設(shè)計(jì)師設(shè)計(jì)CPU。我們需要的ISA在Proj3這里已經(jīng)給出了,如下表:通過(guò)查詢(xún) opcode字段(高四位,即15-12位)的值,可知半字編碼所對(duì)應(yīng)的指令。注意,表中的opcode不到16個(gè),而funct也不到8個(gè)。原因是指令少一些,使同學(xué)們更容易實(shí)現(xiàn)(呵呵,好象比老師上課講的CPU指令數(shù)還是多了很多)。(如果需要更加細(xì)致的了解原理,請(qǐng)認(rèn)真學(xué)習(xí)羅老板課件中關(guān)于單指令周期CPU設(shè)計(jì)的這幾節(jié)課的內(nèi)容。)我們可以了解到需要實(shí)現(xiàn)的幾個(gè)基本模塊:1, 指令指針寄存器PC2, 指令存儲(chǔ)器ROM3, 寄存器文件4, ALU5, 內(nèi)存單元6, 控制邏輯單元一個(gè)大體的CPU的結(jié)構(gòu)圖:4,總
26、結(jié)從分析結(jié)果來(lái)看,我們需要的實(shí)現(xiàn)的幾個(gè)模塊都在圖中表現(xiàn)出來(lái)了,他們之間的關(guān)系也基本如上圖所示,更詳細(xì)的說(shuō)明請(qǐng)參考羅老板的課件吧。我們要設(shè)計(jì)中可能用到的庫(kù)中的模塊有以下幾種,寄存器模塊,RAM,ROM,算術(shù)以及邏輯運(yùn)算單元比如加法器,移位,與或門(mén)等。當(dāng)然還有前面我們講到的數(shù)據(jù)選擇器,這個(gè)會(huì)在Controller中用到,另外在每個(gè)單元模塊前做數(shù)據(jù)選擇也會(huì)用到。第四步:制作一個(gè)寄存器組(也稱(chēng)寄存器文件)模塊(組件)。1,輸入與輸出根據(jù)前面設(shè)計(jì)總攬中得到的模塊間的關(guān)系,設(shè)計(jì)出輸入輸出端口,包括rs,rt,rw,另外是rsBus,rtBus,當(dāng)然還有使能控制,時(shí)鐘,reset等。2,寄存器作為第一小步你
27、可以先放四個(gè)寄存器,然后做出一個(gè)輸出,即可選擇四個(gè)寄存器中的任意一個(gè)的值輸出。注意:用MegaWizard生成模塊文件的時(shí)候,別忘了加一個(gè)后綴,因?yàn)檫@里都是子模塊設(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一次也只能對(duì)一個(gè)寄存器寫(xiě)入,那么就需要相應(yīng)的數(shù)據(jù)選擇以及寫(xiě)使能控制。4, 整體設(shè)計(jì)全部完成好的原理圖如下:各個(gè)部分之間的關(guān)系如結(jié)構(gòu)框圖:5, 總結(jié)從設(shè)計(jì)一開(kāi)
28、始要養(yǎng)成良好的繪圖習(xí)慣,以結(jié)構(gòu)清晰為原則,設(shè)計(jì)按照一定順序完成,比如這里的順序就是:輸入輸出端口>核心模塊>數(shù)據(jù)通路控制另外將各部分功能用注釋文字標(biāo)好,方便閱讀。書(shū)接上回第四步:制作一個(gè)ALU輸入輸出端口ALU的輸入輸出相對(duì)簡(jiǎn)單,輸入是兩個(gè)操作數(shù)和一個(gè)操作符,輸出是計(jì)算結(jié)果。各運(yùn)算單元為了節(jié)省片上資源,加減法器使用一個(gè),用一根選擇線控制加或減,邏輯左右移位也是用一根選擇線控制左右移。數(shù)據(jù)通路選擇上面的各運(yùn)算單元是并行工作的,對(duì)于輸入的兩個(gè)操作數(shù),幾個(gè)運(yùn)算單元都會(huì)計(jì)算結(jié)果,至于輸出哪一個(gè),要通過(guò)后面的數(shù)據(jù)選擇器來(lái)控制了。選擇器的選擇開(kāi)關(guān)接的是操作符,這樣輸出結(jié)果就是操作數(shù)對(duì)應(yīng)的操作運(yùn)
29、算得到的的結(jié)果了。第五步:制作一個(gè)PC指針寄存器4,PC指針寄存器關(guān)于PC指針的操作很多,有一般指令所需的PC+1操作(這里是+1操作,與課件中+4稍有不同,因?yàn)槲覀兒竺嬖O(shè)計(jì)ROM的時(shí)候按16位數(shù)據(jù)線設(shè)計(jì),每個(gè)地址存儲(chǔ)的是16位數(shù)據(jù),那么PC+1就能讀取完整的一條指令),另外還有絕對(duì)跳轉(zhuǎn)需要的PC = (PC & 0xF000) | address,beq和bne指令所需的PC = PC + 1 + offset。設(shè)計(jì)模塊要求模塊完成的功能盡量單一,模塊的功能定義要清楚,上面跳轉(zhuǎn)所需的address,判斷所需的offset都是從指令中提取的,全部設(shè)計(jì)到PC寄存器模塊中來(lái),會(huì)使設(shè)計(jì)一下子
30、變得復(fù)雜。在實(shí)現(xiàn)PC寄存器模塊時(shí),需要更多的外部信息,從而使頂層設(shè)計(jì)的修改會(huì)影響到子電路。所以PC寄存器就是由輸入輸出端口和一個(gè)寄存器組成,其余部分要放到控制邏輯和頂層設(shè)計(jì)中去。5,總結(jié)ALU暫時(shí)可以?xún)H實(shí)現(xiàn)ADD,SUB,AND,OR以及移位,比較運(yùn)算,將來(lái)再擴(kuò)展更多功能。(對(duì)于各種運(yùn)算單元有兩種辦法實(shí)現(xiàn),其一是自己用基本的與或非門(mén)電路搭建,其二是直接使用QuartusII的MegaWizard庫(kù)實(shí)現(xiàn))。PC寄存器的實(shí)現(xiàn)也很簡(jiǎn)單,基本在前面的基礎(chǔ)上,完成一個(gè)ALU和一個(gè)PC寄存器不會(huì)遇到任何困難,我們這里關(guān)注的是模塊的劃分,模塊功能的定義,高內(nèi)聚,低耦合的設(shè)計(jì)不只是軟件設(shè)計(jì)中提倡的,這也是硬件
31、設(shè)計(jì)中推薦的。原來(lái)很多道理是相通的數(shù)據(jù)存儲(chǔ)在RAM里,程序存儲(chǔ)在ROM里,這是大家經(jīng)常聽(tīng)到的,那么怎么設(shè)計(jì)一個(gè)存儲(chǔ)數(shù)據(jù)的RAM和一個(gè)存儲(chǔ)程序的ROM呢?這里我們就來(lái)親手試驗(yàn)一下。有一點(diǎn)要說(shuō)明的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)方式,一種是用庫(kù)中提供的模塊,另一種是組合邏輯的實(shí)現(xiàn)方式,關(guān)于兩者的不同究竟會(huì)產(chǎn)生怎樣的影響,后面我們?cè)僭敿?xì)討論。第六步:實(shí)現(xiàn)一個(gè)RAM直接上圖吧,基本操作的問(wèn)題
32、不多敘述了,有問(wèn)題的話請(qǐng)查看前面的學(xué)習(xí)或者參考QuartusII的教程。第七步:ROM的實(shí)現(xiàn)用組合邏輯實(shí)現(xiàn)ROM的方法用組合邏輯實(shí)現(xiàn)的ROM其本質(zhì)是電路,如果感覺(jué)難以理解,你可以認(rèn)為你的程序就是一堆門(mén)電路按某種順序排列表示出來(lái)的,而不是存在真正意義的存儲(chǔ)器當(dāng)中,我們寫(xiě)程序的時(shí)候其實(shí)是搭建了一個(gè)電路。這里給出一種實(shí)現(xiàn)方法這是一個(gè)16個(gè)字的16位ROM,是用選擇器實(shí)現(xiàn)的(前面說(shuō)過(guò)了選擇器是個(gè)有用的好東西),由于只有16個(gè)存儲(chǔ)單元,所以4位地址就能表示出來(lái),ROM中的內(nèi)容就是接到選擇器data0x到data15x上的數(shù)據(jù),每一次對(duì)ROM的編程寫(xiě)入,就是將綜合的電路下載到FPGA實(shí)驗(yàn)板中。2,用時(shí)序電
33、路實(shí)現(xiàn)ROM實(shí)際的ROM應(yīng)該是可以在系統(tǒng)編程的,也就是說(shuō)不改變電路結(jié)構(gòu),能夠把程序?qū)懭隦OM。在QuartusII軟件中庫(kù)提供的ROM是時(shí)序電路實(shí)現(xiàn)的,我們時(shí)序電路實(shí)現(xiàn)的ROM跟RAM的形式是一樣的,看圖就知道了。其實(shí)在QuartusII中ROM也是通過(guò)一個(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;widt
34、h_byteena_a : NATURAL);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END COMPONENT;這里altsyncram經(jīng)過(guò)封裝,也就是MegaWizard的配置,引出相應(yīng)的引腳,就成了一個(gè)ROM模塊交給我們,在我們?cè)O(shè)計(jì)中調(diào)用了(上面是一段VHDL語(yǔ)言的代碼,關(guān)于VHDL語(yǔ)言就不在這里詳細(xì)介紹了)。最后需要注意的是這個(gè)ROM模塊用到我們頂層設(shè)計(jì)的時(shí)候不能用CPU的時(shí)鐘,而是單獨(dú)為其提供一個(gè)
35、刷新輸出數(shù)據(jù)的高速時(shí)鐘。在介紹完整個(gè)CPU后,我們會(huì)把這樣做的原因連同說(shuō)明組合邏輯與時(shí)序邏輯實(shí)現(xiàn)ROM的不同一起討論。當(dāng)然如果你現(xiàn)在有興趣可以在自己的CPU設(shè)計(jì)中使用這個(gè)ROM模塊的時(shí)候?yàn)槠浼由螩PU的時(shí)鐘,看看效果。1,再次推薦使用庫(kù)在設(shè)計(jì)中,推薦大家使用庫(kù)中的模塊,因?yàn)閹?kù)中的模塊都是經(jīng)過(guò)精心設(shè)計(jì)驗(yàn)證好的電路,并在長(zhǎng)期的設(shè)計(jì)實(shí)踐中反復(fù)驗(yàn)證的成熟方案,另外還有可能經(jīng)過(guò)了專(zhuān)門(mén)的優(yōu)化。比如下面我們將用到一個(gè)比較典型的模塊選擇器,選擇器的一個(gè)比較典型的應(yīng)用是根據(jù)已知邏輯關(guān)系,通過(guò)選擇通路數(shù)據(jù)得出電路,就是說(shuō)如果知道真值表的話,選擇的通路設(shè)定為常量,選擇開(kāi)關(guān)為輸入的邏輯值,通過(guò)這種類(lèi)似解碼的電路結(jié)構(gòu)很
36、容易的實(shí)現(xiàn)組合邏輯的功能,并且在程序、電路結(jié)構(gòu)上有很好的可讀性,結(jié)構(gòu)也很清晰。在下面控制邏輯開(kāi)關(guān)表中,我們就使用了這種方法。2,推薦的指令實(shí)現(xiàn)順序這里給一個(gè)推薦指令的實(shí)現(xiàn)順序:lui和ori指令andi和addi指令R指令j指令beq,bne,lw和sw指令3,頂層設(shè)計(jì)的條理按照老師課上講的CPU的幾個(gè)模塊,大致也為頂層設(shè)計(jì)劃分出幾塊來(lái),每一塊的核心是前面設(shè)計(jì)的模塊電路,由于要增加控制邏輯以及對(duì)輸入數(shù)據(jù)進(jìn)行處理,信號(hào)進(jìn)入模塊前,先通過(guò)選擇端連接控制邏輯的選擇器,根據(jù)指令不同,控制邏輯打開(kāi)關(guān)閉不同的開(kāi)關(guān),控制選擇輸入每個(gè)模塊的數(shù)據(jù)。大致的示意圖為這樣模塊間數(shù)據(jù)是各個(gè)核心模塊的輸出,由于核心模塊是
37、采用的標(biāo)準(zhǔn)的庫(kù)模塊設(shè)計(jì)的,其輸出數(shù)據(jù)的形式是標(biāo)準(zhǔn)的易被多數(shù)人接受的,從而使我們不必更多的考慮分塊間數(shù)據(jù)的表示形式,無(wú)需再依賴(lài)更多的外部信息。頂層設(shè)計(jì)是由這樣一個(gè)一個(gè)的分塊電路組成的,這是整個(gè)頂層設(shè)計(jì)圖其中輸入選擇都是由選擇器實(shí)現(xiàn)的,可見(jiàn)選擇器在設(shè)計(jì)中的應(yīng)用是十分頻繁的。接下來(lái)對(duì)于一條條的指令,就是控制一個(gè)個(gè)選擇器選擇哪個(gè)數(shù)據(jù)輸入到模塊中了,控制邏輯就是把指令譯碼為一個(gè)個(gè)的通路選擇開(kāi)關(guān)。我們把各部分模塊控制參數(shù)的信息集中到這里,各個(gè)控制位的設(shè)定情況可以通過(guò)下表得出:根據(jù)表中的信息,控制邏輯開(kāi)關(guān)表電路也是用一個(gè)選擇器實(shí)現(xiàn),下圖中給出了一個(gè)實(shí)現(xiàn)方法,圖中可以清晰的從表中的位開(kāi)關(guān)設(shè)置找到對(duì)應(yīng)的數(shù)據(jù)位。
38、4,寫(xiě)程序測(cè)試在你完成了CPU設(shè)計(jì)后,需要編寫(xiě)程序在CPU上運(yùn)行以測(cè)試CPU能否工作。試著將以下匯編指令翻譯成機(jī)器碼:add $2,$1,$0add $1,$1,$0add $1,$2,$0然后將機(jī)器碼存入指令內(nèi)存中。如果你成功地完成了此最簡(jiǎn)單的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)樵诔绦?/p>
39、中通過(guò)他們使CPU中的寄存器載入數(shù)據(jù),讓其他測(cè)試的數(shù)據(jù)初始化成為可能。在前面最后組合各功能模塊,實(shí)現(xiàn)每條命令的控制邏輯時(shí)強(qiáng)烈推薦優(yōu)先完成這兩條指令,待這兩條指令工作正常后,就可以用來(lái)測(cè)試其他指令了。為了更好的觀察輸出結(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),不過(guò)要多一個(gè)刷新時(shí)鐘,前面我們實(shí)現(xiàn)過(guò)數(shù)碼管的譯碼電路了,使用它就可以了。寫(xiě)幾個(gè)程序測(cè)試你的CPU,把一條條指令都調(diào)試好,至此,你的Proj3中的CPU設(shè)計(jì)作業(yè)就完成了。前面我們以盡
40、量快的速度完成了Proj3的任務(wù),但是還有一些問(wèn)題遺留下來(lái),這里我們就來(lái)討論下這些問(wèn)題。1, Logisim與QuartusII的比較前面已經(jīng)提到,使用QuartusII進(jìn)行數(shù)字電路設(shè)計(jì),更多情況下使用的是硬件描述語(yǔ)言,硬件描述語(yǔ)言功能更加強(qiáng)大,標(biāo)準(zhǔn)更加規(guī)范,應(yīng)用十分廣泛。這里選擇使用原理圖的設(shè)計(jì)描述方式是為了讓我們?nèi)菀椎膹腖ogisim過(guò)渡過(guò)來(lái)。從前面的內(nèi)容來(lái)看,我們實(shí)驗(yàn)課上使用到的Logisim軟件實(shí)現(xiàn)Proj3中CPU的設(shè)計(jì)所涉及到的操作,在QuartusII中對(duì)應(yīng)的實(shí)現(xiàn)方式都一一對(duì)應(yīng)的演示了,當(dāng)然QuartusII軟件的庫(kù)中包含的電路模塊可能會(huì)與Logisim中的有所差別。Logisi
41、m是一款可視化的仿真軟件,我們也是在學(xué)習(xí)羅老板的計(jì)算機(jī)組成原理課上第一次了解到的,基本算是實(shí)驗(yàn)用的,實(shí)驗(yàn)演示很方便。QuartusII是Altera公司用于自家器件設(shè)備的數(shù)字電路設(shè)計(jì)的軟件,我們做實(shí)驗(yàn)用的DE2板子上的FPGA芯片就是Altera公司的,QuartusII軟件可以完成硬件電路設(shè)計(jì)的整個(gè)流程。Logisim的仿真表現(xiàn)效果比較直觀,直接通過(guò)點(diǎn)擊就能完成輸入輸出設(shè)定,模塊間連線上的電平在電路實(shí)時(shí)運(yùn)行中通過(guò)連線顏色表示出來(lái)。寄存器,RAM中的數(shù)據(jù)都能進(jìn)行設(shè)定,包括在電路實(shí)時(shí)運(yùn)行時(shí)。QuartusII中仿真的方式也很多,比如自帶波形仿真功能,另外可以使用第三方的仿真軟件如ModelSim等。但是如果想直觀的觀察電路實(shí)時(shí)運(yùn)行狀態(tài)則不太容易,無(wú)論是設(shè)定電路初始狀態(tài),修改寄存器與RAM中的存儲(chǔ)內(nèi)容等,都不是很容易,所以要先實(shí)現(xiàn)一些簡(jiǎn)單模塊,并設(shè)法將電路運(yùn)行狀態(tài)通過(guò)外部設(shè)備表現(xiàn)出來(lái),設(shè)定一些調(diào)試開(kāi)關(guān),幫助設(shè)定電路狀態(tài)。2, 為什么是時(shí)序邏輯的ROM這個(gè)問(wèn)題可以這樣解釋?zhuān)M合電路的ROM相當(dāng)于使用電路搭建的,向ROM中寫(xiě)入一個(gè)程序,就相當(dāng)于做一個(gè)電路。我們使用計(jì)算機(jī),寫(xiě)一個(gè)程序進(jìn)CPU,應(yīng)該是能夠在系統(tǒng)的把程序下載到ROM中,而不是把這個(gè)CPU拆了,重新設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陳夢(mèng)與劉陽(yáng)離婚協(xié)議書(shū)策劃模板
- 雙邊教育合作諒解協(xié)議書(shū)模板
- 2025年市場(chǎng)調(diào)研與分析咨詢(xún)服務(wù)委托協(xié)議
- 2025年供應(yīng)商與裝修企業(yè)合作框架協(xié)議
- 2025年企業(yè)合同解除操作規(guī)范
- 2025年勞動(dòng)合同標(biāo)準(zhǔn)范本分享
- 2025年倉(cāng)儲(chǔ)糧食管理協(xié)議
- 2025年住宅物業(yè)購(gòu)買(mǎi)補(bǔ)充協(xié)議
- 2025年勞動(dòng)人員雇傭協(xié)議
- 2025年八人合伙企業(yè)股權(quán)分配協(xié)議書(shū)
- 電網(wǎng)兩票培訓(xùn)課件
- 改革開(kāi)放教育援藏的創(chuàng)新及其成效
- 小學(xué)科學(xué)人教鄂教版四年級(jí)下冊(cè)全冊(cè)教案2023春
- 第3課+中古時(shí)期的西歐(教學(xué)設(shè)計(jì))-【中職專(zhuān)用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 2024年南通建筑電工證考試題模擬試題電工培訓(xùn)試題及答案(全國(guó)通用)
- 班組建設(shè)工作匯報(bào)
- 遛狗行業(yè)市場(chǎng)分析
- 2025小學(xué)道德與法治開(kāi)學(xué)第一課(思想政治理論教育課)
- 供應(yīng)鏈金融與供應(yīng)鏈融資模式
- 如何進(jìn)行有效的目標(biāo)設(shè)定和達(dá)成
- 工程類(lèi)工程公司介紹完整x
評(píng)論
0/150
提交評(píng)論