-
Thread
FPGA Resource Verbrauch optimieren- bitte um Hilfe
reset_n) IS BEGIN if reset_n = '0' then -- asyn reset_n yout_sat_reg <= (others=> '0'); Ki_Mantise_reg <= (others=> '0'); Kp_expopnet_reg <= (others=> '0'); Ki_exp_reg <= (others=> '0'); ysum_reg <= (others=> '0'); yi_alt <= (others=> '0'); start_delay <= (others=> '0'); op1_reg <= (others=> '0'); op2_reg <= (others=> '0'); -- ... elsif rising_edge(clk) then -- start: los! if ( start = '1' ) then -- Uebernahme gueltige Daten start_delay
-
Thread
VHDL Timer & PWM
') then Counter <= (others => '0'); elsif(rising_edge(Clock_In)) then Counter <= Counter + 1; end if; case Prescaler is when "001" => Clock_Intern <= Counter(1);
5); when "110" => Clock_Intern <= Counter(6); when "111" => Clock_Intern <= Counter(7); when others => Clock_Intern <= Counter(0); end case; end process;
-
Thread
Verstädnisproblem bezüglich des Carry Bits
1'; OV <= '1'; when "1ll" => C_Β <= '1'; OV <= '0'; when others => C_Β <= '0'; OV <= '0'; end case; else ZW : = VI - V2 - V3; TEMP := (ZW(WB - 1) , V2
'; OV <= '1'; when "111" => C_B <= '1'; OV <= '0'; when others => C_B <= '0'; OV <= '0'; end case; end if; SUM <= To_bitvector(std_logic_vector(ZW(WB - 1 downto
-
Thread
Mux als Tristate-Ersatz bläst das Design auf?
; when "11110" => d_out <= d_out_audio; when others => d_out <= (others => '-'); end case; end process MUX; [/vhdl] Soweit so gut. ISE 8.1 macht aber daraus (ich gucke
Hingegen bei diesem Code hier: [vhdl] mux: process (fab,MCLK,count) begin case fab is when "00" => CO_CLK <= MCLK; when "01" => CO_CLK <= count(1); when "10" => CO_CLK <= count(0); when "11" => CO_CLK <= count(2); when others => null
-
Thread
VHDL: Multiplexer mit generischer Anzahl zu muxender Busse?
in 0 to (NumOfIORegisters-1) generate StatusBus <= StatusBits(Width*i+width-1 downto Width*i) when ChipSelect(i) = '1' else (others => 'Z'); end generate; [/vhdl] Nun muss ich andere FPGAs nehmen und die haben keine internen Tristate-Buffer. Wie baue ich einen generischen Multiplexer?
Zeilen für NumOfIORegisters=3 und Width=8 hinschreibe: [vhdl] StatusBus <= StatusBits(7 downto 0) when ChipSelect(0) = '1' else (others => 'Z'); -- i=0 StatusBus <= StatusBits(15 downto 8) when ChipSelect(1) = '1' else (others => 'Z'); -- i=1 StatusBus <= StatusBits(23 downto 16) when ChipSelect(2)
-
Thread
Ansteuerung LCD Display(Spartan3E)
<= data4; write_lcd <= '1'; when data4 => lcd_data <= x"74"; state_lcd <= lcdok; write_lcd <= '1'; when lcdok => null; when others => state_lcd <= lcdreset;
<= setdata1; when others => state_lcd2 <= setdata1; end case; delay2 <= x"ff"; end if; end if; end if; end process; end Behavioral;
-
Thread
VHDL strukturbeschreibung
" when "1101", --d "0000110" when "1110", --e "0001110" when others; --f with bin1 select sseg1 <= "1000000" when "0000", "1111001" when "0001",
"0001110" when others; --f with bin2 select sseg2 <= "1000000" when "0000", "1111001" when "0001", "0100100" when "0010", "0110000" when "0011",
-
Thread
Kurzer Peak (0ps) in Modelsim Simulation
WHEN ERROR_IN = '0' ELSE (OTHERS => '1'); s_comparator(0) <= '1' WHEN s_check_signal_mod = CFG_IN_2 ELSE '0'; s_comparator(1) <= '1' WHEN s_check_signal_mod = CFG_IN_1 ELSE '0'; s_valid <= '
Beitrag #3539275: > Welche Zustände meinst du? Z.B. den da: [vhdl] s_check_signal_mod <= ... (OTHERS => '1'); ... WHEN s_check_signal_mod = CFG_IN_2 ...; [/vhdl] Und den s_check_signal, der ja irgendwie mit Symbolen verheiratet wird, aber trotzdem nur ein Vektor ist... Wie gesagt, wir hatten
-
Thread
Volladdierer, Probleme mir Simulation
=> Cout <= '0'; S <='1'; when "101" => Cout <= '1'; S <='0'; when "110" => Cout <= '1'; S <='0'; when others => Cout <= '1'; S <='1'; end case; end process Volladdierer; end Behavioral; [/
=> Cout <= '0'; S <='1'; when "101" => Cout <= '1'; S <='0'; when "110" => Cout <= '1'; S <='0'; when others => Cout <= '1'; S <='1'; end case; end process Volladdierer; [/vhdl] Das ist /funktional
-
Thread
zwei Schieberegister
bout1 <= longsr1(5); --weitere/andere Abgriffe bitte hier einfügen when "0001" => bout1 <= longsr1(10); when others => bout1 <= longsr1(9999); end case; longsr2<=longsr2(9998 downto 0) & bin2; case sel is when "0000" => bout2 <= longsr2(5); when "0001" => bout2 <= longsr2(10); when others => bout2 <= longsr2(9999); end case
-
Thread
CPLD: XC95xx Problem mit Reset bei einem Latch
Variable Mode : STD_LOGIC_VECTOR (3 downto 0); begin if RESET = '0' then Daten_MC <= (others => 'Z'); RDY_MC <= 'Z'; Daten_OUT <= (others => 'Z'); Adresse_OUT <= (others => 'Z'); RD_OUT <= 'Z'; WR_OUT <= 'Z'; Adresse <= (others => '0'
(15 downto 8) <= Daten_MC; RDY_MC <= '1'; when others => Adresse <= Adresse; RDY_MC <= '0'; end case; end if; end process HAUPTPROZESS; end Verhalten; [/c]
-
Thread
Anfänger braucht Hilfe
//Hier ist der Fehler FensterHeizstrahlerFehler(0) <= '1' WHEN "111", '1' WHEN "110", '1' WHEN "101", '1' WHEN "011", '1' WHEN "000", '0' WHEN OTHERS
' WHEN "100", '0' WHEN OTHERS; ELSE FensterHeizstrahlerFehler <= "000"; END IF; END PROCESS; END logic; [/vhdl]
-
Thread
Xst:738 - HDL ADVISOR - 768 flip-flops were inferred for signal xxx.
--------------------------- WITH rd_reg(i) SELECT reg_file_to_cpu <= dout_tmp(i) WHEN '1', (OTHERS => 'Z') WHEN OTHERS; END GENERATE output_regfile_gen; END GENERATE output_regfile_gen_condition; ---OUTPUT_REG_FILE_ANZAHL = 0-------
µC----------------------- WITH rd_reg(i) SELECT cpu_databus <= input_reg_tmp(i) WHEN '1', (OTHERS => 'Z') WHEN OTHERS; END GENERATE input_regfile_gen; [/vhdl] Lothar Miller schrieb im Beitrag #1901273: > tomi schrieb: >> macht das dem Syntheser
-
Thread
state machine, ein state mit verschiendenen Daten
STATE, RESET) begin if RESET ='1' then STATE_next <= IDLE; else case STATE is when IDLE => STATE_next <= DATA_WRITE; when DATA_WRITE => if DATA_COUNTER = X"10" then STATE_next<=IDLE; else STATE_next <= DATA_WRITE; end case; end if; process(STATE, RESET) begin if RESET ='1' then ADDR<= (others => '0') ; DATA<= (others => '0') ; else case STATE is when IDLE => ADDR<= (others => '0') ; DATA<= (others => '0') ; when DATA_WRITE => ADDR<= ADDRESS;
-
Thread
Verbesserungsvorschläge gesucht
when others => NULL; end case; end if; -- synchronous 8-bit read with read enable if (re = '1') then case address is when x"01" => do <= data(15 downto 8); when x"02" => do <= data(7 downto 0); when others => do <= (others=>'-'); end case; end if; end process; end std;[/vhdl] > bzw. 2 Schreibzyklen im Pico auf
-
Thread
VHDL IF Problem
AL<='0'; AR<='1'; AO<='0'; AU<='0'; ZVNEU<=ZU_B; when others => AL<='0'; AR<='0'; AO<='0'; AU<='0'; ZVNEU<=ZU_B; end case; [/vhdl] Sieht übersichtlicher aus und ergibt die selbe Funktion.
AR<='0'; AO<='1'; AU<='0'; ZVNEU<=ZU_B; when "10" => AL<='0'; AR<='1'; AO<='0'; AU<='0'; ZVNEU<=ZU_B; when others => AL<='0'; AR<='0'; AO<='0'; AU<='0';
-
Thread
Fehler in DDS?
INCREMENT; ADDRESSING: process (LUT_IN, Delay_2) begin case Delay_2 is when "00" => DDS_OUT <= LUT_IN; when "01" => DDS_OUT <= LUT_IN; when "10" => DDS_OUT <= std_logic_vector(2**10 - unsigned (LUT_IN)); when "11" => DDS_OUT <= std_logic_vector(2**10 - unsigned (LUT_IN)); when others => null; end case; end process ADDRESSING; end; [/vhdl]
-
Thread
[vhdl] Kürze schreibweise für eine State machine
"0000000000010000" => foo_out <= "0101"; when "0000000000100000" => foo_out <= "0110"; when "0000000001000000" => foo_out <= "0111"; when "0000000010000000" => foo_out <= "1000"; when "0000000100000000" => foo_out <= "1001"; when
"0100000000000000" => foo_out <= "1111"; when "1000000000000000" => foo_out <= "0001"; when "0000000000000000" => foo_out <= "0000"; when others => foo_out <= "0000"; end case; [/vhdl] dann machst halt satt foo_out zu setzen deine Anweisungen
-
Thread
Asynchronous load of non constant data for is not supported
ADC_A_nOE <= '0'; ADC_A_CLK <= '0'; ADC_Channel_A_NewData <= '0'; ADC_Channel_A <= (others => '0'); ADC_Channel_A_Overflow <= '0'; case ADC_CurrentState_A is when S_SLEEP => ADC_A_SHDN <= '1'; ADC_A_nOE <= '1';
32MHz-Takt im FPGA mit einer PLL o.ä. und du bekommst damit automatisch die doppelte Datenrate. >>> OTHERS clause is not synthesized Das kommt von: when others => ADC_NextState_A <= S_SLEEP; Und das ist unnötig, weil ja vorher schon alle Zustände von ADC_STATE verwendet sind.
-
Thread
Datentyp in VHDL
"; when 6 => display <= "1111110"; when 7 => display <= "0100011"; when 8 => display <= "1111111"; when 9 => display <= "1110111"; when others => display <= "0000000"; end case; end
when x"E" => res := "1001111"; when x"F" => res := "1000111"; when others => res := "1111111"; -- nur fuer Simulation end case; return res; end; Der Aufruf könnte
-
Thread
Probleme mit der Erstellung eines Automaten
WHEN OTHERS => reg_WR <= 'X'; reg_RD <= 'X'; report "Reach undefined state"; END CASE; END IF; END PROCESS; END BEHAVIOR
std_logic_vector(7 downto 0); : architecture machwas .... : datain <= data; data <= dataout when write='1' else (others=>'Z'); -- IO-Treiber umschalten end machwas; [/vhdl]
-
Thread
synchronzähler - codefehler (vhdl)
when "1001" => d:="1000"; when others => d:="0000"; end case; y<=c; end process P1; end Behavioral;
"1011" => d:="1001"; when "1001" => d:="1000"; when others => d:="0000"; end case; end process P1; y <= d; end Behavioral; 1.) Die Formatierung ist wichtig um Fehler zu erkenen. 2.) Man braucht für einen
-
Thread
Couldn't implement registers Prescaler problem
sehe ich das :) [VHDL] PROCESS(CLK_250, PRSCL,CLK_ADC_SIG)---CLK FOR ADC BEGIN CASE PRSCL IS WHEN 1 => ----NO PRESCALER CLK_ADC<=CLK_250;--- IF NO PRESCLAER THEN ASSIGN CLK TO ADC_CLK WHEN OTHERS => ---ELSE USE PRESCALER IF(CLK_250'EVENT AND CLK_250='1')THEN ADC_PRSC<=ADC_PRSC+1;
schließlich hat er mehr Erfahrung als ich:) [vhdl] WITH CLK_DIV SELECT CLK_ADC <= CLK_250 WHEN '0', CLK_ADC_SIG WHEN OTHERS; PROCESS(CLK_250, PRSCL)---CLCK FOR ADC BEGIN IF(CLK_250='1' AND CLK_250'EVENT)THEN CASE PRSCL IS WHEN 0 => CLK_DIV<='0';-
-
Thread
VHDL - Problem
Probiere mal eine defaultzuweisung "when others" wie unten angegeben. Dann sollte es funktionieren. Ansonsten kann ich absolut keine Fehler finden. EINSTINT <= '0' when EINSTELL = "0000" else '1' when EINSTELL = "0001" else '1' when EINSTELL = "0010" else '1' when EINSTELL = "0100" else '1' when EINSTELL = "1000" else '0' when others ;
-
Thread
Latch statt Multiplexer?
INPUTMux:process(INPUT_MODE,INPUT_ALU,INPUT_BYP) begin case INPUT_MODE is when "00" => input_int <= INPUT_ALU; when "01" => input_int <= INPUT_BYP; when others => input_int <= INPUT_ALU; end case; end process; OUTPUTMux:process(OUTPUT_MODE,input_int,INPUT_ALU,INPUT_BYP,INPUT_MODE) begin case OUTPUT_MODE is when "00" => OUTPUT_REG <= input_int; when "01" => OUTPUT_DIRECT <= input_int; when others => OUTPUT_REG <= input_int; end case; end process;
-
Thread
parametrisierbarer Binärzäher
Verschärft kann man dann ans Ende der Liste noch ein /others/ einbringen: [vhdl] signal <= (Bitnummer/Range=>Wert1, Bitnummer/Range=>Wert2, ..., others=>Wert3); [/vhdl]
schon angesprochen ersetzen durch: [vhdl] constant count_max : std_logic_vector (n-1 downto 0) := (others=>'1');[/vhdl]
-
Thread
VHDL - Vertauschte Endianness
architecture FOO_beh of FOO is signal SpiReg : std_logic_vector (15 downto 0):=(others=>'0'); signal bar0 : std_logic_vector (1 downto 0):=(others=>'0'); p40: process (SpiClk) begin if rising_edge (SpiClk) then if nSpiCs='0' then SpiReg(
downto 0); pBAR0: process (bar0, fooIn0, fooIn1, fooIn2, fooIn3) begin case bar0 is when "00" => foo0Out<=fooIn0; when "01" => foo0Out<=fooIn1; when "10" => foo0Out<=fooIn2; when "11" => foo0Out<=fooIn3; when others => foo0Out<='0'; end case; end
-
Thread
FlipFlops für Ausgänge einer Entity
if Reset = '1' then i <= 0; elsif rising_edge(clk) then case i is when 0 => ValOut <= b"1011"; when 1 => ValOut <= b"0101"; when 2 => ValOut <= b"1101"; when others => ValOut <= (others => 'X'); end case; if i = 3 then
else i <= i + 1; end if; end if; end process; ValOut <= b"1011" when i=0 else b"0101" when i=1 else b"1101" when i=2 else (others => 'X'); end Behavioral; [/vhdl] Auch daran solltest du auch noch arbeiten: [vhdl] signal
-
Thread
EPJ15 S. 7: PWM mit FPGA
<="1111111110"; when 1600 => led_vector <="1111111111"; when others => led_vector <= "0000000000"; end case; if reset = '0' then pwm_out <= '0'; else if
<="1111111110"; when 1600 => led_vector <="1111111111"; when others => led_vector <= "0000000000"; end case; if (count1 < (PWM_freq - PWM_HIGH)) then pwm_out <= '0';
-
Thread
Eigenen Code sauber in PLB Slave Template einbinden
Bus2IP_Clk'event and Bus2IP_Clk = '1' then if Bus2IP_Reset = '1' then slv_reg0 <= (others => '0'); slv_reg1 <= (others => '0'); --slv_reg2 <= (others => '0'); else case slv_reg_write_sel is when "100" => for byte_index in 0 to (C_SLV_DWIDTH
(byte_index*8 to byte_index*8+7); -- end if; -- end loop; when others => null; end case; end if; end if; end process SLAVE_REG_WRITE_PROC; [/vhdl] In diesem Prozess werden die definierten Register ja vom Bus beschrieben. Um zu verhindern
-
Thread
Alles wird wegoptimiert
--------------------------------------------------------------------- case fsm_cur is when SS_RST => fsm_next <= SS_INI; when SS_INI => fsm_next <= SS_ACTIVE; when SS_ACTIVE => ena <= '1'; when others => fsm_next <= SS_RST; end
after -- und bei der Synthese durch die FSM versteckt when others => fsm_next <= SS_RST; end case; end fsm; -- Sequential: Common register block ---------------------------------------------------------------------- seq : process
-
Thread
CORDIC in VHDL
sintemp(9) & sintemp(9 DOWNTO 7)); WHEN OTHERS => data := "000000000000"; I_shift:= costemp; Q_shift:= sintemp; END CASE;
sintemp(9) & sintemp(9 DOWNTO 7)); WHEN OTHERS => data := "000000000000"; I_shift:= costemp; Q_shift:= sintemp; END CASE;
-
Thread
Frage zum Sparten 3A
distribution process(clk) begin if clk='1' and clk'event then case sel is when "00" => toggle <= '0'; when "01" => toggle <= not toggle; when "10" => if cnt(15)='1' then toggle <= not toggle; else toggle<='0'; end if; when others => null; end case; drive_ar<=(others=>toggle); end if; end process; gnd<=(others=>'0'); mod_out<=cnt(15); end Behavioral; [/vhdl] [vhdl] library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;
-
Thread
std_logic zu std_logic_vector
[vhdl] s_exa_slv <= (others => s_exa_sl); [/vhdl]
IDATA_P(PLOOP+1) <= IDATA_P(PLOOP); end loop; PD_OUT_N <= (others => IDATA_N(63)); for NLOOP in 62 downto 0 loop IDATA_N(NLOOP+1) <= IDATA_N(NLOOP); end loop; when others => null; end case; end
-
Thread
Ampelschaltung - Probleme bei der Synchronisation
ignoriert, weil es ja keinen weiteren Zustand mehr gibt! Fazit: [vhdl] Lights <= "100" when (State = gruen) else "110" when (State = rotgelb) else "001" when (State = rot) else "010" ; -- State = gelb [/vhdl] Das ist so ähnlich, wie die /when others/ Sache: http://www.lothar-miller.de/s9y/categories/25-when-others Christian Klingler schrieb im Beitrag #2850173: > if rising_edge(clk) then > if counter = 7999999 then > New_Clock <= not New_Clock; > counter := 0; > else > counter
-
Thread
Register in VHDL effizien implementieren?
Daten ausgeben wenn dieses Modul adressiert INT_D_OUT(31 downto 0) <= INT_D_OUT_sig(31 downto 0) when INT_CYCLE_access = '1' else (others => 'Z'); ------------------------------------------------------- end COUNTERRegister_arch; [/vhdl] Das Tristate Problem ist nun aber trotzdem noch nicht gelöst
INT_D_out1 or INT_D_out2 or INT_D_out3 ... [/c] Und in der Sub-Einheit: [c]IND_D_out1 <= Reg_Out1 when ((CS1 = '1') and (read_access = '1')) else (others => '0');[/c] Gruß Bernd
-
Thread
Case nur mit Takt möglich?
"1001" => led_o <= "1111011"; -- 9 WHEN OTHERS => led_o <= "1111110"; -- 0 END CASE; WAIT; END PROCESS; END seg7_a;[/vhdl] Wenn ich eine Simulation starte, kommt egal bei welcher BCD Kombination immer der letzte Wert (hier WHEN OTHERS => led_o <= "1111110"; -- 0). Ist so ein Case Konstrukt nur mit einem Takt möglich? Oder warum wird immer der letzte Wert genommen?
-
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 =>