Forum: FPGA, VHDL & Co. Komisches Verhalten Xilinx CoolRunner2.


von berndl (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

berndl schrieb:
> High-Z scheint da nicht zu funktionieren...
Hmm sieht doch soweit gut aus...
Was sagt der RTL-Schaltplan dazu?

von berndl (Gast)


Lesenswert?

RTL hab' ich mir nicht angesehen...

Die Simulation funktioniert mit beiden Varianten (halt unterschiedliches 
Delay in->out und wieder zurueck).
An der echten HW konnte man am Oszi klar sehen, dass der CPLD permanent 
die Leitung treibt.

von berndl (Gast)


Lesenswert?

so, ich hatte heut' nachmittag nochmal beide Varianten probiert und an 
der HW getestet...

Im RTL war in beiden Faellen an PLD40 ein Tristate Treiber instantiert. 
Der Enable hing an 'ssc_dir', also richtig. Natuerlich fehlten bei der 
concurrent Variante die FFs zum rein-/raustakten. Die concurrent 
Variante funktioniert in echter HW nicht. Beide Varianten funktionieren 
allerdings in der Simulation (mit RANDOM pattern, read/write, variable 
Laenge, ASSERT statements zum checken, ...).

Ist nicht wirklich tragisch, die ge-clockte Variante kommt ins Produkt. 
Aber verstehen wuerde ich es doch gerne... Toolchain ist uebrigens ISE 
13, sollte also fuer CRII nix besonderes sein. Vlt. doch mal Xilinx 
anmailen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.