Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...
Moderatori:
g.schgor,
dimaios
da
michper1 » 13 apr 2013, 8:50
Ciao a tutti!
Ho un problema che mi assilla e non riesco a risolvere. Ho descritto una macchina a stati in questo modo:
- Codice: Seleziona tutto
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
ENTITY sequence_2proc_fsm IS
PORT( w : IN std_logic;
clk, rstn : IN std_logic;
state :OUT std_logic_vector(8 downto 0);
z : OUT std_logic);
END sequence_2proc_fsm;
ARCHITECTURE behavioural OF sequence_2proc_fsm IS
TYPE state_type IS (A,B,C,D,E,F,G,H,I);
SIGNAL ps, ns : state_type; -- ps: present state, ns= next state
BEGIN
state_process: PROCESS(w, ps)
BEGIN
CASE ps IS
WHEN A => IF w = '0' THEN ns <= B;
ELSE ns <= F;
END IF;
WHEN B => IF w = '0' THEN ns <= C;
ELSE ns <= F;
END IF;
WHEN C => IF w = '0' THEN ns <= D;
ELSE ns <= F;
END IF;
WHEN D => IF w = '0' THEN ns <= E;
ELSE ns <= F;
END IF;
WHEN E => IF w = '0' THEN ns <= E;
ELSE ns <= F;
END IF;
WHEN F => IF w = '0' THEN ns <= B;
ELSE ns <= G;
END IF;
WHEN G => IF w = '0' THEN ns <= B;
ELSE ns <= H;
END IF;
WHEN H => IF w = '0' THEN ns <= B;
ELSE ns <= I;
END IF;
WHEN I => IF w = '0' THEN ns <= B;
ELSE ns <= I;
END IF;
WHEN OTHERS => ns <= A;
END CASE;
END PROCESS;
state_update: PROCESS(clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
IF rstn = '0' THEN
ps <= A;
ELSE
ps <= ns;
END IF;
END IF;
END PROCESS;
z <= '1' WHEN ps = E OR ps = I ELSE '0';
state <= ps; -- conversione??? state è di tipo std_logic_vector
END behavioural;
Avrei bisogno di portare in uscita il present state codificato su std_logic_vector. Esiste una funzione di conversione che lo faccia? Altrimenti è possibile estrarre in qualche modo dalla macchina a stati il signal in ingresso ai vari flip flop che la compongono?
Grazie, buon weekend a tutti
-

michper1
190
1
2
4
- Frequentatore

-
- Messaggi: 113
- Iscritto il: 19 mar 2013, 22:12
- Località: Türin
da
rini » 13 apr 2013, 13:23
- Codice: Seleziona tutto
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
ENTITY sequence_2proc_fsm IS
PORT( w : IN std_logic;
clk, rstn : IN std_logic;
state :OUT std_logic_vector(8 downto 0);
z : OUT std_logic);
END sequence_2proc_fsm;
ARCHITECTURE behavioural OF sequence_2proc_fsm IS
TYPE state_type IS (A,B,C,D,E,F,G,H,I);
SIGNAL ps, ns : state_type; -- ps: present state, ns= next state
SIGNAL outx : std_logic_vector(8 downto 0);
BEGIN
state_process: PROCESS(w, ps)
BEGIN
CASE ps IS
WHEN A => IF w = '0' THEN ns <= B;
ELSE ns <= F;
...............................
WHEN I => IF w = '0' THEN ns <= B;
ELSE ns <= I;
END IF;
WHEN OTHERS => ns <= A;
END CASE;
END PROCESS;
state_update: PROCESS(clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
IF rstn = '0' THEN
ps <= A;
outx <= "00000";
ELSE
ps <= ns;
END IF;
CASE ns IS
WHEN A => outx <= "00000000";
WHEN B => outx <= "00000001";
WHEN C => outx <= "00000010";
WHEN D => outx <= "00000011";
WHEN E => outx <= "00000100";
WHEN F => outx <= "00000101";
WHEN G => outx <= "00000110";
WHEN H => outx <= "00000111";
WHEN I => outx <= "00001000";
WHEN OTHERS => ns <= "00000000";
END CASE;
END IF;
END PROCESS;
z <= '1' WHEN ps = E OR ps = I ELSE '0';
state <= outx; -- conversione??? state è di tipo std_logic_vector
END behavioural;
io avevo pensato a qualcosa del genere, dato che le funzioni di conversioni che dici tu io non ne conosco. provalo e vedi se soddisfa le tue aspettative
rini -

lectroYou
-

rini
1.420
2
5
13
- Master EY

-
- Messaggi: 461
- Iscritto il: 17 dic 2007, 1:04
- Località: Bologna \ Salento
Torna a Programmi applicativi: simulatori, CAD ed altro
Chi c’è in linea
Visitano il forum: Nessuno e 4 ospiti