?? arm7tdmis_top.vhd
字號:
-- Data input
RegFileBOut => RegFile_BBusOut,
MultiplierBOut => Mult_BDataOut,
MemDataRegOut => IPDR_DataOut, -- From zero or sign extender
AdrGenDataOut => LSAdrGen_BDataOut, -- From the addrerss generator
-- Immediate fields
SExtOffset24Bit => IPDR_SExtOffset24Bit, -- From instruction pipeline
Offset12Bit => IPDR_Offset12Bit, -- From instruction pipeline
Offset8Bit => IPDR_Offset8Bit, -- From instruction pipeline
Immediate8Bit => IPDR_Immediate8Bit, -- From instruction pipeline
-- Control
RegFileBOutSel => BBM_RegFileBOutSel, -- Conrol logic
MultiplierBOutSel => BBM_MultiplierBOutSel, -- Conrol logic
MemDataRegOutSel => BBM_MemDataRegOutSel, -- Conrol logic
SExtOffset24BitSel => BBM_SExtOffset24BitSel, -- Conrol logic
Offset12BitSel => BBM_Offset12BitSel, -- Conrol logic
Offset8BitSel => BBM_Offset8BitSel, -- Conrol logic
Immediate8BitSel => BBM_Immediate8BitSel, -- Conrol logic
AdrGenDataSel => BBM_AdrGenDataSel,
-- Data output
BBusOut => BBM_BBusOut
);
-- Address generator for load/store
LSAdrGen_Inst:component LSAdrGen port map (
-- Global control signals
nRESET => nRESET,
CLK => CLK,
CLKEN => CLKEN,
-- Control and data
RmDataIn => RegFile_BBusOut, -- !!! was BBM_BBusOut,
BDataOut => LSAdrGen_BDataOut,
RegisterList => LSAdrGen_RegisterList,
IncBeforeSel => LSAdrGen_IncBeforeSel,
DecBeforeSel => LSAdrGen_DecBeforeSel,
DecAfterSel => LSAdrGen_DecAfterSel,
MltAdrSel => LSAdrGen_MltAdrSel,
SngMltSel => LSAdrGen_SngMltSel
);
ResltBitMask_Inst:component ResltBitMask port map(
-- Data
DataIn => ALU_DataOut,
DataOut => RBM_DataOut,
-- Control
ClrBitZero => RBM_ClrBitZero,
ClrBitOne => RBM_ClrBitOne,
SetBitZero => RBM_SetBitZero
);
-- Thumb decoder is implemented
ThDcdIsImplemented:if CThumbImp generate
ThumbDecoder_Inst:component ThumbDecoder
port map(
InstForDecode => IPDR_ToThumbDecoder,
ExpandedInst => IPDR_FromThumbDecoder,
HalfWordAddress => IPDR_HalfWordAddress,
ThumbDecoderEn => ThDC_ThumbDecoderEn,
ThBLFP => ThDC_ThBLFP,
ThBLSP => ThDC_ThBLSP
);
end generate;
-- Thumb decoder is not implemented
ThDcdIsNotImplemented:if not CThumbImp generate
IPDR_FromThumbDecoder <= IPDR_ToThumbDecoder;
ThDC_ThBLFP <= '0';
ThDC_ThBLSP <= '0';
end generate;
-- Control logic
ControlLogic_Inst:component ControlLogic port map(
-- Clock and reset
nRESET => nRESET,
CLK => CLK,
CLKEN => CLKEN,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Control signals commom for several modules
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
BigEndianMode => BigEndianMode,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Instruction pipeline and data in registers control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Interfaces for the internal CPU modules
InstForDecode => IPDR_InstForDecode,
InstFetchAbort => IPDR_InstFetchAbort,
StagnatePipeline => IPDR_StagnatePipeline,
StagnatePipelineDel => IPDR_StagnatePipelineDel,
FirstInstFetch => IPRD_FirstInstFetch,
-- Data out register and control(sign/zero, byte/halfword extension)
SignExt => IPDR_SignExt,
ZeroExt => IPDR_ZeroExt,
nB_HW => IPDR_nB_HW,
-- Bus control
EndianMode => IPDR_EndianMode,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Data output register control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StoreHalfWord => DOR_StoreHalfWord,
StoreByte => DOR_StoreByte,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Address multiplexer and incrementer control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ExceptionVector => AMI_ExceptionVector,
PCInSel => AMI_PCInSel,
ALUInSel => AMI_ALUInSel,
ExceptionVectorSel => AMI_ExceptionVectorSel,
PCIncStep => AMI_PCIncStep,
AdrIncStep => AMI_AdrIncStep,
AdrToPCSel => AMI_AdrToPCSel,
AdrCntEn => AMI_AdrCntEn,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- ALU control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
InvA => ALU_InvA,
InvB => ALU_InvB,
PassA => ALU_PassA,
PassB => ALU_PassB,
-- Logic operations
AND_Op => ALU_AND_Op,
ORR_Op => ALU_ORR_Op,
EOR_Op => ALU_EOR_Op,
-- Flag inputs
CFlagUse => ALU_CFlagUse,
-- Flag outputs
CFlagOut => ALU_CFlagOut,
VFlagOut => ALU_VFlagOut,
NFlagOut => ALU_NFlagOut,
ZFlagOut => ALU_ZFlagOut,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Multiplier control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LoadRsRm => Mult_LoadRsRm,
LoadPS => Mult_LoadPS,
ClearPSC => Mult_ClearPSC,
UnsignedMul => Mult_UnsignedMul,
ReadLH => Mult_ReadLH,
MulResRdy => Mult_MulResRdy,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Register file control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ABusRdAdr => RegFile_ABusRdAdr,
BBusRdAdr => RegFile_BBusRdAdr,
WriteAdr => RegFile_WriteAdr,
WrEn => RegFile_WrEn,
-- Program counter
PCWrEn => RegFile_PCWrEn,
PCSrcSel => RegFile_PCSrcSel,
-- Mode control signals
RFMode => RegFile_RFMode,
SaveBaseReg => RegFile_SaveBaseReg,
RestoreBaseReg => RegFile_RestoreBaseReg,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Programm Status Registers control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- ALU bus input control
PSRDInSel => PSR_PSRDInSel,
-- Current program state
CPSRIn => PSR_CPSRIn,
CPSRWrEn => PSR_CPSRWrEn,
CPSROut => PSR_CPSROut,
CFlForMul => PSR_CFlForMul,
-- Saved program state
SPSRIn => PSR_SPSRIn,
SPSROut => PSR_SPSROut,
SPSRWrMsk => PSR_SPSRWrMsk,
-- PSR mode control
PSRMode => PSR_PSRMode,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Shifter control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- ShCFlagIn => ,
-- ShCFlagOut => ,
ShLenImm => Shifter_ShLenImm,
ShType => Shifter_ShType,
ShRotImm => Shifter_ShRotImm,
ShEn => Shifter_ShEn,
ShCFlagEn => Shifter_ShCFlagEn,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Bus A multiplexer control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RegFileAOutSel => ABM_RegFileAOutSel,
MultiplierAOutSel => ABM_MultiplierAOutSel,
CPSROutSel => ABM_CPSROutSel,
SPSROutSel => ABM_SPSROutSel,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Bus B multiplexer control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RegFileBOutSel => BBM_RegFileBOutSel,
MultiplierBOutSel => BBM_MultiplierBOutSel,
MemDataRegOutSel => BBM_MemDataRegOutSel,
SExtOffset24BitSel => BBM_SExtOffset24BitSel,
Offset12BitSel => BBM_Offset12BitSel,
Offset8BitSel => BBM_Offset8BitSel,
Immediate8BitSel => BBM_Immediate8BitSel,
AdrGenDataSel => BBM_AdrGenDataSel,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Address generator for Load/Store instructions control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RegisterList => LSAdrGen_RegisterList,
IncBeforeSel => LSAdrGen_IncBeforeSel,
DecBeforeSel => LSAdrGen_DecBeforeSel,
DecAfterSel => LSAdrGen_DecAfterSel,
MltAdrSel => LSAdrGen_MltAdrSel,
SngMltSel => LSAdrGen_SngMltSel,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Bit 0,1 clear/set control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ClrBitZero => RBM_ClrBitZero,
ClrBitOne => RBM_ClrBitOne,
SetBitZero => RBM_SetBitZero,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Thumb decoder control
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ThumbDecoderEn => ThDC_ThumbDecoderEn,
ThBLFP => ThDC_ThBLFP,
ThBLSP => ThDC_ThBLSP,
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Rm[0] input for ARM/Thumb state detection during BX
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RmBitZero => RegFile_BBusOut(0), -- !!! Check A or B bus
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- External signals
-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Interrupts
nIRQ => nIRQ,
nFIQ => nFIQ,
-- Bus control
CFGBIGEND => CFGBIGEND,
-- Arbitration
DMORE => DMORE,
LOCK => LOCK,
-- Memory interface
ABORT => ABORT,
WRITE => WRITE,
SIZE => SIZE_Int,
PROT => PROT,
TRANS => TRANS,
-- Memory management interface
CPnTRANS => CPnTRANS,
CPnOPC => CPnOPC,
-- Coprocessor interface
CPnMREQ => CPnMREQ,
CPnSEQ => CPnSEQ,
CPTBIT => CPTBIT,
CPnI => CPnI,
CPA => CPA,
CPB => CPB
);
NormalCompilation:if not CSlackEstimationCompilation generate
-- Outputs of the core
ADDR <= ADDR_Int;
SIZE <= SIZE_Int;
end generate;
EstimationCompilation:if CSlackEstimationCompilation generate
OnlyForSlackEstimation:process(nRESET,CLK)
begin
if nRESET='0' then -- Reset
ADDR <= (others => '0');
SIZE <= (others => '0');
elsif CLK='1' and CLK'event then -- Clock
if CLKEN='1' then -- Clock enable
ADDR <= ADDR_Int;
SIZE <= SIZE_Int;
end if;
end if;
end process;
end generate;
end Struct;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -