Forum: FPGA, VHDL & Co. Verilog zu VHDL umwandeln


von Miauz (Gast)


Lesenswert?

Moin Leude,

ich hab aktuell keine Möglichkeit hier zu Simulieren und hab nur ne 
kurze schnelle Frage wie folgender Code in VHDL aussehen würde:
1
test[1] <= &(varOne ~^ patt);
Ich hab das nun zu das geändert
1
if ((varOne xnor patt) = X"FF") then
2
     test(1) <= '1';
3
else
4
     test(1) <= '0';
5
end if;
Es ist in einem sequentiellen Block, varOne und patt sind beides 
std_ulogic_vector(7 downto 0);

Hab hier ein relativ großen Code vor mir liegen den ich übersetzen muss 
und bin grad auf Fehlersuche und das ist so der einzige Teil wo ich mir 
grad unsicher bin.

Gruß
Miauz

von Cle (Gast)


Lesenswert?

Nicht direkt hilfreich -> Wenn du etwas testen willst ist das hier ganz 
gut:
https://www.edaplayground.com/

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


Lesenswert?

Miauz schrieb:
> bin grad auf Fehlersuche
Nach welchem Fehler denn?

> if ((varOne xnor patt) = X"FF") then
So viele Klammern. Ganz offensichtlich ein Programmierer, der FPGA 
machen muss  ;-)

> Es ist in einem sequentiellen Block
Dir ist das für Programmierer etwas "eigenartige" Verhalten von Signalen 
in einem Prozess bekannt und bewusst?

> &
VHDL 2008 hat unäre Versionen von AND, OR, NOR, NAND, XOR und XNOR. 
Damit kannst du einen Vektor ganz einfach reduzieren:
1
slbit <= AND slvect;

> if ((varOne xnor patt) = X"FF") then
Ich würde das nebenläufig machen, da ist doch keine Not für einen 
Prozess:
1
test(1) <= AND(varOne xnor patt);

Miauz schrieb:
> ne kurze schnelle Frage wie folgender Code in VHDL aussehen würde
Und jetzt kommt der eigentliche Witz: was macht denn der Code? Wann gibt 
er '1' zurück und wann '0'?
Ich habe so den Verdacht, dass das ein simpler Vergleich auf Gleichheit 
ist. Denn nach dem verXNORen der beiden Vektoren ist im resultierenden 
Vektor überall dort eine '1' , wo die beiden Vektoren gleich sind. Und 
wenn man das dann diesen Vektor bitweise verUNDet, dann kommt nur dann 
eine '1' raus, wenn alles gleich ist. Und damit reicht und ein simples 
und für jeden verständlicher Vergleich:
1
test(1) <= '1' when varOne = patt else '0';

von Gerald M. (gerald_m17)


Lesenswert?

Nicht viel Hirnschmalz rein stecken. Einfach als Entity laden und in 
deinem VHDL-Code nutzen, als ob es eine VHDL Entity wäre.

von Fitzebutze (Gast)


Lesenswert?

Der Vollständigkeit halber:
1
iverilog -tvhdl *.v

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.