| module maindec (input [6:0] op, | |
| output memtoreg, memwrite, | |
| output branch, alusrc, | |
| output regwrite, | |
| output storepc, | |
| output pcadd, | |
| output pcext, | |
| output [2:0] imm, | |
| output [2:0] aluop, | |
| output auipc_cntrl, | |
| output memread, | |
| input gt, lt, eq, | |
| output suspend); | |
| reg [16:0] controls; | |
| assign {memread, auipc_cntrl, pcadd, pcext, suspend, regwrite, alusrc, | |
| branch, memwrite, | |
| memtoreg, storepc, aluop, imm} = controls; | |
| always @(*) | |
| case(op) | |
| 7'b011_0011: controls <= 17'b00000100_000_010_000; // R | |
| 7'b000_0011: controls <= 17'b10000110_010_100_000; // LW | |
| 7'b010_0011: controls <= 17'b00000010_100_100_001; // SW | |
| 7'b110_0011: controls <= 17'b00110011_000_000_010; // BXX | |
| 7'b110_1111: controls <= 17'b00110110_001_000_011; // JAL/J | |
| 7'b001_0011: controls <= 17'b00000110_000_000_000; // ADDI/ORI | |
| 7'b011_0111: controls <= 17'b00000110_000_000_100; // LUI | |
| 7'b111_0011: controls <= 17'b00001000_000_000_000; // ecall/ebreak | |
| 7'b110_0111: controls <= 17'b00000110_001_000_000; // JALR/JR | |
| 7'b001_0111: controls <= 17'b01100110_000_000_100; // AUIPC | |
| default: controls <= 17'b00000000_000_000_000; // default | |
| endcase // case (op) | |
| endmodule // maindec |