Verilog-Implementierung - Variablenbereichsfehler für eine Registerzuweisung

Ich versuche, die folgende Idee in Verilog umzusetzen. Ich habe versucht, einen Variablenbereich anzugeben, und habe einen Fehler erhalten, dass der Fehler durch konstante Werte begrenzt werden muss.

Es gibt ein 8-Bit-Register, das bei jedem Taktzyklus aktualisiert wird. Ich muss inkrementell Werte aus diesem Register nehmen, dh
reg[0]in der ersten Iteration,
reg[1:0] in der zweiten Iteration,
reg[2:0]in der dritten Iteration
und so weiter. Die Ausgabe von diesem Register wird zusammen mit einer abnehmenden Anzahl von Nullen an ein 12-Bit-Register gegeben, dh
{reg[0],11'b00000000000}in der ersten Iteration,
{reg[1:0],10'b0000000000}in der zweiten Iteration,
{reg[2:0], 9'b000000000}in der dritten Iteration.
Wie verallgemeinere ich das?

Mein ursprünglicher Code:

Modul 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;

Endmodul

Was passiert nach 8 Zyklen?

Antworten (1)

Es würde wirklich helfen, den Code zu zeigen, den Sie als Ihren Versuch geschrieben haben, und wie er iterieren soll, sowie den genauen Fehler, aber ich denke, Sie brauchen nur eine logische Verschiebung nach links.

logic [7:0] reg8;
logic [11:0] reg12;
int iterator;  // goes from 0 to 7

// each iteration
  reg12 = reg8 << 11-iterator;
Vielen Dank für die Idee. Ich habe den ursprünglichen Beitrag bearbeitet, um meinen Code zu teilen. Ich möchte dieses Modul im Hauptteil des Codes instanziieren, wo eine Reihe von Instanziierungen iteriert werden. Also möchte ich meine Iterationszahl als Eingabe für dieses Modul angeben, aber ich kann das Zählinkrement nicht implementieren.