// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
//
|
//
|
// This file is part of the M32632 project
|
// This file is part of the M32632 project
|
// http://opencores.org/project,m32632
|
// http://opencores.org/project,m32632
|
//
|
//
|
// Filename: STEUERUNG.v
|
// Filename: STEUERUNG.v
|
// Version: 2.0
|
// Version: 3.0
|
// History: 1.0 first release of 30 Mai 2015
|
// Date: 2 December 2018
|
// Date: 14 August 2016
|
|
//
|
//
|
// Copyright (C) 2016 Udo Moeller
|
// Copyright (C) 2018 Udo Moeller
|
//
|
//
|
// This source file may be used and distributed without
|
// This source file may be used and distributed without
|
// restriction provided that this copyright statement is not
|
// restriction provided that this copyright statement is not
|
// removed from the file and that any derivative work contains
|
// removed from the file and that any derivative work contains
|
// the original copyright notice and the associated disclaimer.
|
// the original copyright notice and the associated disclaimer.
|
//
|
//
|
// This source file is free software; you can redistribute it
|
// This source file is free software; you can redistribute it
|
// and/or modify it under the terms of the GNU Lesser General
|
// and/or modify it under the terms of the GNU Lesser General
|
// Public License as published by the Free Software Foundation;
|
// Public License as published by the Free Software Foundation;
|
// either version 2.1 of the License, or (at your option) any
|
// either version 2.1 of the License, or (at your option) any
|
// later version.
|
// later version.
|
//
|
//
|
// This source is distributed in the hope that it will be
|
// This source is distributed in the hope that it will be
|
// useful, but WITHOUT ANY WARRANTY; without even the implied
|
// useful, but WITHOUT ANY WARRANTY; without even the implied
|
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
// PURPOSE. See the GNU Lesser General Public License for more
|
// PURPOSE. See the GNU Lesser General Public License for more
|
// details.
|
// details.
|
//
|
//
|
// You should have received a copy of the GNU Lesser General
|
// You should have received a copy of the GNU Lesser General
|
// Public License along with this source; if not, download it
|
// Public License along with this source; if not, download it
|
// from http://www.opencores.org/lgpl.shtml
|
// from http://www.opencores.org/lgpl.shtml
|
//
|
//
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
//
|
//
|
// Modules contained in this file:
|
// Modules contained in this file:
|
// STEUERUNG The control logic of M32632
|
// STEUERUNG The control logic of M32632
|
//
|
//
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
module STEUERUNG( BCLK, BRESET, DC_ACC_DONE, ACB_ZERO, DONE, INT_N, NMI_N, DC_ABORT, IC_INIT, DC_INIT, SAVE_PC, CFG,
|
module STEUERUNG( BCLK, BRESET, DC_ACC_DONE, ACB_ZERO, DONE, INT_N, NMI_N, DC_ABORT, IC_INIT, DC_INIT, SAVE_PC, CFG,
|
IACC_STAT, PROT_ERROR, IC_DIN, PC_NEW, PSR, STRING, TRAPS, IC_READ, DATA_HOLD, LD_DIN, LD_IMME,
|
IACC_STAT, PROT_ERROR, IC_DIN, PC_NEW, PSR, STRING, TRAPS, IC_READ, DATA_HOLD, LD_DIN, LD_IMME,
|
WREN, WR_REG, GENSTAT, ILO, COP_OP, IC_USER, ACC_FELD, DISP, IC_TEX, IMME_Q, INFO_AU, LD_OUT,
|
WREN, WR_REG, GENSTAT, ILO, COP_OP, IC_USER, ACC_FELD, DISP, IC_TEX, IMME_Q, INFO_AU, LD_OUT,
|
DETOIP, MMU_UPDATE, OPER, PC_ARCHI, PC_ICACHE, RDAA, RDAB, START, WMASKE, WRADR, RWVAL, Y_INIT,
|
DETOIP, MMU_UPDATE, OPER, PC_ARCHI, PC_ICACHE, RDAA, RDAB, START, WMASKE, WRADR, RWVAL, Y_INIT,
|
ENA_HK, STOP_CINV );
|
ENA_HK, STOP_CINV );
|
|
|
input BCLK;
|
input BCLK;
|
input BRESET;
|
input BRESET;
|
input DC_ACC_DONE;
|
input DC_ACC_DONE;
|
input ACB_ZERO;
|
input ACB_ZERO;
|
input DONE;
|
input DONE;
|
input INT_N;
|
input INT_N;
|
input NMI_N;
|
input NMI_N;
|
input DC_ABORT;
|
input DC_ABORT;
|
input IC_INIT;
|
input IC_INIT;
|
input DC_INIT;
|
input DC_INIT;
|
input SAVE_PC;
|
input SAVE_PC;
|
input Y_INIT;
|
input Y_INIT;
|
input [8:0] CFG;
|
input [8:0] CFG;
|
input [3:0] IACC_STAT;
|
input [3:0] IACC_STAT;
|
input PROT_ERROR;
|
input PROT_ERROR;
|
input [31:0] IC_DIN;
|
input [31:0] IC_DIN;
|
input [31:0] PC_NEW;
|
input [31:0] PC_NEW;
|
input [11:0] PSR;
|
input [11:0] PSR;
|
input [4:0] STRING;
|
input [4:0] STRING;
|
input [5:0] TRAPS;
|
input [5:0] TRAPS;
|
input STOP_CINV;
|
input STOP_CINV;
|
|
|
output IC_READ;
|
output IC_READ;
|
output DATA_HOLD;
|
output DATA_HOLD;
|
output LD_DIN;
|
output LD_DIN;
|
output LD_IMME;
|
output LD_IMME;
|
output WREN;
|
output WREN;
|
output WR_REG;
|
output WR_REG;
|
output [2:0] GENSTAT;
|
output [2:0] GENSTAT;
|
output IC_USER;
|
output IC_USER;
|
output [14:0] ACC_FELD;
|
output [14:0] ACC_FELD;
|
output [31:0] DISP;
|
output [31:0] DISP;
|
output [2:0] IC_TEX;
|
output [2:0] IC_TEX;
|
output [31:0] IMME_Q;
|
output [31:0] IMME_Q;
|
output [6:0] INFO_AU;
|
output [6:0] INFO_AU;
|
output [1:0] LD_OUT;
|
output [1:0] LD_OUT;
|
output [12:0] DETOIP;
|
output [12:0] DETOIP;
|
output [1:0] MMU_UPDATE;
|
output [1:0] MMU_UPDATE;
|
output [10:0] OPER;
|
output [10:0] OPER;
|
output [31:0] PC_ARCHI;
|
output [31:0] PC_ARCHI;
|
output [31:0] PC_ICACHE;
|
output [31:0] PC_ICACHE;
|
output [7:0] RDAA;
|
output [7:0] RDAA;
|
output [7:0] RDAB;
|
output [7:0] RDAB;
|
output [1:0] START;
|
output [1:0] START;
|
output [1:0] WMASKE;
|
output [1:0] WMASKE;
|
output [5:0] WRADR;
|
output [5:0] WRADR;
|
output [2:0] RWVAL;
|
output [2:0] RWVAL;
|
output ENA_HK;
|
output ENA_HK;
|
output ILO;
|
output ILO;
|
output [23:0] COP_OP;
|
output [23:0] COP_OP;
|
|
|
wire [55:0] OPREG;
|
wire [55:0] OPREG;
|
wire IC_ABORT;
|
wire IC_ABORT;
|
wire INIT_DONE;
|
wire INIT_DONE;
|
wire UNDEF;
|
wire UNDEF;
|
wire ILLEGAL;
|
wire ILLEGAL;
|
wire [2:0] ANZ_VAL;
|
wire [2:0] ANZ_VAL;
|
wire [31:0] PC_SAVE;
|
wire [31:0] PC_SAVE;
|
wire NEW;
|
wire NEW;
|
wire RESTART;
|
wire RESTART;
|
wire STOP_IC;
|
wire STOP_IC;
|
wire [1:0] ALSB;
|
wire [1:0] ALSB;
|
wire [2:0] USED;
|
wire [2:0] USED;
|
wire NEXT_ADR;
|
wire NEXT_ADR;
|
wire NEW_PC;
|
wire NEW_PC;
|
wire NEXT_PCA;
|
wire NEXT_PCA;
|
wire LOAD_PC;
|
wire LOAD_PC;
|
wire [31:0] DISP_BR;
|
wire [31:0] DISP_BR;
|
|
|
DECODER BEFEHLS_DEC(
|
DECODER BEFEHLS_DEC(
|
.BCLK(BCLK),
|
.BCLK(BCLK),
|
.BRESET(BRESET),
|
.BRESET(BRESET),
|
.ACC_DONE(DC_ACC_DONE),
|
.ACC_DONE(DC_ACC_DONE),
|
.ACB_ZERO(ACB_ZERO),
|
.ACB_ZERO(ACB_ZERO),
|
.DONE(DONE),
|
.DONE(DONE),
|
.NMI_N(NMI_N),
|
.NMI_N(NMI_N),
|
.INT_N(INT_N),
|
.INT_N(INT_N),
|
.DC_ABORT(DC_ABORT),
|
.DC_ABORT(DC_ABORT),
|
.IC_ABORT(IC_ABORT),
|
.IC_ABORT(IC_ABORT),
|
.INIT_DONE(INIT_DONE),
|
.INIT_DONE(INIT_DONE),
|
.UNDEF(UNDEF),
|
.UNDEF(UNDEF),
|
.ILL(ILLEGAL),
|
.ILL(ILLEGAL),
|
.IC_READ(IC_READ),
|
.IC_READ(IC_READ),
|
.ANZ_VAL(ANZ_VAL),
|
.ANZ_VAL(ANZ_VAL),
|
.CFG(CFG),
|
.CFG(CFG),
|
.OPREG(OPREG),
|
.OPREG(OPREG),
|
.PC_SAVE(PC_SAVE),
|
.PC_SAVE(PC_SAVE),
|
.PSR(PSR),
|
.PSR(PSR),
|
.STRING(STRING),
|
.STRING(STRING),
|
.TRAPS(TRAPS),
|
.TRAPS(TRAPS),
|
.NEW(NEW),
|
.NEW(NEW),
|
.WREN(WREN),
|
.WREN(WREN),
|
.LD_DIN(LD_DIN),
|
.LD_DIN(LD_DIN),
|
.LD_IMME(LD_IMME),
|
.LD_IMME(LD_IMME),
|
.NEXT_PCA(NEXT_PCA),
|
.NEXT_PCA(NEXT_PCA),
|
.WR_REG(WR_REG),
|
.WR_REG(WR_REG),
|
.LOAD_PC(LOAD_PC),
|
.LOAD_PC(LOAD_PC),
|
.GENSTAT(GENSTAT),
|
.GENSTAT(GENSTAT),
|
.RESTART(RESTART),
|
.RESTART(RESTART),
|
.STOP_IC(STOP_IC),
|
.STOP_IC(STOP_IC),
|
.ACC_FELD(ACC_FELD),
|
.ACC_FELD(ACC_FELD),
|
.DISP(DISP),
|
.DISP(DISP),
|
.DISP_BR(DISP_BR),
|
.DISP_BR(DISP_BR),
|
.IMME_Q(IMME_Q),
|
.IMME_Q(IMME_Q),
|
.INFO_AU(INFO_AU),
|
.INFO_AU(INFO_AU),
|
.LD_OUT(LD_OUT),
|
.LD_OUT(LD_OUT),
|
.DETOIP(DETOIP),
|
.DETOIP(DETOIP),
|
.MMU_UPDATE(MMU_UPDATE),
|
.MMU_UPDATE(MMU_UPDATE),
|
.OPER(OPER),
|
.OPER(OPER),
|
.RDAA(RDAA),
|
.RDAA(RDAA),
|
.RDAB(RDAB),
|
.RDAB(RDAB),
|
.START(START),
|
.START(START),
|
.USED(USED),
|
.USED(USED),
|
.WMASKE(WMASKE),
|
.WMASKE(WMASKE),
|
.WRADR(WRADR),
|
.WRADR(WRADR),
|
.RWVAL(RWVAL),
|
.RWVAL(RWVAL),
|
.ENA_HK(ENA_HK),
|
.ENA_HK(ENA_HK),
|
.ILO(ILO),
|
.ILO(ILO),
|
.COP_OP(COP_OP),
|
.COP_OP(COP_OP),
|
.STOP_CINV(STOP_CINV),
|
.STOP_CINV(STOP_CINV),
|
.PHOUT());
|
.PHOUT());
|
|
|
ILL_UNDEF CHECKER(
|
ILL_UNDEF CHECKER(
|
.USER(PSR[8]),
|
.USER(PSR[8]),
|
.ANZ_VAL(ANZ_VAL),
|
.ANZ_VAL(ANZ_VAL),
|
.CFG(CFG[3:1]),
|
.CFG(CFG[3:1]),
|
.OPREG(OPREG[23:0]),
|
.OPREG(OPREG[23:0]),
|
.ILL(ILLEGAL),
|
.ILL(ILLEGAL),
|
.UNDEF(UNDEF));
|
.UNDEF(UNDEF));
|
|
|
OPDEC_REG OPC_REG(
|
OPDEC_REG OPC_REG(
|
.BCLK(BCLK),
|
.BCLK(BCLK),
|
.BRESET(BRESET),
|
.BRESET(BRESET),
|
.NEW(NEW),
|
.NEW(NEW),
|
.DC_INIT(DC_INIT),
|
.DC_INIT(DC_INIT),
|
.IC_INIT(IC_INIT),
|
.IC_INIT(IC_INIT),
|
.Y_INIT(Y_INIT),
|
.Y_INIT(Y_INIT),
|
.RESTART(RESTART),
|
.RESTART(RESTART),
|
.STOP_IC(STOP_IC),
|
.STOP_IC(STOP_IC),
|
.ACC_STAT(IACC_STAT),
|
.ACC_STAT(IACC_STAT),
|
.PROT_ERROR(PROT_ERROR),
|
.PROT_ERROR(PROT_ERROR),
|
.ALSB(ALSB),
|
.ALSB(ALSB),
|
.IC_DIN(IC_DIN),
|
.IC_DIN(IC_DIN),
|
.USED(USED),
|
.USED(USED),
|
.IC_READ(IC_READ),
|
.IC_READ(IC_READ),
|
.NEXT_ADR(NEXT_ADR),
|
.NEXT_ADR(NEXT_ADR),
|
.DATA_HOLD(DATA_HOLD),
|
.DATA_HOLD(DATA_HOLD),
|
.NEW_PC(NEW_PC),
|
.NEW_PC(NEW_PC),
|
.ABORT(IC_ABORT),
|
.ABORT(IC_ABORT),
|
.INIT_DONE(INIT_DONE),
|
.INIT_DONE(INIT_DONE),
|
.ANZ_VAL(ANZ_VAL),
|
.ANZ_VAL(ANZ_VAL),
|
.IC_TEX(IC_TEX),
|
.IC_TEX(IC_TEX),
|
.OPREG(OPREG));
|
.OPREG(OPREG));
|
|
|
PROG_COUNTER PCS(
|
PROG_COUNTER PCS(
|
.BCLK(BCLK),
|
.BCLK(BCLK),
|
.BRESET(BRESET),
|
.BRESET(BRESET),
|
.NEXT_ADR(NEXT_ADR),
|
.NEXT_ADR(NEXT_ADR),
|
.NEW_PC(NEW_PC),
|
.NEW_PC(NEW_PC),
|
.NEXT_PCA(NEXT_PCA),
|
.NEXT_PCA(NEXT_PCA),
|
.NEW(NEW),
|
.NEW(NEW),
|
.LOAD_PC(LOAD_PC),
|
.LOAD_PC(LOAD_PC),
|
.USER(PSR[8]),
|
.USER(PSR[8]),
|
.SAVE_PC(SAVE_PC),
|
.SAVE_PC(SAVE_PC),
|
.FPU_TRAP(TRAPS[0]),
|
.FPU_TRAP(TRAPS[0]),
|
.ADIVAR(INFO_AU[3]),
|
.ADIVAR(INFO_AU[3]),
|
.DISP(DISP_BR),
|
.DISP(DISP_BR),
|
.PC_NEW(PC_NEW),
|
.PC_NEW(PC_NEW),
|
.USED(USED),
|
.USED(USED),
|
.IC_USER(IC_USER),
|
.IC_USER(IC_USER),
|
.ALSB(ALSB),
|
.ALSB(ALSB),
|
.PC_ARCHI(PC_ARCHI),
|
.PC_ARCHI(PC_ARCHI),
|
.PC_ICACHE(PC_ICACHE),
|
.PC_ICACHE(PC_ICACHE),
|
.PC_SAVE(PC_SAVE));
|
.PC_SAVE(PC_SAVE));
|
|
|
endmodule
|
endmodule
|
|
|