Forum: FPGA, VHDL & Co. SPI-Slave Problem(e)


von engineer_on_tour (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein (hoffentlich einfach zu lösendes) Problem bezüglich der 
Nutzung eines in VHDL programierten SPI-Slaves:

Ich nutze folgende Vorlage: 
http://www.lothar-miller.de/s9y/archives/31-SPI-Slave-im-CPLD.html#extended 
da ich die Nutzung des Schieberegisters sehr Elegant finde (im Vergleich 
zu Lösungen mit Countern).

Das Empfangen mit dem Slave funktioniert wunderbar. Die paar Zeilen des 
Sendens verursachen jedoch Warnings beim synthetisieren und führen zudem 
nicht zum erhofften Ergebnis.
1
entity cSpiSlave is
2
Port ( 
3
in_CLK   : in   STD_LOGIC := 'X';
4
in_MOSI : in   STD_LOGIC := 'X';
5
in_CS   : in   STD_LOGIC := 'X';
6
out_MISO: out  STD_LOGIC := 'X';
7
o_RxData : out  STD_LOGIC_VECTOR (16-1 downto 0)
8
);
9
end cSpiSlave;
10
11
architecture VERHALTEN of cSpiSlave is
12
13
signal int_DataRx : STD_LOGIC_VECTOR (16-1 downto 0)  := x"5554";  
14
signal int_DataTx : STD_LOGIC_VECTOR (16-1 downto 0);
15
16
begin
17
18
process(in_CLK,in_CS)
19
begin
20
 if rising_edge(in_CLK) then
21
  if (in_CS = '0') then
22
   int_DataRx <= int_DataRx(16-2 downto 0) & in_MOSI; 
23
  end if;
24
 end if;
25
end process;
26
---------------------------------------------------------------------------
27
o_RxData <= int_DataRx when in_CS='1' else x"4444"; 
28
29
30
Bis hier klappt alles BESTENS! Aber dann kommt:
31
32
process (in_CS, int_DataTx, in_CLK)   
33
begin
34
 if (in_CS='1') then
35
  int_DataTx <= x"FAFA";
36
 elsif falling_edge(in_CLK) then                  
37
  int_DataTx <= int_DataTx(16-2 downto 0) & '0';
38
 end if;
39
end process;
40
out_MISO <= int_DataTx(15) when in_CS='0' else 'Z';


Hier die Probleme:

1.) int_DataTx <= x"FFFF"; diese Zuweisung versursacht Warnings, wenn 
nicht FFFF sonden Werte von 1 verschieden zugewiesen werden.

WARNING:Xst:1710 - FF/Latch <int_DataTx_0> (without init value) has a 
constant value of 0 in block <SPI_inst1>. This FF/Latch will be trimmed 
during the optimization process.

WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch 
<int_DataTx_1> (without init value) has a constant value of 0 in block 
<SPI_inst1>. This FF/Latch will be trimmed during the optimization 
process.


2.) Auf Master-Seite kommen nicht die korrekten Informationen an. Hat 
jemand eine Erklärung dafür? (Aus 0xFAFA wird beim Empfang 0xF7BD, aus 
0xCF03 wird 0x9249 und aus 0xFFFF wird 0xFFFE??)

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


Lesenswert?

engineer_on_tour schrieb:
> 1.) int_DataTx <= x"FFFF"; diese Zuweisung versursacht Warnings, wenn
> nicht FFFF sonden Werte von 1 verschieden zugewiesen werden.
Dem Vektor int_DataTx wird nie ein (sinnvoller) Wert zugewiesen, deshalb 
gibts die Warnungen, weil Teile des Vektors als statisch erkannt werden.

> 2.) Auf Master-Seite kommen nicht die korrekten Informationen an.
Hast du ein Oszi? Was geht tatsächlich auf den Bus raus?

> Hat jemand eine Erklärung dafür?
Wenn sonst alles passt, dann am ehesten: falscher SPI Mode...

von engineer_on_tour (Gast)


Lesenswert?

Lothar Miller schrieb:
> Dem Vektor int_DataTx wird nie ein (sinnvoller) Wert zugewiesen, deshalb
> gibts die Warnungen, weil Teile des Vektors als statisch erkannt werden.

Wie sollte ich denn (bis ich keine statischen sondern von einer 
StateMachine erzeugte Daten senden möchte) eine Zuweisung machen, damit 
keine Warnung auftritt?


Die Oszi-Messungen mache ich jetzt und kann gleich Bilder liefern. Die 
SPi-Modes werde ich jetzt einfach mal durchtesten.

von engineer_on_tour (Gast)


Lesenswert?

Lothar Miller schrieb:
> Wenn sonst alles passt, dann am ehesten: falscher SPI Mode...

War ein guter Tipp ... habe das angepasst und von falling_edge triggern 
auf rising edge gewechselt. Jetzt gehts :D

Vielen Dank !

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


Lesenswert?

engineer_on_tour schrieb:
> War ein guter Tipp ... habe das angepasst und von falling_edge triggern
> auf rising edge gewechselt.
Es ist dann evtl. keine schlechte Idee, auch beim Empfangen die andere 
Flanke zu nehmen. Aber dazu weiß das Datenblatt des Masters sicher 
mehr...

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.