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