Estoy codificando un cronómetro que muestra décimas de segundo en las dos pantallas del extremo derecho y segundos en las dos pantallas de la izquierda. La síntesis se completa correctamente, pero después de crear el archivo UCF e intentar implementar el diseño, se producen las dos advertencias siguientes.
ADVERTENCIA: CLK Net: check
ADVERTENCIA: CLK Net: carry
Intenté ignorar las advertencias y fui a generar el archivo de programación, pero apareció esta advertencia y no pasó nada en el kit de FPGA y todas las pantallas tenían 8 en ellas.
ADVERTENCIA: PhysDesignRules: 372 - Reloj cerrado. La comprobación de la red del reloj se obtiene mediante un pin combinatorio. Esto no es una buena práctica de diseño. Use el pin CE para controlar la carga de datos en el flip-flop.
No tengo idea de lo que significa cualquiera de estas advertencias e intenté buscarlas en línea, pero no encontré nada por lo que pudiera entender mi problema. Pensé que hay algo mal con las variables check y carry, pero no tengo la suerte de solucionar el problema, ya que a mi me parece lógico. Y también me está costando mucho intentar averiguar cómo iniciar y pausar el cronómetro. Aquí está mi código:
module stopwatch(clk,rst,a,b,c,d,e,f,g,dot,an);
input clk,rst;
output a,b,c,d,e,f,g,dot;
output [3:0] an;
reg [22:0] count_time;
reg [3:0] first,second,third,fourth;
reg check;
reg carry;
// contando 1 segundo y produciendo un tick cada 1 segundo
always @ (posedge clk or posedge rst)
begin
if(rst)
begin
count_time <=0;
check<=0;
end
else
begin
count_time<=count_time+1;
if(&count_time==1)
check<=1;
else
check<=0;
end
end
// contando con los dos últimos SSD
always @ (posedge check or posedge rst)
begin
if (rst)
begin
third<=0;
fourth<=0;
end
else if(fourth==9)
begin
if(third==1)
begin
third<=0;
fourth<=0;
carry<=1;
end
else
begin
third<=third+1;
fourth<=0;
carry<=0;
end
end
else
fourth<=fourth+1;
end
// contando uno Primero dos SSDs
always @ (posedge carry or posedge rst)
begin
if (rst)
begin
first<=0;
second<=0;
end
else if(second==9)
begin
if(first==9)
begin
first<=0;
second<=0;
end
else
begin
first<=first+1;
second<=0;
end
end
else
second<=second+1;
end
// multiplexación de 4 SSD usando los 'an' bits
parameter X = 18; //we will use the top 2 bits (since 4 SSDs) for multiplexing and the lower X-2 bits for frequency control
reg [X-1:0] counter;
always @ (posedge clk or posedge rst) //counter to produce multiplexing
begin
if(rst)
counter<=0;
else
counter<=counter+1;
end
reg [3:0] an_temp;
reg [6:0] out;
always @ *
begin
case(counter[X-1:X-2])
2'b00:
begin
out = fourth;
an_temp = 4'b1110;
end
2'b01:
begin
out = third;
an_temp = 4'b1101;
end
2'b10:
begin
out = second; //dont care
an_temp = 4'b1011;
end
2'b11:
begin
out = first; //dont care
an_temp = 4'b0111;
end
endcase
end
assign an = an_temp;
// enviando dígitos a los SSD para cada intervalo de multiplexación
reg [6:0] temp;
always @ *
begin
case(out)
4'd0 : temp = 7'b0000001;
4'd1 : temp = 7'b1001111;
4'd2 : temp = 7'b0010010;
4'd3 : temp = 7'b0000110;
4'd4 : temp = 7'b1001100;
4'd5 : temp = 7'b0100100;
4'd6 : temp = 7'b0100000;
4'd7 : temp = 7'b0001111;
4'd8 : temp = 7'b0000000;
4'd9 : temp = 7'b0000100;
default : temp = 7'b1001000; // H
endcase
end
assign {a,b,c,d,e,f,g} = temp;
assign dot = 1'b1; //dots are off
endmodule