0%

计组实验

计组实验

根据opcode生成控制信号 不同类型指令方式不同(查表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//识别不同类型指令
// r format 0110011
wire rtype = ~Op[6]&Op[5]&Op[4]&~Op[3]&~Op[2]&Op[1]&Op[0]; //0110011
wire i_add = rtype& ~Funct7[6]&~Funct7[5]&~Funct7[4]&~Funct7[3]&~Funct7[2]&~Funct7[1]&~Funct7[0]&~Funct3[2]&~Funct3[1]&~Funct3[0]; // add 0000000 000
...

// 生成控制信号
assign RegWrite = rtype | itype_r | LUI | itype_l; // register write
assign MemWrite = stype; // memory write
assign ALUSrc = itype_r | LUI | itype_l | stype; // ALU B is from instruction immediate

//EXTOp 立即数操作信号 EXT.v查看具体实现
// EXT_CTRL_ITYPE_SHAMT 6'b100000
// EXT_CTRL_ITYPE 6'b010000
// EXT_CTRL_STYPE 6'b001000
// EXT_CTRL_BTYPE 6'b000100
// EXT_CTRL_UTYPE 6'b000010
// EXT_CTRL_JTYPE 6'b000001
assign EXTOp[5] = 0;
assign EXTOp[4] = i_addi | itype_l | i_andi;
assign EXTOp[3] = stype;
assign EXTOp[2] = sbtype;
assign EXTOp[1] = LUI;
assign EXTOp[0] = i_jal;

//用于选择写回寄存器的数据来源
// WDSel_FromALU 2'b00
// WDSel_FromMEM 2'b01
// WDSel_FromPC 2'b10
assign WDSel[1] = i_jal | i_jalr;
assign WDSel[0] = itype_l;
-------------到底咯QAQ嘎嘎-------------