Moin,
ich verwende den CRII, um eine 3-Draht SSC (BiDi Datenleitung) mit einer
4-Draht SPI zu verheiraten. Funktioniert soweit prima, nur bin ich da
ueber etwas seltsames gestolpert:
Funktionierende Beschreibung:
1 | proc_io : process (clk)
|
2 | begin
|
3 | if rising_edge (clk) then
|
4 | ssc_ncs <= pld43;
|
5 | ssc_sck <= pld44;
|
6 | ssc_data <= pld40;
|
7 | if ssc_dir = '1' then
|
8 | pld40 <= spi_somi;
|
9 | else
|
10 | pld40 <= 'Z';
|
11 | end if;
|
12 |
|
13 | pld38 <= ssc_ncs;
|
14 | pld37 <= ssc_sck;
|
15 | pld32 <= ssc_data;
|
16 | spi_somi <= pld41;
|
17 |
|
18 | pld30 <= ssc_dir;
|
19 | end if;
|
20 | end process;
|
Oben werden die SSC-Signale eingelesen sowie der BiDi gebastelt,
'ssc_dir' kommt aus einem geclockten Prozess (50MHz). Drunter werden die
Signale an die SPI weitergegeben/eingelesen.
Die 'pldXX' sind alle als 'inout' definiert (LVCMOS33), die SSC ist der
Master.
Soweit so gut.
Wenn ich den o.g. Prozess aber concurrent (ohne Clock) machen will, also
so:
1 | ssc_ncs <= pld43;
|
2 | ssc_sck <= pld44;
|
3 | ssc_data <= pld40;
|
4 | pld40 <= spi_somi when ssc_dir = '1' else
|
5 | 'Z';
|
6 |
|
7 | pld38 <= ssc_ncs;
|
8 | pld37 <= ssc_sck;
|
9 | pld32 <= ssc_data;
|
10 | spi_somi <= pld41;
|
11 |
|
12 | pld30 <= ssc_dir;
|
dann feuert 'pld40' permanent gegen das externe ssc_data Signal. High-Z
scheint da nicht zu funktionieren...
Kennt jemand dieses komische Verhalten? Oder ist meine concurrent
Beschreibung Murks?