-
Thread
Signal-Initialisierung funktioniert nicht
when others; end Architektur_main; ----->8----------------------------------------- Ich habe den Code mit Xilinx ISE9.2i synthetisiert und lasse ihn auf einem XC9500-CPLD laufen
Wertebereiches des Typs "statusmaschine_t" liegt (die 7-Segmentanzeige zeigt "F" an, also greift der "when others"-Zweig des Selects). Wenn ich davon ausgehe, daß "sig_Status_x" als 2-Bit-Variable bzw. -Latch angelegt wird, scheint diese mit "11" initialisiert zu werden. Könnt Ihr mir sagen, warum das
-
Thread
Teiler durch 1,953125
cout => cout ); cin <= not cin after 10ns; count_cout <= count_cout+1.0 when rising_edge(cout); count_cin <= count_cin+1.0 when rising_edge(cin); process variable l : line; variable r : real; begin wait for 1 ms; write(l, string'("teilerverhaeltnis
; end Divider; architecture Behavioral of Divider is signal cnt : unsigned (6 downto 0) := (others=>'0'); signal enable : std_logic := '0'; begin process begin wait until falling_edge(cin); if cnt<124 then cnt <= cnt+1; else cnt <= (others=>'0'); end
-
Thread
RAM Inhalt sortieren
--------------------------- process (clk,reset) is begin if (reset='1') then addra <= (others => '0'); state <= stat_READ; elsif rising_edge(clk) then case state is --CASE: IDLE when stat_READ => addra <= addra + 1; if(value1 > value2) then
--CASE: OTHERS when others => addra <= (others => '0'); state <= stat_READ; end case; end if; end process; [/vhdl] Fragen: - Macht es Sinn den Adresszähler jedes Mal
-
Thread
Simulation - Bei Abtastung anliegendes Signal übernehmen
then sig1 <= "000"; else cnt := cnt + 1; case cnt is when 1 => sig1 <= "001"; when 2 => sig1 <= "010"; when 3 => sig1 <= "011"; when others => cnt := 1; sig1 <= "000";
then sig1 <= "000"; else cnt := cnt + 1; case cnt is when 1 => sig1 <= "001" after 1 ps; when 2 => sig1 <= "010" after 1 ps; when 3 => sig1 <= "011" after 1 ps; when others => cnt := 1;
-
Thread
STD_LOGIC_VEKTOR Zuweisungen
", --C "0100001" when "1101", --d "0000110" when "1110", --E "0001110" when "1111", --F "1000000" when others; --0 end Behavioral; [/vhdl]
Hexadezimal-Schreibweise nutzen würdest. [vhdl] with DataIn SELect LED<= "1111001" when X"1", --1 ... "0001110" when X"F", --F "1000000" when others; --0 [/vhdl]
-
Thread
EduBoard DE2-115 & DAC - erzeugtes Signal weicht erheblich von dem erwarteten ab
"111110011" => square_out_tmp <= "00000000000000"; when others => square_out_tmp <= "00000000000000"; [/vhdl] Und die Sinustabelle ist nicht viel besser wartbar: [vhdl] case acc is when "000000000" => sin_out_tmp <= "10000000000000"; when "000000001" => sin_out_tmp <= "10000001100110"; : : when "111110010" => sin_out_tmp <= "01111100110010"; when "111110011" => sin_out_tmp <= "01111110011001"; when
-
Thread
State Machine mit Signalzuweisung
Uart_Command <= "000"; MI1_DataReceive <= MI1_DataReceive; case (state_TopFSM) is when TopFSMrst => Uart_Command <= "000"; RS232_Uart_Command <= "000"; RS232_DataSend(15 downto 8) <= (others=>'0'); RS232_DataSend(7 downto 0) <= (others=>'0'); SaveData <= (others=>'0'); --Idle when TopFSM1 => null; --Init when TopFSM2 => Uart_Command <= "010"; RS232_Uart_Command
-
Thread
Caseanweisung kontrollierten Bereich ansteuern
Bedingungen angesteuert werden kann. Wenn diese Bedingung nicht aktiv ist, soll es halt automatisch in die "when others" springen. ist das möglich? ich habe es so programmiert, aber Quartus akzeptiert das so in der Form leider nicht so ganz (davor sind auch schon "when" anweisungen): [vhdl] if (anzahl
bei dem data_out soll, wenn keine case zutrifft immer das ausgegeben werden: [vhdl] when others => data_out <= x"00"; [/vhdl] Also statt in eine große Case, diese immer beenden und die Bedingungen, die ich mit If habe in eine separate neue Case case. mit dem: [vhdl] if (anzahl
-
Thread
Zustandsautomat
sig2_o <= temp_reg; next_state <= s2; end if; when s2 => if(sig2_i = '1') then next_temp <= '1'; end if; next_state <= IDLE; when others =>
; WHEN C_AUSLESEN => Naechster_Zustand <= A_AUSLESEN; WHEN others => Naechster_Zustand <= IDLE; END CASE; END IF; END PROCESS; --------
-
Thread
Quadrature Decoder kann nicht synthetisiert werden
"01000000" when "110", "10000000" when "111", "XXXXXXXX" when others; end Behavioral; [/code] [code] line 44: Signal count cannot be synthesized, bad synchronous description. The description
"01000000" when "110", "10000000" when "111", "XXXXXXXX" when others; [/code] Beim simulieren habe ich aber keine Signale mehr. Sobald ich den Prozess mit dem clk und den Teil mit dem
-
Thread
Latch bei Berechnung mittels FSM
ist noch ein Typo. Die Startbedingung muß korrigiert werden. Richtig ist: [vhdl] : when st0_idle => if (num1 /= (others=>'0') ) then -- state <= st0_idle; FALSCH state <= st0_calc1; end if; when st1_calc1 => : [/vhdl] Aber diese
Dank! Habs jetzt gleich mal versucht, bekomme aber zwei Fehlermeldungen: Zeile: if (num1 /= (others=>'0') ) then Fehler: Can not determine the "others" values in aggregate. (LRM 7.3.2.2) mit num1/= "0" gehts. Aber hier: result <= result12 + result34; Fehler: + can not have such operands
-
Thread
50 Mhz auf 19,2 Khz frequenzteiler !
<= NOT t_clk ; count:=0 ; WHEN OTHERS => NULL ; END CASE ; END PROCESS; END behaviour;
clock='1' ; count := count+1 ; CASE count IS WHEN 0 => r_clk <= NOT r_clk ; WHEN 2604/2 => r_clk <= NOT r_clk ; WHEN 2604 => count := 0; WHEN OTHERS => NULL ;
-
Thread
Bidirektionaler Bus undefined
done ); signal state : state_sequence := start; begin data_in <= data; data <= data_out when oe = '1' else (others => 'Z'); doStuff: process(clk, reset) begin if reset = '1' then oe <= '1'; data_out <= (others => '0'); state <= start; elsif rising_edge(clk) then case state is when start => state <= write_data; when write_data => oe <= '1'; data_out <= x"55"; state <= wait1; when wait1 =>
-
Thread
latch bei synthese mit bedingter zuweisung
takt: std_logic; begin process(clk, reset) begin if( reset = '1') then r_reg <= (others => '0'); elsif rising_edge(clk) then r_reg <= r_next; end if; end process; r_next <= r_reg +1; q <= std_logic_vector(r_reg); takt <= not takt when r_reg=(2**N-1) else
r_next <= r_reg +1; q <= std_logic_vector(r_reg); -- flag erzeugen flag <= '1' when r_reg=(2**N-1) else '0'; max_tick <= takt; end arch; [/vhdl] lg Mchii
-
Thread
Frage zu VHDL Code für Up-Down Counter
begin --register process(count,reset) begin if(reset='1')then r_reg <= (others=>'0'); elsif(count'event and count = '1')then r_reg <= r_next; end if; end process; --next state logic r_next <= r_reg+1 when updown = '1' else r_next <= r_reg-1 when
richtigerweise aussehen (wenn updown nur '1' oder '0' sein kann)? Doch etwa so: [vhdl] r_next <= r_reg+1 when updown='1' else r_reg-1; [/vhdl] BTW: warum zählst du nicht direkt im getakteten Teil? [vhdl] process(count,reset) begin if(reset='1')then r_reg <= (others=>'0');
-
Thread
Countdown Zähler mit Abbruchbedingung, Initialisierungsproblem
counter_p : process (CLK,RST_N,EN,D) variable zeros : std_logic_vector(TAPS downto 0) := (others => '0'); begin if RST_N = '0' then d_int <= (others => '0'); RDY <= '0'; elsif (CLK='1' and CLK'event) then d_int <= D;-- Latch ? if (EN = '1') then if ( d_int = zeros) then
: std_logic_vector(TAPS downto 0); constant zeros : std_logic_vector(TAPS downto 0) := (others => '0'); begin RDY <= '1' when d_int = zeros else '0'; -- Kombinatorik für Zähler counter_comb_p : process(D, EN, d_int) begin -- process counter_comb_p if (EN = '1') and
-
Thread
[VHDL] FSM springt in states ohne trigger
tmp_test_led3 <= '0'; when others => -- ERROR-STATE end case; -- ready_state when SENDING_ADDRESS_BITS => if(push_button2 = '1') then
tmp_test_led2 <= '1'; tmp_test_led3 <= '0'; when others => -- It should not occur to come into this state here. sig_state <= IDLE; SDI <= '0';
-
Thread
finite state machine
new_state <= IDLE; end if; when others => new_state <= IDLE; end case; end process -- Zustandsspeicher process(reset, clk, new_state) begin if reset = '1' then state <= IDLE; elsif clk = '1' and clk'event
end if; end process; -- Ausgabe-Logik process(state, start) begin case state is when IDLE => if start = '1' then d_out <= DATA1; end if; when B1 => d_out <= DATA2; when others => null; end case; end process;
-
Thread
Implementierung Bytes Demultiplexer
USE ieee.numeric_std.ALL; ... PROCESS(clk,reset) BEGIN IF reset='1' THEN gpo <= (others => '0'); wb_ack_o <= '0'; tvor <= (others => '0'); ELSIF rising_edge(clk) THEN IF wb_stb_i='1' THEN --Hier müssten die Zuweisungen gem Adresse rein case to_integer(unsigned(w_adr_i)) is when 0 => tvor (7 downto 0) <= wb_dat_i; when 1 => tvor (15 downto 8) <= wb_dat_i; when 2 => tvor (23 downto 16) <= wb_dat_i; when 3 => tvor (31 downto 24) <= wb_dat_i; when OTHERS
-
Thread
4-Bit-Register in VHDL
strukturierter. Duke Scarring schrieb im Beitrag #5873259: > if CLR = '1' then > Q <= (others => '1'); Auf die Gefahr hin, dass meine Frage dumm erscheint … … bitte was genau bedeutet: Q <= (others => '1'); Der rest ist sonnenklar, aber diese Zeile … ??? Eine Zuweisung zu
ausschweifend? Das geht doch auch als Einzeiler ohne diese Herumprozessiererei ;-) [vhdl] Q <= (others=>'0') when CLR = '1' else D when rising_edge(CLK) and CE = '1'; [/vhdl]
-
Thread
YCrCB zu RGB, Problem mit VHDL-Mathematik
(27/16)*(unsigned(Cb)-128)); IF(Rv<255)THEN R<=STD_LOGIC_VECTOR(to_unsigned(Rv,8)); ELSE R<=(others=>'1'); END IF; IF(Gv<255)THEN G<=STD_LOGIC_VECTOR(to_unsigned(Gv,8)); ELSE G<=(others=>'1'); END IF; IF(Bv<255)THEN B<=STD_LOGIC_VECTOR(to_unsigned(Bv,8)); ELSE B<=(others=>'1'); END
the modules and compare them. for i in 0 to 2 loop case i is when 0 => temp1 <= a*data; when 1 => temp2 <= temp1*b; when 2 => result <= temp2*c; when others => null; end case; end loop;
-
Thread
VHDL: kurzen Impuls halten, um State Machine zu steuern
if rising_edge(CLKRAM) then statealt <= stateneu; case statealt is when init => cnt <= cnt + 1; when w5 => addr <= std_logic_vector(unsigned(addr) + 1); when idle => cnt <= 0; when others => null; end case; end
end if; when w1 => xx <= xx --zuweisungen stateneu <= w2; when w2 => xx <= xx --zuweisungen stateneu <= w3; when w3 => xx <= xx --zuweisungen
-
Thread
Don't care in VHDL
aus: [c] TickCntrl:process(INSTR_IN(7 downto 0)) begin case INSTR_IN(7 downto 0) is when "1110----"=> pc_tick_int <= '1'; when "000011--"=> pc_tick_int <= '1'; when others => pc_tick_int <= '0'; end case; end process; [/c] Oder wird dieses
ved=0CCwQFjAC&usg=AFQjCNH4LYzoms_9Gw0AhMWlofPR4sa-Sw das sieht dort so aus: >case? sel is > when "1---" => > o <= "11"; > when "01--" => > o <= "10"; > when "001-" => > o <= "01"; > when "0001" => > o <= "00"; > when others => > null; > end case; Wenn es VDHL-2008
-
Thread
Warnung bei Statemachine (Synplify / IspLever)
if falling_edge(sys_clk25M) then if sys_en = '1' then clk_cnt_i <= (others => '0'); smpl_cnt_i <= (others => '0'); neg_cnt_i <= (others => '0'); rlock <= '0'; STATE <= CNT_STATE; elsif sys_en = '0' and all_enable = '1' then case STATE is when CNT_STATE =>.... when SMPL_STATE => .... when NEG_STATE =>.... when RESET_STATE => .... end case; ......... [/vhdl] da ich gerade
-
Thread
VIVADO Simulation
der Simulation sind die LEDs immer auf '1'. Init: signal pwm_zaehler: unsigned(15 downto 0):=(others => '0'); signal sw_tb : std_logic_vector(15 downto 0):=(others => '0'); Auführung: RGB1_Red <= '1' when pwm_zaehler <= unsigned(sw); RGB1_Green <= '1' when pwm_zaehler <= unsigned(sw); RGB1_Blue <= '1' when pwm_zaehler <= unsigned(sw); da zum Zeitpunkt 0 beide Werte 0 sind, sind folglich deine LEDs auf 1
-
Thread
verschiedene Teile von std_Ulogic_vector aus mehreren Processen zuweisen
<= (others=>'1'); elsif rising_edge(clk) then s_data(15 downto 8) <= i_data_byte_high; end if; end process; end architecture rtl; >>>>>>>>>>>>>>>>> Bei mir, mit aktuellem Synplify und
4.2.13 hat was: [vhdl] process (Clk, Clr) begin case To_X01( Clr ) is when '1' => Q <= '0'; QBar <= '1'; when '0' => if rising_edge( Clk ) then -------- na toll !!!!! Q <= D; QBar <= not D; end
-
Thread
VHDL - FSM mit for schleife
end loop; when others => null; end case ; [/vhdl] Man könnte das ganze einfach von Hand entrollen, dann sollte (verkürzt) sowas bei rauskommen: [vhdl] case( v.state ) is when 0 => read_in
(2,v); v.state := 0; when others => null; end case ; [/vhdl] Wäre toll, wenn mir jemand helfen könnte. (calculate() und read_in() sind paar kombinatorische Dinge)
-
Thread
Problem beim Hochzählen
, "1100100" WHEN "0111", "1100100" WHEN "1000", "1100100" WHEN "1001", "0000000" WHEN OTHERS; end Behavioral; [/vhdl]
, "1110000" WHEN "0111", "1111111" WHEN "1000", "1110011" WHEN "1001", "0000000" WHEN OTHERS; --CNT <= sig_Seg; end Behavioral; [/vhdl]
-
Thread
Lauflicht mit vorgegbenen Clkgen
" =>LED_out <="00100000"; when "00100000" =>LED_out <="01000000"; when "01000000" =>LED_out <="10000000"; when "10000000" =>LED_out <="00000001"; when others => null; end case; end if;
<="00100000"; when"00100000"=>LED_out<="01000000"; when"01000000"=>LED_out<="10000000"; when"10000000"=>LED_out<="00000001"; when others => null; end case; end if; end
-
Thread
Beschreibung eines Srams Fehler in VHDL-Code?
Numeric_Std.html Und wenn dir das zu umständlich ist, dann schreib wenigstens: [vhdl] wait_cnt <= (others =>'0'); [/vhdl]
etwa: [vhdl] sram_data(7 downto 0) <= deinedatenzumram when sram_output_enable_input='1' else (others=>'Z'); [/vhdl] BTW: das hier ist sehr, sehr unglücklich sram_output_enable_input <= '0'; denn ein normaler Mensch denkt, irgenwas sei /aktiv/ oder