Taktgeberblöcke werden Ihnen bei dem, was Sie erreichen möchten, nicht helfen.
Ihre original code hat buffer
Zuweisung selbst (asynchrone Rückmeldung). Es spielt keine Rolle, dass buffer
nicht Teil der Empfindlichkeitsliste ist, Synthesizer behandeln es so, als ob es Teil der Empfindlichkeitsliste ist. Du hast eine Takteingabe, du solltest sie benutzen.
Ich schlage vor, dass Sie Ihren Codierungsstil zu einem Zwei-Immer-Block-Ansatz ändern. Ein Always-Block sollte reine Konbinationslogik für Next-State-Berechnungen sein. Der zweite immer Block ist für synchrone Zuweisungen. Wenn Sie mehr über verschiedene Codierungsstile und deren Stärken und Schwächen erfahren möchten, empfehle ich Ihnen this paper von Cliff Cummings.
Sie Code sollte wie folgt sein:
// Use 'reg' for Verilog; 'logic' is recommended for SytemVerilog
reg [263:0] buffer [0:63]; // flopped value
reg [263:0] next_buffer [0:63]; // next-state of buffer
// Use whatever name you want for the indexes so long as they are unique per always block
integer comb_idx; ff_idx;
// always_comb // <<== SystemVerilog
always @* // <<== Verilog (IEEE1364-2001)
begin
for(comb_idx = 0; comb_idx<64; comb_idx=comb_idx+1) begin
next_buffer[comb_idx] = buffer[comb_idx]; // initialize
end
if(start) begin
next_buffer[0] = 0;
// ...
end
// ... other conbinational and next-state calculations ...
if((datain1[49]==1)||(datain2[49]==1)||(datain3[49]==1)||(datain4[49]==1))
begin
// we can use a loop for this
for(comb_idx = 1; comb_idx<27; comb_idx=comb_idx+1) begin
next_buffer[comb_idx][59:50] = buffer[comb_idx][147:138];
next_buffer[comb_idx][147:138] = buffer[comb_idx][235:226];
end
end
end
/*
// SystemVerilog
always_ff @(posedge clk)
begin
// ... other synchronous assignments ...
// SystemVerilog can assign unpacked arrays of same dimensions on one shot
buffer <= next_buffer; type
end
*/
// Verilog
always @(posedge clk)
begin
// ... other synchronous assignments ...
for(ff_idx = 0; ff_idx<64; ff_idx=ff_idx+1) begin
// Verilog cannot assign unpacked arrays in one shot
buffer[ff_idx] <= next_buffer[ff_idx];
end
end
Wie kann ich eine NBA durch einen beliebigen Typ ersetzen, um das gleiche Ergebnis zu erhalten ... NBA verursacht ein Problem in meinem Code, da es eine Mischung aus Blockierung und NBA in demselben Modul gibt –
Taktblöcke sind nur für Ihre Testbench. Sprechen Sie über Ihren Testbench-Code oder Ihr Design? –
Ich spreche über das Design ..... Ich möchte mein Design synthetisieren –