Verilog BitSet Circuit

0

Un tipo específico de manipulación a nivel de bits consiste en configurar o borrar un solo bit en un valor de múltiples bits, dado su índice y su nuevo valor. Esta operación se puede implementar en hardware mediante un circuito BitSet con la siguiente interfaz:

  • La entrada x es un valor de 4 bits que representa el valor original.
  • La salida y es un valor de 4 bits que representa el valor modificado, después del conjunto de bits operación.
  • El índice de entrada es un valor de 2 bits, que va de 0 a 3, que indica el índice del bit a modificar.
  • El valor de entrada es un valor de 1 bit establecido en 0 o 1, que indica el valor que debe tomar el índice de bits en la salida y. Cada otro bit en y debe coincidir con el bit correspondiente en x.

Aquí está el código que tengo que tomé de los ejemplos en clase:

module BitSet(input [3:0]x,
         input [1:0]index,
         input value,
         output [3:0]y);
   always@(x,index,value);
   begin
      if (index = 2'b00) 
        y[0] = value;
     if(index = 2'b01)
        y[1]=value;
     if(index = 2'b10)
        y[2]=value;
     if(index=2'b11)
        y[3]=value;
   end
 endmodule

y aquí está el banco de pruebas:

module BitSet_tb();
    reg [3:0]x;
    reg [1:0]index;
    reg value;
    wire [3:0]y;

    BitSet uut(
      .x(x),
      .index(index),
      .value(value),
      .y(y)
    );

    initial begin
        $monitor ("%d %b %b %b %b", $time, x, index, value, y);
           x=4'b0000;
           index=2'b00;
           value=1'b0;
       #10 x=4'b0001;
           index=2'b01;
           value=1'b0;
       #10 x=4'b1111;
           index=2'b10;
           value=1'b0;
       #10 x=4'b1111;
           index=2'b11;
           value=1'b0;
       #10 $finish;
     end
 endmodule

Al compilar, obtengo los siguientes errores:

bitset.v:10: syntax error
bitset.v:12: error: invalid module item.
bitset.v:13: syntax error
bitset.v:14: error: invalid module item.
bitset.v:15: syntax error
bitset.v:16: error: invalid module item.
bitset.v:17: syntax error
bitset.v:18: error: invalid module item.
bitset.v:19: syntax error
    
pregunta smd

1 respuesta

1

Puedes simplificar tu código en gran medida si no intentas convertir todo en bloques de procedimientos.

Piense en cómo implementaría esto con los componentes lógicos reales. Tendrías un decodificador y 4 multiplexores.

Puede representarlo en Verilog con solo 4 asignaciones a lo largo de las líneas de

assign y[0] = (index == 2'b00) ? value : x[0];

En cuanto a los errores en su código, sospecho que provienen de la asignación a y en un bloque de procedimiento cuando y no se declaró como reg .

Además, su código tiene un error de funcionalidad, porque no implementa el requisito "Cada bit en y debe coincidir con el bit correspondiente en x".

    
respondido por el The Photon

Lea otras preguntas en las etiquetas