verilog_code_compilation problem [cerrado]

-3

En este programa, estoy tratando de llamar a una tarea que está en otro archivo (o carpeta llamada prueba) usando

'include "trial.v"

Durante la compilación, muestra el siguiente error:

  1. No se puede abrir 'incluir el archivo "trial.v"
  2. cerca de "else": error de sintaxis, inesperado else

¿Hay algún otro método como define to use this? How to write define ruta en el módulo superior? ¿Puedes sugerir el código correcto? Mi programa es

archivo llamado "cnt.v":

module sift_reg (dcsel, gsclk, s_in, sclk, blank);
input dcsel, gsclk, s_in, gs_enable, blank;
reg [11:0] counter_q;
wire dc_enable, gs_enable;
output sclk;
integer i;


'include "trial.v"

always @(posedge dcsel, posedge gsclk, s_in) begin
  if (dcsel) dc_enable <= '1';
  sclk <= '1';
  else
  sclk <='1'; 
  gs_enable <= '1';
end

initial counter_q = 12'b0;

/* gray scale counter */
always @(posedge gsclk, blank) begin
  if (blank)
    counter_q <= 12'b0;
  else
    counter_q <= counter_q + 1;
end

always @(posedge gsclk,dc_enable) begin
  for (i=0; i<48; i=i+1) begin
    if (dcsel==0) gs_shiftreg(s_in,sout);
  end
end

endmodule

otro archivo "trial.v":

module shift_reg (input gsclk, sclk, dcsel, s_in, output sout);
input gsclk,sclk,dcsel;
input s_in;
reg  [191:0] temp;
output      sout;

'include "cnt.v"

task gs_shift_reg

  always @(posedge gsclk, posedge sclk) begin
    if(dcsel==0)
      temp <= {temp[190:0],s_in};
    else
      temp  <= 191'b0;
  end

  assign sout = temp;
endmodule
    
pregunta Manzer

1 respuesta

1

Para tomar una parte de tu código:

always @(posedge dcsel, posedge gsclk, s_in) begin
  if (dcsel) dc_enable <= '1';
  sclk <= '1';
  else
  sclk <='1'; 
  gs_enable <= '1';
end

Así debe escribirse:

always @(posedge dcsel, posedge gsclk) // removed s_in since it's not used 
  begin
  if (dcsel) 
  begin // note begin and end added since there are two statements following "if"
      dc_enable <= 1'b1;      
      sclk <= 1'b1;
  end 
  else
  begin
      sclk <= 1'b1; 
      gs_enable <= 1'b1;
  end
end

Necesita las declaraciones begin y end si tiene más de una declaración después de las declaraciones if o else , de lo contrario, el compilador asume que solo la línea siguiente es parte de la declaración.
Además, para asignar un valor binario, la sintaxis es n'bxxxxx, por ejemplo. Si desea asignar un valor de 8 bits a un registro, use algo como 8'b11110110; o 8'hF6;

Si está teniendo problemas con su archivo de inclusión, entonces tiene errores o el compilador no puede encontrarlo.

Hay otros problemas allí (por ejemplo, la sintaxis task es incorrecta), no está claro lo que estás tratando de hacer en general. Me gustaría comprar un libro decente como "FPGA Prototyping by Verilog Example" de Pong Chu y ten una buena lectura de eso.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas