sobre um contador de programa

H

higildedzest

Guest
Recentemente eu escrevi um contador de programa, eu successful.But compilá-lo e quando eu comecei a executar a função de simulação, os resultados foram wrong.i não entendem, por favor, todo mundo que sabe me dar alguns conselhos sobre it.thank you very much.
Aqui está o código:
Módulo Contador (clk, reset, hora, min, sec);
input clk, reset;
output [7:0] horas, min, seg;
wire [7:0] horas, min, seg;
always @ (clk posedge ou redefinir posedge)
começo
reg [7:0] hour1, min1, Sec1;
if (reset == 1)
começo
hour1 [3:0] <= 0;
hour1 [7:4] <= 0;
min1 [3:0] <= 0;
min1 [7:4] <= 0;
Sec1 [3:0] <= 0;
Sec1 [7:4] <= 0;
fim
else if (Sec1 [3:0] <4'b1001)
começo
Sec1 [3:0] <= Sec1 [3:0] 1;
fim
diferente
começo
Sec1 [3:0] <= 0;
if (Sec1 [7:4] <4'b0101)
começo
Sec1 [7:4] <= Sec1 [7:4] 1;
fim
diferente
começo
Sec1 [7:4] <= 0;
if (min1 [3:0] <4'b1001)
começo
min1 [3:0] <= min1 [3:0] 1;
fim
diferente
começo
min1 [3:0] <= 0;
if (min1 [7:4] <4'b0101)
começo
min1 [7:4] <= min1 [7:4] 1;
fim
diferente
começo
min1 [7:4] <= 0;
if (hour1 [7:4] <4'b0010)
começo
if (hour1 [3:0] <4'b1001)
começo
hour1 [3:0] <= hour1 [3:0] 1;
fim
diferente
começo
hour1 [3:0] <= 0;
hour1 [7:4] <= hour1 [7:4] 1;
fim
fim
diferente
começo
if (hour1 [3:0] <4'b0011)
começo
hour1 [3:0] <= hour1 [3:0] 1;
fim
diferente
começo
hour1 [7:4] <= 0;
hour1 [3:0] <= 0;
fim
fim
fim
fim
fim
fim
fim
atribuir hora = hour1,
min = min-1,
sec = Sec1;
endmodule

 
Você está usando SystemVerilog?Esse módulo não irá compilar em Verilog porque esta declaração não pode ir para dentro de um "bloco de sempre":

reg [7:0] hour1, min1, Sec1;

Mudei-lo poucas linhas, e agora ele compila multa (que estou usando no modo ModelSim Verilog).

Parece que simulam muito bem também.É um relógio de 24 horas BCD.O mau que você vê?Qual simulador você está usando?

Você não precisa de dois conjuntos de hora, min, sinais de seg.Você pode defini-los como registros de saída, e eliminar a atribuir declarações.Eu fiz isso, e também reformatado o recuo para o meu estilo favorito (para que eu possa lê-lo!):
Código:

Módulo Contador (clk, reset, hora, min, sec);

input clk, reset;

saída reg [7:0] horas, min, seg;always @ (clk posedge ou redefinir posedge) começam

if (reset == 1) begin

hora [3:0] <= 0;

hora [7:4] <= 0;

min [3:0] <= 0;

min [7:4] <= 0;

s [3:0] <= 0;

s [7:4] <= 0;

end else if (s [3:0] <4'b1001) começam

s [3:0] <= s [3:0] 1;

end else begin

s [3:0] <= 0;

if (s [7:4] <4'b0101) começam

s [7:4] <= s [7:4] 1;

end else begin

s [7:4] <= 0;

if (min [3:0] <4'b1001) começam

min [3:0] <= min [3:0] 1;

end else begin

min [3:0] <= 0;

if (min [7:4] <4'b0101) começam

min [7:4] <= min [7:4] 1;

end else begin

min [7:4] <= 0;

if (hora [7:4] <4'b0010) começam

if (hora [3:0] <4'b1001) começam

hora [3:0] <= hora [3:0] 1;

end else begin

hora [3:0] <= 0;

hora [7:4] <= hora [7:4] 1;

fim

end else begin

if (hora [3:0] <4'b0011) começam

hora [3:0] <= hora [3:0] 1;

end else begin

hora [7:4] <= 0;

hora [3:0] <= 0;

fim

fim

fim

fim

fim

fim

fim

endmodule
 
oi eu encontrar algum erro lógico no código
neste bloco:

if (hora [7:4] <4'b0010) começam
if (hora [3:0] <4'b1001) começam
hora [3:0] <= hora [3:0] 1;
end else begin
hora [3:0] <= 0;
hora [7:4] <= hora [7:4] 1;
fim
end else begin
if (hora [3:0] <4'b0011) começam
hora [3:0] <= hora [3:0] 1;
end else begin
hora [7:4] <= 0;
hora [3:0] <= 0;

Se você observar de perto você está verificando a condição horas [7:4] = 2 horas e [3:0] = 9 isso faz com que 29, mas o que exatamente quer verificar é para 24 o que eu sinto que pretendia fazer era buscar para 23:59, mas que provavelmente esqueceu.

Pleasse me corrija se eu estiver errado.

obrigado

 
O código usa menos do que os testes, não testes de igualdade.

Usando ModelSim, eu vejo isso contando as horas corretamente a partir de 00 a 23, depois para 00.

 
agradecer a vocês muito, eu o farei again.i obrigado por todos os seus adivce.

 

Welcome to EDABoard.com

Sponsor

Back
Top