Forum: FPGA, VHDL & Co. Sparten 3e: in std_logic_vector mit einem festen Bit-Muster erstellen


von Thomas (Gast)


Lesenswert?

Hallo!

Ich möchte das Eingangssignal a der Entity mit einem festen Bit-Muster 
versehen:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity generic_vector is
    Port ( a : in  STD_LOGIC_VECTOR(3 downto);
           y : out STD_LOGIC_VECTOR(3 downto 0)
   );
end generic_vector;

architecture struc_arch of generic_vector is
begin
  y <= a;
end struc_arch;

Das Signal a soll zb die Bitfolge "1111" gleich "mitdeklariert" 
bekommen, damit ich dieses direkt auf den Ausgang weitergeben kann um 
dann entsprechend dem Bit-Muster ein paar LEDs zum leuchten zu bringen.

Ich habe jetzt schon sehr viel ausprobier, Literatur gewälzt und 
gegoogelt, kann dieses, höchstwahrschienlich sehr einfache, Probleme 
aber derzeit nicht lösen.
Für Hilfe und Anregung bedanke ich mich im Voraus!

von Thomas (Gast)


Lesenswert?

Thomas schrieb:
> Port ( a : in  STD_LOGIC_VECTOR(3 downto);

das heisst natürlich richtig:

 Port ( a : in  STD_LOGIC_VECTOR(3 downto 0);

von Franke (Gast)


Lesenswert?

hi,

Aktiviere doch einfach die pullups/oulldowns an den ios, schon gibts du 
ein pattern mit,
Wobei mir der Sinn der Schaltung noch nicht erschliesst...

Gruß

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


Lesenswert?

Thomas schrieb:
> Das Signal a soll zb die Bitfolge "1111" gleich "mitdeklariert"
> bekommen, damit ich dieses direkt auf den Ausgang weitergeben kann um
> dann entsprechend dem Bit-Muster ein paar LEDs zum leuchten zu bringen.
Das geht schon von der Idde her nicht, denn wie sieht deine Schaltung 
im FPGA aus? Richtig, das sind einfach nur Verbindungen, ganz ohne 
Speicherverhalten. So etwa:
1
  a(0) ---- y(0)
2
  a(1) ---- y(1)
3
  a(2) ---- y(2)
4
  a(3) ---- y(3)
Und wie willst du auf einer simplen Leitung etwas vorbelegen?

Wenn du einen Takt hättest und das so beschreiben würdest:
1
   y <= a when rising_edge(clk);
Dann könntest du einen Initialwert an die dadurch entstandenen 
y-Flipflops geben:
1
    Port ( a : in  STD_LOGIC_VECTOR(3 downto 0);
2
           y : out STD_LOGIC_VECTOR(3 downto 0) := "1111"
3
   );
Aber das würde auch nichts helfen, denn bei der ersten Taktflanke würde 
dieser Wert von dem Wert an a überschrieben.

Fazit: in beiden Fällen muss an a zum Start "1111" anliegen, damit an y 
"1111" herauskommt. Der Trick mit den Pullups/Pulldowns funktioniert 
nur, wenn ein hochohmiger Zustand an a eintritt (z.B. uC im Reset). Aber 
das wäre dann quasi Eingang auf Eingang, ein Zustand, der sowieso 
vermieden werden sollte...

von Thomas (Gast)


Lesenswert?

@ Franke (Gast), Lothar Miller (lkmiller)

Vielen Dank für die Antworten!

Ich lag natürlich völlig falsch mit der Annahme, dass man ein 
Eingangsignal für die Entity einfach so festlegen könnte.

Ich bin generell mit der falschen Denkweise an die Sache rangegangen.

Ich konnte mein "Eingangs Bit-Muster" nun, wie schon befürchtet, auf 
höchst einfache Weise festlegen, indem ich in der architecture meiner 
Entity einfach ein Signal mit den gewünschten Eigenschaften erstellt 
habe:

signal input_pattern: std_logic_vector (Q-1 downto 0):="00000001";

Dieses Signal "missbrauche" ich dann beim port map als Eingangssignal.

MFG Thomas

von D. I. (Gast)


Lesenswert?

Thomas schrieb:
> Dieses Signal "missbrauche" ich dann beim port map als Eingangssignal.

Du kannst den Vektor beim port map auch direkt angeben

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.