Signalinitialisierung mit Mustern

Gast #3211474
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?
Gast #3211663
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;
Gast #3211989
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;
Gast #3212019
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...
#3212099
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren