8bits-cpu-model/source/cpu.v
2022-10-07 17:17:24 +08:00

185 lines
3.0 KiB
Verilog

`timescale 1ns / 1ps
module cpu(
input clk,input rst,
output wire [7:0] bus_DR,DR_bus,//dbusÏß
output wire [5:0] MAR_ram,
output wire [27:0] ctrl_signal ,
output wire [7:0] R0,R1,R2,R3,
output wire HALT
);
assign HALT = ctrl_signal[0];
wire [7:0] R_bus,ALU_bus, bus_A,bus_B,bus_IR,bus_PC,bus_R,bus_MAR;
wire [3:0] Tgt1,Tgt2;
wire [5:0] PC_MAR;
wire [7:0] Flag_ALU,ALU_Flag,ALU_Low8,IR_Decoder;
wire IADD,ISUB,IADC,ISBB,IMUL,IDIV,
IINC,IDEC,ISHL,ISHR,INOT,INEG,IAND,IOR,
IJMP,IJA,IJB,IJE,EALU,I0,E0,I1,E1,I2,E2,I3,E3,IF,EF,
EDTB,iwr,IPC,IMPC,IMAR,IIR,IMARB;
wire [7:0] signals;
assign HALT=ctrl_signal[0];
wire [7:0] ram_MAR;
wire IJ;
//always @(posedge rst or posedge ctrl_signal[0]) begin
// if(ctrl_signal[0]) HALT=1;
// else if(rst) HALT=0;
// else HALT=0;
//end
ALU u0(
.clk(clk),
.rst(rst),
.Tgt1(Tgt1),
.Tgt2(Tgt2),
.DR0(R0),
.DR1(R1),
.DR2(R2),
.DR3(R3),
.IADD(IADD),
.ISUB(ISUB),
.IADC(IADC),
.ISBB(ISBB),
.IMUL(IMUL),
.IDIV(IDIV),
.IINC(IINC),
.IDEC(IDEC),
.ISHL(ISHL),
.ISHR(ISHR),
.INOT(INOT),
.INEG(INEG),
.IAND(IAND),
.IOR(IOR),
.IJMP(IJMP),
.IJA(IJA),
.IJB(IJB),
.IJE(IJE),
.EALU(EALU),
.Flags_in(Flag_ALU),
.Flags_out(ALU_Flag),
.Dout(ALU_bus),
.Dout_R1(ALU_Low8),
.IJ(IJ)
);
RA u1(
.clk(clk),
.rst(rst),
.I0(I0),
.E0(E0),
.I1(I1),
.E1(E1),
.I2(I2),
.E2(E2),
.I3(I3),
.E3(E3),
.IF(IF),
.EF(EF),
.IMUL(IMUL),
.IDIV(IDIV),
.Din(bus_R),
.DinA(ALU_Low8),
.Flags_in(ALU_Flag),
.Dout0(R_bus),
.Flags_out(Flag_ALU),
.DR0(R0),
.DR1(R1),
.DR2(R2),
.DR3(R3)
);
//DR u2(
// .clk(clk),
// .IDFR(IDFR),
// .IDFB(IDFB),
// .EDTB(EDTB),
// .Din_RAM(ram_DR),
// .Din_BUS(bus_DR),
// .rst(rst),
// .Dout_RAM(DR_ram),
// .Dout_BUS(DR_bus)
//);
MAR u3(
.clk(clk),
.IMAR(IMAR),
.IMARB(IMARB),
.Din(PC_MAR),
.Din_BUS(ram_MAR),
.rst(rst),
.Dout(MAR_ram)
);
ram_ip u4(
.clk(clk),
.iwr(iwr),
.EDTB(EDTB),
.addr(MAR_ram),
.din(bus_DR),
.dout(DR_bus),
.to_MAR(ram_MAR)
);
PC u5(
.clk(clk),
.IPC(IPC),
.IMPC(IMPC),
.IJ(IJ),
.rst(rst),
.Din(bus_PC),
.Dout(PC_MAR)
);
dbus u6(
.DR_bus(DR_bus),
.R_bus(R_bus),
.ALU_bus(ALU_bus),
.bus_A(bus_A),
.bus_B(bus_B),
.bus_IR(bus_IR),
.bus_PC(bus_PC),
.bus_MAR(bus_MAR),
.bus_R(bus_R),
.bus_DR(bus_DR)
);
IR u7(
.clk(clk),
.rst(rst),
.IIR(IIR),
.Din(bus_IR),
.Dout(IR_Decoder)
);
Decoder u8(
.cmd(IR_Decoder),
.res(ctrl_signal),//26 updatig
.Tgt1(Tgt1),
.Tgt2(Tgt2)
);
SG u9(
.clk(clk),
.rst(rst),
.signals(signals));
Controller u10(
ctrl_signal,
Tgt1,
Tgt2,
signals,
IA,IB,IADD,ISUB,IADC,ISBB,IMUL,IDIV,
IINC,IDEC,ISHL,ISHR,INOT,INEG,IAND,IOR,
IJMP,IJA,IJB,IJE,EALU,I0,E0,I1,E1,I2,E2,I3,E3,IF,EF,
IDFR,IDFB,EDTB,iwr,IPC,IMPC,IMAR,IIR,IMARB
);
endmodule