-
Thread
Problem: Latches oder unkorrektes Verhalten
ALU_OP : process (A_reg, B_reg, u_instruction) begin CASE u_instruction is when op_lda => alu_out <= A_reg; when op_ldb => alu_out <= A_reg; when op_add => ALU_out <= (A_reg + B_reg); ------------------------------------------
---------------------------------------------------------------------- when others => ALU_Out <= (others => '0'); end CASE; end process ALU_OP; [/vhdl] Die Flags kommen da nicht rein. Z und C kann man einfach so dekodieren [vhdl] Z <=0 when alu_out =0 else
-
Thread
wWarum wird nicht geschoben
0):= (others => '0'); begin Clock_LR: Vorwzhl Port map ( Clk => CLK, Rst => RESET, CTL_DOTO => CTL_TODO, ZClk => CLK_LR ); Process (CLK, RESET) begin
(CLK)) then case state is when idle => byte_count <= 0; bit_count <= 0; trigger_count <= 0; value_count <= 0;
-
Thread
FIFO Implementierung in BlockRAM
ram_type is array (255 downto 0) of STD_LOGIC_VECTOR(15 downto 0); signal RAM : ram_type := (others => (others => '0')); [/vhdl] Gibt es evtl. noch Rückmeldungen zum konzeptionellen Aufbau meines FIFOs? Oder hat gar einer einen VHDL Beispielcode? Über Sinn oder Unsinn möchte ich mich nicht
if reset = '1' then -- sync reset addr_rd <= (others =>'0'); addr_wr <= (others =>'0'); underflow <= '0'; overflow <= '0'; else -- process inputs
-
Thread
VHDL: Zufallswerte für die Initialisierung erzeugen
array_t is array (0 to 2**data_select'length) of integer; constant const_array : array_t := (others => random); begin -- Damit nicht alles wegoptimiert wird data_out <= to_unsigned(const_array(to_integer(data_select)), data_out'length); end architecture; [/vhdl]
Just like other pseudo-random number generators, uniform will generate the same sequence of numbers when called with the same initial seed values. Because of this behavior, you can rerun the testbench and get the same result when using the same seed values." Da in den hier gezeigten Codes die Seeds fest
-
Thread
NAND-Flash Reader mit FTDI-USB
einem FTDI schon mal (möglichst einfach) gelöst? Knulli case FIFOWriteStatus is when FIFO_WR_IDLE => if STA = '0' then FIFOWriteStatus <= FIFO_WAIT_TXE; FIFO_Data <= (others => 'Z'); ByteCNT <= (others => '0'); end if; when FIFO_WAIT_TXE => if TXE = '0' then FIFOWriteStatus <= FIFO_WR_DATA; end
-
Thread
Timing Simulation Quartus+ModelSim mit Testbench - Signale gehen in unbesimmten Zusand
reset) begin if reset = '1' then currentstate <= resetSTATE; frame_addr <= (others => '0'); failure <= "000"; elsif rising_edge(clk) then case currentstate is when resetSTATE => -- alle Signales werden resettet-spar ich an der Stelle
<= '0'; currentCYCO <= execCYCO; end if; when execCYCO => rst_n_cnt <= '1'; if (ctrl_in(2)) = '0' then currentCYCO <= idleCYCO; end if; when others => end case;
-
Thread
Fehler bei Synthese
COMB:process(zustand,counter) begin case zustand is when S0 => folge<=S1; a<='0'; when S1 => if counter< 7 then folge<=S0; a<='0'; else folge<=S2; a<='0'; end if; when S2 => folge<=S0; a<='1'; end case; end process COMB; [/vhdl] MFG
-
Thread
Using the 7-segment Displays/ 7 Segment Anzeige
" => a <= '1'; b <= '1'; c <= '1'; d <= '1'; e <= '1'; f <= '1'; g <= '1'; when "1001" => a <= '1'; b <= '1'; c <= '1'; d <= '1'; e <= '0'; f <= '1'; g <= '1'; when others => a <= '0'; b <= '0'; c <= '0'; d <= '0'; e <= '0'; f <= '0'; g <= '1'; END case;
" => a <= '1'; b <= '1'; c <= '1'; d <= '1'; e <= '1'; f <= '1'; g <= '1'; when "1001" => a <= '1'; b <= '1'; c <= '1'; d <= '1'; e <= '0'; f <= '1'; g <= '1'; when others => a <= '0'; b <= '0'; c <= '0'; d <= '0'; e <= '0'; f <= '0'; g <= '1'; END case;
-
Thread
Komplexe Pipeline mit AXI-Stream: Ready-Signal kombinatorisch?
-- reset definition constant REG_RESET : reg_t := ( fsm => S_0, set0_data => (others => 'U'), set1_data => (others => 'U') ); -- functions function mult(a, b : std_ulogic_vector(DATA_WIDTH - 1 downto 0)) return std_ulogic_vector is begin return std_ulogic_vector
when S_0 => a_ready_o <= b_valid_i; b_ready_o <= a_valid_i; c_data_o <= (others => 'U'); c_valid_o <= '0'; when S_1 => a_ready_o <= b_valid_i;
-
Thread
Hyperram ohne nios 2 ?
SDRAM1; architecture Behavioral of SDRAM1 is signal x : std_logic_vector (3 downto 0) := (others=>'0'); type state_type is (state_decision, state_read, state_write); signal state : state_type; --für Ram signal myAddress : std_logic_vector (9 downto 0) := (others=>'0'); signal
; when others => state <= state_decision; end case; end if; end process; leds <= not x; -- Signal x an LEDs ausgeben end Behavioral; [/
-
Thread
FSM Beschreibung in VHDL (registered, combinatorial)
----------------------- WHEN OTHERS => state <= idle; END CASE; END IF; END PROCESS fsm; [/vhdl] Jetzt finde ich vor allem bei älteren Kollegen immer auch eine kombinatorische Variante, wo alle Signale in einem
--------------------------- WHEN OTHERS => s_state <= idle; END CASE; END PROCESS fsm; sync : PROCESS(CLK, NRES) BEGIN IF (NRES = '0') THEN state <= idle; ELSIF rising_edge(CLK) THEN state
-
Thread
noch keine Angst vor chatGPTs Programmierkünsten
timer_counter <= RED_ON_TIME; when others => next_state <= GREEN_ON; -- Default state end case; end process; -- LED driving logic green_led <= '1' when (current_state
timer_counter <= RED_ON_TIME; when others => next_state <= GREEN_ON; -- Default state end case; end process; -- LED driving logic green_led <= '1' when (current_state
-
Thread
VHDL Anfänger: Problem mit Xilinx9.2
Du brauchst einen default case beim when (when others), da std-logic ausser 0 und 1 auch unbestimmt, hochohmig usw. annehmen kann.
Gast wrote: > Du brauchst einen default case beim when (when others), da std-logic > ausser 0 und 1 auch unbestimmt, hochohmig usw. annehmen kann. Danke, bin auch grad fündig geworden. Aber das erklärt nicht, warum das Programm nicht mit bit und bit_vector
-
Thread
LCD 2Zeilige Augabe
end_Addr then address <= address + 1; else address <= (others => '0'); end if; case address is when "00000" => data <= x"68"; when "00001" => data <= x"61"; when "00010" => data <= x"6C"; when "00011" => data <= x"6C"; when "00100" => data <= x"6F"; when others => data <= x"23"; end case; end if; end process; [/vhdl] Schreibt 'Hallo
-
Thread
Automaten(FSM) und die verschiedenen Prozess Modelle
Initialisierung (signal state : state_type := s0;) geht natürlich gar nicht. Und dann habe ich auch kein "when others" in der FSM, weil alle definierten States bereits abgehandelt werden. => Ganz böse!!
<= st3_<name>; end if; when st3_<name> => next_state <= st1_<name>; when others => next_state <= st1_<name>; end case; end process; [/vhdl]
-
Thread
Ecoo-Signal vom PS2 abfangen.
rxtimeout : integer range 0 to 500000 := 0; signal rxregister : std_logic_vector(10 downto 0) := (others=>'1'); signal datasr : std_logic_vector(1 downto 0) := (others=>'1'); signal clksr : std_logic_vector(1 downto 0) := (others=>'1'); type ps2rxstatetype is (idle, receive, ready);
clk rxregister <= datasr(1) & rxregister(10 downto 1); end if; case ps2rxstate is when idle => rxregister <= (others=>'1'); rxactive <= '0'; dataready <= '0'; rxtimeout <= 0; if (datasr(1) = '0' and clksr(1) = '1') then ps2rxstate <= receive;
-
Thread
VHDL: UART State Machine
next_state <= s_tx; when AKN => data_out <= x"55"; next_tx_state <= idle; next_state <= s_tx; when s_tx => next_state <= s_tx; if BUSY = '0
when s_tx_done => if BUSY = '0' then valid_out <= '0'; state <= next_tx_state; end if; when others => state <= idle;
-
Thread
FSM mit taktflankengesteuerten Zustandsübergängen
else state <= Z1; end if; when others => state <= warten; end case; end if; end process; MFG Falk
else state <= Z1; end if; when others => state <= warten; end case; end if; end if; Grüße, Kest
-
Thread
Beschreibung funktioniert nach Synthese nicht
begin if rising_edge(CLK) then case StateMachine is -- Senden when 1 => if NewTransmitACK = '0' then -- Ist der Sender frei? Transmit <= (others => '0'); -- Nachricht pauschal löschen Transmit(7 downto
begin if rising_edge(CLK) then case StateMachine is -- Senden when 0 => if NewTransmitACK = '0' then -- Ist der Sender frei? Transmit <= (others => '0'); -- Nachricht pauschal löschen Transmit(7 downto
-
Thread
Suche max. Bitvektor
rising_edge(CLK); comparison <= (value1 > value2) & (value3 > value4); case comparison is when "00" => result <= value2 > value4; when "01" => result <= value2 > value3; when "10" => result <= value1 > value4; when others => result <= value1 > value3; end case; end Behavioral
process (CLK) comparison <= (value1 > value2) & (value3 > value4); case comparison is when "00" => result <= value2 > value4; when "01" => result <= value2 > value3; when "10" => result <= value1 > value4; when others => result <= value1 > value3; end case; end process;
-
Thread
FSM Implementierung
die Zustände S0 bis S3 explizit > auswerten (Variante 1) oder S0 bis S2 explizit und S3 über ein 'others' > abfangen (Variante 2)? Wenn dein Typ genau mit den Zuständen s0..3 definiert ist, und du alle vier möglichen Zustände in der FSM abfrägst, gibt es keine "anderen" Zustände mehr, die mit "when others" abgefragt werden könnten: http://www.lothar-miller.de/s9y/categories/25-when-others *ABER ACHTUNG* Wie diese FSM mit 4 Zuständen /realisiert/ wird, steht auf einem ganz ANDEREN Blatt, nämlich
-
Thread
Signal multiplexen
sel --Internes Auswahlsignal F_out1<= pin_outA1 when sel='0'else pin_outB1 ; --Modul A F_out2<= pin_outA2 when sel='0'else pin_outB2 ; --Modul B --Eingänge-- pin_inA <= F_in when sel='0' else 'Z'; --Modul A pin_inB <= F_in when
'Z', das geht nur an den Pins direkt, und da nur an > INOUT oder OUT. Wenn, dann auf '0' bzw. (others => '0') bei einem Bus > umschalten. Danke für deine Antwort. Damit ich zwischen beide Eingänge korrekt umschalte wäre dann: --Eingänge-- pin_inA <= F_in when sel='0' else '0';
-
Thread
[VHDL] Status speichern
else STATE <= LED_OFF; end if; end process; with STATE select LED(4) <= '0' when LED_ON, '1' when others; achja benutze Xilinx Webpack 11 Bitte um HILFE :-) Danke Grüße balou
Zähler wait until rising_edge(CLK); if OneSecond='1' then case DIRECTION is when '0' => if (COUNTERX = 63) then -- Überlauf COUNTERX <= 0; else COUNTERX <= COUNTERX + 1; end if; when others => if (COUNTERX = 0) then
-
Thread
Tristate Bus Umschaltzeitpunkt
Das könntest du auch abkürzen und ohne Prozess schreiben: [vhdl] ram_do <= RAM_DB; RAM_DB <= (others => 'Z') when (ram_oe = '0') else ram_di; [/vhdl] Dabei angenommen, do wäre der Eingang ins FPGA und di der Ausgang... :-/ > sollte ich in diese Umschaltung noch jeweils 1 Takt Verzögerung einbauen
rising_edge(CLK) then ram_oe_last <= ram_oe; end if; end process; RAM_OE <= '1' when (ram_oe_last = '1') else ram_oe; RAM_DB <= (others => 'Z') when (ram_oe = '0') or (ram_oe_last = '0') else ram_di; ram_di <= RAM_DB; [/vhdl] (großgeschrieben sind die Ports nach aussen)