hostmot2.vhd

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

VHD
1,538
字号
library IEEE;use IEEE.std_logic_1164.all;  -- defines std_logic typesuse IEEE.std_logic_ARITH.ALL;use IEEE.std_logic_UNSIGNED.ALL;---- Copyright (C) 2007, Peter C. Wallace, Mesa Electronics-- http://www.mesanet.com---- This program is is licensed under a disjunctive dual license giving you-- the choice of one of the two following sets of free software/open source-- licensing terms:----    * GNU General Public License (GPL), version 2.0 or later--    * 3-clause BSD License-- ---- The GNU GPL License:-- --     This program is free software; you can redistribute it and/or modify--     it under the terms of the GNU General Public License as published by--     the Free Software Foundation; either version 2 of the License, or--     (at your option) any later version.-- --     This program is distributed in the hope that it will be useful,--     but WITHOUT ANY WARRANTY; without even the implied warranty of--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the--     GNU General Public License for more details.-- --     You should have received a copy of the GNU General Public License--     along with this program; if not, write to the Free Software--     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA-- -- -- The 3-clause BSD License:-- --     Redistribution and use in source and binary forms, with or without--     modification, are permitted provided that the following conditions--     are met:-- --         * Redistributions of source code must retain the above copyright--           notice, this list of conditions and the following disclaimer.-- --         * Redistributions in binary form must reproduce the above--           copyright notice, this list of conditions and the following--           disclaimer in the documentation and/or other materials--           provided with the distribution.-- --         * Neither the name of Mesa Electronics nor the names of its--           contributors may be used to endorse or promote products--           derived from this software without specific prior written--           permission.-- -- -- Disclaimer:-- --     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS--     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT--     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS--     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE--     COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,--     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,--     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;--     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER--     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT--     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN--     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE--     POSSIBILITY OF SUCH DAMAGE.-- use work.IDROMParms.all;	library UNISIM;use UNISIM.VComponents.all;	entity HostMot2 is  	generic	(  		ThePinDesc: PinDescType;		TheModuleID: ModuleIDType;		StepGens: integer;		QCounters: integer;		MuxedQCounters: integer;		PWMGens: integer;		SPIs: integer;		BSPIs: integer;		SSIs: integer;		UARTs: integer;		PWMRefWidth: integer;		StepGenTableWidth: integer;      BSPICSWidth : integer;		IDROMType: integer;			   SepClocks: boolean;		OneWS: boolean;		UseStepGenPrescaler : boolean;		UseIRQLogic: boolean;		UseWatchDog: boolean;		OffsetToModules: integer;		OffsetToPinDesc: integer;		ClockHigh: integer;		ClockLow: integer;		BoardNameLow : std_Logic_Vector(31 downto 0);		BoardNameHigh : std_Logic_Vector(31 downto 0);		FPGASize: integer;		FPGAPins: integer;		IOPorts: integer;		IOWidth: integer;		PortWidth: integer;		BusWidth: integer;		AddrWidth: integer;		InstStride0: integer;		InstStride1: integer;		RegStride0: integer;		RegStride1: integer;		LEDCount: integer		);	port    (     -- Generic 32  bit bus interface signals --	ibus: in std_logic_vector(buswidth -1 downto 0);	obus: out std_logic_vector(buswidth -1 downto 0);	addr: in std_logic_vector(addrwidth -1 downto 2);	read: in std_logic;	write: in std_logic;	clklow: in std_logic;	clkhigh: in std_logic;	int: out std_logic; 	iobits: inout std_logic_vector (iowidth -1 downto 0);				leds: out std_logic_vector(ledcount-1 downto 0)	);end HostMot2;architecture dataflow of HostMot2 is-- decodes ----	IDROM related signals	signal A : std_logic_vector(addrwidth -1 downto 2);	signal LoadIDROM: std_logic;	signal ReadIDROM: std_logic;	signal LoadIDROMWEn: std_logic;	signal ReadIDROMWEn: std_logic;	signal IDROMWEn: std_logic_vector(0 downto 0);	signal ROMAdd: std_logic_vector(7 downto 0);-- I/O port related signals	signal AltData :  std_logic_vector(IOWidth-1 downto 0);	signal PortSel: std_logic;		signal LoadPortCmd: std_logic_vector(IOPorts -1 downto 0);	signal ReadPortCmd: std_logic_vector(IOPorts -1 downto 0);	signal DDRSel: std_logic;		signal LoadDDRCmd: std_logic_vector(IOPorts -1 downto 0);	signal ReadDDRCmd: std_logic_vector(IOPorts -1 downto 0);		signal AltDataSrcSel: std_logic;	signal LoadAltDataSrcCmd: std_logic_vector(IOPorts -1 downto 0);	signal OpenDrainModeSel: std_logic;	signal LoadOpenDrainModeCmd: std_logic_vector(IOPorts -1 downto 0);	signal OutputInvSel: std_logic;	signal LoadOutputInvCmd: std_logic_vector(IOPorts -1 downto 0);-- Step generator related signals		signal StepGenRateSel: std_logic;	signal LoadStepGenRate: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenRate: std_logic_vector(StepGens -1 downto 0);	signal StepGenAccumSel: std_logic;	signal LoadStepGenAccum: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenAccum: std_logic_vector(StepGens -1 downto 0);		signal StepGenModeSel: std_logic;	signal LoadStepGenMode: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenMode: std_logic_vector(StepGens -1 downto 0);	signal StepGenDSUTimeSel: std_logic;	signal LoadStepGenDSUTime: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenDSUTime: std_logic_vector(StepGens -1 downto 0);	signal StepGenDHLDTimeSel: std_logic;	signal LoadStepGenDHLDTime: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenDHLDTime: std_logic_vector(StepGens -1 downto 0);	signal StepGenPulseATimeSel: std_logic;	signal LoadStepGenPulseATime: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenPulseATime: std_logic_vector(StepGens -1 downto 0);	signal StepGenPulseITimeSel: std_logic;	signal LoadStepGenPulseITime: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenPulseITime: std_logic_vector(StepGens -1 downto 0);	signal StepGenTableMaxSel: std_logic;	signal LoadStepGenTableMax: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenTableMax: std_logic_vector(StepGens -1 downto 0);	signal StepGenTableSel: std_logic;	signal LoadStepGenTable: std_logic_vector(StepGens -1 downto 0);	signal ReadStepGenTable: std_logic_vector(StepGens -1 downto 0);		type StepGenOutType is array(StepGens-1 downto 0) of std_logic_vector(StepGenTableWidth-1 downto 0);	signal StepGenOut : StepGenOutType;-- Step generators master rate related signals	signal LoadStepGenBasicRate: std_logic;	signal ReadStepGenBasicRate: std_logic; 	signal StepGenBasicRate: std_logic;-- Quadrature counter related signals	signal QCounterSel : std_logic;	signal LoadQCounter: std_logic_vector(QCounters-1 downto 0);	signal ReadQCounter: std_logic_vector(QCounters-1 downto 0);		signal QCounterCCRSel : std_logic;	signal LoadQCounterCCR: std_logic_vector(QCounters-1 downto 0);	signal ReadQCounterCCR: std_logic_vector(QCounters-1 downto 0);-- Quadrature counter timestamp reference counter	signal LoadTSDiv : std_logic;	signal ReadTSDiv : std_logic;	signal ReadTS : std_logic;	signal TimeStampBus: std_logic_vector(15 downto 0);-- Quadrature counter filter rate signals	signal LoadQCountRate : std_logic;	signal QCountFilterRate : std_logic;	-- Quadrature counter input signals	signal QuadA: std_logic_vector(QCounters-1 downto 0);	signal QuadB: std_logic_vector(QCounters-1 downto 0);	signal Index: std_logic_vector(QCounters -1 downto 0);	signal IndexMask: std_logic_vector(QCounters -1 downto 0);--- Multiplexed Encoder related signals		signal MuxedQCounterSel : std_logic;	signal LoadMuxedQCounter: std_logic_vector(MuxedQCounters-1 downto 0);	signal ReadMuxedQCounter: std_logic_vector(MuxedQCounters-1 downto 0);		signal MuxedQCounterCCRSel : std_logic;	signal LoadMuxedQCounterCCR: std_logic_vector(MuxedQCounters-1 downto 0);	signal ReadMuxedQCounterCCR: std_logic_vector(MuxedQCounters-1 downto 0);-- Muxed Quadrature counter timestamp reference counter	signal LoadMuxedTSDiv : std_logic;	signal ReadMuxedTSDiv : std_logic;	signal ReadMuxedTS : std_logic;	signal MuxedTimeStampBus: std_logic_vector(15 downto 0);-- Muxed Quadrature counter filter rate signals	signal LoadMuxedQCountRate : std_logic;	signal MuxedQCountFilterRate : std_logic;	signal PreMuxedQctrSel : std_logic_vector(1 downto 0);	signal MuxedQCtrSel : std_logic_vector(1 downto 0);	signal MuxedQuadA: std_logic_vector(MuxedQCounters/2 -1 downto 0); -- 2 should be muxdepth constant?	signal MuxedQuadB: std_logic_vector(MuxedQCounters/2 -1 downto 0);	signal MuxedIndex: std_logic_vector(MuxedQCounters/2 -1 downto 0);	signal muxedIndexMask: std_logic_vector(MuxedQCounters/2 -1 downto 0);		signal DemuxedIndexMask: std_logic_vector(MuxedQCounters -1 downto 0);		signal DeMuxedQuadA: std_logic_vector(MuxedQCounters -1 downto 0);	signal DeMuxedQuadB: std_logic_vector(MuxedQCounters -1 downto 0);	signal DeMuxedIndex: std_logic_vector(MuxedQCounters -1 downto 0);	-- PWM generator related signals   signal NumberOfPWMS : integer;	signal PWMGenOutA: std_logic_vector(PWMGens -1 downto 0);	signal PWMGenOutB: std_logic_vector(PWMGens -1 downto 0);	signal PWMGenOutC: std_logic_vector(PWMGens -1 downto 0);	signal LoadPWMRate : std_logic;	signal LoadPDMRate : std_logic;	signal RefCountBus : std_logic_vector(PWMRefWidth-1 downto 0);	signal PDMRate : std_logic;	signal PWMValSel : std_logic;	signal PWMCRSel : std_logic;	signal LoadPWMVal: std_logic_vector(PWMGens -1 downto 0);	signal LoadPWMCR: std_logic_vector(PWMGens -1 downto 0);	signal LoadPWMEnas: std_logic;	signal ReadPWMEnas: std_logic;--- SPI interface related signals	signal SPIBitCountSel : std_logic;	signal SPIBitrateSel : std_logic;	signal SPIDataSel : std_logic;		signal LoadSPIBitCount: std_logic_vector(SPIs -1 downto 0);	signal LoadSPIBitRate: std_logic_vector(SPIs -1 downto 0);	signal LoadSPIData: std_logic_vector(SPIs -1 downto 0);	signal ReadSPIData: std_logic_vector(SPIs -1 downto 0);           	signal ReadSPIBitCOunt: std_logic_vector(SPIs -1 downto 0);	signal ReadSPIBitRate: std_logic_vector(SPIs -1 downto 0);	signal SPIClk: std_logic_vector(SPIs -1 downto 0);	signal SPIIn: std_logic_vector(SPIs -1 downto 0);	signal SPIOut: std_logic_vector(SPIs -1 downto 0);	signal SPIFrame: std_logic_vector(SPIs -1 downto 0);	signal SPIDAV: std_logic_vector(SPIs -1 downto 0);	--- BSPI interface related signals	signal BSPIDataSel : std_logic;		signal BSPIFIFOCountSel : std_logic;	signal BSPIDescriptorSel : std_logic;	signal LoadBSPIData: std_logic_vector(BSPIs -1 downto 0);	signal ReadBSPIData: std_logic_vector(BSPIs -1 downto 0);     	signal LoadBSPIDescriptor: std_logic_vector(BSPIs -1 downto 0);	signal ReadBSPIFIFOCOunt: std_logic_vector(BSPIs -1 downto 0);	signal ClearBSPIFIFO: std_logic_vector(BSPIs -1 downto 0);	signal BSPIClk: std_logic_vector(BSPIs -1 downto 0);	signal BSPIIn: std_logic_vector(BSPIs -1 downto 0);	signal BSPIOut: std_logic_vector(BSPIs -1 downto 0);	signal BSPIFrame: std_logic_vector(BSPIs -1 downto 0);	type BSPICSType is array(BSPIs-1 downto 0) of std_logic_vector(BSPICSWidth-1 downto 0);	signal BSPICS : BSPICSType;--- UARTX interface related signals			signal UARTTDataSel : std_logic;	signal UARTTBitrateSel : std_logic;	signal UARTTFIFOCountSel : std_logic;	signal UARTTModeRegSel : std_logic; 	signal LoadUARTTData: std_logic_vector(UARTs -1 downto 0);	signal LoadUARTTBitRate: std_logic_vector(UARTs -1 downto 0);	signal LoadUARTTModeReg: std_logic_vector(UARTs -1 downto 0);		signal CLearUARTTFIFO: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTTFIFOCount: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTTBitrate: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTTModeReg: std_logic_vector(UARTs -1 downto 0);	signal UARTTFIFOEmpty: std_logic_vector(UARTs -1 downto 0);	signal UTDrvEn: std_logic_vector(UARTs -1 downto 0);	signal UTData: std_logic_vector(UARTs -1 downto 0);--- UARTR interface related signals		signal UARTRDataSel : std_logic;	signal UARTRBitrateSel : std_logic;	signal UARTRFIFOCountSel : std_logic;	signal UARTRModeRegSel : std_logic;		signal LoadUARTRData: std_logic_vector(UARTs -1 downto 0);	signal LoadUARTRBitRate: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTRBitrate: std_logic_vector(UARTs -1 downto 0);	signal ClearUARTRFIFO: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTRFIFOCount: std_logic_vector(UARTs -1 downto 0);	signal ReadUARTRModeReg: std_logic_vector(UARTs -1 downto 0);	signal LoadUARTRModeReg: std_logic_vector(UARTs -1 downto 0);	signal UARTRFIFOHasData: std_logic_vector(UARTs -1 downto 0);	signal URData: std_logic_vector(UARTs -1 downto 0);			--- Watchdog related signals 	signal LoadWDTime : std_logic; 	signal ReadWDTime : std_logic;	signal LoadWDStatus : std_logic;	signal ReadWDStatus : std_logic;	signal WDCookie: std_logic;	signal WDBite : std_logic;	signal WDLatchedBite : std_logic;--- IRQ related signals 	signal LoadIRQDiv : std_logic;	signal ReadIRQDiv : std_logic;	signal LoadIRQStatus : std_logic;	signal ReadIrqStatus : std_logic;	signal ClearIRQ : std_logic;--- ID related signals	signal ReadID : std_logic;--- LED related signals	signal LoadLEDS : std_logic;		function OneOfNdecode(width : integer;ena1 : std_logic;ena2 : std_logic; dec : std_logic_vector) return std_logic_vector is	variable result   : std_logic_vector(width-1 downto 0);	begin		if ena1 = '1' and ena2 = '1' then			for i in 0 to width -1 loop				if CONV_INTEGER(dec) = i then					result(i) := '1';				else					result(i) := '0';

⌨️ 快捷键说明

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