O
ohadohad2
Guest
Ciao a tutti, mi chiedo se qualcuno può spiegare perché mi sembra di ottenere lo stesso errore più e più volte.
Quindi stavo scrivendo un codice e una parte di essa è stato un contatore.
Dopo aver completato la scrittura del codice ho notato che il conte sembrano agire molto stranamente, per qualche motivo l'uscita contatore sembrano cambiare orologio a metà anche se la sua clock attivato.
Per verificare questo ho utilizzato file VHDL forma d'onda.
Ecco alcuni codici diversi che ho scritto per il contatore esatta e tutti sembrano avere lo stesso problema (Im allegando anche una foto di una delle simulazioni temporali):
Counter entità è
generic (N: integer: = 7);
porto (abilitare, clk, rst: in bit;
Conte: out intero range da 0 a N);
Counter end;architettura conteggio di Counter è
Count_State tipo è (Zero, Uno, Due, Tre, Quattro, Cinque, Sei, Sette);
current_state segnale: Count_State;
iniziare
process (clk, rst)
iniziare
se rst = '1 'allora current_state <= Zero;
elsif clk'event e clk = '1 'then
current_state caso è
quando Zero => current_state <= One;
quando uno => current_state <= Due;
quando due => current_state <= Tre;
quando tre => current_state <= quattro;
Quando quattro => current_state <= cinque;
quando cinque => current_state <= Sei;
Quando sei => current_state <= Seven;
quando Seven => current_state <= Zero;
end case;
end if;
end process;
con current_state selezionare
Count <= 0 quando Zero,
1 quando uno,
2 quando due,
3 quando tre,
4 quando quattro,
5 quando cinque,
6 quando sei,
7 quando Seven;
fine conteggio;-------------------------------------------------- --------------------------------------
entità Dflop è
port (D, RST, CLK, abilitare: in bit;
Q: out bit);
fine Dflop;
architettura Behave di Dflop è
iniziare
process (clk, rst)
iniziare
se rst = '1 'then
Q <= '0 ';
elsif (clk'event e clk = '1 ') then
se enable = '1 'then
Q <= D;
end if;
end if;
end process;
fine si comporta;
-------------------------------------------------- --------------------------------------
entità Struc_Counter è
generic (N: integer: = 7);
port (clk, rst, abilitare: in bit;
Conte: out intero range da 0 a N);
fine Struc_Counter;
architettura Struc di Struc_Counter è
componente Dflop
port (D, RST, CLK, abilitare: in bit;
Q: out bit);
end component;
-------------------------------------------------- --------------------------------------
segnale inA, inB, Inc, OutA, OutB, outC: bit;
segnale ABC: bit_vector (da 0 a 2);
iniziare
inA <= ((OutA e (non OutB)) o (OutB e (outC xor OutA)));
inB <= (outC xor OutB);
Inc <= (non outC);
A1: port map Dflop (D => INA, rst => rst, clk => clk, enable => consentire, Q => OutA);
B1: port map Dflop (D => inB, rst => rst, clk => clk, enable => consentire, Q => OutB);
C1: port map Dflop (D =>, inC rst => rst, clk => clk, enable => consentire, Q => outC);ABC <= OutA & OutB & outC;
con ABC selezionare
Count <= 0 quando "000",
1 quando "001",
2 quando "010",
3 quando "011",
4 Quando "100",
5 quando "101",
6 quando "110",
7 quando "111";
fine Fondi Strutturali;Counter entità è
generic (N: integer: = 7);
porto (abilitare, clk, rst: in bit;
Conte: out intero range da 0 a N);
Counter end;architettura conteggio di Counter è
CNT segnale: intero range da 0 a N;
iniziare
process (clk, rst)
iniziare
se rst = '1 'then cnt <= 0;
elsif (clk'event e clk = '1 ') then
se enable = '1 'then
cnt <= cnt 1;
se cnt = N allora
cnt <= 0;
end if;
end if;
end if;
end process;
Count <= cnt;
fine conteggio;
Quindi stavo scrivendo un codice e una parte di essa è stato un contatore.
Dopo aver completato la scrittura del codice ho notato che il conte sembrano agire molto stranamente, per qualche motivo l'uscita contatore sembrano cambiare orologio a metà anche se la sua clock attivato.
Per verificare questo ho utilizzato file VHDL forma d'onda.
Ecco alcuni codici diversi che ho scritto per il contatore esatta e tutti sembrano avere lo stesso problema (Im allegando anche una foto di una delle simulazioni temporali):
Counter entità è
generic (N: integer: = 7);
porto (abilitare, clk, rst: in bit;
Conte: out intero range da 0 a N);
Counter end;architettura conteggio di Counter è
Count_State tipo è (Zero, Uno, Due, Tre, Quattro, Cinque, Sei, Sette);
current_state segnale: Count_State;
iniziare
process (clk, rst)
iniziare
se rst = '1 'allora current_state <= Zero;
elsif clk'event e clk = '1 'then
current_state caso è
quando Zero => current_state <= One;
quando uno => current_state <= Due;
quando due => current_state <= Tre;
quando tre => current_state <= quattro;
Quando quattro => current_state <= cinque;
quando cinque => current_state <= Sei;
Quando sei => current_state <= Seven;
quando Seven => current_state <= Zero;
end case;
end if;
end process;
con current_state selezionare
Count <= 0 quando Zero,
1 quando uno,
2 quando due,
3 quando tre,
4 quando quattro,
5 quando cinque,
6 quando sei,
7 quando Seven;
fine conteggio;-------------------------------------------------- --------------------------------------
entità Dflop è
port (D, RST, CLK, abilitare: in bit;
Q: out bit);
fine Dflop;
architettura Behave di Dflop è
iniziare
process (clk, rst)
iniziare
se rst = '1 'then
Q <= '0 ';
elsif (clk'event e clk = '1 ') then
se enable = '1 'then
Q <= D;
end if;
end if;
end process;
fine si comporta;
-------------------------------------------------- --------------------------------------
entità Struc_Counter è
generic (N: integer: = 7);
port (clk, rst, abilitare: in bit;
Conte: out intero range da 0 a N);
fine Struc_Counter;
architettura Struc di Struc_Counter è
componente Dflop
port (D, RST, CLK, abilitare: in bit;
Q: out bit);
end component;
-------------------------------------------------- --------------------------------------
segnale inA, inB, Inc, OutA, OutB, outC: bit;
segnale ABC: bit_vector (da 0 a 2);
iniziare
inA <= ((OutA e (non OutB)) o (OutB e (outC xor OutA)));
inB <= (outC xor OutB);
Inc <= (non outC);
A1: port map Dflop (D => INA, rst => rst, clk => clk, enable => consentire, Q => OutA);
B1: port map Dflop (D => inB, rst => rst, clk => clk, enable => consentire, Q => OutB);
C1: port map Dflop (D =>, inC rst => rst, clk => clk, enable => consentire, Q => outC);ABC <= OutA & OutB & outC;
con ABC selezionare
Count <= 0 quando "000",
1 quando "001",
2 quando "010",
3 quando "011",
4 Quando "100",
5 quando "101",
6 quando "110",
7 quando "111";
fine Fondi Strutturali;Counter entità è
generic (N: integer: = 7);
porto (abilitare, clk, rst: in bit;
Conte: out intero range da 0 a N);
Counter end;architettura conteggio di Counter è
CNT segnale: intero range da 0 a N;
iniziare
process (clk, rst)
iniziare
se rst = '1 'then cnt <= 0;
elsif (clk'event e clk = '1 ') then
se enable = '1 'then
cnt <= cnt 1;
se cnt = N allora
cnt <= 0;
end if;
end if;
end if;
end process;
Count <= cnt;
fine conteggio;