Estoy tratando de implementar la siguiente idea en Verilog. Intenté dar un rango variable y obtuve un error de que el error debe estar limitado por valores constantes.
Hay un registro de 8 bits que se actualiza en cada ciclo de reloj. Debo tomar valores incrementalmente de este registro, es decir,
reg[0]
en la primera iteración,
reg[1:0
] en la segunda iteración,
reg[2:0]
en la tercera iteración
y así sucesivamente. La salida de este registro junto con un número decreciente de ceros se dan a un registro de 12 bits, es decir,
{reg[0],11'b00000000000}
en la primera iteración,
{reg[1:0],10'b0000000000}
en la segunda iteración,
{reg[2:0], 9'b000000000}
en la tercera iteración.
¿Cómo generalizo esto?
Mi código original:
módulo FGen (Clk, Reset, F, Aplusone, sjplusone);
input logic Clk;
input logic Reset;
input logic [1:0] sjplusone;
output logic [11:0] F;
output logic [7:0] Aplusone;
logic [7:0] K, A, B, Bplusone;
logic [7:0] Z;
logic Kout;
int count = 0;
assign A = 8'b00000000;
assign B = 8'b00000000;
assign Z = 8'b00000000;
shiftreg #(8) shr (Clk, Reset, Load, 1'b1, 8'b11111111, K, Kout);
mux2 #(8) m1 ({A[6:0], Kout}, {B[6:0], ~Kout}, sjplusone[1], Aplusone);
mux2 #(8) m2 ({B[6:0], Kout}, {A[6:0], ~Kout}, ~sjplusone[1], Bplusone);
mux2 #(12) Fmux ({2'b11, ~Aplusone[count:0],Z[8-count:0]}, {2'b00, Bplusone[count:0] - 1'b1,Z[8-count:0]}, sjplusone[1], F);
assign count = count + 1;
módulo final
Realmente ayudaría mostrar el código que escribió como su intento y cómo se supone que debe iterar, así como el error exacto, pero creo que solo necesita un cambio lógico a la izquierda.
logic [7:0] reg8;
logic [11:0] reg12;
int iterator; // goes from 0 to 7
// each iteration
reg12 = reg8 << 11-iterator;
el fotón