---
# System prepended metadata

title: 從0到有製作自己的CPU！！ 第三周活動記錄 20220719
tags: [' 伴學松', ' 伴學松活動記錄', RISCV]

---

---
tags: RISCV, 伴學松, 伴學松活動記錄
---
# 從0到有製作自己的CPU！！ 第三周活動記錄 20220719

[TOC]

# 直播紀錄連結
{%youtube SOXLZGi5xwI %}

## 出席
- [x] KIM_WENG
- [x] 名名
- [x] chuan
- [x] bill503084699
- [ ] 楓糖
- [x] 謝祥辰
- [x] 黑貓
- [x] sixkwnp
- [ ] Bonki
- [x] ouo314
- [x] Willwho
- [ ] GYLABA
- [x] mikuthebest
- [x] Penquuin
- [ ] 葉子
- [ ] painCake
- [x] EZ4ENCE
- [ ] 頂漿汗腺
- [ ] 角角
- [ ] adam chen

# 討論內容
1. 熟悉decode前的背景知識跟用ripes運行decode的基礎操作。
2. risc-v的各種type（CPU指令）。
3. Q&A補充。
4. 討論下禮拜主題。

# 本周作業
1. 沒寫指令的請補完

# 討論重點
1. 學習Decode前的背景知識概述。
2. Decode基礎概念。
3. Ripes實作RiscV的各種type指令。
4. Compiler, Assembler, Linker
5. 用心智圖描述，Vivado實作Decode。

