]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blob - pmsm-control/rpi_mc_simple_dc.vhdl
test spi - nefunkcni synteza pro sensitivity gpio11
[fpga/rpi-motor-control.git] / pmsm-control / rpi_mc_simple_dc.vhdl
1 --
2 -- * LXPWR slave part *
3 --  common sioreg & common counter for several ADC&PWM blocks
4 --
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>
8 -- 01/2013
9 --
10 -- license: GNU GPLv3
11 --
12
13 library ieee;
14 use ieee.std_logic_1164.all;
15 use ieee.numeric_std.all;
16 use work.util.all;
17
18 entity rpi_mc_simple_dc is
19   port (
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: out std_logic; -- SD1DAT1
34     gpio11: in std_logic; -- SPI0SCLK
35     gpio8: in std_logic; -- SPI0CE0
36     gpio7: in 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
46     --
47     -- PWM
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);
53     -- HAL inputs
54     hal_in: in std_logic_vector (1 to 3);
55     -- IRC inputs
56     irc_a: in std_logic;
57     irc_b: in std_logic;
58     irc_i: in std_logic;
59     -- Power status
60     power_stat: in std_logic;
61     -- ADC for current
62     adc_miso: in std_logic;
63     adc_mosi: in std_logic;
64     adc_sclk: in std_logic;
65     adc_scs: in std_logic;
66     -- Extarnal SPI
67     ext_miso: in std_logic; --master in slave out
68     ext_mosi: in std_logic; --master out slave in
69     ext_sclk: in std_logic;
70     ext_scs0: in std_logic;
71     ext_scs1: in std_logic;
72     ext_scs2: in std_logic;
73     -- RS-485 Transceiver
74     rs485_rxd: in std_logic;
75     rs485_txd: out std_logic;
76     rs485_dir: out std_logic;
77     -- CAN Transceiver
78     can_rx: in std_logic;
79     can_tx: in std_logic;
80     -- DIP switch
81     dip_sw: in std_logic_vector (1 to 3); --na desce je prohozene cislovanni
82     -- Unused terminal to keep design tools silent
83     dummy_unused : out std_logic
84     );
85 end rpi_mc_simple_dc;
86
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;
92   -- Actel lib
93   -- component pll50to200
94   --   port (
95   --     powerdown, clka: in std_logic;
96   --     lock, gla: out std_logic
97   --   );
98   -- end component;
99   -- component CLKINT
100   --   port (A: in std_logic; Y: out std_logic);
101   -- end component;
102   --
103   signal pwm_in, pwm_dir_in: std_logic;
104     signal spi_clk: std_logic;
105   signal dat_reg : STD_LOGIC_VECTOR (7 downto 0); --registr pro SPI
106
107 --  attribute syn_noprune of gpio2 : signal is true;
108 --  attribute syn_preserve of gpio2 : signal is true;
109 --  attribute syn_keep of gpio2 : signal is true;
110 --  attribute syn_hier of gpio2 : signal is true;
111
112 begin
113 -- PLL as a reset generator
114 --   copyclk: CLKINT
115 --      port map (
116 --        a => clkm,
117 --        y => pll_clkin);
118 --   pll: pll50to200
119 --     port map (
120 --       powerdown => '1',
121 --       clka => pll_clkin,
122 --       gla => pll_clkout,
123 --       lock => pll_lock);
124 -- --  reset <= not pll_lock;
125 --   reset <= '0';                         -- TODO: apply reset for good failsafe
126                                            -- upon power-on
127 --   clock <= clkm;
128
129   dummy_unused <= gpio2 and gpio3  and gpio4 and
130      gpio5 and gpio6 and
131      gpio12 and gpio13 and gpio14 and
132      gpio15 and gpio16 and gpio19 and
133      gpio20 and gpio21 and gpio26 and
134      stat(1) and stat(2) and stat(3) and
135      hal_in(1) and hal_in(2) and hal_in(3) and
136      irc_i and power_stat and adc_miso and adc_mosi and adc_sclk and adc_scs and
137      rs485_rxd and
138      can_rx and can_tx and
139      dip_sw(2) and dip_sw(3) and
140      irc_a and irc_b and
141      gpio17 and gpio18 and gpio27 and gpio22 and
142      gpio8 and gpio9 and gpio11 and gpio7 and gpio10 and
143      ext_scs1 and ext_scs2 and ext_miso and ext_mosi and ext_sclk and ext_scs0;
144   rs485_txd <= '1';
145   rs485_dir <= '0';
146
147  -- gpio4 <= '0';
148   --gpio17 <= '0';
149   --gpio18 <= '0';
150   --gpio27 <= '0';
151   --gpio22 <= '0';
152   --gpio23 <= '0';
153   --gpio24 <= '0';
154   --gpio25 <= '0';
155    gpio24 <= dip_sw(1); --na desce je prohozene cislovani
156
157   shdn(1) <= '0';
158   shdn(2) <= '0';
159   shdn(3) <= '1';
160
161   pwm(1) <= '0';
162   pwm(2) <= '0';
163   pwm(3) <= '0';
164
165
166   
167     process (gpio11) --nufunguje preo piny 11,17,27 funguje pro 4,18,22,ext_sclk,10
168     begin
169         --if (gpio11'event and gpio11 = '1') then  -- rising edge of SCK
170         if (rising_edge(gpio11)) then 
171             --if (gpio7 = '0') then             -- SPI CS must be selected
172                 -- shift serial data into dat_reg on each rising edge
173                 -- of SCK, MSB first
174                 dat_reg(7 downto 0) <= dat_reg(6 downto 0) & gpio10;
175                 
176                -- gpio4 <= dat_reg(7);
177                 --gpio17 <= dat_reg(6);
178                 --gpio18 <= dat_reg(5);
179                 --gpio27 <= dat_reg(4);
180                 --gpio22 <= dat_reg(3);
181                 gpio23 <= dat_reg(2);
182                 --gpio24 <= dat_reg(1);
183         --      gpio25 <= dat_reg(0);
184         
185                 
186            -- end if;
187        end if;
188     end process;
189     
190 --    process (gpio11)
191 --    begin
192 --      if (rising_edge(gpio11)) then
193 --        gpio25 <= '1';
194 --      elsif (falling_edge(gpio11)) then
195 --        gpio25 <= '0';
196 --      end if;
197 --  end process;
198
199 end behavioral;