---
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 電路

# 討論重點
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=黑貓]