## 點子/步驟
- 介紹基礎程式執行概念（高階語言->組合語言->機械語言、連結器、載入器）。
[name=第二組]
- 可參考[淺談編譯到鏈結的過程](https://medium.com/@alastor0325/https-medium-com-alastor0325-compilation-to-linking-c07121e2803)、[編譯器(Compiler)與連結器(Linker)的運作原理](https://rexpighj123.pixnet.net/blog/post/207609288-%E7%B7%A8%E8%AD%AF%E5%99%A8(compiler)%E8%88%87%E9%80%A3%E7%B5%90%E5%99%A8(linker)%E7%9A%84%E9%81%8B%E4%BD%9C%E5%8E%9F%E7%90%86)
- all srl sra的算數邏輯。
[name=第二組]
- CPU架構。
[name=第二組]
- Decode運行概念。
[name=第二組]
- 基礎電路學。
[name=第二組]
- 操作軟體(Ripes)，[安裝教學](https://hackmd.io/@accomdemy/BJprQ8Xjc/https%3A%2F%2Fhackmd.io%2F%40accomdemy%2FSyoatR-sc)。
[name=第二組]
- 用ripes輸入不同指令下去跑不同cpu架構。
[name=第二組]
- 用ripes介紹[riscV的各種type編碼指令](http://riscvbook.com/chinese/RISC-V-Reader-Chinese-v2p1.pdf)(P.27)
[name=謝祥辰,Willwho ]
- 點名名教那個ripes軟體操作。
[name=第二組]
- 透過上次各組作業（CPU指令表）計算。
[name=第二組]
- 用程式計算機下去將decode下去把16進制轉換2進制。
[name=第二組]
- 判斷R type, I type...，再判斷opecode, fuction3, function7
[name=第二組]
- 算成二進位刪除末七碼成為opcode，再五碼為rd...
- 舉 **I type** 為例

| `指令` | imm  | rs1  | function3 |  rd  | opcode | `ALU_SIGN` |
| ---- |:----:|:----:|:---------:|:----:|:-------:| -------- |
|      | 七碼 | 五碼 |   三碼    |  |  兩種各七碼   |          |

- 再從opcode分辨是甚麼type。
[name=第二組]
- 再從模擬器去對應各個type表格上的資料。
[name=第二組]
- function3如果有function7資料我們就看function7的資料。
[name=第二組]
- 我打錯S type的單位了是bit 不是byte
[name=第二組]
- 只有R type有function7
[name=第二組]
- 如R type加法運算或減法運算等要依照Function7的code去對照。
[name=第二組]
- 每一個type都是以32bit為基底下去區分是甚麼資料。
[name=第二組]
- DC問所以decode是根據opecode跟function3(and function7)把instruction memory傳來的東西切成特定的片段們嗎。
[name=第二組]
- 每一個指令都要佔據一個opcode，riscV很優雅的盡量塞在32bit裡頭但很有限，R type 17個opcode判斷一個指令，如果我們把opcode全展開幾乎就變成R type，所以riscv盡量精簡化下去變成各種type例如：I type如果是x86對應一個function,就會變成有100bit造成memory效能不佳？因此會造成很多指令，riscV就是將指令精簡化，讓100多bit精簡成32bit里縮減指令減少運算效能。
[name=Willwho]
- ripes有藏彩蛋，全0或全1是會用一個有趣的代稱去取代表示？
[name=第二組]
- 先解opcode再下function3,下去解，如果這個type如果有funciton7要額外算。
[name=第二組]
- 介紹額外的開源專案。
[name=第二組]
- vivado在做的事情就是ripes，原本要從vivado寫decode下去接個上次的ALU但中間少了registers這個module，所以沒辦法直接用vivado下去用decode接上次的ALU程式。
[name=第二組]
- riscV盡量把指令塞成32bit，12bit的數字拆成兩個imm下去除，為何拆，因為S type是儲存，不需要rd,function左移右移都沒關係但線路走的會有問題要固定，rd寫入riscv的功能，rs1 rs2是儲存riscv的功能，盡量分工，為了節儉電路，不然要多拉一個多工器去精簡化，S type是操作記憶體，一個(rs1)存要儲存在記憶體的位置，(rs2)一個是存內容（數值）,程式區域跟陣列，還有平移1byte,willwho舉例……，進入ripes的memory介紹viewer
[name=第二組willwho]
- S type儲存指令
    - ex: sb 1bytes
    - sh 2bytes
    - sw 4bytes
    - sd 8bytes
    [name=第二組]
- 位置加平移量，存到rs2這個位置。
[name=第二組]
- c語言不是有指標嗎？指定到某一個位置，就像是register,某些高階語言,compiler不是直接轉換，會分兩個階段，不同的平台cpu不同，轉換就會不同。高階語言先compiler成組合語言，assembler再轉換成機器語言，透過Linker連結外部的函式庫、外部變數、Library輸出成執行檔。
[name=Bridan補充]
- Rv32I 47種指令，c語言的擴充指令。
[name=willwho]
- Linker要將不同程式之指令的位址連結起來，並跳躍到正確的記憶體位址中。
[name=第二組]
- Linker類似像編輯一樣，將哪個程式指令放在哪裡，外部library linker指定哪個library的哪一頁。
[name=Bridan補充]
- 編譯(留下需要填的空格)->彙編(組譯)->連結(把空格填入真正的指令位址)。
[name=Bridan補充]
- dc問那compiler linker都是用電路實現嗎? (世界上第一台電腦)whillwho回答用verilog實現電路。
[name=第二組willwho]
- 會先執行build，幫你整合compiler linker跟……,按一個鍵就幫你做完，一般programer不會注意到這麼細節的地方或是這種細節。fortran是一個很古老的科學程式語言，當時30年前寫的，當時計算機要建築物等級，當時寫程式要用fortran開發非常早的language, 很多後來的系統繼續延用，寫一個program模擬感應電動機交流電壓，應用數學模型描寫術感應電動機，大約30年前的事情，當時覺得之後幾年之後或是30年後？（不確切bridan讀研究所的年紀）用不到，但讀海洋研究所，有用到超船模擬機，模擬船的運動動態航行，當時是用Fortran,改寫成其他Lauguage。我只有在這邊用到Fortran,未來有用到fortran的各位通常是在有點老舊的研究單位才會碰到。
[name=bridan補充]
- 伴伴學是各個領域或是資深人士或是老師或是學生一起學習的地方，討論下次周四的東西。
[name=黑貓]
- 簡單做個decode，用code接起來，照著will的想法下周四內容
[name=黑貓跟名名]
# 補充
- （我的電腦程式學習歷程）https://4rdp.blogspot.com/2021/09/blog-post.html?m=0