2013-04-25 3 views

Antwort

7

eine mögliche Abhilfe ist ein Vielfaches von 4 Bits als Hex-Wert zu schreiben und den Rest in binärer hinzufügen, zum Beispiel:

signal v: std_logic_vector(9 downto 0) := "01" & X"1A"; 
4

Soweit ich weiß, gibt es keine „direkten“ Weg zu erreichen Nach was suchst du. Sie könnten das folgende verwenden, das VHDL ist.

constant init : std_logic_vector (11 downto 0) := X"11A"; 
signal v : std_logic_vector (9 downto 0) := init(9 downto 0); 
+2

oder portabler, ': = init (v'range);' –

+1

Meine erste Antwort enthielt den 'v'range' Teil, aber ich habe versucht, es zu kompilieren und bekam einen' Unbekannten Bezeichner 'v "' error. Scheint so lange, wie mein Compiler nicht auf ganze Zeile geparst hat, weiß es nicht über 'v'. – simon

+1

ah das ist wahrscheinlich richtig. Wenn es mehr als eine Größe von v gibt, mache ich einen Subtyp dafür (v_type oder dataword oder ein beschreibender Typname.) Dann würde der Bereich von wordword dort arbeiten. –

9

x"11A" ist ein "hexadezimale Bit Stringliteral". Vor VHDL-2008 mussten diese ein Vielfaches von 4 Bit sein, daher das Problem, das Sie sehen. VHDL-2008 hat diese Einschränkung aufgehoben, sodass Sie jetzt 10x"11A" schreiben können. Ich weiß nicht, wie viel Werkzeugunterstützung es für 2008 gibt.

+2

Ich muss mehr über VHDL 2008 lesen. Scheint voller nützlicher Funktionen zu sein :) – simon

+1

Es gibt eine gute kurze Zusammenfassung auf der Doulos Website - http://www.doulos.com/knowhow/vhdl_designers_guide/vhdl_2008/ – EML

1

Eine weitere Spielart von hässlichen Hack:

constant init : natural := 16#11A#; 
signal v : std_logic_vector(9 downto 0) := std_logic_vector(to_unsigned(init, 10)); 

Nachdem geschrieben, dass ich denke, es ist das Schlimmste der Optionen angeboten, aber ich lasse es hier als eine Möglichkeit!

Verwandte Themen