---
# System prepended metadata

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

---

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

[TOC]

# 直播紀錄連結

{%youtube hy_G3VBocFg %}

## 出席
- [x] KIM_WENG
- [x] 名名
- [ ] chuan
- [x] bill503084699
- [ ] 楓糖
- [x] 謝祥辰
- [x] 黑貓
- [x] sixkwnp
- [ ] Bonki
- [x] ouo314
- [x] Willwho
- [x] GYLABA
- [x] mikuthebest
- [x] Penquuin
- [x] 葉子
- [ ] painCake
- [x] EZ4ENCE
- [ ] 頂漿汗腺
- [ ] 角角
- [ ] adam chen
# 討論內容
- 手把手帶pc code 與 instr_memory code top_tb code
```verilog=
module top_tb();
    reg[31:0]INST;
    wire[31:0]a,b,rd_dt;
    
    wire[15:0] opcode;
    wire[4:0] rd_a, rs1_a, rs2_a;
    wire[31:0] imm;
    reg clk;
    reg res;
    wire[31:0]pc;
    wire[31:0]pc_old;
    wire pe_en;
    pc    _pc(clk,res,pc_en,pc,pc_old);
    instr_memroy    -instr_memory(pc,pc_en,INST);
    decode_decode(INST,opcode,rd_a,rs1_a,rs2_a,imm);
    regfile _regfile(.rest(res),.we(1'b1),.rs2_a(rs2_a),.rd_a(rd_a),.rd_dt(rd_dt),.rs1_dt(rs1_dt),.rs2_dt(rs2_dt))
    alu   _alu(a,b,opcode, imm, rd_dt);
    
    initial begin
        clk = 0;
        res = 0;
        #1 res =1;
        forever #1 clk = ~clk;
   
    end
endmodule
        
```
```verilog=
module pc(
    input clk.
    input res,
    input En,
    output [31:0]pc,
    output [31:0]pc old,

);
    reg[] pc_reg= 32'h00000000;
    reg[] pc_old;

    always@(posedge clk or negedge res)
        begin
            if(res==1'b0)
                begin
                    pc_reg=0;
                    pc_old_reg=0;
                end
            else if(En=1'b1)
                begin
                    pc_reg<+pc_reg+3'b100;
                    pc_old_reg<+pc_reg;
                end
            else 
                begin 
                    pc_reg=pc_reg;
                end
        end
    assign pc=pc_reg;
    assign pc_old =pc_old_reg;
    
endmodule
            
    
```
```verilog=
module instr_memory(
    input[31:0]Addr,
    output pc_en,
    output[31:0]INST

);
    reg [7:0] INST_memory[0:1023];
    reg [31:0] INST_reg;
    initial begin
        {INST_memory[0],INST_memory[1],INST_memory[2],INST_memory[3]}=32'h00900513;
        {INST_memory[4],INST_memory[5],INST_memory[6],INST_memory[7]}=32'h00600593;
        {INST_memory[8],INST_memory[9],INST_memory[10],INST_memory[11]}=32'h00b0633;
        {INST_memory[12],INST_memory[13],INST_memory[14],INST_memory[15]}=32'h40b506b3;
        {INST_memory[16],INST_memory[17],INST_memory[18],INST_memory[19]}=32'h00d67733;
        {INST_memory[20],INST_memory[21],INST_memory[22],INST_memory[23]}=32'h0000000;
    end
    assign INST_reg={INST_memory[Addr],INST_memory[Addr+1],INST_memory[Addr+2],INST_memory[Addr+3]};
    assign pc_en =(INST_reg==32'h0000000)? 1'b0:1'b1;
    assgin INST=INST_reg;
    
endmodule
```


# 本周作業

- 直接寫出 top_tb跟instr_memory跟pc

# 討論重點
1. program counter 裏頭 register 的 code 和 instruction memory
2. 討論下周主題
3. 證書
4. 整體架構目標(branch)
## 點子 / 撇步
- 討論主題內容就是上次講的 program counter的 code 跟 instruction memory 
[name=第二組]
- 討論 program counter 跟 instrution memroy 的 code 細節
[name=第二組]
- 存法是用8bit
[name=第二組]
- 祥辰寫出的 memory 跟 Github 不同，其他大致相似
[name=第二組]
- 32bits 四個一組 (祥辰) 或者像 Kim Weng 一樣除四
[name=第二組]
- 用四個一組的方式
- top 直接拉到 testbench 而 simulation 也不用特別拉出來
[name=第二組]
- 波型模擬器 不能放大vivado
[name=黑貓]
- 討論證書意見
[name=第二組]
- RiscV是重點，有空才設計證書 (找Erin)
[name=第二組]
- 再排兩週把後面的重要東西做完
[name=第二組]
<!-- 
- six 我聽不懂黑貓的專業術語 所以這兩周的主題是啥
- 好喔謝謝剩餘指令喔......我覺得 我真的會陣亡了
- 而且之後真的要去印刷公司，感覺我要先錄起來放在yt……
- qq
喔喔喔 就是把剩下的部件做完 data memory那些的吧 !-->

