---
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=第一組]
- 
[name=黑貓提供的想法]
- 
送給ALU
- ALU上面的MUX是給PC的,第二個MUX是留給imm的
[name=Kim Weng]
- 示意圖
[name=黑貓]
- pc(送入IM) 跟 pc+4(送回pc) 兩個都要輸出
[name=Willwho]
- jmp_enable裡面,輸出的pc也是jump_addr
[name=Willwho]
- 
[name=Kim Weng]
- 00指令會被吃掉
[name=謝祥辰]
- 
[name=Willwho]
- 
[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]


- 三個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
```