1 ------------------------------------------------------------------------------- 3 --! @brief MotionFpga top-level module 4 ------------------------------------------------------------------------------- 9 --! Using IEEE standard logic components 10 USE ieee.std_logic_1164.
ALL;
12 --! Using MachX02 library 15 --! Using MachX02 library components (for oscj) 18 --! @brief MotionFpga top-level entity 21 version : (31 DOWNTO 0) := X"00000000" --! Version number 24 rst_in : IN ;
--! FPGA reset input line 30 led_out : OUT (7 DOWNTO 0) --! LED outputs 34 --! Architecture rtl of top entity 35 ARCHITECTURE rtl
OF top IS
37 SIGNAL osc : ;
--! Internal oscillator (11.08MHz) 38 SIGNAL lock : ;
--! PLL Lock 39 SIGNAL clk : ;
--! Main clock (99.72MHz) 40 SIGNAL rst_ms : ;
--! Reset (possibly metastable) 41 SIGNAL rst : ;
--! Reset 42 SIGNAL spi_cs_ms : ;
--! SPI chip-select input (metastable) 46 SIGNAL spi_cs_s : ;
--! SPI chip-select input (stable) 52 -- SPI slave output signals 57 SIGNAL dat_rd_reg : (95 DOWNTO 0);
--! SPI read data (response) 58 SIGNAL dat_wr_reg : (95 DOWNTO 0);
--! SPI write data (command) 71 --! Component declaration for the MachX02 internal oscillator 83 --! Component delcaration for the PLL 94 --! Instantiate the internal oscillator for 11.08MHz 105 --! Instantiate the PLL (11.08MHz -> 99.72MHz) 113 --! Instantiate the clock divider for PWM advance 127 --! Instantiate SPI slave device bus 128 i_spi_slave_device :
ENTITY work.
spi_slave 144 --! Instantiate SPI slave version bus 145 i_spi_slave_version :
ENTITY work.
spi_slave 161 --! Instantiate the PWM device 173 --! Instantiate the PWM device 184 --! Instantiate the GPIO device 196 --! @brief Reset process 198 --! This process provides a synchronous reset signal where possible. Before 199 --! the PLL has locked, it asserts reset; and after the PLL has locked it 200 --! uses the resynchronized reset input pin. 207 ELSIF (rising_edge(clk)) THEN 212 END PROCESS pr_reset;
214 --! @brief SPI input double-flop resynchronizer 216 --! This process double-flops the SPI inputs to resolve metastability and 217 --! ensure the signals are stable for SPI processing 230 ELSIF (rising_edge(clk)) THEN 241 END PROCESS pr_spi_input;
243 -- Output the version (if enabled) or the device 260 END ARCHITECTURE rtl;
out led_outstd_logic_vector( 7 DOWNTO 0)
LED outputs.
out div_pls_outstd_logic
Divider pulse flag.
in clk_instd_logic
Clock.
in spi_sclk_instd_logic
SPI clock input line.
std_logic spi_miso_out_device
SPI MISO output for devices.
in rst_instd_logic
Asynchronous reset.
pll i_plli_pll
Instantiate the PLL (11.08MHz -> 99.72MHz)
in spi_ver_en_instd_logic
SPI Version Enable input line.
out dat_rd_reg_outstd_logic_vector( 31 DOWNTO 0)
Device Read Register value.
MotionFpga top-level entity.
in spi_mosi_instd_logic
SPI MOSI.
std_logic_vector( 31 DOWNTO 0) gpio_out_lines
GPIO outputs.
out div_end_outstd_logic
Divider end flag.
osch
Component declaration for the MachX02 internal oscillator.
osch i_oschi_osch
Instantiate the internal oscillator for 11.08MHz.
std_logic spi_mosi_ms
SPI MOSI input (metastable)
std_logic spi_ver_en_s
SPI Version Enable input (stable)
in dat_wr_reg_instd_logic_vector( 31 DOWNTO 0)
Device Write Register value.
in clk_instd_logic
Clock.
out gpio_bus_outstd_logic_vector( 31 DOWNTO 0)
GPIO outputs.
in clk_instd_logic
Clock.
in rst_instd_logic
Asynchronous reset.
std_logic dat_wr_done
SPI write done pulse.
out spi_miso_outstd_logic
SPI MISO.
std_logic spi_cs_ms
SPI chip-select input (metastable)
in clk_instd_logic
Clock.
out spi_miso_outstd_logic
SPI MISO output line.
std_logic spi_sclk_ms
SPI clock input (metastable)
std_logic pwm_adv
PWM advance signal.
in clk_instd_logic
Clock.
out dat_rd_reg_outstd_logic_vector( 31 DOWNTO 0)
Device Read Register value.
in dat_wr_done_instd_logic
Device Write Done flag.
in dat_wr_done_instd_logic
Device Write Done flag.
in spi_sclk_instd_logic
SPI Clock.
in dat_rd_reg_instd_logic_vector( size- 1 DOWNTO 0)
Data Read Register value.
versionstd_logic_vector( 31 DOWNTO 0) := X"00000000"
Version number.
in spi_mosi_instd_logic
SPI MOSI input line.
in pwm_adv_instd_logic
PWM Advance flag.
std_logic_vector( 3 DOWNTO 0) sdm_lines
SDM outputs.
out sdm_outstd_logic_vector( 3 DOWNTO 0)
Modulator outputs.
in div_adv_instd_logic
Divider advance flag.
clk_divinteger range 2 TO integer'high:= 4
Divider amount.
std_logic spi_sclk_s
SPI clock input (stable)
in spi_cs_instd_logic
SPI chip-select input line.
std_logic spi_miso_out_version
SPI MISO output for version.
sizenatural range 1 TO natural'high
Size of the SPI data.
std_logic_vector( 95 DOWNTO 0) dat_wr_reg
SPI write data (command)
in div_clr_instd_logic
Divider clear flag.
std_logic_vector( 3 DOWNTO 0) pwm_lines
PWM outputs.
out dat_wr_done_outstd_logic
Data Write Done flag.
pll
Component delcaration for the PLL.
in rst_instd_logic
Asynchronous reset.
in dat_wr_reg_instd_logic_vector( 31 DOWNTO 0)
Device Write Register value.
std_logic osc
Internal oscillator (11.08MHz)
in rst_instd_logic
Asynchronous reset.
std_logic spi_mosi_s
SPI MOSI input (stable)
in rst_instd_logic
FPGA reset input line.
Sigma-Delta modulator device entity.
std_logic spi_ver_en_ms
SPI Version Enable (metastable)
in gpio_bus_instd_logic_vector( 31 DOWNTO 0)
GPIO inputs.
std_logic rst_ms
Reset (possibly metastable)
std_logic_vector( 31 DOWNTO 0) gpio_in_lines
GPIO inputs.
std_logic spi_cs_s
SPI chip-select input (stable)
in spi_cs_instd_logic
SPI Chip-select.
_library_ ieeeieee
Using IEEE library.
std_logic clk
Main clock (99.72MHz)
in dat_wr_reg_instd_logic_vector( 31 DOWNTO 0)
Device Write Register value.
out pwm_outstd_logic_vector( 3 DOWNTO 0)
PWM outputs.
std_logic_vector( 95 DOWNTO 0) dat_rd_reg
SPI read data (response)
in rst_instd_logic
Asynchronous reset.
in dat_wr_done_instd_logic
Device Write Done flag.
out dat_wr_reg_outstd_logic_vector( size- 1 DOWNTO 0)
Data Write Register value.
out dat_rd_reg_outstd_logic_vector( 31 DOWNTO 0)
Device Read Register value.