Ayuda con $ readmemb

0

Tengo tres variables, x, y, z que actúan como una entrada para mi modelo SV. Cada una de las entradas es de datos binarios de 16 bits de longitud y tengo 500 valores de ellos. Necesito proporcionarlos como entrada para mi módulo en cada posición del reloj y cada uno después de la demora de # 20ns. Esto es a través del TB y también necesito escribir los valores de salida en un archivo de texto. ¿Puede alguien ayudarme con el código? Aquí está lo que he escrito.

logic [15:0] X,Y,Z;
logic clk, vectornum;

logic [15:0] testvectors [499:0];

or or1(.*);

initial begin
   clk =0;
   forever #5ns clk #~clk;
end

initial $readmemb("xyz.txt",testvectors);

always@(posedge clk)
begin
   #20 {X,Y,Z};
   testvectors[vectornum];
   vectornum=vectornum+1;
end
    
pregunta user29628

1 respuesta

2

Seguramente necesitas algo más como:

#20 {X,Y,Z} = testvectors[vectornum];

Sin embargo, $readmemb está destinado a inicializar memorias. Leer el archivo línea por línea usando scanf parece más apropiado aquí. Esta también sería una sintaxis similar utilizada para escribir la salida en un archivo.

integer data_in_file; //file handler
integer i;
integer r_in; //file handler

//input data
logic signed [31:0] dat1_in;
logic signed [31:0] dat2_in;
logic signed [31:0] dat3_in;

initial begin
data_in_file  = $fopen("data.in", "r");
for(i=0; (i<500) && (!$feof(data_in_file)); i=i+1) begin
   #20ns;
   //Expecting 3 decimal numbers
   r_in  = $fscanf(data_in_file, "%d %d %d\n", dat1_in, dat2_in, dat3_in);
end

Para escribir un archivo:

integer data_file_out;
logic signed [31:0] a; //Data driven some where else

initial begin
  data_file_out= $fopen("test", "w");
  //place write inside loop
  $fwrite(file, "%b", a); //Wrte a as Binary number 
end
    
respondido por el pre_randomize

Lea otras preguntas en las etiquetas