Forum: FPGA, VHDL & Co. Verilog process in VHDL umschreiben


von S.G (Gast)


Lesenswert?

Ich habe ein Verilog Modul gefunden das ich für meine Zwecke in VHDL 
umschreiben möchte. bei folgendem Prozess habe ich ein wenig Probleme
1
always @(negedge adc_clk_i)
2
begin
3
  adc_state_m1 <= adc_state;
4
  adc_clk_en   <= ((adc_state_m1 == ADC_END_CNV_STATE) || (adc_state_m1 == ADC_READ_CNV_RESULT) && (sclk_clk_cnt != 0)) ? 1'b1 : 1'b0;  
5
end

wie zu sehen ist, werden hier non blocking  zuweisungen verwendet und 
soweit ich mich jetzt richtig erkundigt könnte ich in VHDL anstelle 
eines Signals eine Variable benutzen.
Gesagt, getan und das ist daraus geworden:
1
ADCCLK_valid: process(ADC_CLK) 
2
variable adc_state_m1: state:=ADC_IDLE_STATE ;
3
begin
4
  if falling_edge(ADC_CLK)then
5
    adc_state_m1 := adc_state;
6
    
7
    if((adc_state_m1 = ADC_END_CNV_STATE) or ((adc_state_m1 = ADC_READ_CNV_RESULT)and(sclk_clk_cnt /= "0000000")) ) then
8
      --if (sclk_clk_cnt /= "0000000") then
9
      adc_clk_en <='1';
10
      else
11
      adc_clk_en <='0';
12
      --end if;
13
    end if;
14
  end if;
15
16
end process ADCCLK_valid;

das scheint aber nicht so recht zu funktionieren. ich musste eine 
klammer um die beiden operanten für das "and" setzen da ISE meckert,aber 
denke mal das sollte nicht das Problem sein da auch Verilog das "and" 
zuerst auflöst oder?

von Lattice User (Gast)


Lesenswert?

S.G schrieb:
>
> wie zu sehen ist, werden hier non blocking  zuweisungen verwendet und
> soweit ich mich jetzt richtig erkundigt könnte ich in VHDL anstelle
> eines Signals eine Variable benutzen.

Anderst herum, für blocking variable, für non blocking signal

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


Lesenswert?

Ich würde, statt auf "blocking" oder "nonblocking" zu schauen, einfach 
mal die Funktion der Verilog Beschreibung durchdenken. Und dann diese 
Funktion in VHDL beschreiben. Das ist hier ja nicht allzu schwer, es 
geht einfach nur darum, taktsynchron ein Signal zuzuweisen.

BTW: der Name für den Takt stimmt mich nachdenklich. Wie wurde der Takt 
erzeugt und wie wird er auf den  Systemtakt synchronisiert?

von Trundle Trollkönig (Gast)


Lesenswert?

Lothar Miller schrieb:
> BTW: der Name für den Takt stimmt mich nachdenklich. Wie wurde der Takt
> erzeugt und wie wird er auf den  Systemtakt synchronisiert?

Ich denk mal ne externe CLK vom adc.

Wenn du die CLK vom adc nicht ebenfalls als Systemtakt verwendest, muss 
dir auf alle Fälle Gedanken wegen den "Clockübergängen/Synchronisierung" 
machen.

von Dexter (Gast)


Lesenswert?

Der systemtakt und der adc clock werden gemeinsam von einem xilinx IP 
Core erzeugt

@lothar

Zum beschreiben der Funktion muss ich ja wissen ob die Änderung von 
adc_state_m1 sofort stattfindet oder zum nächsten Takt, daher meine 
Frage zu dem non blockig.

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.