Forum: FPGA, VHDL & Co. Signalinitialisierung mit Mustern


von Rian (Gast)


Lesenswert?

Hallo Leute,

ich suche seit einiger Zeit eine Möglichkeit, ein Signal bzw. eine 
Konstante nach einem Muster zu initialisieren. Sprich, wenn ich sowas 
habe:
1
constant IPAD : std_logic_vector(127 downto 0) := x"36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636";

würde ich lieber irgendwie ausdrücken, dass er jeweils 8 Bit mit x"36" 
füllen soll, um mir Tipparbeit zu sparen. Gibt es dafür irgendeine 
clevere Möglichkeit?

von Rian V. (rianq)


Lesenswert?

...der Beispielvektor ist natürlich viel zu lang für 128 Bit, sorry. 
Falsch rauskopiert. Frage bleibt aber dieselbe. Und habe mich jetzt mal 
ordentlich angemeldet.

von dito (Gast)


Lesenswert?

Habe ich auch schon mal drüber nachgedacht. Ich fürchte aber da gibt es 
keine einfachere Möglichkeit. An Vorschlägen bin ich aber auch 
interessiert...

von AHED (Gast)


Lesenswert?

Ich nutze für so etwas eine Funktion:


1
constant IPAD: std_logic_vector( 127 downto 0 ) := CLONE_SLV( x"36", 16 );
2
3
4
5
6
function CLONE_SLV( src: std_logic_vector; n: integer ) return std_logic_vector is
7
--copy/clone an std_logic-vector n-times and form an SLV of length n* src'length
8
9
  constant src_length: integer := src'high - src'low + 1;
10
  variable ret: std_logic_vector( n*src_length - 1 downto 0 );
11
begin
12
  
13
  ret := ( others => '0' );
14
15
  if n = 0
16
    then return ret;
17
  end if;
18
  
19
  for i in 0 to n - 1 loop
20
    ret( (i+1)*src_length - 1 downto (i+0)*src_length ) := src;
21
  end loop;
22
23
  return ret;
24
  
25
end function;

von Rian V. (rianq)


Lesenswert?

Cool, werde ich mal ausprobieren. Besten Dank!

von Edi M. (Gast)


Lesenswert?

Sowas hätte ich jetzt auch vorgeschlagen, aber genau genommen ist die 
Tipperei der obigen Zeile nur n-mal Paste. Und das, was gemeint ist, ist 
evident. Den Konstrukt unten kann keiner auf Anhieb verstehen.

Was auch ginge wäre:

vektor <= muster & muster & muster;

von berndl (Gast)


Lesenswert?

E. M. schrieb:
> Den Konstrukt unten kann keiner auf Anhieb verstehen

was meinst du mit 'unten'? Die Funktion?
Die hat den Charme, dass du da (fast) alles reinschreiben kannst was 
VHDL dir erlaubt (z.B. einen viertel Sinus, aber halt berechnet, nicht 
getippt).
Und zum Verstaendnis koennte man ja auch ein paar Zeilen Kommentar 
spendieren...

von Edi M. (Gast)


Lesenswert?

berndl schrieb:
> was meinst du mit 'unten'? Die Funktion?
Ja, die Funktion. Man muss sie ja im Kopf durchsimuliere, um die 
Belegung zu verstehen. Muss in jedem Fall dokumentiert werden.

von dito (Gast)


Lesenswert?

E. M. schrieb:
> Ja, die Funktion. Man muss sie ja im Kopf durchsimuliere, um die
> Belegung zu verstehen.

Und wo ist jetzt das Problem? Genau genommen brauchst du die Funktion 
gar nicht zu verstehen, du verwendest sie einfach.

von Rian V. (rianq)


Lesenswert?

Die Funktion hat wunderbar funktioniert und ist genau das, was ich 
suchte, besten Dank. Die kommt auf jeden Fall in meine Bibliothek 
nützlicher Behelfer.
Und warum sollte man sie nicht verstehen? Finde sie ziemlich 
straightforward, da ist keine Magie bei. Gut, man sollte ohnehin alles 
dokumentieren, aber hier würde ein Halbsatz reichen, der Rest lässt sich 
leicht aus Funktionsbenenner und Signalnamen folgern.

von Edi M. (Gast)


Lesenswert?

dito schrieb:
> Und wo ist jetzt das Problem? Genau genommen brauchst du die Funktion
> gar nicht zu verstehen, du verwendest sie einfach.


Es geht mir mehr um den, der das mal verwenden muss und verstehen muss.

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.