Forum: FPGA, VHDL & Co. Untschied Bit_vector und Syntax?


von Lam_tr (Gast)


Lesenswert?

hallo zusammen,

entityfktab is
port(x4,x3,x2,x1 : in bit;
y : out bit);
end;
architecture demo of fktab is
begin
with bit_vector'(x4,x3,x2,x1) select
y <='1' when"0001",
'1' when"0010",
'1' when"0100",
'1' when"0111",
'1' when"1000",
'1' when"1011",
'1' when"1101",
'1' when"1110",
'0' when others;
end demo;

was hat das apostroph nach dem bibtvector zu sagen, oder ist das einfach 
fest?

und dann Unterschied zwischen bit_vector und std_logic_vector?

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


Lesenswert?

> apostroph
Kennzeichnet ein Attribut.
z.B. 'event, 'left , 'right, 'range
Such mal vhdlqrc.pdf

> und dann Unterschied zwischen bit_vector und std_logic_vector?
Ein bit kann 0 oder 1 werden.
std_logic dagegen ist 9-wertig,
da gibt es zu 0 und 1 auch Z, U, X, H, L, W, -

Ein bit_vector ist ein Vektor aus Bits,
ein std_logic_vector ist ein Vektor aus std_logic.

In der Synthese für ein FPGA ist der Zustand Z manchmal recht brauchbar, 
insbesondere, wenn ein bidirektionaler IO-Port beschreiben werden soll.

von Lam_tr (Gast)


Lesenswert?

vielen dank für die schnelle und gute antwort!

kennst du eventuell einen guten anleitung bzw. buch für VHDL?

können sie mir dann kurz den quellcode erläutern?

signalinput_sig, output_sig, clk, reset: bit;
.... --D-FF ohne zusätzliche Eingänge
process(clk)
begin
if(clk’event and clk=’1’) then
output_sig<= input_sig;
end if;
end process;
--D-FF mit synchronem Reset
process(clk)
begin
if(clk’eventand clk= ’1’) then
ifreset= ’1’then
output_sig<= ’0’;
else
output_sig<= input_sig;
end if;
end if;
end process;

ich weiss zwar bei der abfrage nmit clk dass es nach positvien 
taktflanke abfrägt, aber wie kann ich den ganzen ausdruck verstehen

clk’event and clk=’1’?

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


Lesenswert?

> kennst du eventuell einen guten anleitung bzw. buch für VHDL?
Ja: Reichardt/Schwarz VHDL-Synthese

> wie kann ich den ganzen ausdruck verstehen
> clk’event and clk=’1’?
Das Attrigut 'event bedeutet irgendeine Änderung eines Signals (hier 
clk). Zusammen mit clk='1' wird damit eine steigende Flanke definiert:
Wenn eine Änderung am clk passiert und danach clk = '1' ist, dann ist 
das eine steigende Flanke. Damit ist allerdings auch eine Flanke von 'X' 
nach '1' oder eine Flanke von 'H' nach '1' eine steigende Flanke.
Besser ist es daher, die Funktion rising_edge() zu verwenden.

> können sie mir dann kurz den quellcode erläutern?
Im Beitrag "Re: Hardware mit VHDL "richtig" beschreiben." finden sich einige 
Beschreibungen und die Syntheseergebnisse dazu.

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.