實(shí)驗(yàn)6分析與建議_第1頁
實(shí)驗(yàn)6分析與建議_第2頁
實(shí)驗(yàn)6分析與建議_第3頁
實(shí)驗(yàn)6分析與建議_第4頁
實(shí)驗(yàn)6分析與建議_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)組成原理實(shí)驗(yàn)Project6分析與建議高小鵬北京航空航天大學(xué)計(jì)算機(jī)學(xué)院系統(tǒng)結(jié)構(gòu)研究所計(jì)算機(jī)學(xué)院學(xué)科基礎(chǔ)課我在檢查P6時,發(fā)現(xiàn)了一些共性問題。本PPT就是針對這些問題的總結(jié)和分析,并試圖給出參考樣例。我始終認(rèn)為本課程在傳遞給大家的最重要的不是具體的知識,而是構(gòu)建大系統(tǒng)的方法。因此結(jié)合我多年的科研與教學(xué)經(jīng)驗(yàn),我還給出了若干建議供你參考。寫在最前面所有內(nèi)容只對大系統(tǒng)設(shè)計(jì)有一定意義如果你認(rèn)為你今后定位于總師/系統(tǒng)架構(gòu)師等高端設(shè)計(jì)人員,請繼續(xù)閱讀后面的slice如果你認(rèn)為上學(xué)就是為了今后混口飯,那么可以結(jié)束閱讀,以免浪費(fèi)時間寫在最前面設(shè)計(jì)冗余賦值語句有不合理值在存儲器模塊中實(shí)現(xiàn)LB/LH位擴(kuò)展較少使用宏多位控制信號非整體性賦值模塊端口定義過于隨意存在的主要問題現(xiàn)象:主要問題出在移位指令的設(shè)計(jì)上每條移位指令都設(shè)計(jì)對應(yīng)的移位運(yùn)算,而非設(shè)計(jì)一個整體性的運(yùn)算后果:不存在功能正確性問題,但會導(dǎo)致設(shè)計(jì)非最優(yōu)每條移位指令都會有對應(yīng)的移位運(yùn)算組合邏輯方案:特別是針對右移類指令(算術(shù)、邏輯),應(yīng)該將最高位統(tǒng)一處理后再統(tǒng)一移位參考樣例:下一頁說明:這個設(shè)計(jì)并非最好的設(shè)計(jì),但建議同學(xué)們從中體會“什么是好的設(shè)計(jì)”設(shè)計(jì)冗余moduleShifter(Din,Num,Funct,Dout);input[31:0]Din; //sourcedatainput[4:0]Num; //numberofbitstoshiftinput[4:0]Funct; //shifterfunctionselectoroutput[31:0]Dout; //shiftresult

wire[31:0]wShiftL1,wShiftL2,wShiftL4,wShiftL8,wShiftL16;wire[31:0]wShiftR1,wShiftR2,wShiftR4,wShiftR8,wShiftR16;wiremask;

assignmask=(Funct==`ALU_SRA)?Din[31]:0;assignwShiftL1=Num[0]?{Din[30:0],1'b0}:Din;assignwShiftL2=Num[1]?{wShiftL1[29:0],2'b0}:wShiftL1;assignwShiftL4=Num[2]?{wShiftL2[27:0],4'b0}:wShiftL2;assignwShiftL8=Num[3]?{wShiftL4[23:0],8'b0}:wShiftL4;assignwShiftL16=Num[4]?{wShiftL8[15:0],16'b0}:wShiftL8;

assignwShiftR1=Num[0]?{{1{mask}},Din[31:1]}:Din;assignwShiftR2=Num[1]?{{2{mask}},wShiftR1[31:2]}:wShiftR1;assignwShiftR4=Num[2]?{{4{mask}},wShiftR2[31:4]}:wShiftR2;assignwShiftR8=Num[3]?{{8{mask}},wShiftR4[31:8]}:wShiftR4;assignwShiftR16=Num[4]?{{16{mask}},wShiftR8[31:16]}:wShiftR8;

assignDout=(Funct==`ALU_SLL)?wShiftL16:wShiftR16;endmodule移位運(yùn)算樣例代碼現(xiàn)象:使用’Z’值如右側(cè)MUX賦值問題:Z通常只在需要高阻態(tài)時才使用高阻態(tài)使用場景:高阻態(tài)只能被應(yīng)用于頂層模塊具有inout屬性定義的端口。我們會在P7/P8中介紹方案:除了上述場景外,不能出現(xiàn)Z值。樣例1:最簡設(shè)計(jì)。只要sel不出錯就沒有問題樣例2:支持調(diào)試。一旦在某個環(huán)節(jié)出現(xiàn)了特定值,說明sel的控制或編碼值出錯了。賦值語句有不合理值錯誤設(shè)計(jì)assignout=(sel==2’b00)?input1:(sel==2’b01)?input2:(sel==2’b10)?input3:32’HZ;錯誤設(shè)計(jì)assignout=(sel==2’b00)?input1:(sel==2’b01)?input2:(sel==2’b10)?input3:32’HZ;參考樣例1:最簡設(shè)計(jì)assignout=(sel==2’b00)?input1:(sel==2’b01)?input2:input3;參考樣例2:支持調(diào)試錯誤信息設(shè)計(jì)(一旦出現(xiàn)了特定值,則說明sel信號出錯了)assignout=(sel==2’b00)?input1:(sel==2’b01)?input2:(sel==2’b10)?input3:32’H55AB0001;嚴(yán)厲批評:凡是這樣設(shè)計(jì)的同學(xué),都沒有認(rèn)真閱讀P6的設(shè)計(jì)要求!問題:這種設(shè)計(jì)方法會使得存儲器模塊變得非常的復(fù)雜,更致命的是不具有通用性假設(shè)你是存儲器模塊的廠商,你肯定希望生產(chǎn)的存儲器模塊具有很強(qiáng)的通用性。作為用戶,我們從來沒有在市場上買過“大端擴(kuò)展”還是“小端擴(kuò)展”的存儲器模塊方案:存儲器應(yīng)保證其通用性。凡是擴(kuò)展等個性化需求均應(yīng)在處理器內(nèi)部實(shí)現(xiàn)在存儲器模塊中實(shí)現(xiàn)LB/LH位擴(kuò)展現(xiàn)象:大量在代碼中直接使用二進(jìn)制編碼,特別是在對opcode和funct編碼的譯碼方面問題1:代碼可讀性極差,難以維護(hù);相信過2周就看不懂了問題2:如果在多個文件中均涉及同一編碼的譯碼,則易出現(xiàn)因輸入錯誤帶來的不一致,給調(diào)試帶來很多不必要的麻煩方案:定義頭文件,在不同設(shè)計(jì)文件中引用,確保設(shè)計(jì)一致性和可讀性建議:可以根據(jù)不同的需要定義多個頭文件例如:指令碼頭文件、ALU等功能部件操作碼頭文件較少使用宏`defineINST_R_TYPE6'b000000//00h:decodeaccordingtofunctfield(IR[5:0])//funct--IR[5:0]`defineINST_SLL6'd00//ShiftWordLeftLogical`defineINST_SRL6'd02//ShfitWrodRightLogical`defineINST_SRA6'd03//ShiftWordRightArithmetic`defineINST_SLLV6'd04//ShiftWordLeftLogicalVariable`defineINST_SRLV6'd06//ShiftWordRightLogicalVariable`defineINST_SRAV6'd07//ShiftWordRightArithmeticVariable`defineINST_JR6'd08//jumpregister`defineINST_JALR6'd09//jumpandlinkregister`defineINST_SYSCALL6'd12//systemcall`defineINST_BREAK6'd13//break`defineINST_MFHI6'd16//MovefromHIRegister`defineINST_MTHI6'd17//MovetoHIRegister`defineINST_MFLO6'd18//MovefromLOWRegister`defineINST_MTLO6'd19//MovetoLOWRegister`defineINST_MULT6'd24//multiply`defineINST_MULTU6'd25//unsignedmultiply`defineINST_DIV6'd26`defineINST_DIVU6'd27`defineINST_ADD6'd32//AddWord`defineINST_ADDU6'd33//AddUnsignedWord`defineINST_SUB6'd34//SubtractWord`defineINST_SUBU6'd35//SubtractUnsignedWord`defineINST_AND6'd36`defineINST_OR6'd37`defineINST_XOR6'd38`defineINST_NOR6'd39`defineINST_SLT6'd42`defineINST_SLTU6'd43`defineINST_BRANCH_RT6'b000001//01h:branch-typeinstruction:decodeaccordingtortfield([20:16])//rt--IR[20:16]`defineINST_BLTZ5'd00`defineINST_BGEZ5'd01`defineINST_J6'b000010`defineINST_JAL6'b000011`defineINST_BEQ6'b000100`defineINST_BNE6'b000101`defineINST_BLEZ6'b000110`defineINST_BGTZ6'b000111//`defineINST_ADDI6'b001000`defineINST_ADDIU6'b001001`defineINST_SLTI6'b001010`defineINST_SLTIU6'b001011`defineINST_ANDI6'b001100`defineINST_ORI6'b001101`defineINST_XORI6'b001110`defineINST_LUI6'b001111指令定義頭文件(部分)現(xiàn)象:單獨(dú)賦值問題:降低代碼可讀性、可維護(hù)性,增加控制編碼時很麻煩,難以調(diào)試多位控制信號非整體性賦值不好的設(shè)計(jì)assignsel[1]=(fsm==XX);assignsel[0]=(fsm==YY);方案:整體性賦值,既確保正確,又易于維護(hù)建議:應(yīng)在參考設(shè)計(jì)中再使用宏定義替代2進(jìn)制編碼就更加完美參考設(shè)計(jì)assignsel[1:0]=(fsm==XX)?2’b10:

(fsm==YY)?2’b01:2’b00;1:設(shè)計(jì)中應(yīng)該盡可能按照“模塊間松耦合、模塊內(nèi)高內(nèi)聚”思想規(guī)劃整體架構(gòu)如果你發(fā)現(xiàn)模塊間交聯(lián)關(guān)系非常復(fù)雜,那么就不是好設(shè)計(jì)2:多使用宏。不要怕麻煩,但對于大工程實(shí)施是極為重要的,可以起到“加速器”作用注意:parameter只在一個文件內(nèi)有效因此:如果你可能需要在整個project中都

溫馨提示

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

評論

0/150

提交評論