【我的計組生活5'b00111】P3課上測試

2021-02-24 ld曲率空間

Hello,xdm,又該是快樂的計組上機測試了,P3 課下都通過了吧?有沒有自己按照 MIPS 指令集增加一些指令呢~



如果你很順利通過了課下測試,並且簡單的 加控制指令(只需要添加 ALUControl 或 Controller 等等中的信號就可以實現)只需要 15min 以內,複雜一些的 加數據通路的指令(例如 J 型指令 或 lb、sb 等需要增加選通信號)需要 15-30min,那麼 dalao 就是你嘞!


經過了上篇中提到的 P3 課下作業那些 CPU 相關測試之後,是時候在上機測試中展現自己的能力了。

到了第四次課上的測試環節,我們會遇到一些新挑戰:時間會稍微放緩一些,稍一不小心就會出現 bug,有一些奇怪的指令要求等等,不過對於各位來說一次性通過不是問題,甚至 AK 。



我們在這裡展示 2020 秋的 P3 第 1、2 次上機題作為參考。由於每個人的 CPU 都有不同的實現方案,因此在這裡僅提供個人思路。P3 的每一題都有很多實現方法,大家可以自己探索,做完了還可以和夥伴們對拍(對拍的方法在 P0課下已經講過,具體參見:【我的計組生活5'b00001】P0課上測試 底部)

另外,由於 P3 上機測試題僅有第 1、2 次的,所以真正考試難度不一定和這些題目相同,僅供參考~





P3課上測試


P3 的課上測試內容:測試基於課下 CPU 設計添加指令的方式進行。每次課上測試共三題,每題對應一條新增指令,且均設有相應的提交點,用以測試{課下指令集+題目新增的一條指令}設計的正確性。

從 P3 課上測試開始,後面的連續 4 次測試都會是添加指令,這些指令都會根據 RTL 語言描述進行,即和 MIPS 中/英指令集描述相同。每次都會在考試中提供 Mars_CO 的魔改版本。這個版本提供新指令行為的 class,導入到 Mars_CO 魔改版本中可以提供新指令的編譯。


*注意:所有題目之間不需要迭代設計(迭代時把指令控制信號限制死,基本上也不會出現問題),即每道題目中要求的新加指令都可以由初始的課下 CPU 直接添加得到,而不需要在已經通過了某道題目的基礎上進行添加。測試時不會出現兩條新加指令同時測試的情況。


參考 CPU 架構:



balr(P3s1.Q1)

Branch and Link Register


補充說明:



題目分析

該指令是一個無條件分支跳轉指令。可以選擇在 Controller 中添加一個輸出端,專門輸出 balr 控制信號,當然也可以使用分布式解碼,在不同的級產生信號,由於開頭 6 位是 110110,並且已經標註是 BALR,所以可以只判斷 Opcode 段即可知道是否是 BALR 指令。

仔細觀察,PC 要求與 beq 要求的地址拼接方式相同,因此這裡在實現的時候可以 借用 beq 的數據通路,選用 PC 計數器的輸入端為 branch | balr;當然你也可以模仿 b 類分支指令一樣再建一條 balr 專屬的 PC 地址拼接通路,但後者明顯麻煩。

由於 GPR[rt] 還需要存入 PC + 4,因此 PC + 4 至少要引線到 GRF寄存器堆 的輸入端,選用 MUX 和原數據源進行選擇,選通控制信號則為 balr,不過到底在什麼位置引就要靠各位來思考了,因為在單周期,只要控制得當,數據只要被選通到存入 GRF 的路徑上就可以成功。

*注意:由於是向 GPR[rt] 中存數據,因此不要忘記改 RegDst 信號。




wsbh(P3s1.Q2)

Word Swap Bytes within Halfwords


補充說明:可以使用 Logisim 所有的內置元件。

HINT:使用Splitter元件為ALU增加功能。



題目分析

該指令被要求添加在 ALU 中,可以說是較為簡單的,因為可以不需要在 Controller 部件中添加信號輸出端專門控制該指令,而可以靠 ALUController 為媒介來分布控制 ALU。

在 ALU 中添加功能的指令,首先在 Controller 中建立該指令的各器件控制信號,然後把分配的 ALUController 碼在 ALUController 中分配給一個 ALU 的運算解碼,控制 ALU 的運算功能,並在 ALU 中完成交換半字的操作,這樣完成了由 Controller 分布控制 ALU 的效果。

仔細觀察發現,WSBH 指令的特別指令段出現在 Shamt 段,但實際上由於課下指令並沒有與 SPECIAL3 段重複,因此也可以靠判斷 Opcode 來判斷是否是 WSBH指令。

其餘就是交換半字,這部分就是用 Splitter 分成 4 個字節,並在輸出端重新使用 Splitter 把對應位再組在一起。




lbi(P3s1.Q3)

Load Byte and Insert


補充說明:

HINT:可以使用 Logisim 的Splitter元件將32位的數據分成4組8位的數據,進行位拆分與位拼接操作。



題目分析

該指令為添加數據通路型的較為複雜的指令,可以選擇在 Controller 中直接生成 LBI 指令的專屬控制信號,並用這個型號控制所有與該指令有關的 MUX 選通器的控制信號。

由於這個指令類似於 LB 或 LW,如果課下沒有做過 LB 指令,可能會略顯複雜。指令大多數更改出現在 DM 模塊,你可以在 DM 模塊外部進行數據通路改造,也可以在內部。具體操作就是將 ALU 模塊輸出的 DM地址 的最後兩位代表字內偏移,並將選中的那一個 Byte 插入到 GPR[rt] 中的對應位,而其他位則不變。


我個人的實現方法是,在 DM 外部進行數據通路改造。用 2 * 4 共 8 組 Splitter 將 DM 中讀出的數據進行選擇,輸出只有被選中 8 位有數據,其餘位為 0 的 32 位數據,而從 GPR[rt] 中出來的數據則反過來,只將被選中的 8 位全部標記成 0。這樣最後兩組數據用加法器連接,就可以做到插入的效果了。

實際上實現方法應該還有很多,但都大同小異,並且改起來也不是很複雜,但是有些同學測試過不去,因為被卡在了 HINT 中:CPU的 RegData 埠要輸出插入字節後的整字數據。這個有同學並沒有在這個 Probe 出現前改掉,因此被判為錯誤,特此標記。




附加題(P3s1.Qs)debug

計小組在P3嘗試添加jal指令的過程中出現了bug,jal指令不能正常執行,甚至beq指令都不能運行,已知他的問題出在IFU中,請同學們幫助他找出設計中的問題。

下面是計小組的IFU的電路設計圖:

計小組的設計中Branch信號為1代表當前指令為beq,jal信號為1代表當前指令為jal,zero為1代表當前ALU的兩個輸入相等。


A. beq 和 zero 與或門使用錯誤

B. PC4輸出結果錯誤

C. jal跳轉地址位拼接錯誤

D. 跳轉相對地址符號擴展錯誤



jr控制信號設計

jr的指令格式是:

A. R

B. I

C. J


計小組在控制器內生成jr相關信號時,他生成的RegWrite為1,代表jr寫寄存器;RegDst的編碼對應的是rd,即被寫入寄存器的地址是rd;RegWriteData的編碼對應的是ALU的計算結果,即jr會將ALU的計算結果寫入rd對應寄存器內。

你覺得他的設計正確嗎?

A. 正確

B. 錯誤



subiu設計

計小組查詢指令集發現沒有subiu這條基本指令,他想自行設計並實現。指令格式和addiu一樣,RTL描述為:


但是計大組卻認為完全沒有必要,因為任何一條subiu rt, rs, imm指令都可以等價地用addiu rt, rs, -imm來實現。

例如,subiu $t1, $t2, 1234可以用addiu $t1, $t2, -1234來代替。

請問計大組的說法正確嗎?

A. 正確

B. 錯誤


(所有附加題答案均在推送結尾)




movz(P3s2.Q1)

Move Conditional on Zero


補充說明:可以使用Logisim所有的內置元件。

HINT:原版MARS支持該指令。



題目分析

該指令可以被認為是 R 型指令的變種,但因為在指令前有判斷條件,因此可以選擇在 ALUController 中添加 MOVZ 專屬控制信號(如果你沒有ALUController,可以直接在 Controller 中結合 Opcode 和 Func 段判斷),並和判斷 GPR[rt] == 0 的信號 一下,形成 if 後面是否再操作的新信號。這樣可以避免新指令與老指令之間的衝突。

由於這個指令可以算作是 R 型指令的變種,所以其餘的改動還算簡單,在 Controller 、ALUController、ALU中增加指令行為控制即可。




lbi(P3s2.Q2)

Load Byte and Insert

同(P3s1.Q3),在前文中已描述過。

其實如果你前面掛過,就知道有些上機測試會出現前幾次測試的原題或變種。




bltzalr(P3s2.Q3)

Branch on Less Than Zero and Link Register

補充說明



題目分析

該指令是 b 類分支跳轉指令 BLTZ 的變種。前面的 if - endif 段與 BLTZ 指令一模一樣,而只是增加了 GPR[rt] ← PC + 4,即在 rt 寄存器存入 PC + 4。

b 類分支跳轉指令均可以使用 beq 指令的數據通路,當然使用的時候要和 branch 組合成新的 b 類跳轉控制型號,所以會省力很多,當然還有很多別的實現方法。

而存入 PC + 4,則類似於 jal 指令,所以可以借用 jal 指令的數據通路,用新信號和專屬控制 jal 指令的信號 一下,這樣就可以顯得改動不會很多。




P3 課上測試加指令Tips

仔細觀察 RTL 與何種已有指令類似,類似的可以借用數據通路則借用,不可借用的注意模塊之間的控制是否有衝突。

加載每個指令的 class 文件,觀察 Mars 的行為,有時候不通過可能是自己理解的 RTL 和事實意思不同。

Logisim 中,有的器件在偶數個輸出端時,為了保證上下對稱,所以去除了中間的埠,已經有不少同學坑到,上機的時候一定要注意。

仔細閱讀 HINT,不要被某個檢查輸出的輸出端錯誤擋住了 AC 的腳步。

時間還算比較富裕,不要患得患失,短時間一直做不出來,可以換個題做,換換腦子,當然如果每個題目中都有幾個點(尤其是都是相同的點)錯誤,那有可能是課下 bug 了,建議不要放棄,一次上機的機會很難得,當然要面向評測機 debug(但是一般很難de出來)。

可以在設計文檔當中帶一些課下測試的代碼,用來測試課上課下指令是否有衝突,不過一般用不上。

推薦一個可以反彙編代碼的網站,但由於沒有 PC 初地址,所以建議手動更改或者在 CPU 中加入選通忽略 0x0000_3000 的初地址。

http://shell-storm.org/online/Online-Assembler-and-Disassembler/



好啦,以上就是 重製版的第 8 期【我的計組生活】

希望能有幫助到你哦!!童鞋們可以來一波贊和在看,甚至是不是還可以來一波打賞~哈哈哈!

如果看到有錯誤還請一定聯繫作者更改,可以在後臺直接進行留言~,拜託各位大佬們了!

謝謝大家,我們 P4 課下見~ Verilog ready?Don't be anxious.



附加題不定項答案:

debug:ABCD

jr控制信號設計:A A

subiu設計:B

相關焦點

  • 【我的計組生活5'b00101】P2課上測試
    經過了上篇中提到的 P2 課下作業以及附加題那些練習之後,是時候在上機測試中展現自己的能力了。到了第三次課上的測試環節,我們會遇到一些新挑戰,時間比 P1 緊,要寫的代碼量較大,不過這些應該還是難不倒大家的(作者 P2 掛了)。
  • 【我的計組生活5'b00011】P1課上測試
    到了第二次課上的測試環節,我們會遇到很多新的挑戰,時間比 P0 稍緊,題幹比 P0 長,題意還有可能不是 很清晰(例如第一次P1課上測試由於我再做題的時候化簡了部分情況,導致狀態轉換條件寫的沒有什麼很好的邏輯形式,所以評測的時候一錯再錯,甚至延長了 30 分鐘也沒能完成這道題(那個時候我的 debug 能力很弱),最後勉強通過了一半的點。
  • 【我的計組生活5'b00000】P0課下作業簡析
    大家好,我們又見面了~~寄語:很慶幸開啟了【我的計組生活快醒醒,都 2021 寒假了,難道還有人在看計組?到達B機房後計小組將會在下一周期回到原點,(下一周期的輸入將被忽略掉)等待下下周期的輸入,繼續測試他的序列。計小組遵循上北下南左西右東的方向完成操作。計小組在時鐘上升沿的時候就已經知道自己下一步的方向並且瞬移過去,並且立即做出判斷。
  • 按鍵控制顯示;鍵盤位P3.2/P3.3/P3.4/P3.5 按下相應鍵盤,則顯示不...
    RS EQU P3.0RW EQU P3.1E EQU P3.5mov p3,#0ffhMOV P1,#01H;qingpinACALL ENABLEMOV P1,#38H;8wei dianzhenACALL ENABLEMOV P1,#0FH;xian shi KaiACALL ENABLE
  • 盤點八家國際表計測試認證機構
    表計行業一直都是涉及民生的重要行業,關於表計行業測試機構也需要精準。今天,筆者為大家盤點八家國際知名測試認證機構。
  • 【我的計組生活5'b00010】P1課下作業簡析
    好xdm,P0 課上都通過了對吧,不管是不是 AK~從今天開始,我們進入 Verilog 硬體描述語言的世界,這個地方我們需要改變一下編程思維,什麼時候順序執行 (begin - end),而什麼時候又是並列執行的 (always、assign等) 。
  • 怎樣進行油耗的測試與容積式流量計結構及分類
    怎樣進行油耗的測試與容積式流量計結構及分類 工程師郭婷 發表於 2018-06-29 17:54:32 農業的規模化集約化生產方式,已經被確認為現代農業發展的必由之路
  • App今日免費:生活絕佳小助手"溫溼度計"
    生活中大家對天氣變化最敏感的,雖然每個手機都裝有天氣軟體,但是除了相關天氣之外,我們所關心的溫度、溼度以及舒適度都沒有顯示,而今天我們給大家推薦的這款「溫溼度計」則一定程度上幫了我們的忙,為我們時刻監視體感環境。
  • 計組隨筆 —— 二進位乘除法運算
    計組隨筆 —— 二進位乘除法運算❝電子檔筆記整理,只是筆記,不是教程。
  • 體音美計齊煥彩 全面發展育英才——備課組工作盤點之體音美計組
    本學期,體音美計組在完成教學任務的同時,定期組織了豐富多彩的活動和比賽,極大地豐富了學生的課餘生活:3月8日,配合辦公室、總務處組織學校「慶祝第109個國際勞動婦女節」活動,並獻上精彩的節目。4月23日,配合初一年級語文組組織「向經典致敬」話劇節暨第三屆讀書推進會活動。
  • 增加附加值,讓夢想變現實——杭州二中白馬湖學校初中部英語組從PISA測試反觀口語教學
    PISA測試(Program for International Students Assessment)是經濟合作與發展組織進行的面向15-16歲學生的閱讀、數學、科學能力評價研究項目。從2000年開始,每3年進行一次測評。來自65個國家的75萬名學生參與了該項測試。PISA測試可以有效反映出學生的閱讀素養、數學素養與科學素養。
  • 高效利用課上45分鐘的技巧
    我是鄭老師這一講給大家介紹的主題是「高效利用課上45分鐘的技巧」。同學們現在來回憶一下,自己課上會不會有如下情況,有的話,自行「對號入座」啊:東張西望、不注意聽老師講課;心不在焉、「身在曹營心在漢」、對教師講的內容不感興趣;做小動作、注意力不集中;對老師提的問題和同伴的回答漠不關心等等。這些都是課上效率低下的表現。課上沒把握住,課下就會惡性循環。
  • 寬幅錯題整理神器,喵喵機錯題印表機P3體驗
    哈嘍,大家好,我是嘉木,不知道大家是否還記得以前錯題本,小時候我整理錯題都是用手抄的,由於我的字跡比較潦草,後面複習的時候幾乎都看不懂自己在寫什麼。聽說現在的學生有更高效的整理錯題的方式,今天我要給大家推薦一款非常適合有小孩的家庭使用的錯題印表機,這款錯題印表機在家長圈裡特別火,很多學生都在用,這款錯題印表機就是喵喵機p3。
  • 普通話測試說話範文——我喜歡的季節
    普通話測試說話範文:普通話考試說話例文30篇及技巧1、我的願望 2、我的學習生活 3、我尊敬的人4、我喜愛的動物(或植物) 5、童年的記憶 6、我喜愛的職業 7、難忘的旅行 8、我的朋友9、我喜愛的文學(或其他)藝術形式 10、談談衛生與健康 11、我的業餘生活12、我喜歡的季節(或天氣) 13
  • 比重計與密度檢測儀器工作原理有什麼區別
    大家都會了解過比重與密度,很多材料會測試這些標準用來研發和生產產品的品質要求,那用什麼樣的儀器來進行材料的比重和密度值,這就是用到是密度計,當然隨著科技的技術發展,電子密度計越來越應用廣泛,科思密度計AU-300S就是其中的一種數顯式密度檢測儀器。
  • 思政課上感受「思考辯證」的魅力
    原標題:思政課上感受「思考辯證」的魅力 這樣的講課方式不僅在清華的課堂上,也在網絡直播中得到了廣泛好評,並獲得全國第四屆高校青年教師教學競賽思政課專項組競賽一等獎第一名。   「蕉爺的課扭轉了我原本對歷史和這種思政課的漠不關心,開始覺得原來深刻和有趣、理性和情懷是可以並存的。」
  • 溫溼度計守護寶寶健康?科學監控超限報警,給ta舒適的生活環境
    發現青萍溫溼度氣壓計非常不錯,仔細了解一番,發現功能很豐富,完全符合我的要求,就選擇了它。北歐風,簡約設計其實我很喜歡簡約、自然、實用的北歐風家居裝修、裝飾。當初也是為了寶寶喜好,把家裡裝飾成五彩斑斕的樣子,一切為了孩子,這就是一位合格寶爸的基本素養。
  • 運動課堂 || 體質測試:身高 /體重測試評分標準及方法
    點 擊 上 方 歷城區華山第二小學 關 注 我 們 身高 / 體重測試評分標準 身高
  • LVE視頻引伸計-非接觸式的光學引伸計
    LVE視頻引伸計是一種非接觸式的高精度實時測量系統,它基於單獨的數字相機及實時圖像處理算法,通過拍攝試件實驗過程的圖像,分析圖像特徵變化,可動態實時測量應變、位移、泊松比等多種數據,可與試驗機信號互通,測量應力應變曲線、彈性模量等各種力學性能參數,適用於各類力學測試,如拉伸、壓縮、疲勞、高溫等。