Implement CPU Controller
This commit is contained in:
71
Controller.sv
Normal file
71
Controller.sv
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
`default_nettype none
|
||||||
|
|
||||||
|
module Controller(
|
||||||
|
input var logic clock,
|
||||||
|
input var logic reset,
|
||||||
|
input var logic[7:0] databus,
|
||||||
|
|
||||||
|
output var logic[1:0] opcode,
|
||||||
|
output var logic regs_set,
|
||||||
|
output var logic[2:0] regs_savesel,
|
||||||
|
output var logic[2:0] regs_loadsel,
|
||||||
|
output var logic[2:0] alu_opc,
|
||||||
|
output var logic[2:0] cond_opc,
|
||||||
|
output var logic pc_set
|
||||||
|
);
|
||||||
|
|
||||||
|
var logic[5:0] arg;
|
||||||
|
var logic[2:0] arg0;
|
||||||
|
var logic[2:0] arg1;
|
||||||
|
assign opcode = databus[7:6];
|
||||||
|
assign arg = databus[5:0];
|
||||||
|
assign arg0 = databus[2:0];
|
||||||
|
assign arg1 = databus[5:3];
|
||||||
|
|
||||||
|
always @(posedge clock or posedge reset) if (reset) begin
|
||||||
|
regs_set = 1'b0;
|
||||||
|
regs_savesel = 3'b000;
|
||||||
|
regs_loadsel = 3'b000;
|
||||||
|
alu_opc = 3'b000;
|
||||||
|
cond_opc = 3'b000;
|
||||||
|
pc_set = 1'b0;
|
||||||
|
end else case (opcode)
|
||||||
|
2'b00: begin
|
||||||
|
// Load
|
||||||
|
regs_set = 1'b1;
|
||||||
|
regs_savesel = 3'b000; // Always save to reg0
|
||||||
|
regs_loadsel = 3'b000;
|
||||||
|
alu_opc = 3'b000;
|
||||||
|
cond_opc = 3'b000;
|
||||||
|
pc_set = 1'b0;
|
||||||
|
end
|
||||||
|
2'b01: begin
|
||||||
|
// ALU
|
||||||
|
regs_set = 1'b1;
|
||||||
|
regs_savesel = 3'b011; // Always save to reg3
|
||||||
|
regs_loadsel = 3'b000;
|
||||||
|
alu_opc = arg0;
|
||||||
|
cond_opc = 3'b000;
|
||||||
|
pc_set = 1'b0;
|
||||||
|
end
|
||||||
|
2'b10: begin
|
||||||
|
// Copy
|
||||||
|
regs_set = 1'b1;
|
||||||
|
regs_savesel = arg0;
|
||||||
|
regs_loadsel = arg1;
|
||||||
|
alu_opc = 3'b000;
|
||||||
|
cond_opc = 3'b000;
|
||||||
|
pc_set = 1'b0;
|
||||||
|
end
|
||||||
|
2'b11: begin
|
||||||
|
// Cond
|
||||||
|
regs_set = 1'b0;
|
||||||
|
regs_savesel = 3'b000;
|
||||||
|
regs_loadsel = 3'b000;
|
||||||
|
alu_opc = 3'b000;
|
||||||
|
cond_opc = arg0;
|
||||||
|
pc_set = 1'b1;
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
|
||||||
|
endmodule
|
Reference in New Issue
Block a user