Forum: FPGA, VHDL & Co. Ist dieser Code sauber?


von Reto B. (schnuber)


Lesenswert?

Hallo

Ich habe in einem Design folgenden Code angetroffe:
1
   power_up: process(clk, reset) begin
2
      if reset = '1' then
3
         reset_sm_ub <= '1';
4
      elsif clk'EVENT and clk = '1' then
5
      if i_pf50_n = '1' and vcbank = '1' and vpos_f = '1' then
6
            reset_sm_ub <= '0';
7
         elsif vpos_f = '0' then
8
            reset_sm_ub <= '1';  
9
         end if;
10
      end if;
11
   end process power_up;

Ist mein Gefühl richtig, dass dieser Code unsauber ist, denn welchen 
Wert hat reset_sm_ub, wenn z.B. vcbank = '0'? Dieser Zustand wird in der 
If-else Abfrage nicht behandelt.

Was ist eure Meinung?

Gruss
Reto

von jibi (Gast)


Lesenswert?

asynchroner reset, rest synchron, nichts böses dabei...

Gruß J

von Reto B. (schnuber)


Lesenswert?

Ok, aber welchen Wert nimmt reset_sm_ub an wenn z.B. vcbank = '0' ?

: Bearbeitet durch User
von Carpe diem (Gast)


Lesenswert?

Reto B. schrieb:
> Ok, aber welchen Wert nimmt reset_sm_ub an wenn z.B. vcbank = '0'
> ?

Es behält den vorher gespeicherten.

von Tschaebe (Gast)


Lesenswert?

Reto B. schrieb:
> if reset = '1' then

Wenn reset deassertion synchron zum Takt ist, ist es OK

>       elsif clk'EVENT and clk = '1' then
>       if i_pf50_n = '1' and vcbank = '1' and vpos_f = '1' then

Wenn i_pf50_n, vcbank und vpos_f taktsynchron sind und sich und eine 
definierte Verzoegerung zum Takt haben (constraints !) ist das auch OK.
Wenn sie jedoch asynchron sind (geht aus dem Code nicht hervor), wirst 
Du viel "Freude" beim debuggen haben (also dann besser ensynchrisieren) 
...

Viele Gruesse,
Tschaebe

von Reto B. (schnuber)


Lesenswert?

i_pf50_n, vcbank und vpos_f sind in der Tat synchronisierte Signale zu 
clk.

Die Sache ist in dem Fall in Ordnung.

Vielen DAnk für eure Hilfe.

Gruss

von Weltbester FPGA Pongo (Gast)


Lesenswert?

Dem Code kann man es ohnehin oft nicht ansehen, ob er ok ist. Die 
Funktion erschließt sich ja nicht eindeutig und DIE ist massgeblich. Es 
kann daher durchaus sein, dass dort oben der ELSE-Zweig fehlt.

Kann aber auch sein, dass das so gewollt ist. Um das zu dokumentieren, 
schreibe ich den immer hin und kommentiere ihn weg.

von Fpgakuechle K. (Gast)


Lesenswert?

Wenn du unbedingt den code säubern willst dann schreibe
rising_edge(clk)       statt
clk'EVENT and clk = '1'

und ob der reset unbedingt asynchron sein muß wäre auch noch zu prüfen.

MfG,

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.