if; if (rising_edge(SS)) then if (slave_nr = SLV_NR) then case chan_nr is when "000" => gain_1_s <= gain; when "001" => gain_2_s <= gain; when "010" => gain_3_s <= gain; when "011" => gain_4_s <= gain; when "100" => gain_5_s <= gain; when "101" => gain_6_s <= gain; when "110" => gain_7_s <= gain; when "111" => gain_8_s <= gain; --when others => gain_1_s <= "000"; end case; end if;
<= '1'; -- update FiFo with new sample from ADC state <= load_st; else state <= wait_st; end if; when load_st => x_diff <= resize(signed(f_din) - x_0, x_diff'length); -- load twfarr from Twiddle_ROM (implicitely) r_rden <= '1'; -- read Xk_old from FBin_RAM state <= calc_st; when calc_st => for i in
D_int select --Schiebestand an die Segmente DISP <= "1111001" when "00000001", "0100100" when "00000010", "0110000" when "00000100", "0011001" when "00001000", "0010010" when "00010000", "0000011" when "00100000", "1111000" when "01000000", "0000000" when "10000000", "1111111" when others; end Behavioral; [/vhdl]
Sel, ERG_SUMME, ERG_AND, ERG_OR, ERG_RSHIFT, ERG_MULT) begin Cout <= '0'; case Sel is -- Addieren when "0001" => Y <= ERG_SUMME(31 downto 0); COut <= ERG_SUMME(32); -- Subtrahieren = Addieren mit gesetztem Carry! -- Wir brauchen dafür kein Extra Opcode --Multiplizieren when "0011" => Y <= ERG_MULT(31 downto 0); -- AND when "0100" => Y <= ERG_AND; -- OR when "0101" => Y <= ERG_OR; -- Rechtschift when "0111" => Y <= '0'&ERG_RSHIFT; -- Unbekannter Opcode = Ergebnis undefiniert when others => Y <= (others => '-'); end case
zaehler: std_logic_vector(3 downto 0); begin process (RESET, CLK) begin if RESET = '1' then z <= (others => '0'); DECIMAL <= (others => '0'); READY <= '0'; zaehler <= "0000"; current_state <= start_state; elsif CLK'event and CLK = '1' then case current_state is when start_state => if START = '1' then
dort im Datenblatt steht. Ab Seite 20 im Datenblatt ist doch alles beschrieben : bit 0: RW bit. When 0, the data DI(7:0) is written into the device. When 1, the data DO(7:0)from the device is read. In latter case, the chip will drive SDO at the start of bit 8. bit 1: MS bit. When 0, the address
(MSb first). In multiple read/write commands further blocks of 8 clock periods will be added. When MS bit is 0 the address used to read/write data remains the same for every block. When MS bit is 1 the address used to read/write data is incremented at every block.
bitcnt<thr then data_serialized<='0'; bitcnt <= bitcnt+1; else -- bitcnt>=thr txbit<='1'; bitcnt<=(others=>'0'); data_serialized<='1'; end if; end if; end if; end process; advancestate: process (clk, state, data_serialized, writecommand, data_in) begin case state is when WAITFORDATA => if writecommand='1' then nextstate <= READDATA; end if; when READDATA => if data_in='1' then nextstate <= SERIALIZEDATA; end if; when SERIALIZEDATA => if data_serialized='1' then nextstate <= WAITFORDATA; end if; end case; if (state=READDATA or state=SERIALIZEDATA
electric problem. I search the internet many times with no success. I was even more motivated when the second half of the induction died. I googled my problem once more and found this post. I was so glad when I get to the electronic board and saw I had the problem you described. A few minutes
everyone to find. Could you please post the type, name and number of your Electrolux stove to help others find the solution?
Anfängerfehler? Das ist eher die Regel: Kombinatorik im Prozess, keine Defaultzuweisung (else... bzw. when others...) --> Latch Eine unvollständige Sensitivity-Liste dazu, und das Ganze verhält sich in der Simulation grundlegend anders als in der Realität.
bitte jemand in VHDL übersetzen... [vhdl] : process (switch,a,b) begin case switch is when '1' => out1 <= a; when '0' => out2 <= b; end case; end process : [/vhdl] Hier ist sowohl out1 wie auch out2 nicht vollständig definiert, tauchen also nicht in jedem when-Pfad auf --> 2
Aber bekomme ich mit der folgenden Beschreibung nicht noch einen: [vhdl] case count is when 0 => data_sel <= D0; when 1 => data_sel <= D1; when 2 => data_sel <= D2; when 3 => data_sel <= D3; when 4 => data_sel <= D4; when others => data_sel <= D0; end case;
"; when "0000011000" => data <= "101000000"; when "0000011001" => data <= "100010101"; when "0000011010" => data <= "100000001"; when "0000011011" => data <= "011111111"; when "0000011100" => data <= "101110110
write to FIFO -- push : set to 1 for 1 clk to write 1 data word to FIFO -- push must not be applied when "full" is true -- full flag: goes high when FIFO got full with last push -- overflow flag : goes high when a push occurs while "full" flag is set -- can only be reset by applying "reset" -- -- read
<= "0000"; m_axis_video_tid <= "0"; m_axis_video_tdest <= "0"; -- state <= STREAM_BEREIT; end if; when others => state <= STREAM_BEREIT; --m_axis_video_tvalid <= '0'; end case; end if; end if; end process; -- Auf den Simulationsausgang das gleiche legen wie auf den VFIFO (wird später auskommentiert)
wenigen Zeilen: [vhdl] signal reg : std_logic_vector (7 downto 0) := x"00"; : : reg <= inp when rising_edge(clk); outp <= x"00" when OE = 0 else reg; [/vhdl]
to_integer(unsigned(A))) <= D; end if; Q(to_integer(unsigned(A))) <= D; else BITS <= (others => '0'); Q <= (others => '0'); if LE_n = '0' then Q(to_integer(unsigned(A))) <= D; end if; end if; end process; end;[/vhdl] Edit: Aber ja, weil es im FPGA keine Latches
process (gray) begin case gray is -- abcdefg abcdefg when "00000" => zehner <= "1111110"; einer <= "1111110"; -- 00 when "00001" => zehner <= "1111110"; einer <= "0110000"; -- 01 when "00011" => zehner <= "1111110"; einer <= "1101101"; -- 02 : when "10001" => zehner <= "0110000"; einer <= "0110000"; -- 62 when others => zehner <= "0011111"; einer <= "1111001"; -- 63 end process; [/vhdl] > um es vielleicht in ein CPLD XC9572
then TXEFF<=TXE; end if; end process; if rising_edge(DCLK)then case(SSnd) is when WaitingForSendFlag => If AquisitionDone='1' then SSnd<=WaitForInitialTXELow; FinalAddress<=unsigned(WAddress); Counter<=unsigned(WAddress)+1; end if; when
SSnd<=Done; else SSnd<=Send1; end if; end if; when WaitForResume => if TXEFF='0' then SSnd<=ResumeState; end if; when Done=> WR<='1'; when others => SSnd <=WaitingForSendFlag; end case; end if; [/vhdl
ReadyxSO <= std_logic_vector(to_unsigned(cnt,3)); -- end process FIR_comb ; -- ReadyxSO <= "000" when DataBufxD="0000" else -- "001" when DataBufxD="0001" or DataBufxD="0010" or DataBufxD="0100" or DataBufxD="1000" else -- "010" when DataBufxD="0011" or DataBufxD="0110" or DataBufxD="1100" or DataBufxD
-- irgendwas resetten falls notwendig state:=0; else case state is when 0 => if trigger='1' then state:=1; end if; when 1 => -- einmalig irgendwas machen state:= 2; when 2 => -- bleibt für immer in 2 when others => state:=0; end case; end if; end if; end if; [/vhdl] oder sowas: [vhdl] -- läuft einmal, bleibt dann stehen process(clk) variable flag : std_logic := '0';
end process; -- Erzeugen des D-FlipFlop zum Zwischenspeichern -- with clk select dIn_alt <= dIn_neu when '1', dIn_alt when others; Komperator: process (dIn_alt) -- Herausfiltern des MSBit -- begin alt_conv <= std_logic_vector(din_alt); dOut_read <= alt_conv (10); end process Komperator; Erzeugen: process (dOut_read) -- Erzeugen eines Vektors-- begin case dOut_read is when '0' => dOutm <= "0000000000"; when '1' => dOutm <= "1111111111"; when others => dOutm <= "0000000000"; end case; dOutm_conv <= signed (dOutm); end process Erzeugen; data_out <= dOut_read; -- Ausgeben
zwei einfache Schreibweisen: [vhdl] Foo : process(Selector) begin case Selector is when 1 => Address <= x"0123"; when 2 => Address <= x"4567"; when 3 => Address <= x"89AB"; when others => Address <= "ZZZZZZZZZZZZZZZZ"; end case; end process; [/vhdl] oder noch kürzer: [vhdl] Address <= x"0123" when Selector = 1 else x"4567" when Selector = 2 else x"89AB" when Selector = 3 else "ZZZZZZZZZZZZZZZZ"; [/vhdl]
WRITE READ=0 WRITE=1 BUS_EN : IN STD_LOGIC:='0'; -- CHIP ENABLE BUS_BUSY : OUT STD_LOGIC:='0'; -- '1' WHEN REGISTER IS WRITING DATA TO GLOBAL BUS BUS_ADDR : IN STD_LOGIC_VECTOR(ADDR_WIDTH-1 DOWNTO 0):=(OTHERS=>'0'); --BUS ADRESSE DOUT : OUT STD_LOGIC_VECTOR(DATA_WIDTH-1 DOWNTO 0):=(OTHERS=>'0'); --REGISTER DATA OUT DIN : IN STD_LOGIC_VECTOR(DATA_WIDTH-1 DOWNTO 0):=(OTHERS=>'0'); -- REGISTER DATA IN BUS_DATA : INOUT STD_LOGIC_VECTOR(DATA_WIDTH-1 DOWNTO 0):=(OTHERS=>'Z'); --DATA OUTPUT TO CONTROLLER BUS_DATA_INPUT : IN STD_LOGIC_VECTOR(DATA_WIDTH-1 DOWNTO 0):=(OTHERS=
architecture MUX of CK_MUX is begin CMUX: process (CK_SEL, CK_IN) begin case CK_SEL is when "00" => CK_OUT <= CK_IN(0); when "01" => CK_OUT <= CK_IN(1); when "10" => CK_OUT <= CK_IN(2); when others => CK_OUT <= CK_IN(3); end case; end process CMUX; end architecture
SIG_OUT_DATA <= SIG_ADC1_DATA; end if; WHEN "0100" => --REFRESH MEAN --xxxx SIG_OUT_DATA <= SIG_ADC_MEAN; WHEN OTHERS => SIG_OUT_DATA <= SIG_OUT_DATA; END CASE;
Takt Latency eingeführt. Das ginge aber auch so: [vhdl] akku <= akku - akku/32 + in_data when rising_edge(clk); out_data <= akku/32 when rising_edge(clk); [/vhdl] Oder konservativer so: [vhdl] process begin wait until rising_edge(clk); akku <= akku
definiert hast, speziell bei onehot-Codierung (such mal danach). Deshalb sollte man ein case-Zweig "when others => new_state <= irgendein_state; -- z.B. fehlerstate" vorsehen.
definiert hast, speziell bei onehot-Codierung (such mal danach). Deshalb sollte man ein case-Zweig "when others => new_state <= irgendein_state; -- z.B. fehlerstate" vorsehen. -> Ja, hilft aber z.B. auch nix, wenn man durch ein asynchrones Signal in einen gültigen State (der aber trotzdem falsch ist
architecture Behavioral of Glixon2BCD is begin process (glixon) begin case glixon is when "0000" => bcd <= "0000"; when "0001" => bcd <= "0001"; when "0011" => bcd <= "0010"; when "0010" => bcd <= "0011"; when "0110" => bcd <= "0100"; when "0111" => bcd <= "0101"; when "0101" => bcd <= "0110"; when "0100" => bcd <= "0111"; when "1100" => bcd <= "1000"; when "1000" => bcd <= "1001"; when others => bcd <= "0000"; end case; end process
STD_LOGIC; -- Reset. rst : IN STD_LOGIC; -- 'High' if transmitter shall start to send tx_byte. -- 'Low' when nothing should be send. tx_ack : IN STD_LOGIC; -- Data byte to be send. tx_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 'High' if transmitting process has started. -- 'Low' when system is in idle mode
process(CLK) begin if rising_edge(CLK)THEN case state_LED is When CNT1 => if SUM>2000000 then state_LED<=SETLEDS; else SUM <= SUM+1; end if; When SETLEDS => SUM<=0; LEDACTIVE<= not LEDACTIVE; state_LED<=CNT1; When others => state_LED<=CNT1; end case; end if; end process; LEDS<=LEDACTIVE; end Behavioral; [/vhdl]
3) Ich setzte den Debugvector meist ausserhalb der state machiene. Also: debugvector = "00001" when state_sig = STATE1 else "00010" when state_sig = STATE2 else ..... "10000" when state_sig = STATE_LAST; Abtakten vor Ausgabe nicht vergessen: process(clk) Begin if rising_edge(clk) then if reset = '1' then debug_output_pins <= (others => '0'); else debug_output_pins <= debugvector; end if; end if; end process; Dann läuft der debugausgang zwar einen Takt nach, aber er belügt dich nicht. schau dir den vhdlcode
begin if state = "100" then if inc'event and inc = '0' then case op(2 downto 0) is when "001" => res := a + b; when "010" => res := a - b; when "100" => res := (aV(7 downto 0) and bV(7 downto 0)); when others => res :=0; end case; end if; end if; end process; end behavioral; Auch when "100" => res := aV and bV; geht nicht. Die noetigen Libs sind doch eigentlich eingebunden? Auch kompiliert der Code, wenn ich die "and"-Zeile auskommentiere und das Programm arbeitet auf der Hardware
"0110" => LED := "0111111"; when "0111" => LED := "1100010"; when "1000" => LED := "1111111"; when "1001" => LED := "1110111"; when others => LED := "-------"; don’t care: std_logic_1164 end case; case SEL is 4-fach Multiplexer when "00" => O <= A; when "01" => O <= B; when "10" => O <= C; when others => O <= D; end case; 32 5.1 Anweisungen Loop Modellierung verschiedener Schleifen. Neben der Vereinfachung von Ausdrucken,¨ lassen sich so auch Wiederholungen
downto 0) ); end SOURCE; architecture Behavioral of SOURCE is signal COUNT : unsigned(9 downto 0):=(others => '0'); signal SCHALTER_GRENZE : unsigned(9 downto 0):=(others => '0'); --wie mach ich das SCHALTER_GRENZE den Wert von Schalter Eingang übernimmt ? begin -- Vieleicht so ? SCHALTER_GRENZE <= SCHALTER
downto 0) ); end SOURCE; architecture Behavioral of SOURCE is signal COUNT : unsigned(9 downto 0):=(others => '0'); signal Schalter_grenze : unsigned(9 downto 0):=(others => '0'); begin Schalter_grenze <= unsigned(SCHALTER(9 downto 0)); -- Hier hab ich es umgewandelt process (CLK) begin if rising_edge(CLK
@ --- "*" and "+" differs only in bit 0 so this bit can be ignored - case lpbits(6 downto 1) is - when "010101" => store <= '1'; - when others => store <= '0'; + case lpbits is + when "0101011" => store <= '1'; setbusy <= '1'; + when "0101010" => store <= '1'; setbusy <= '0'; + when others => store <
process Z_SPEICHER; FSM: process --(CLK_FSM,State) begin wait until rising_edge(CLK_FSM); case State is when z0 => sAc_reg <=(others=>'0'); sBs_reg <=(others=>'0'); senSPI <= '0'; senCordic <= '0'; when z1 => senSPI <= '1'; senCordic <= '0'; when z2 => senSPI <= '0'; senCordic <= '1'; sAc_reg <= (Spi_c - haelfte); sBs_reg <= (Spi_s - haelfte); end case; end process FSM; Cos_Cor <= signed(sAc_reg);-- when senCordic = '1'; Sin_Cor <= signed(sBs_reg);-- when senCordic = '1'; EnSpi <= senSpi; EnCor <= senCordic; end fsm_01;
"0110" => LED := "0111111"; when "0111" => LED := "1100010"; when "1000" => LED := "1111111"; when "1001" => LED := "1110111"; when others => LED := "-------"; don’t care: std_logic_1164 end case; case SEL is 4-fach Multiplexer when "00" => O <= A; when "01" => O <= B; when "10" => O <= C; when others => O <= D; end case; 32 5.1 Anweisungen Loop Modellierung verschiedener Schleifen. Neben der Vereinfachung von Ausdrucken,¨ lassen sich so auch Wiederholungen
... process(clk) begin if rising_edge(clk) then case data_in(wert1 downto wert1 -3) is when "0000" => data_out <= '1'; when "0010" => data_out <= '1'; when "1011" => data_out <= '0'; when others => data_out <= '0'; end case; [/pre] Dies ist nur ein Beispielcode, da der
downto 0) ); end SOURCE; architecture Behavioral of SOURCE is signal COUNT : unsigned(9 downto 0):=(others => '0'); signal COUNT_SCHALTER : unsigned(3 downto 0):=(others => '0'); --Schalter Zaehler nur 4 Bit weil mehr braucht ich derzeit ned weil 13 signal SCHALTER_GRENZE : unsigned(3 downto 0):="1101";