2016-03-31 16 views
0

Ich bin ein Anfänger in VHDL mit nicht viel Griff auf Signal.VHDL Signal Erklärung Verwendung

Mein Verständnis ist, dass Sie Signalwert wie signal<='100' zuweisen können, aber Sie müssen es nicht deklarieren. Ist das korrekt?

Auch für die Zeichenerweiterung ext_imme<=(31 downto 16=> imme(15)) & imme; Warum würde dies für die Erweiterung von 16 Bit auf 32 Bit durch zweimaliges Wiederholen von imme(15) funktionieren?

+0

Ihre Syntax ist nicht korrekt ('some_signal <=" 100 ";' 'signal' 'ist ein reserviertes Wort), noch Ihre Annahme. Ein benanntes Signal wird immer deklariert, dieser Name kann ein Präfix für einen impliziten Signalnamen, Slice-Name oder indizierten Namen sein. Ein Objekt ist ein Typ und ein Wert, der durch seinen deklarierten Namen festgelegt wird. Der Ausdruck auf der rechten Seite der Signalzuweisung zu "ext_imme" enthält ein Aggregat, das eine Array-Länge 15 zuweist, wobei jedes Element den Wert von imme (15) hat, und dieses Array mit imma verkettet (vermutlich mit einem Bereich 15 bis 0). Erzeugen eines Array-Wertes 32 lang. Deklarationen anzeigen – user1155120

Antwort

2

1) Sie können Signalwerte wie signal<='100' nicht zuweisen, ohne es zu deklarieren. Du bist nicht korrekt.

VHDL mag keine Überraschungen. Alles muss immer deklariert werden, bevor Sie es verwenden.

So müssen Sie ein Signal (im deklarativen Region der architecture, dh zwischen architecture und begin) erklärt:

architecture SOME_NAME of SOME_OTHER_NAME is 
    -- declare signals (and other things) here, eg 
    signal SOME_SIGNAL_NAME : std_logic; -- or some other type 
begin 

Sie können auch Signale initialisieren, wenn Sie sie erklären, aber ich wäre tun dies sehr vorsichtig, wenn Sie den Code zu synthetisieren beabsichtigen, zB:

signal SOME_SIGNAL_NAME : std_logic := '0'; 

2) diese ext_imme<=(31 downto 16=> imme(15)) & imme ist ein Beispiel für eine Aggregat und eine Verkettung. Ein Aggregat ist eine Möglichkeit, den Elementen eines Arrays zuzuordnen. Eine Verkettung ist eine Möglichkeit, zwei Arrays zu einem größeren Array zusammenzufügen.

In Ihrem Beispiel ist dies das Aggregat: (31 downto 16=> imme(15)). Hier machen Sie die Bits 31 auf 16 gleich dem Bit 15 von imme. Dies ergibt 16 Bit, die alle dem Bit 15 von imme entsprechen.

Der Vorgang '&' ist der Verkettungsoperator. In Ihrem Beispiel verbinden Sie die 16 Bits des Aggregats mit den 16 Bits von imme zu insgesamt 32 Bits.

Hier einige andere Beispiele für die Verwendung von Aggregaten: http://www.edaplayground.com/x/CQm.