2016-04-19 5 views
0

Ich habe einen std_logic_vector, x: std_logice_vector(A+B-1 downto 0), und ich möchte die besten A Bits '1' und den unteren B Bits '0' setzen, gibt es eine einfache Möglichkeit, dies zu tun?Einstellen variabler Länge std_logic_vectors in VHDL

Ich möchte so etwas wie dies tun:

x <= (A+B-1 downto B <= (others => '1'), 
     B-1 downto 0 <= (others => '0')); 

Meine andere Pläne sind die Untersignale zu definieren und sich ihnen anzuschließen:

signal top: std_logic_vector(A-1 downto 0); 
signal bottom: std_logic_vector(B-1 downto 0); 
... 
top <= (others => '0'); 
bottom <= (others => '1'); 
x <= top & bottom; 

Oder ich könnte eine Funktion schreiben, die über alle Schleifen die Bits, aber das scheint eine Menge Arbeit für etwas so einfach.

Wenn es nicht einen einfachen Weg gibt und da ich dies mehrmals machen muss, kann ich eine Konstante definieren und diese verwenden.

+4

x <= (A + B-1 bis B => '1') & (B-1 bis 0 => '0'); –

+0

Das funktioniert, danke. Ich habe das '=>' nicht getrennt gesehen, wenn andere eingestellt wurden. –

+0

Dann lesen Sie über "named Association", es gibt eine Menge Verwendungen dafür. –

Antwort

2

Eine weitere Option ist die Verwendung von Aliasen. Zum Beispiel:

architecture test of foo is 
    signal x: std_logic_vector(A+B-1 downto 0); 
    alias x_upper is x(A+B-1 downto B); 
    alias x_lower is x(B-1 downto 0); 
begin 
    x_upper <= (others => '1'); 
    x_lower <= (others => '0'); 
end architecture test; 

Sie können die Aliase genau wie Signale behandeln. (Und sie sind vollständig synthetisierbar).

+0

Das ist wirklich interessant, ich habe eine Menge extra Signale gemacht, um so etwas zu tun. Ich schätze die meiste Zeit würde die Verkabelung gleich funktionieren, aber es ist schön, explizit zu sein. Vielen Dank. –

+0

@ R.Mckemey Genau warum ich Aliase mag. Wenn Sie ein Zwischensignal verwenden, ist das Schneiden von der Deklaration entfernt. Bei Verwendung von Aliasen liegt das Slicing direkt neben der Signaldeklaration, so dass es sehr klar und deutlich ist, was das Signal tun soll. – PlayDough