Line 1... |
Line 1... |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
//
|
//
|
// 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: DATENPFAD.v
|
// Filename: DATENPFAD.v
|
// Version: 2.0
|
// Version: 3.0 Cache Interface reworked
|
// History: 1.1 bug fix of 7 October 2015
|
// History: 2.1 bug fix of 26 November 2016
|
|
// 1.1 bug fix of 7 October 2015
|
// 1.0 first release of 30 Mai 2015
|
// 1.0 first release of 30 Mai 2015
|
// Date: 14 August 2016
|
// Date: 2 December 2018
|
//
|
//
|
// 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.
|
Line 30... |
Line 31... |
//
|
//
|
// 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:
|
// DATENPFAD the data path of M32632
|
// DATENPFAD the data path of M32632
|
//
|
//
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
module DATENPFAD( BCLK, BRESET, WREN, IO_READY, LD_DIN, LD_IMME, WR_REG, IC_USER, ACC_FELD, ACC_STAT, DIN, DISP, IC_TEX,
|
module DATENPFAD( BCLK, BRESET, WREN, IO_READY, LD_DIN, LD_IMME, WR_REG, IC_USER, ACC_FELD, ACC_STAT, DIN, DISP, IC_TEX,
|
IMME_Q, INFO_AU, LD_OUT, DETOIP, MMU_UPDATE, OPER, PC_ARCHI, PC_ICACHE, RDAA, RDAB, START, WMASKE,
|
IMME_Q, INFO_AU, LD_OUT, DETOIP, MMU_UPDATE, OPER, PC_ARCHI, PC_ICACHE, RDAA, RDAB, START, WMASKE,
|
WRADR, DONE, Y_INIT, WRITE_OUT, READ_OUT, ZTEST, RMW, QWATWO, ACC_DONE, REG_OUT, PTB_SEL, PTB_WR, ACB_ZERO,
|
WRADR, DONE, Y_INIT, WRITE_OUT, READ_OUT, ZTEST, RMW, QWATWO, ACC_DONE, CTRL_QW, PTB_SEL, PTB_WR, ACB_ZERO,
|
ABORT, SAVE_PC, CFG, CINV, DP_Q, IVAR, MCR, PACKET, PC_NEW, PSR, SIZE, STRING, TRAPS, VADR, RWVFLAG,
|
ABORT, SAVE_PC, CFG, CINV, DP_Q, IVAR, MCR, PACKET, PC_NEW, PSR, SIZE, STRING, TRAPS, VADR, RWVFLAG,
|
DBG_HIT, DBG_IN, COP_GO, COP_OP, COP_IN, COP_DONE, COP_OUT);
|
DBG_HIT, DBG_IN, COP_GO, COP_OP, COP_IN, COP_DONE, COP_OUT);
|
|
|
input BCLK;
|
input BCLK;
|
input BRESET;
|
input BRESET;
|
Line 83... |
Line 84... |
output READ_OUT;
|
output READ_OUT;
|
output ZTEST;
|
output ZTEST;
|
output RMW;
|
output RMW;
|
output QWATWO;
|
output QWATWO;
|
output ACC_DONE;
|
output ACC_DONE;
|
output REG_OUT;
|
output [1:0] CTRL_QW;
|
output PTB_SEL;
|
output PTB_SEL;
|
output PTB_WR;
|
output PTB_WR;
|
output reg ACB_ZERO;
|
output reg ACB_ZERO;
|
output ABORT;
|
output ABORT;
|
output SAVE_PC;
|
output SAVE_PC;
|
Line 116... |
Line 117... |
wire [1:0] BWD;
|
wire [1:0] BWD;
|
wire CLR_LSB;
|
wire CLR_LSB;
|
wire [31:0] ERGEBNIS; // the result bus
|
wire [31:0] ERGEBNIS; // the result bus
|
wire FL;
|
wire FL;
|
wire [31:0] FSR;
|
wire [31:0] FSR;
|
wire [63:0] MRESULT;
|
wire [32:0] MRESULT;
|
wire [7:0] OPCODE;
|
wire [7:0] OPCODE;
|
wire SELI_A;
|
wire SELI_A;
|
wire SELI_B;
|
wire SELI_B;
|
wire [2:0] SP_CMP;
|
wire [2:0] SP_CMP;
|
wire [31:0] SRC1; // the bus for the Source 1 operand
|
wire [31:0] SRC1; // the bus for the Source 1 operand
|
Line 215... |
Line 216... |
.SELI(SELI_B),
|
.SELI(SELI_B),
|
.DOUT(OUT_B));
|
.DOUT(OUT_B));
|
|
|
assign SRC2 = SELI_B ? OUT_I : OUT_B;
|
assign SRC2 = SELI_B ? OUT_I : OUT_B;
|
|
|
MULFILTER M_FILTER(
|
MULFILTER M_FILTER( // signed multiplier 32 * 32 bits = 64 bits
|
.FLOAT(OPCODE[2]),
|
|
.BWD(BWD),
|
.BWD(BWD),
|
.SRC1(SRC1),
|
.SRC1(SRC1),
|
.SRC2(SRC2),
|
.SRC2(SRC2),
|
.DEST1(DEST1),
|
.MRESULT(MRESULT));
|
.DEST2(DEST2));
|
|
|
|
SIGNMUL S_MULTI( // signed multiplier 32 * 32 bits = 64 bits
|
|
.dataa(DEST1),
|
|
.datab(DEST2),
|
|
.result(MRESULT));
|
|
|
|
BITMASK BITM_U(
|
BITMASK BITM_U(
|
.AA(BMCODE),
|
.AA(BMCODE),
|
.DOUT(BMASKE));
|
.DOUT(BMASKE));
|
|
|
Line 299... |
Line 293... |
.PC_ARCHI(PC_ARCHI),
|
.PC_ARCHI(PC_ARCHI),
|
.PC_ICACHE(PC_ICACHE),
|
.PC_ICACHE(PC_ICACHE),
|
.SRC1(SRC1),
|
.SRC1(SRC1),
|
.SRC2(SRC2),
|
.SRC2(SRC2),
|
.SRC2SEL(ACC_FELD[1:0]),
|
.SRC2SEL(ACC_FELD[1:0]),
|
.REG_OUT(REG_OUT),
|
.CTRL_QW(CTRL_QW),
|
.ACC_DONE(ACC_DONE),
|
.ACC_DONE(ACC_DONE),
|
.READ_OUT(READ_OUT),
|
.READ_OUT(READ_OUT),
|
.WRITE_OUT(WRITE_OUT),
|
.WRITE_OUT(WRITE_OUT),
|
.ABORT(ABORT),
|
.ABORT(ABORT),
|
.ADDR(addr_i),
|
.ADDR(addr_i),
|
Line 380... |
Line 374... |
SP_FPU SINGLE_U(
|
SP_FPU SINGLE_U(
|
.FL(FL),
|
.FL(FL),
|
.BCLK(BCLK),
|
.BCLK(BCLK),
|
.BWD(BWD),
|
.BWD(BWD),
|
.FSR(FSR[8:3]),
|
.FSR(FSR[8:3]),
|
.MRESULT(MRESULT[47:0]),
|
|
.OPCODE(OPCODE),
|
.OPCODE(OPCODE),
|
.SRC1(SRC1),
|
.SRC1(SRC1),
|
.SRC2(SRC2),
|
.SRC2(SRC2),
|
.LD_FSR(LD_FSR),
|
.LD_FSR(LD_FSR),
|
.SP_MUX(SP_MUX),
|
.SP_MUX(SP_MUX),
|
.UP_SP(UP_SP),
|
.UP_SP(UP_SP),
|
.FP_OUT(FP_OUT),
|
.FP_OUT(FP_OUT),
|
.I_OUT(SFP_DAT),
|
.I_OUT(SFP_DAT),
|
.SP_CMP(SP_CMP),
|
.SP_CMP(SP_CMP),
|
.TT_SP(TT_SP),
|
.TT_SP(TT_SP),
|
.START(START[1]) );
|
.START(START[1]) ); // Aenderung
|
|
|
FP_STAT_REG FPS_REG(
|
FP_STAT_REG FPS_REG(
|
.BCLK(BCLK),
|
.BCLK(BCLK),
|
.BRESET(BRESET),
|
.BRESET(BRESET),
|
.LFSR(LD_FSR),
|
.LFSR(LD_FSR),
|
.WREN(ENWR),
|
.WREN(ENWR),
|
.WRADR(WRADR[5:4]),
|
.WRADR(WRADR[5:4]),
|
.UP_DP(UP_DP),
|
.UP_DP(UP_DP),
|
.UP_SP(UP_SP),
|
.UP_SP(UP_SP), // & LD_OUT[1]), Aenderung
|
.DIN(SRC1[16:0]),
|
.DIN(SRC1[16:0]),
|
.TT_DP(TT_DP),
|
.TT_DP(TT_DP),
|
.TT_SP(TT_SP),
|
.TT_SP(TT_SP),
|
.FPU_TRAP(TRAPS[0]),
|
.FPU_TRAP(TRAPS[0]),
|
.TWREN(TWREN),
|
.TWREN(TWREN),
|