Hallo, ich habe in einer eigen work.shift Bibliothek ein Shift-Register erstellt. Dieses verwende ich nun in einem Header Project ganz normal mit: Shift: entity work.shift port map ( Q => Q, A => A, CE => CE, CLK => CLK, D => D ); wie macht man das am besten wenn man nicht nur eins sondern z.B. 2 moechte also sowas: Shift_0: entity work.shift port map ( Q => Q(0), A => A, CE => CE(0), CLK => CLK, D => D(0) ); Shift_1: entity work.shift port map ( Q => Q(1), A => A, CE => CE(1), CLK => CLK, D => D(1) ); Fuer zwei kann man das ja noch von Hand machen, aber wie wenn ich z.B. 100 oder so moechte? Kann man da loop oder for oder so was verwenden? Danke fuer alle Antworten!
das geht mit: for i in 0 to x generate Shift_inst: entity work.shift port map ( Q => Q(i), A => A, CE => CE(i), CLK => CLK, D => D(i) ); end generate; musst halt nur bedenken, dass dann alle signale mit einem index, wie zum beispiel D(i) dann ein bus sind cheers, soren
Bernt schrieb: > ich habe in einer eigen work.shift Bibliothek ein Shift-Register > erstellt. Die Schiebefunktionen aus der numeric_std sind dir bekannt?
1 | --============================================================================
|
2 | -- Shift and Rotate Functions
|
3 | --============================================================================
|
4 | |
5 | -- Id: S.1
|
6 | function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; |
7 | -- Result subtype: UNSIGNED(ARG'LENGTH-1 downto 0)
|
8 | -- Result: Performs a shift-left on an UNSIGNED vector COUNT times.
|
9 | -- The vacated positions are filled with '0'.
|
10 | -- The COUNT leftmost elements are lost.
|
11 | |
12 | -- Id: S.2
|
13 | function SHIFT_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; |
14 | -- Result subtype: UNSIGNED(ARG'LENGTH-1 downto 0)
|
15 | -- Result: Performs a shift-right on an UNSIGNED vector COUNT times.
|
16 | -- The vacated positions are filled with '0'.
|
17 | -- The COUNT rightmost elements are lost.
|
Vielen Dank schon mal fuer die Antworten: @soren: wo genau muss ich die for schleife setzen? Ich erhalte immer eine Fehler wenn ich das einfach vor die componenten deklaration setze @Lothar: nein das war mir noch nicht bekannt! Schaut sehr interessant aus und werd ich mir gleich mal naeher anschauen. Gruss
musst natürlich noch nen label davorsetzen... sorry, ganz vergessen ^^ label_name: for i in 0 to x generate Shift_inst: entity work.shift port map ( Q => Q(i), A => A, CE => CE(i), CLK => CLK, D => D(i) ); end generate; soren
Ich haette noch mal eine Frage dazu, wie kann man denn mehrere std_logic_vector Signale erzeugen und wie kann man dann auf ein einzelnes oder mehrere Bits darin zugreifen. Wir kann man z.B. soetwas schneller schreiben: out : std_logic_vector(4 downto 0); signal v1: std_logic_vector(3 downto 0); signal v2: std_logic_vector(3 downto 0); signal v3: std_logic_vector(3 downto 0); signal v4: std_logic_vector(3 downto 0); signal v5: std_logic_vector(3 downto 0); process(clk) begin out(0) <= v1(2); out(1) <= v2(2); out(2) <= v3(2); out(3) <= v4(2); out(4) <= v5(2); end process; Danke!
Bernt schrieb: > Wir kann man z.B. soetwas schneller schreiben: z.B. indem man einen std_logic_vector (19 downto 0) und dann 'alias' verwendet. Oder indem man ein array (1 to 5) of std_logic_vector (3 downto 0) verwendet. Dann kannst du mit 'for ... loop' arbeiten (im process, sonst 'for ... generate').
berndl keinnachname schrieb: > Oder indem man ein array (1 to 5) of std_logic_vector (3 downto 0) > verwendet. Hierzu ein paar erläuternde Worte: http://www.lothar-miller.de/s9y/categories/32-Arrays
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.