Estoy intentando construir un contador con un reinicio de sincronización, que se mostrará en la pantalla de 7 segmentos en la placa fpga. Vi algunas publicaciones sobre mi problema:
"texto cercano" si "; esperando un módulo final"
Pero aún no puedo entender por qué estoy recibiendo ese error, sé que me falta una regla importante, pero no puedo resolverlo.
module up_counter(
input clk,rst,
output segA, segB, segC, segD, segE ,segF , segG, segDP);
reg [3:0] BCD;
always @(posedge clk);
reg [7:0] SevenSeg;
if (BCD==4'h9) begin
BCD <= 4'h0;
SevenSeg = 8'b11111100;
end else if (rst==0) begin
BCD <= 4'h0;
SevenSeg = 8'b11111100;
end else begin
BCD <= BCD+4'h1;
always @(*)
case(BCD)
4'h0:SevenSeg = 8'b11111100;//0
4'h1:SevenSeg = 8'b01100000;//1
4'h2:SevenSeg = 8'b11011010;//2
4'h3:SevenSeg = 8'b11110010;
4'h4:SevenSeg = 8'b01100110;
4'h5:SevenSeg = 8'b10110110;
4'h6:SevenSeg = 8'b10111110;
4'h7:SevenSeg = 8'b11100000;
4'h8:SevenSeg = 8'b11111110;
4'h9:SevenSeg = 8'b11110110;
default: SevenSeg = 8'b11100000;
endcase
end
assign {segA, segB, segC, segD, segE ,segF , segG, segDP} = SevenSeg;
endmodule
Esta adición "siempre" vino después, leí ese caso y si las declaraciones tienen que venir siempre, pero esto no ayudó. siempre @(*) caso (BCD) Furthur más, traté de poner un "siempre" antes de: si (BCD == 4'h9) comienza Pero entonces tengo el mismo error:
"texto cercano" siempre "; esperando un módulo final"
Me siento muy limitado, porque en este momento, cada vez que tengo un "si", me sale un error, por lo que me falta una regla seria y básica. Muchas gracias, realmente aprecio tu ayuda.
Gracias a todos por su ayuda, creo que lo hice, cada vez que me lo dio, y este es el código de mejora:
module up_counter(
input clk,rst,
output segA, segB, segC, segD, segE ,segF , segG, segDP);
reg [3:0] BCD;
reg [7:0] SevenSeg;
always @(posedge clk)
begin
if (BCD==4'h9) begin
BCD <= 4'h0;
SevenSeg = 8'b11111100;
end else if (rst==0) begin
BCD <= 4'h0;
SevenSeg = 8'b11111100;
end
else begin
BCD <= BCD+4'h1;
case(BCD)
4'h0:SevenSeg <= 8'b11111100;//0
4'h1:SevenSeg <= 8'b01100000;//1
4'h2:SevenSeg <= 8'b11011010;//2
4'h3:SevenSeg <= 8'b11110010;
4'h4:SevenSeg <= 8'b01100110;
4'h5:SevenSeg <= 8'b10110110;
4'h6:SevenSeg <= 8'b10111110;
4'h7:SevenSeg <= 8'b11100000;
4'h8:SevenSeg <= 8'b11111110;
4'h9:SevenSeg <= 8'b11110110;
default: SevenSeg <= 8'b11100000;
endcase
end
end
assign {segA, segB, segC, segD, segE ,segF , segG, segDP} = SevenSeg;
endmodule
Resolvió el problema que tenía, pero ahora, solo obtengo 8 en la pantalla de 7 segmentos, ¿hay más reglas que faltan?