CLK test bench

OP #2310209
Lesenswert?
• ▲
▼
Hallo

mit folgendem Prozess würde ich gernen meinen sck für meinen spi slave 
erzeugen leider wird der prozess nur einmal ausgeführt danach bleibt er 
ruhig, wo liegt mein denkfehler wie müsste ich es schreiben das er 
ständig ausgeführt wird?(und sonst wartet)
1
  sck_spi_o_process :process
2
  begin
3
    sck_s <= '1';
4
    wait until sel_sck_en_s  =  '1' and ncs_i =  '0';
5
      sck_s <= '0';
6
      wait for sck_spi_o_period/2;
7
      sck_s <= '1';
8
      wait for sck_spi_o_period/2;
9
   end process;

lg Mike
Gast #2310433
Lesenswert?
• ▲
▼
Michael K^3 schrieb:
> sollte der Prozess ja ständig aufgerufen werden ohne Senitivityliste.
Es könnte sein, das er bei Deinem ersten wait auf eine Flanke wartet.

Schreibs mal so (ohne process, aber sck_s initialisiert):
1
  sck_s <= not sck_s after sck_spi_o_period/2 when sel_sck_en_s = '1' and ncs_i = '0';

Duke
Moderator (Firma: Titel) Persönliche Seite #2310540
Lesenswert?
• ▲
▼
Duke Scarring schrieb:
> Es könnte sein, das er bei Deinem ersten wait auf eine Flanke wartet.
Richtig: wait wartet auf irgend eine Signaländerung ... :-o

Michael K^3 schrieb:
> wo liegt mein denkfehler wie müsste ich es schreiben das er
> ständig ausgeführt wird?(und sonst wartet)
Ich würde das mal so probieren:
1
  sck_spi_o_process :process
2
  begin
3
    sck_s <= '1';
4
    if (sel_sck_en_s='1' and ncs_i='0') then
5
      sck_s <= '0';
6
      wait for sck_spi_o_period/2;
7
    end if;
8
    sck_s <= '1';
9
    wait for sck_spi_o_period/2;
10
  end process;
Der Nachteil: du hast eine Granulatität von sck_spi_o_period/2 wenn die 
Taktbedingungen nicht erfüllt sind...
Der Vorteil: dein Takt wird nicht "mittendrin" abgebrochen...
OP #2310641
Lesenswert?
• ▲
▼
Hallo

Lothar Miller schrieb:
> Der Nachteil: du hast eine Granulatität von sck_spi_o_period/2 wenn die
>
> Taktbedingungen nicht erfüllt sind...

das ist mehr oder weniger nicht ganz akzeptabel.

Allerdings habe ich es jetzt so gelöst.
1
  sck_spi_o_process :process
2
  begin
3
    sck_s <= '1';
4
    if (sel_sck_en_s='1' and ncs_i='0') then
5
      sck_s <= '0';
6
      wait for sck_spi_o_period/2;
7
    sck_s <= '1';
8
    wait for sck_spi_o_period/2;
9
   else
10
    wait on sel_sck_en_s, ncs_i;
11
   end if;
12
  end process;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren