2 -- * LXPWR slave part *
3 -- common sioreg & common counter for several ADC&PWM blocks
5 -- part of LXPWR motion control board (c) PiKRON Ltd
6 -- idea by Pavel Pisa PiKRON Ltd <pisa@cmp.felk.cvut.cz>
7 -- code by Marek Peca <mp@duch.cz>
14 use ieee.std_logic_1164.all;
15 use ieee.numeric_std.all;
18 entity rpi_mc_simple_dc is
20 gpio2: in std_logic; -- SDA
21 gpio3: in std_logic; -- SCL
22 gpio4: in std_logic; -- CLK
23 gpio14: in std_logic; -- Tx
24 gpio15: in std_logic; -- Rx
25 gpio17: in std_logic; -- RTS
26 gpio18: in std_logic; -- PWM0/PCMCLK
27 gpio27: in std_logic; -- SD1DAT3
28 gpio22: in std_logic; -- SD1CLK
29 gpio23: out std_logic; -- SD1CMD
30 gpio24: out std_logic; -- SD1DAT0
31 gpio10: in std_logic; -- SPI0MOSI
32 gpio9: in std_logic; -- SPI0MISO
33 gpio25: in std_logic; -- SD1DAT1
34 gpio11: in std_logic; -- SPI0SCLK
35 gpio8: out std_logic; -- SPI0CE0
36 gpio7: out std_logic; -- SPI0CE1
37 gpio5: in std_logic; -- GPCLK1
38 gpio6: in std_logic; -- GPCLK2
39 gpio12: in std_logic; -- PWM0
40 gpio13: in std_logic; -- PWM1
41 gpio19: in std_logic; -- PWM1/SPI1MISO/PCMFS
42 gpio16: in std_logic; -- SPI1CE2
43 gpio26: in std_logic; -- SD1DAT2
44 gpio20: in std_logic; -- SPI1MOSI/PCMDIN/GPCLK0
45 gpio21: in std_logic; -- SPI1SCLK/PCMDOUT/GPCLK1
48 -- Each PWM signal has cooresponding shutdown
49 pwm: out std_logic_vector (1 to 3);
50 shdn: out std_logic_vector (1 to 3);
51 -- Fault/power stage status
52 stat: in std_logic_vector (1 to 3);
54 hal_in: in std_logic_vector (1 to 3);
60 power_stat: in std_logic;
62 adc_miso: in std_logic;
63 adc_mosi: in std_logic;
64 adc_sclk: in std_logic;
65 adc_scs: in std_logic;
67 ext_miso: in std_logic;
68 ext_mosi: in std_logic;
69 ext_sclk: in std_logic;
70 ext_scs0: in std_logic;
71 ext_scs1: in std_logic;
72 ext_scs2: in std_logic;
74 rs485_rxd: in std_logic;
75 rs485_txd: out std_logic;
76 rs485_dir: out std_logic;
81 dip_sw: in std_logic_vector (1 to 3);
82 -- Unused terminal to keep design tools silent
83 dummy_unused : out std_logic
87 architecture behavioral of rpi_mc_simple_dc is
88 attribute syn_noprune :boolean;
89 attribute syn_preserve :boolean;
90 attribute syn_keep :boolean;
91 attribute syn_hier :boolean;
93 -- component pll50to200
95 -- powerdown, clka: in std_logic;
96 -- lock, gla: out std_logic
100 -- port (A: in std_logic; Y: out std_logic);
103 signal pwm_in, pwm_dir_in: std_logic;
105 -- attribute syn_noprune of gpio2 : signal is true;
106 -- attribute syn_preserve of gpio2 : signal is true;
107 -- attribute syn_keep of gpio2 : signal is true;
108 -- attribute syn_hier of gpio2 : signal is true;
111 -- PLL as a reset generator
119 -- clka => pll_clkin,
120 -- gla => pll_clkout,
121 -- lock => pll_lock);
122 -- -- reset <= not pll_lock;
123 -- reset <= '0'; -- TODO: apply reset for good failsafe
127 dummy_unused <= gpio2 and gpio3 and gpio4 and
128 gpio5 and gpio6 and gpio9 and
129 gpio10 and gpio11 and gpio12 and gpio13 and gpio14 and
130 gpio15 and gpio16 and gpio17 and gpio19 and
131 gpio20 and gpio21 and
132 gpio25 and gpio26 and gpio27 and
133 stat(1) and stat(2) and stat(3) and
134 hal_in(1) and hal_in(2) and hal_in(3) and
135 irc_i and power_stat and adc_miso and adc_mosi and adc_sclk and adc_scs and
136 ext_miso and ext_mosi and ext_sclk and ext_scs0 and ext_scs1 and ext_scs2 and
138 can_rx and can_tx and
139 dip_sw(1) and dip_sw(2) and dip_sw(3);
151 pwm_dir_in <= gpio22;
157 pwm(1) <= pwm_in and not pwm_dir_in;
158 pwm(2) <= pwm_in and pwm_dir_in;