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 + -
显示快捷键?