Gast
#1872508
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Hallo, ich habe da eine LED angeschlossen. Die soll 3 mal blinken. Leider ist die Syntax so falsch. :-( Wie schreibe ich das richtig?
|
Anzeige
|
Richtige VHDL Syntax
Gast
#1872508
Hallo, ich habe da eine LED angeschlossen. Die soll 3 mal blinken. Leider ist die Syntax so falsch. :-( Wie schreibe ich das richtig?
Gast
#1872544
VHDL Anfänger schrieb im Beitrag #1872508: >
>
VHDL Anfänger schrieb im Beitrag #1872508: > blink_led <= ((counter(21 downto 19) < 3) and counter(18)); 1. du kannst nicht einfach so einen Vektor mit einer Zahl vergleichen 2. aus einem Vergleich kommt als Ergebnis ein boolean heraus. Dieser lässt sich nicht mit einem std_logic verknüpfen und wieder einem std_logic zuweisen. VHDL hat eine strenge Typprüfung. Was in einer Programmiersprache wie C oft implizit erledigt wird (und bestenfalls eine Warnung gibt z.B. die Zuweisung einer float-Variable an eine integer-Variable), führt bei VHDL zwingend zu einem Fehler.
Gast
#1872755
D. I. schrieb: >> blink_led <= '1' when ((unsigned(counter(21 downto 19)) < 3) and counter(18) = '1') else '0'; >> Danke, das funktioniert so!
allerdings muß diese lib auch eingebunden werden. VHDL Anfänger schrieb im Beitrag #1872755: > use ieee.std_logic_arith.all; > allerdings muß diese lib auch eingebunden werden. Dagegen spricht allerdings, dass diese Synopsys-Lib als veraltet angesehen ist, und stattdessen die genormte numeric_std verwendet werden sollte...
Gast
#1872843
boolean zu std_logic umwandlung geht so recht gut type sul_bool is array(boolean) of std_ulogic; constant active_high : sul_bool := (FALSE => '0',TRUE =>'1'); dann kannst du das schreiben blink_led <= active_high (unsigned(counter(21 downto 19)) < 3 and counter(18) = '1') Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|