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
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;
Das Photon