---
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那些的吧 !-->