2017-06-16 10 views
-1

Ich habe eine std_logic_vector Eingabe in meinem Programm deklariert, sagen Nummer: std_logic_vector (7 downto 0). Ich möchte ein Signal vom Typ std_logic_vector type deklarieren, dessen Länge sich bis zur Länge meiner Eingabe 'number' erhöht. Um genau zu sein, möchte ich ein Signal, dies zu tun -Wie deklariere ich eine Variable Länge std_logic_vector Signal

for j in num_length downto 0 loop --num_length=number'length-1 
a <= number(num_length downto j); -- variable length signal 'a' 
end loop; 

Wie kann ich das tun ??

+0

Verwenden Sie 'number'length'. Aber Ihr Codebeispiel macht keinen Sinn. – JHBonarius

+0

Ok. Ich werde meine Frage erläutern. Für die Ex: Ich habe Nummer = "10101010" (A std_logic_vector der Größe 8) Ich möchte ein Signal 'a' erklären, die a = "1" a = "10" a = "101" nehmen sollte a = "1010" und so weiter wie es in der for-Schleife untergeht. Ich sehe eine einfache Möglichkeit, dies zu tun. Vielen Dank! – Veena

+0

Sie wollen also einen 'std_logic_vector' mit variabler Länge? Wie glaubst du, dass das funktioniert? Sie würden dynamische Speicherzuweisung benötigen. VHDL ist eine Hardwarebeschreibungssprache. 'std_logic_vector' steht für eine Anzahl von Drähten. Wie würden Sie Drähte dynamisch in einem System hinzufügen oder entfernen? Sie fixieren die Länge jedes Arrays während der Instanziierung. – JHBonarius

Antwort

-1

VHDL ist eine Hardwarebeschreibungssprache (HDL). Ihr std_logic_vector wird durch Drähte und Register (physische Komponenten) dargestellt. Daher kann sich die Größe nicht dynamisch ändern, sondern muss vor der Synthese bestimmt werden.

verwenden also ein std_logic_vector mit der Länge ‚MAX‘ Sie benötigen, dann lesen nur die Bits, die Sie benötigen:

constant zeros : std_logic_vector(MAX-1 downto 0) := (others => '0'); 
signal a,b  : std_logic_vector(MAX-1 downto 0); 
... 
a <= something; 
... 
b <= zeros(MAX-1 downto i) & a(i-1 downto 0); -- i is your dynamic index 

dies der Fall erstreckt sich nicht auf, wo Sie zwar den vollen Vektor lesen müssen.

Sie könnten eine Maske .. ein bisschen chaotisch verwenden:

use ieee.numeric_std.all; 
... 
constant mask : std_logic_vector(MAX-1 downto 0) := (others => '1'); 
signal a,b  : std_logic_vector(MAX-1 downto 0); 
... 
a <= something; 
... 
b <= std_logic_vector(shift_right(unsigned(mask), MAX-i)) and a; -- i is your dynamic index 

nicht sicher, was Sie tun möchten, sollten genau, aber diese Ideen helfen.

+0

Ja. momentan versuche ich mit maximaler Länge und versuche mein Signal zu verkleinern. Wie definierst du in deiner Lösung die Maske? wieder muss es von variabler Länge sein, oder? Sonst werden wir Fehler bekommen. – Veena

+0

Eigentlich meinte ich Null Padding, obwohl Sie es auch mit einer Maske tun könnten ... Antwort bearbeitet. –

Verwandte Themen