Counter qualità davvero strano - aiuto è necessario.

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;

 
Credo che si dovrebbe considerare l'hardware ritardata tempo, anche se si tratta di un orologio innescato design, ma tutti i segnali interni FPGA ha routing differenti, in modo da ottenere un non-so-pretty forma d'onda.

 
pwq1999 ha scritto:

Credo che si dovrebbe considerare l'hardware ritardata tempo, anche se si tratta di un orologio innescato design, ma tutti i segnali interni FPGA ha routing differenti, in modo da ottenere un non-so-pretty forma d'onda.
 

Welcome to EDABoard.com

Sponsor

Back
Top