-
Thread
PIO implementieren: in + out oder inout?
: [vhdl] bidir <= a when oen='0' else (others->'Z'); b <= bidir; [/vhdl]
Lothar M. schrieb im Beitrag #6325547: > bidir <= a when oen='0' else (others->'Z'); > b <= bidir; Ja, das mache ich auch genau so. Nur letztens bin ich damit bei Lattice Diamond reingefallen: Ich brauchte den Input nicht und prompt machte der
-
Thread
Simualtion nach bestimmter Bedingung beenden
Signal auf 0 gesetzt aber die Simulation wird weiter fortgeführt else case n is when "00000010" => x <= x"0000"; when others => x <= signal(6 downto 0); end case; end if; [/vhdl] Ich bin offen für jede Anregung.Danke.
= "00000011") report "n ist größer als 3" severity failure; case n is when "00000010" => x <= x"0000"; when others => x <= signal(6 downto 0); end case; [/vhdl] Allerdings hätte ich da noch eine Frage: Was ist dein /eigentliches/ Problem?
-
Thread
Vergleich: unsigned mit Konstante
Du musst len mit einem Vektor vergleichen: [vhdl] control_done <= (len = (others => '0')); [/vhdl]
: control_done <= '1' when len = (len'range => '0') else '0';
-
Thread
Fehlermeldung: ERROR - BN126 : is missing a driver.
den anderen Fällen bis auf die Anzahl der Loops. Es funktioniert auch nicht, wenn ich "111" durch "others" ersetze, oder "when others => irgendein default wert" hinter den Block packe. Könnte mir jemand vllt einen Tipp geben? Ich frage mich auch warum output_clk_c einen Fehler verursacht. Dieses Signal
signal sr : std_logic_vector (3 downto 0) := "1111"; begin sr <= not sr(0) & sr(3 downto 1) when rising_edge(input_clk); clk_out <= sr(3) when phase_shift="001" or phase_shift="011" else sr(2) when phase_shift="011" else sr(1) when phase_shift="101" or phase_shift
-
Thread
Width mismatch detected on comparator
Bestandteile wieder. Also zuerst definiere ich: [vhdl] signal pixel_counter : unsigned(11 downto 0) := (others => '0'); constant TEST_INT_CONST : integer := 10; signal test_int : integer := 0; [/vhdl] Dann habe ich: [vhdl] test_int <= 0 when (bedingung = '1') else TEST_INT_CONST; [/vhdl
rising_edge(clk) then ... if (pixel_counter > test_int) then data_out <= (others => '1'); else data_out <= (others => '0'); end if; ... [/vhdl]
-
Thread
Frequenzteiler 1:1000
IF (reset = '0') THEN -- asynchroner Reset counter <= (others => '0'); clk_1ms <= '0'; ELSIF (rising_edge(clk_1us)) THEN IF (counter < "1111100111") THEN -- hochzählen bis 999
; else count <= count +1; endif; endif; count_exp <= '1' when count = count_END else '0';
-
Thread
Bussystem in VHDL
mir viel zu kompliziert, letztendlich ist das or_reduce() ja nichts anderes als ein Vergleich mit (others => '0): [vhdl] function or_reduce(V : std_logic_vector) return std_ulogic is constant cmp : std_logic_vector(V'range) := (others => '0'); begin if cmp = V then return '0';
erschlagen, der sehr Pflegeleicht ist. [vhdl] ---BUS multiplexer BBUS_out <= slave(0) when BSEL(0)='1' else --DRAM slave(1) when BSEL(2)='1' else --UART slave(2); --Bus Dummy [/vhdl] Für die Selektleitungen nutze ich die Adressbereiche und habe hier ein hex
-
Thread
Addition von std_logic_vector?
Behavioral of addSubUnit is begin With ctrl select data_out <= data1_in + data2_i) when 0, data1_in - data2_in when others; end Behavioral; [/vhdl] Die Fehlermeldung lautet: "+ can not have such operands in this context." und "- can not have such operands in this context."
multiplexer is signal temp_sel, temp_nE : std_logic_vector(inputs_A'length); begin temp_SEL <= (others => SEL); temp_nE <= (others => nE); --unbedingte Signalzuweisung für Multiplexer C_out <= (inputs_A AND NOT(TEMP_SEL)) OR (inputs_B AND temp_SEL) or temp_nE; end Behavioral; [/code]
-
Thread
FIFO läuft über
GREEN<=RAM2OUT2; BLUE<=RAM2OUT2; ELSIF( RAM2EMPTY='1')THEN RED<=(others=>'1'); BLUE<=(others=>'0'); GREEN<=(OTHERS=>'0'); END IF; [/vhdl] Und außerhalb des Prozesses steht einfach: RAM2FULL<='1' WHEN RAM2ADDR2=RAM2FULL_POINTER ELSE '0'; RAM2EMPTY<='1' WHEN RAM2ADDR1=RAM2ADDR2 ELSE '0';
-
Thread
Drehrichtungserkennung
"; -- Nur achte Led an when others => Led <= "00000000"; -- Alle Led's aus end case; else -- Balken-Betrieb case qint is when "0000" => Led <= "00000001"; -- Erste Led an when "0001" => Led <= "00000011
Led an when "0110" => Led <= "01111111"; -- Siebte Led an when "0111" => Led <= "11111111"; -- Achte Led an when others => Led <= "00000000"; -- Alle Led's aus end case; end if; end process;
-
Thread
clk'event bei beiden Taktflanken
einfach mit Multiplexern. Das ist ja DDR und hab zig mal gemacht, und es funktioniert Data_In <= DQ when (clk='1') else (others=>'Z'); ADDR <= Addresse when (clk='0') else (others =>'Z'); also clk als Steuereingang des Multiplexers. Verstehe jetzt Dein Problem nicht ;-) Kest
-
Thread
RAM basierter Bubble Sort in VHDL
(5 downto 0) := (others => '0'); signal addrb_d3 : std_logic_vector(5 downto 0) := (others => '0'); signal addrb_d4 : std_logic_vector(5 downto 0) := (others => '0'); signal dout_a : std_logic_vector
addrb <= addra + 1; end if; i <= i+1; -- addra else i <= (others => '0'); n <= n + 1; end if; else busy <= '0'; --do <= din; end if; end if; end if; end process; done <= '1' when start
-
Thread
Über Conditions loopen (VHDL)
> ausgang <= eingang0 when N = 0 else > eingang1 when N = 1 else > eingang2 when N = 2 else > ... > eingangNmax when N = Nmax; Der Trick und das Problem ist aber vermutlich
also z.B.: [vhdl] ... constant AND_COMPARE : std_logic_vector (GENERIC_WIDTH-1 downto 0) := (others => '1'); ... ... trg <= '1' when a /= AND_COMPARE else '0'; ... [/vhdl] Erspart einem das ganze Package-Gedoens und ist auch unabhaengig davon, was fuer Tools/Plattformen ich benutzen will
-
Thread
Wie unterschiedliche Clock-Domains verwenden?
CurrentState <= State_Reset; else case CurrentState is when State_Reset => FIFO <= (others => '0'); --TransmitterValid <= '0'; CurrentState <= State_WaitForTransmitterReady; when State_WaitForTransmitterReady => --TransmitterValid <= '0'; --if(TransmitterReady = '1') then CurrentState <= WaitForValid
-
Thread
std_logic Rotation
std_logic_vector (23 downto 0) := x"000001"; begin mastersr <= mastersr(22 downto 0) & mastersr(23) when rising_edge(clk); process variable einser : integer range 0 to 24; variable sr : std_logic_vector (23 downto 0); begin wait until rising_edge(clk); sr := (others=>'0');
Eingangswert jetzt auf 23 Bit gekürzt... [vhdl] mastersr <= mastersr (21 downto 0) & mastersr (22) when rising_edge(CLK); rotation1 : process (CLK) variable einser : integer range 0 to 23; variable sr : std_logic_vector (22 downto 0); begin if rising_edge(CLK) then sr := (others =>
-
Thread
PCI/ISA -Bus?
"0111", -- 7 "1111111" when "1000", -- 8 "1101111" when "1001", -- 9 "1110111" when "1010", -- A "1111100" when "1011", -- B "0111001" when "1100", -- C "1011110" when "1101", -- D "1111001" when "1110", -- E "1110001" when "1111", -- F "0111111" when others; -- 0 end Behavioral;
-
Thread
VHDL Anfänger braucht Hilfe bei der Überprüfung IF-THEN-ELSE
0110", -- '1' when "1100", '1' when "1101", '1' when "1111", '1' when "1110", -- '1' when "1000", '1' when "1001", '1' when "1011", '1' when "1010", 'X' when others; end verhalten; [/vhdl] > jedoch kann ich bei meinem > laienhaften Wissen nicht überprüfen, ob mein Gedankengang richtig ist. Dann installier dir schnellstens eine VHDL-Umgebung
-
Thread
Funktionsabbildung mit Altera Integer Arithmethic Megafunctions
state is when S_start => state_nxt <= S_calc; when S_calc => calc='1'; if counter > 50 then --nach spätestens 50 takten sollte die berechnung fertig sein state_nxt <= S_done; end if; when S_done => done <= '1'; --idle end case; end process; END rtl; [/vhdl]
-
Thread
Neue IDE und Programmiersprache zur FPGA Programmierung
WHEN 1200006 => i := i + 1; Thread13 := 0; Thread9 := 2; WHEN others => Thread13 := 0; END CASE; WHEN 4 => IF (BTN = '1') THEN ELSE Thread9 := 0; END IF; WHEN others => Thread9 := 0; END CASE; END IF; END PROCESS; [/code] (Im Moment gibt es mit der öffentlichen Version nen Problem bei "i := 0;", weil ein fix nach hinten losgegangen ist. Wird
-
Thread
Zwei Prozesse nutzen einen Vektor. Geht das so?
- reagiert auf ce (change encoder) und RESET begin -- bei RESET - clear (others => '0') setzt alle Ausgaben auf '0', ... if (RESET = '1') then -- ... clear (others => '1') setzt alle Ausgaben auf '1', mit dem Setzen ... t_cnt1 <= (others => '1'); --
begin -- Concurrent statt Prozess --> kurz und kompakt ;-) srGET0 <= srGET0(0) & GET0in when rising edge(clk); srGET1 <= srGET1(0) & GET1in when rising edge(clk); srGET2 <= srGET2(0) & GET2in when rising edge(clk); process begin wait until rising_edge(clk);
-
Thread
Implementierung einer Figur
es werden nämlich 3 Bits für die Zustände verwendet, 8 Zustände und nur 6 sind abgedeckt. Klar mit when others wird das gelöst, aber was hat dann die Beschränkung gebracht?
Synthesizer der Meinung ist auf one-hot zu kodieren hast Du 6 Bits und 58 ungültige Zustände. Da hilft auch when others nicht. Meine Zustände haben übrigens Namen: [vhdl] type state_t is (IDLE, DOSOMETHING, DOSOMETHINGOTHER, READY); [/vhdl] Finde ich besser als [vhdl] type s16_type is ( S1, S2,
-
Thread
Multi Source Fehler
mux : PROCESS (DATA_OUTA_RAM1, DATA_OUTA_RAM1, ramenable_int) BEGIN CASE ramenable_int IS WHEN "01" => DATA_OUTA <= DATA_OUTA_RAM1; WHEN "10" => DATA_OUTA <= DATA_OUTA_RAM2; WHEN OTHERS => DATA_OUTA <= (OTHERS => '0'); END CASE; END PROCESS mux; [/vhdl] T.M. =========
-
Thread
Bidirektionale Pins in Quartus II (Altera)
data_bus <= "ZZZZZZZZ"; end if; end process; -- Richtungsumschaltung my_io <= my_register when my_dir='1' else "ZZZZZZZZ"; [/vhdl] So in etwa. MFG Falk
0); signal data_bus_out : std_logic_vector(7 downto 0); ... ... data_bus_io <= data_bus_out when (WR='0') and (ENA='1') else (others => 'Z'); data_bus_in <= data_bus_io when (WR='1') and (ENA='1') else (others => 'Z'); Jetzt muss du beide interne Signale mit deinem Kommunikationsmodul oder
-
Thread
Dreieckgenerator programmieren
process(Takt) begin if (Takt ='1' and Takt'event) then case Counter_up_down is when 0 => Counter_up_down <= 1; when 1 => Counter_up_down <= 2; when 2 => Counter_up_down <= 3; when 253 => Counter_up_down <= 254; when 254 => Counter_up_down <= 255; when 255 => Counter_up_down <= 254; when 254 => Counter_up_down <= 253; when 253 => Counter_up_down <= 252; when 252 => Counter_up_down <= 251; end case;
-
Thread
Demux Optimierung möglich?
24) <= wdata; when "0100" => data(39 downto 32) <= wdata; when "0101" => data(47 downto 40) <= wdata; when "0110" => data(55 downto 48) <= wdata; when "0111" => data(63 downto
88) <= wdata; when "1100" => data(103 downto 96) <= wdata; when "1101" => data(111 downto 104) <= wdata; when "1110" => data(119 downto 112) <= wdata; when others => data(127 downto
-
Thread
Merkwürdige Quartus Optimierung
ieee.std_logic_1164.all; entity blinker is port( LEDG : buffer std_logic_vector(7 downto 0) := (others => '0'); LEDR : buffer std_logic_vector(9 downto 0) := (others => '1'); CLOCK_50 : in std_logic ); end entity blinker; architecture behav of blinker is begin process(CLOCK_50)
blinker; architecture behav of blinker is signal LEDRint : std_logic_vector(9 downto 0) := (others => '1'); signal LEDGint : std_logic_vector(7 downto 0) := (others => '0'); begin process(CLOCK_50) is variable count : integer := 0; begin if rising_edge(CLOCK_50) then count
-
Thread
VIVADO2014.4 VHDL 2008
'3' "10011001" when "0100", -- Ziffer '4' "01001001" when "0101", -- Ziffer '5' "01000000" when "0110", -- Ziffer '6' "00011111" when "0111", -- Ziffer
bis auf ein evtl. fehlendes "when others" für die nicht angegebenen Fälle sehe ich da aber auch keinen Fehler. Habe das "with select" auch schon selbst in der ISE verwendet. Schreib uns doch mal die Fehlermeldung die du bekommst