---
# System prepended metadata

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

---

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

[TOC]

# 直播紀錄連結

{%youtube HoC87GBq2HA%}

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

# 討論內容

1. 複習原本前兩周的內容
2. 幫助第三組複習
3. 討論下次這周星期四談論的主題

# 本周作業

- 利用Verilog 實現 Decode 電路
![](https://i.imgur.com/SL7B0Pp.png)

# 討論重點

1. 前兩周的主題ALU,decode,幫大家溫故新知
2. 看還有沒有其他補充
3. 各組組長補充

## 點子 / 撇步
- decode告訴暫存器跟alu要做什麼，compyler 
[name= 第三組]
- compiler既然這麼運算強，那它怎麼知道這是加法器還是減法器，
[name= 黑貓]
- rv32i沒有加減除法，不太會用到
[name= kim]
- decode 接收risc-v指令並解釋出opcode 跟reg
- decode運算完之後再交給alu判斷？
[name=第三組]
- 將上次的code去做註解
[name=第三組]
- 用case寫，opcode 寫r type 看她的function3 若都一樣就是function7,所有type寫完opcode如果寫完就變成六大組
[name=第三組]
- timescale 時間單位／時間精度,不用打宣告input
[name=第三組]
- initial……
- always每多久就會一直lup它
[name=第三組]
- alway後面寫錯，要寫在initial外面，alway本身不能裡面有initial，
[name=第三組]
- always block裡面不能有assign
[name=第三組]
- 寫指令花比較久的時間，sll左移的情況
[name=第三組]
- hdl在做的底層就是在alu在做的，opcode去下一步特地alu去動作給什麼值加減法，decode解出opcode rs1 rs2 imm lui mv 東西拆開去判斷，轉換成alu看得懂的底層機器語言，由二進位去轉換成機器看得懂
[name=willwho]
- sel其實就是decode解出來的alu的opcode,rs1等於in1,rs2等於rs2,out=rd
[name=第三組]
- decipedia, risc v就是壓縮對齊，設備互相傳輸常常用到，tcp的封包也類似risc v的壓縮簡化整理，分成不同6個type位置整理的好了，用同一條線跟路徑可以分到不同alu去處理，dctime有反應輸出的opcode給alu去處理一定要很確定準確，指揮alu做加法你必須告訴他opcode function3 function7可以做什麼，如果都同一路徑會造成電路運算複雜造成要額外增加多工器去處理,
[name=willwho]
- rs 的s是source,rd的d是destination 
[name=第三組]
- 各種coman壓縮，內容補充，
[name=bridan]
- absorber,led的閃爍 ，register是outl0，這樣子的cpu怎麼控制閃爍，特殊的memory，register相連alu，out=1 led閃爍 對應MOV OUTL,#1
[name=bridan]
- （1）是參數一（2）參數二，register2=cpu的焊角輸出，設一個a空一格，如果這個a扣到0又減1，led由亮變滅的動作，loop往下掉，assembler 程式在幹嘛
[name=bridan]
- 為什麼要有dff?，到底資料要怎麼存起來，當初的設想假設一條線循環下去資料就儲存起來，但是在裡面老圈圈沒寫新資料寫進去，再拉一條線來出來，write an able,多工器就像是多工器，像是一個開關，寫資料的開關，寫另一個資料，寫另一個資料，讓資料在裡面群環，當初cpu設計的設想 ，我們的多工器會有問題，里面有很多邏輯砸抖起來的，0變成1一直連閃，組合邏輯compiler loop，會爆掉連閃，那我們設一個牆壁如果衝過來會停住，額外加一個按鈕，inverter,如果設計一個牆壁，depflfot?,加入我們寫資料，跑過來，不想改寫資料，那就clock敲過去就會送過去，牆壁打開才會送過來，讀資料因為已經儲存了，因此register出來就再讀就好了，短短的52行的畫面，沒有很嚇人，write data d d f ,clk是牆壁，震源出發的clock,<=震源數 ＝ 等於<=，那我們read 呢，我們的write讀入reg讀出，用組合邏輯讀出來，到時候我們的電路會長這樣樣子 ，what addr1 addr2 we  輸出reg1_data_i reg2_data_I 我們會把兩個reg讀出ess,add1資料從reg1拿出來，addr2從reg2拿出來
[name=kim]
- inshotion ip模塊，我們在解碼的時候，因為code很長，rs1 rs2分別選位置，decode模塊會接在rs1 rs2,接位置選擇的線，rs1 rs2接到register data1 data2 data再傳到decode模塊裡面，到時候會有top module，負責要把top＿module把兩個子模塊接起來
[name=Kim]
- 有些指令不是從rs2 data2拿指令，而是從imm里偷拿拿資料，我們解碼opcode0到6判斷是否是imm的指令，如果type裡面沒有rs2就要從imm拿值去補沒有rs2的值的type,可以從多工器去挑，id模塊要降階，imm ，register,motiprasher這邊講得東西
[name=第三組]
- r i type 長很像，sli,opcode就會往下傳就是因為還有亂七八糟的東西，要讓alu去做更多東西
[name=第三組]
- ad sub是不用存取記憶體的，memory要回傳到register去做回傳，
[name=第三組]
- 最後在實現potecomter 拿指令拿到decode解碼，rs1rs2送到dataregister再送到alu送到memory writer data再寫到register去loop去回傳，decode解碼解出來對不對，再看demodule的波形圖 ，之後要用到子電路寫法
[name=第三組]
- write anable放下來就是讀，會多一條線read anable要拉起來就是讀，兩個放下來就是什麼都沒幹嘛，如果兩個都拉出來，會造成延遲，write還沒寫read會先讀出來，會有read1 read2，假如write＝read data 就不過 rental,為了過 d d f ，他們兩個一樣的話rdata2 =…
[name=will]
- rs32i 底層有一個是0，如果因此在設定要額外給一個0的值詳情請看Kim code,write data 就不要寫
[name=kim]
- ripe這個軟體就是把多工器放在外面
[name=第三組]
- 最陽春版 dff
[name=黑貓]
