Tildeling af mere end én opgave til en tilstand (i MED erklæring)

O

Opel_Corsa

Guest
I det følgende kodeeksempel en tilstand maskine er defineret:
Kode:

arkitektur RTL af mycode er

type state_type er (I0, I1, I2, I3, I4, I5, I6);

signal y: state_type;

signal var_x, var_y: std_logic;

begynd

proces (CLK, reset)

begynd

if (reset = '1 ') then

var_x <= '0 ';

y <= I0;

elsif (clk'event og clk = '1 ') then

tilfælde y er

når I1 => y <= I2;

når I2 => y <= I3;

når I3 => y <= I4;

når I4 => y <= I5;

når I5 => y <= I6;

når andre => var_x <= '0 ';

y <= I1;

ende sag;

end if;

end process;med y vælge

outputscr <= "00000000", når I0,

"00111000", når I1,

"00111000", når I2,

"00001100", når I3,

"00000001", når I4,

"00000110", når I5,

"10000000", når I6;ende RTL;
 
Sin meget enkle ..

Kode:

arkitektur RTL af mycode er

type state_type er (I0, I1, I2, I3, I4, I5, I6);

signal y: state_type;

signal var_x, var_y: std_logic;

begynd

proces (CLK, reset)

begynd

if (reset = '1 ') then

var_x <= '0 ';

var_y <= '0 ';

y <= I0;

elsif (clk'event og clk = '1 ') then

tilfælde y er

når I1 => y <= I2;

når I2 => y <= I3;

når I3 => y <= I4;

når I4 => y <= I5;

når I5 => y <= I6;

når andre => - I0 er standard tilstand

var_x <= '1 '; - sæt var_x

var_y <= '0 '; - reset var_y

y <= I1;

ende sag;

end if;

end process;med y vælge

outputscr <= "00000000", når I0,

"00111000", når I1,

"00111000", når I2,

"00001100", når I3,

"00000001", når I4,

"00000110", når I5,

"10000000", når I6;ende RTL;

 
Tak for dit svar, men det var ikke det, jeg ledte efter.Jeg tænkte på, om det er muligt at gøre noget som følgende:

Kode:

med y vælge

(outputscr <= "00000000", var_x <= '1 ', var_y <= '0'), når I0,

"00111000", når I1,

"00111000", når I2,

"00001100", når I3,

"00000001", når I4,

"00000110", når I5,

"10000000", når I6;
 
Dette er endnu en måde at gøre det, men dette vil skabe låsen for var_x og var_y!

Kode:

arkitektur strøm af ukendt

signal outputscr_x_y: std_logic_vector (9 downto 0);

begynd

med y vælge

outputscr_x_y <= "00000000" & '1 '& '0', når I0,

"00111000" & var_x & var_y når I1,

"00111000" & var_x & var_y når I2,

"00001100" & var_x & var_y når I3,

"00000001" & var_x & var_y når I4,

"00000110" & var_x & var_y når I5,

"10000000" & var_x & var_y når I6;outputscr <= outputscr_x_y (9 downto 2);

var_x <= outputscr_x_y (1);

var_y <= outputscr_x_y (0);
 
Hej,

Du kan tildele værdi til kun ét signal ved hjælp af "med ... vælg" erklæring.Som du vil udløse mere end et signal i en tilstand, bliver du nødt til at bruge separate "med ... vælg" redegørelser for hvert signal.Disse signaler vil blive opdateret løbende, og dermed kan du udføre mere end en opgave i en tilstand med "med .... vælg" erklæring.

Held og lykke !!!!!

 
Tak!Det er meget smart, nand_gates.Så nu er jeg klar over, at det ikke er muligt at gøre, hvad jeg ledte efter (som nævnt xstal) end ved tweaking konstruktionen af en smule.

 
Hej.Pr diskussion i den anden tråd (Hvis-Så VHDL fejl), der er en alternativ måde at gøre dette.

Kode:arkitektur RTL af mycode er

type state_type er (I0, I1, I2, I3, I4, I5, I6);

signal curr_state, next_state: state_type;

signal var_x, var_y: std_logic;

begynd

- Statsmaskine synkron proces

proces (CLK, reset)

begynd

if (reset = '1 ') then

curr_state <= I0;

elsif (clk'event og clk = '1 ') then

curr_state <= next_state;

end if;

end process;- Statsmaskine kombinatorisk proces

proces (curr_state) er

begynd

- Standard output værdier

var_x <= '0 ';

var_y <= '1 ';

outputscr <= "00000000";

- Afkodning af stat og udgange

tilfælde curr_state er

når I0 =>

next_state <= I1 - afkode næste tilstand

var_x <= '1 '; - overdrage udgange

var_y <= '0';
når I1 =>

next_state <= I2;

outputscr <= "00111000";

når I2 =>

next_state <= I3;

outputscr <= "00111000";

når I3 =>

next_state <= I4;

outputscr <= "00001100";

når I4 =>

next_state <= I5;

outputscr <= "00000001";

når I5 =>

next_state <= I5;

outputscr <= "00000110";

når I6 =>

next_state <= I6;

outputscr <= "10000000";

- Standard overgang

når andre =>

next_state <= I0;

ende sag;

end process;ende RTL;

 

Welcome to EDABoard.com

Sponsor

Back
Top