Forum: FPGA, VHDL & Co. SPI implementiren


von Siyabend S. (siyabend)


Lesenswert?

Hallo,

Ich bin ein Anfänger und ich möchte gerne im FPGA für die parallele 
Datenübertragung SPI (in VHDL) realisieren.
Die Daten werden vom ADW (16 Bit) über SPI parallel im FPGA bearbeitet.
Hat jemand eine Idee, wie man es am leichtesten ermöglicht?


Gruß
Siyabend.

von PittyJ (Gast)


Lesenswert?

Ich dachte immer, SPI wäre mehr seriell. Eine Leitung für Daten und eine 
für den Takt. Na gut, das kann man auch als parallel bezeichnen.

Bei Wikipedia gibt es ein Übersicht zu SPI. Die englische Seite hat 
dabei noch mehr Informationen.
Es gibt bei opencores.org einige Beispiele, wie andere Leute das gemacht 
haben.

Ach ja, was bedeutet eigentlich 'bearbeitet' ?

von Siyabend S. (siyabend)


Lesenswert?

Hallo PittyJ,

danke für die Infos. ich meine mit dem Bearbeiten eher ausarbeiten, 
ausführen bzw. weiterleiten.
Gruß
Siyabend

von SPIler (Gast)


Lesenswert?

PittyJ hats ja schon angerissen;

Du legst zu jeder Datenleitung ein Clock Signal an. Darauf triggerst Du. 
Natürlich muss der Sync beachtet werden, damit Du die Daten der 
einzelnen Bits nicht zeitlich falsch ausliest. Damit hättest Du eine 
parallele SPI.

Andernfalls kannst Du Schieberegister benutzen, um Leitungen zu sparen. 
Dann hättest Du nur zwei Leitungen. Ist aber eher ungewöhnlich. </;-)>

RTFM.

http://www.lothar-miller.de/s9y/archives/15-SPI.html

von Siyabend S. (siyabend)


Angehängte Dateien:

Lesenswert?

Hallo,
danke sehr nett von dir.

ich habe eine bsp gefunden und weiß nicht genau, ob das die richtige 
Methode ist.

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


Lesenswert?

Siyabend S. schrieb:
> ich habe eine bsp gefunden und weiß nicht genau, ob das die richtige
> Methode ist.
Hast du das mal simuliert? Was kommt da raus? Nichts sinnvolles?

Ein Tipp:
Sieh dir mal den Link vom SPIler nochmal an und auch den Index auf der 
linken Seite meiner HP...

von Siyabend S. (siyabend)


Lesenswert?

> Hast du das mal simuliert?
nein ich habe es nicht simuliert.
Für die Simulation muss ich testbench schreiben?
Möchte gerne wissen, was ist sinnvoll: SPI ohne oder mit Slave?

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


Lesenswert?

Siyabend S. schrieb:
>> Hast du das mal simuliert?
> nein ich habe es nicht simuliert.
> Für die Simulation muss ich testbench schreiben?
Ja, das musst du.

> Möchte gerne wissen, was ist sinnvoll: SPI ohne oder mit Slave?
Du bist dir nicht ganz im Klaren, was SPI ist?
Es gibt auf einem SPI-Bus immer genau einen (in Zahlen 1) SPI-Master, an 
den einer oder mehrere SPI-Slaves angeschlossen sind. Und wenn du einen 
SPI-AD-Wandler hast, dann ist das auf jeden Fall ein Slave. Was brauchst 
du logischerweise in deinem FPGA, um diesen Slave anzusteuern?

von SPIler (Gast)


Lesenswert?

Siyabend S. schrieb:
> Möchte gerne wissen, was ist sinnvoll: SPI ohne oder mit Slave?

Na der SPI ohne Slave macht Dir weniger Arbeit. Da kannst Du ruhig die 
Daten ins /dev/null schreiben, da passt ne Menge rein. Ohne Slave 
erwartest Du ja eh keine Antworten.

Wahrscheinlich war der Lothar-Miller-Link schon zu spezifisch: Eventuell 
wäre hier die richtige Anlaufstation:

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

@LM: Respekt für Deine Engelsgeduld!!

von Siyabend S. (siyabend)


Lesenswert?

Danke euch beiden, es hat mit bis jetzt sehr viel geholfen.
bin grade dabei ein master und ein slave zu schreiben, wenn ich fertig 
bin werde es hier hochladen.
gruß
Siyabend

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


Lesenswert?

Siyabend S. schrieb:
> bin grade dabei ein master und ein slave zu schreiben
Warum einen Slave? Ich denke, du hast einen ADC als Slave?
> wenn ich fertig bin werde es hier hochladen.
Aber bitte mit Testbench. Denn gerade ein SPI Interface lässt sich schön 
einfach simulieren, und für so einen AD-Wandler ist im Handumdrehen ein 
Simulationsmodell/Verhaltensmodell/BFM beschrieben...

SPIler schrieb:
> @LM: Respekt für Deine Engelsgeduld!!
Danke dir...  ;-)

von Cetec F. (ftec)


Lesenswert?

Hallo Siyabend,

vielleicht diese Bsp. kann dir helfen.

Aber erst muss Lothar es kontrollieren, vielleicht kann noch einiges 
eingefügt werden.

1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
entity Master is
6
  generic (leange: integer := 16);
7
8
Port (   
9
    clock  : in     std_logic;
10
    Reset  : in     std_logic;
11
    Datain : in     std_logic_vector( leange-1 downto 0);
12
    SCLK   : out    std_logic;
13
    MOSI   : out    std_logic;
14
    MISO   : in     std_logic;
15
    SS     : out    std_logic);    
16
end Master;
17
18
architecture Behavioral of Master is
19
20
signal tx_reg : std_logic_vector(leange-1 downto 0);
21
   
22
type   States is (Idle, Data_transfer, Stop);
23
signal State: States := Idle;
24
  
25
shared variable Count: integer range 0 to leange;
26
begin
27
28
  MOSI <= tx_reg(tx_reg'left);
29
  SCLK <= clock   -- Master clock send to SCLK 
30
  when State = Data_Transfer                 
31
  else '0';                       
32
  
33
process( clock)
34
begin
35
  if rising_edge( clock) then
36
    case State is
37
      when Idle =>
38
        SS <= '1';
39
        if   Reset='1' then
40
          Count := 0;        -- Init Data bit counter
41
          tx_reg <= Datain;      -- Load parallel data
42
          SS  <= '0';        -- Select Slave aktive
43
          State <= Data_Transfer; -- Change state
44
        end if;
45
      when Data_transfer =>
46
        if   Count < (leange-1) then 
47
          Count := Count+1;
48
          tx_reg <= tx_reg( tx_reg'left-1 downto 0)& MISO;
49
        else
50
          State <= Stop;  -- Change state
51
        end if;
52
      when Stop =>
53
        SS <= '1';     -- Deselect slave
54
        if   Reset='0' then
55
          State <= Idle;    
56
        end if;
57
    end case;
58
  end if;
59
end process;
60
end Behavioral;

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


Lesenswert?

cetec Ftec schrieb:
> Aber erst muss Lothar es kontrollieren...
Neineinein, macht das mal selber.
Der dadurch entstehende Prozess heißt Lernen...

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.