---
# System prepended metadata

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

---

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

[TOC]

# 直播紀錄連結

{%youtube dzTuhBPJfAQ%}

## 出席
- [x] KIM_WENG
- [x] 名名
- [ ] chuan
- [ ] bill503084699
- [ ] 楓糖
- [x] 謝祥辰
- [x] 黑貓
- [x] sixkwnp
- [ ] Bonki
- [x] ouo314
- [x] Willwho
- [ ] GYLABA
- [ ] mikuthebest
- [x] Penquuin
- [x] 葉子
- [ ] painCake
- [x] EZ4ENCE
- [ ] 頂漿汗腺
- [x] 角角
- [ ] adam chen
# 討論內容
1. 做Jmp
2. 大改程式 

# 本周作業

# 討論重點
1. PC線
2. 改程式
    - 註解 pc next
    - pc 內改成 if(!reset)
```verilog=
if(!reset) begin
    pc <= 0;
end
else if(jump_enable) begin
    pc <= jump_addr;
end
else begin
    pc <= pc + 3'h4;
end
``` 
    - pc.v 修改部分
## 點子 / 撇步
- adder +4後，重新傳回PC，再傳給IM指令地址
- 目前打算把PC前的MUX寫在PC內
[name=第一組]
- ![](https://i.imgur.com/zkWuSDy.png)
[name=黑貓提供的想法]
- ![](https://i.imgur.com/xm97Wv3.png)
送給ALU
- ALU上面的MUX是給PC的，第二個MUX是留給imm的
[name=Kim Weng]
- ![](https://i.imgur.com/jC3N1vU.png)示意圖
[name=黑貓]
- pc(送入IM) 跟 pc+4(送回pc) 兩個都要輸出
[name=Willwho]
- jmp_enable裡面，輸出的pc也是jump_addr
[name=Willwho]
- ![](https://i.imgur.com/RKfpl1u.png)
[name=Kim Weng]
    - 00指令會被吃掉
    [name=謝祥辰]
- ![](https://i.imgur.com/ynmJ5dD.jpg)
[name=Willwho]
- ![](https://i.imgur.com/IXkgUMf.png)
[name=謝祥辰]


# 場外問題
- Q: 請問在always塊裡面如果有沒用到其中一個input會錯嗎?
[name=Penquuin]
```verilog=
module x(
input a,
input b,
output c
);
always@(*) begin
  case(b)
    1'b0: c = a;
    1'b1: c = b; // a沒被用到
  endcase
end
endmodule
```
    - Ans: 不會
- Q: 如果寫c=1'b0會出事嗎?
[name=Penquuin]
```
- Ans: 應該不會
```
# 場外分享
#### pc.v
- [name=黑貓]
```verilog=
module pc(
    input           clk,
    input           reset,

    input  [31:0]   pc_in,
    input           jmp_enable,

    output [31:0]   pc_next,
    output [31:0]   pc
);

    always @(posedge clk or negedge reset) begin
        if(reset == 1'b1) begin
            pc      <= 0;
            pc_next <= 3'h4;
        end
        else begin
            pc <= pc_in;
            pc_next <= pc_in + 3'h4;
        end
    end

endmodule
```
- pc_in只有從jmp來
[name=Willwho]
- 黑貓的想法是把mux分出來
[name=黑貓]
#### pc.v
- [name=Willwho]
![](https://i.imgur.com/0YqJh6n.png)
![](https://i.imgur.com/SlhVZOU.png)
- 三個module分開
[name=Willwho]
#### pc.v
- [name=謝祥辰]
```verilog=
module pc(
    input           clk,
    input           reset,

    input  [31:0]   jump_addr,
    input           jmp_enable,

    output reg [31:0]   pc_next,
    output reg [31:0]   pc
);
    always @(posedge clk or negedge reset) begin
        if(reset == 1'b1) begin
            pc      <= 0;
            pc_next <= 0;
        end
        else if(jmp_enable)
        begin
           pc_next<=jump_addr+3'b100;
           pc<=jump_addr;
        end
        else
        begin
           pc_next<=pc_next+3'b100;
           pc<=pc_next;
        end
    end
    
    
endmodule
```