hostmot2.vhd

来自「CNC 的开放码,EMC2 V2.2.8版」· VHDL 代码 · 共 1,538 行 · 第 1/4 页

VHD
1,538
字号
			PWMCRSel <= '1';		else			PWMCRSel <= '0';		end if;		if A(15 downto 8) = SPIDataAddr then	 --  SPI data register select			SPIDataSel <= '1';		else			SPIDataSel <= '0';		end if;				if A(15 downto 8) = SPIBitCountAddr then	 --  SPI bit count register select			SPIBitCountSel <= '1';		else			SPIBitCountSel <= '0';		end if;		if A(15 downto 8) = SPIBitrateAddr then	 --  SPI bit rate register select			SPIBitrateSel <= '1';		else			SPIBitrateSel <= '0';		end if;				if A(15 downto 8) = BSPIDataAddr then	 --  BSPI data register select			BSPIDataSel <= '1';		else			BSPIDataSel <= '0';		end if;				if A(15 downto 8) = BSPIFIFOCountAddr then	 --  BSPI FIFO count register select			BSPIFIFOCountSel <= '1';		else			BSPIFIFOCountSel <= '0';		end if;		if A(15 downto 8) = BSPIDescriptorAddr then	 --  BSPI channel descriptor register select			BSPIDescriptorSel <= '1';		else			BSPIDescriptorSel <= '0';		end if;				if A(15 downto 8) = UARTTDataAddr then	 --  UART TX data register select			UARTTDataSel <= '1';		else			UARTTDataSel <= '0';		end if;		if A(15 downto 8) = UARTTFIFOCountAddr then	 --  UART TX FIFO count register select			UARTTFIFOCountSel <= '1';		else			UARTTFIFOCountSel <= '0';		end if;		if A(15 downto 8) = UARTTBitrateAddr then	 --  UART TX bit rate register select			UARTTBitrateSel <= '1';		else			UARTTBitrateSel <= '0';		end if;		if A(15 downto 8) = UARTTModeRegAddr then	 --  UART TX bit mode register select			UARTTModeRegSel <= '1';		else			UARTTModeRegSel <= '0';		end if;		if A(15 downto 8) = UARTRDataAddr then	 --  UART RX data register select			UARTRDataSel <= '1';		else			UARTRDataSel <= '0';		end if;		if A(15 downto 8) = UARTRFIFOCountAddr then	 --  UART RX FIFO count register select			UARTRFIFOCountSel <= '1';		else			UARTRFIFOCountSel <= '0';		end if;		if A(15 downto 8) = UARTRBitrateAddr then	 --  UART RX bit rate register select			UARTRBitrateSel <= '1';		else			UARTRBitrateSel <= '0';		end if;		if A(15 downto 8) = UARTRModeRegAddr then	 --  UART RX status register select			UARTRModeRegSel <= '1';		else			UARTRModeRegSel <= '0';		end if;		if A(15 downto 8) = ReadIDAddr and Read = '1' then	 --  			ReadID <= '1';		else			ReadID <= '0';		end if;		if A(15 downto 8) = WatchdogTimeAddr and Read = '1' then	 --  			ReadWDTime <= '1';		else			ReadWDTime <= '0';		end if;		if A(15 downto 8) = WatchdogTimeAddr and Write = '1' then	 --  			LoadWDTime <= '1';		else			LoadWDTime <= '0';		end if;		if A(15 downto 8) = WatchdogStatusAddr and Read = '1' then	 --  			ReadWDStatus <= '1';		else			ReadWDStatus <= '0';		end if;		if A(15 downto 8) = WatchdogStatusAddr and Write = '1' then	 --  			LoadWDStatus <= '1';		else			LoadWDStatus <= '0';		end if;		if A(15 downto 8) = WatchdogCookieAddr and Write = '1' then	 --  			WDCookie <= '1';		else			WDCookie <= '0';		end if;		if A(15 downto 8) = IRQDivAddr and Write = '1' then	 --  			LoadIRQDiv <= '1';		else			LoadIRQDiv <= '0';		end if;		if A(15 downto 8) = IRQDivAddr and Read = '1' then	 --  			ReadIRQDiv <= '1';		else			ReadIRQDiv <= '0';		end if;		if A(15 downto 8) = IRQStatusAddr and Write = '1' then	 --  			LoadIRQStatus <= '1';		else			LoadIRQStatus <= '0';		end if;		if A(15 downto 8) = IRQStatusAddr and Read = '1' then	 --  			ReadIrqStatus <= '1';		else			ReadIrqStatus <= '0';		end if;		if A(15 downto 8) = ClearIRQAddr and Write = '1' then	 --  			ClearIRQ <= '1';		else			ClearIRQ <= '0';		end if; 				if A(15 downto 8) = StepGenBasicRateAddr and Write = '1' then	 --  			LoadStepGenBasicRate <= '1';		else			LoadStepGenBasicRate <= '0';		end if;		if A(15 downto 8) = StepGenBasicRateAddr and Read = '1' then	 --  			ReadStepGenBasicRate <= '1';		else			ReadStepGenBasicRate <= '0';		end if;		if A(15 downto 8) = TSDivAddr and Write = '1' then	 --  			LoadTSDiv <= '1';		else			LoadTSDiv <= '0';		end if;		if A(15 downto 8) = TSDivAddr and Read = '1' then	 --  			ReadTSDiv <= '1';		else			ReadTSDiv <= '0';		end if;		if A(15 downto 8) = TSAddr and Read = '1' then	 --  			ReadTS <= '1';		else			ReadTS <= '0';		end if;		if A(15 downto 8) = QCRateAddr and Write = '1' then	 --  			LoadQCountRate <= '1';		else			LoadQCountRate <= '0';		end if;				if A(15 downto 8) = MuxedTSDivAddr and Write = '1' then	 --  			LoadMuxedTSDiv <= '1';		else			LoadMuxedTSDiv <= '0';		end if;		if A(15 downto 8) = MuxedTSDivAddr and Read = '1' then	 --  			ReadMuxedTSDiv <= '1';		else			ReadMuxedTSDiv <= '0';		end if;		if A(15 downto 8) = MuxedTSAddr and Read = '1' then	 --  			ReadMuxedTS <= '1';		else			ReadMuxedTS <= '0';		end if;		if A(15 downto 8) = MuxedQCRateAddr and Write = '1' then	 --  			LoadMuxedQCountRate <= '1';		else			LoadMuxedQCountRate <= '0';		end if;		if A(15 downto 8) = PWMRateAddr and Write = '1' then	 --  			LoadPWMRate <= '1';		else			LoadPWMRate <= '0';		end if;		if A(15 downto 8) = PDMRateAddr and Write = '1' then	 --  			LoadPDMRate <= '1';		else			LoadPDMRate <= '0';		end if;		if A(15 downto 8) = PWMEnasAddr and Write = '1' then	 --  			LoadPWMEnas <= '1';		else			LoadPWMEnas <= '0';		end if;		if A(15 downto 8) = PWMEnasAddr and Read = '1' then	 --  			ReadPWMEnas <= '1';		else			ReadPWMEnas <= '0';		end if;		if A(15 downto 8) = IDROMWEnAddr and Write = '1' then	 --  			LoadIDROMWEn <= '1';		else			LoadIDROMWEn <= '0';		end if;		if A(15 downto 8) = IDROMWEnAddr and Read = '1' then	 --  			ReadIDROMWEn <= '1';		else			ReadIDROMWEn <= '0';		end if;		if A(15 downto 8) = LEDAddr and Write = '1' then	 --  			LoadLEDs <= '1';		else			LoadLEDs <= '0';		end if;	end process;		PortDecode: process (A,Read,Write,PortSel, DDRSel, AltDataSrcSel, OpenDrainModeSel, OutputInvSel)	begin		LoadPortCMD <= OneOfNDecode(IOPorts,PortSel,Write,A(3 downto 2)); -- 4 max		ReadPortCMD <= OneOfNDecode(IOPorts,PortSel,Read,A(3 downto 2));		LoadDDRCMD <= OneOfNDecode(IOPorts,DDRSel,Write,A(3 downto 2));		ReadDDRCMD <= OneOfNDecode(IOPorts,DDRSel,Read,A(3 downto 2));		LoadAltDataSrcCMD <= OneOfNDecode(IOPorts,AltDataSrcSel,Write,A(3 downto 2));		LoadOpenDrainModeCMD <= OneOfNDecode(IOPorts,OpenDrainModeSel,Write,A(3 downto 2));		LoadOutputInvCMD <= OneOfNDecode(IOPorts,OutputInvSel,Write,A(3 downto 2));	end process PortDecode;		StepGenDecode: if (STEPGENs > 0) generate			StepGenDecodeProcess : process (A,Read,write,StepGenRateSel, StepGenAccumSel, StepGenModeSel,                                 			StepGenDSUTimeSel, StepGenDHLDTimeSel, StepGenPulseATimeSel, 			                                 StepGenPulseITimeSel, StepGenTableSel, StepGenTableMaxSel)			begin				LoadStepGenRate <= OneOfNDecode(STEPGENs,StepGenRateSel,Write,A(6 downto 2)); -- 32 max				ReadStepGenRate <= OneOfNDecode(STEPGENs,StepGenRateSel,Read,A(6 downto 2));				LoadStepGenAccum <= OneOfNDecode(STEPGENs,StepGenAccumSel,Write,A(6 downto 2));				ReadStepGenAccum <= OneOfNDecode(STEPGENs,StepGenAccumSel,Read,A(6 downto 2));				LoadStepGenMode <= OneOfNDecode(STEPGENs,StepGenModeSel,Write,A(6 downto 2));			 				ReadStepGenMode <= OneOfNDecode(STEPGENs,StepGenModeSel,Read,A(6 downto 2));					LoadStepGenDSUTime <= OneOfNDecode(STEPGENs,StepGenDSUTimeSel,Write,A(6 downto 2));				ReadStepGenDSUTime <= OneOfNDecode(STEPGENs,StepGenDSUTimeSel,Read,A(6 downto 2));				LoadStepGenDHLDTime <= OneOfNDecode(STEPGENs,StepGenDHLDTimeSel,Write,A(6 downto 2));				ReadStepGenDHLDTime <= OneOfNDecode(STEPGENs,StepGenDHLDTimeSel,Read,A(6 downto 2));				LoadStepGenPulseATime <= OneOfNDecode(STEPGENs,StepGenPulseATimeSel,Write,A(6 downto 2));				ReadStepGenPulseATime <= OneOfNDecode(STEPGENs,StepGenPulseATimeSel,Read,A(6 downto 2));				LoadStepGenPulseITime <= OneOfNDecode(STEPGENs,StepGenPulseITimeSel,Write,A(6 downto 2));				ReadStepGenPulseITime <= OneOfNDecode(STEPGENs,StepGenPulseITimeSel,Read,A(6 downto 2));				LoadStepGenTable <= OneOfNDecode(STEPGENs,StepGenTableSel,Write,A(6 downto 2));				ReadStepGenTable <= OneOfNDecode(STEPGENs,StepGenTableSel,Read,A(6 downto 2));				LoadStepGenTableMax <= OneOfNDecode(STEPGENs,StepGenTableMaxSel,Write,A(6 downto 2));				ReadStepGenTableMax <= OneOfNDecode(STEPGENs,StepGenTableMaxSel,Read,A(6 downto 2));			end process StepGenDecodeProcess;		end generate;		QCounterDecode: if (QCounters > 0) generate					QCounterDecodeProcess : process (A,Read,write,QCounterSel, QCounterCCRSel)			begin				LoadQCounter <= OneOfNDecode(QCounters,QCounterSel,Write,A(6 downto 2));  -- 32 max				ReadQCounter <= OneOfNDecode(QCounters,QCounterSel,Read,A(6 downto 2));				LoadQCounterCCR <= OneOfNDecode(QCounters,QCounterCCRSel,Write,A(6 downto 2));				ReadQCounterCCR <= OneOfNDecode(QCounters,QCounterCCRSel,Read,A(6 downto 2));			end process QCounterDecodeProcess;		end generate;		MuxedQCounterDecode: if (MuxedQcounters > 0) generate					MuxedQCounterDecodeProcess : process (A,Read,write,MuxedQCounterSel, MuxedQCounterCCRSel)			begin				LoadMuxedQCounter <= OneOfNDecode(MuxedQCounters,MuxedQCounterSel,Write,A(6 downto 2));  -- 32 max				ReadMuxedQCounter <= OneOfNDecode(MuxedQCounters,MuxedQCounterSel,Read,A(6 downto 2));				LoadMuxedQCounterCCR <= OneOfNDecode(MuxedQCounters,MuxedQCounterCCRSel,Write,A(6 downto 2));				ReadMuxedQCounterCCR <= OneOfNDecode(MuxedQCounters,MuxedQCounterCCRSel,Read,A(6 downto 2));			end process MuxedQCounterDecodeProcess;		end generate;		PWMDecode: if (PWMGENs > 0) generate					PWMDecodeProcess : process (A,Read,write,PWMValSel, PWMCRSel)			begin				LoadPWMVal <= OneOfNDecode(PWMGENs,PWMValSel,Write,A(6 downto 2)); -- 32 max				LoadPWMCR <= OneOfNDecode(PWMGENs, PWMCRSel,Write,A(6 downto 2));			end process PWMDecodeProcess;		end generate;		SPIDecode: if (SPIs > 0) generate					SPIDecodeProcess : process (A,Read,write,SPIDataSel,SPIBitCountSel,SPIBitRateSel)			begin						LoadSPIData <= OneOfNDecode(SPIs,SPIDataSel,Write,A(5 downto 2)); -- 16 max				ReadSPIData <= OneOfNDecode(SPIs,SPIDataSel,Read,A(5 downto 2));				LoadSPIBitCount <= OneOfNDecode(SPIs,SPIBitCountSel,Write,A(5 downto 2));				ReadSPIBitCount <= OneOfNDecode(SPIs,SPIBitCountSel,Read,A(5 downto 2));				LoadSPIBitRate <= OneOfNDecode(SPIs,SPIBitRateSel,Write,A(5 downto 2));				ReadSPIBitRate <= OneOfNDecode(SPIs,SPIBitRateSel,Read,A(5 downto 2));			end process SPIDecodeProcess;		end generate;		BSPIDecode: if (BSPIs > 0) generate					BSPIDecodeProcess : process (A,Read,write,BSPIDataSel,BSPIFIFOCountSel,BSPIDescriptorSel)			begin						LoadBSPIData <= OneOfNDecode(BSPIs,BSPIDataSel,Write,A(7 downto 6)); -- 4 max				ReadBSPIData <= OneOfNDecode(BSPIs,BSPIDataSel,Read,A(7 downto 6));				LoadBSPIDescriptor<= OneOfNDecode(BSPIs,BSPIDescriptorSel,Write,A(5 downto 2));				ReadBSPIFIFOCOunt <= OneOfNDecode(BSPIs,BSPIFIFOCountSel,Read,A(5 downto 2));				ClearBSPIFIFO <= OneOfNDecode(BSPIs,BSPIFIFOCountSel,Write,A(5 downto 2));			end process BSPIDecodeProcess;		end generate;		UARTDecode: if (UARTs > 0) generate					UARTDecodeProcess : process (A,Read,write,UARTTDataSel,UARTTBitRateSel,UARTTModeRegSel,UARTTFIFOCountSel,			                             UARTRDataSel,UARTRBitRateSel,UARTRFIFOCountSel,UARTRModeRegSel)			begin						LoadUARTTData <= OneOfNDecode(UARTs,UARTTDataSel,Write,A(6 downto 4));				LoadUARTTBitRate <= OneOfNDecode(UARTs,UARTTBitRateSel,Write,A(4 downto 2));				ReadUARTTBitrate <= OneOfNDecode(UARTs,UARTTBitRateSel,Read,A(4 downto 2));				LoadUARTTModeReg <= OneOfNDecode(UARTs,UARTTModeRegSel,Write,A(4 downto 2));				ReadUARTTModeReg <= OneOfNDecode(UARTs,UARTTModeRegSel,Read,A(4 downto 2));				ClearUARTTFIFO <= OneOfNDecode(UARTs,UARTTFIFOCountSel,Write,A(4 downto 2));				ReadUARTTFIFOCount <= OneOfNDecode(UARTs,UARTTFIFOCountSel,Read,A(4 downto 2));				LoadUARTRData <= OneOfNDecode(UARTs,UARTRDataSel,Read,A(6 downto 4));				LoadUARTRBitRate <= OneOfNDecode(UARTs,UARTRBitRateSel,Write,A(4 downto 2));				ReadUARTRBitrate <= OneOfNDecode(UARTs,UARTRBitRateSel,Read,A(4 downto 2));				ClearUARTRFIFO <= OneOfNDecode(UARTs,UARTRFIFOCountSel,Write,A(4 downto 2));				ReadUARTRFIFOCount <= OneOfNDecode(UARTs,UARTRFIFOCountSel,Read,A(4 downto 2));				LoadUARTRModeReg <= OneOfNDecode(UARTs,UARTRModeRegSel,Write,A(4 downto 2));				ReadUARTRModeReg <= OneOfNDecode(UARTs,UARTRModeRegSel,Read,A(4 downto 2));			end process UARTDecodeProcess;		end generate;			dotieupint: if not UseIRQLogic generate		tieupint : process(clklow)		begin			INT <= '1';		end process;	end generate;		end dataflow;  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?