私はVerilogの初心者です。プロジェクトの作業を開始したばかりです。開始したコードが実行可能であることを確認しようとしています。以下のコードスニペットは、FIFOを8ビットレジスタのベクトルにアンロードしています。各クロックサイクルで、FIFOからバイトをアンロードし、それをレジスタチェーンの最後に配置し、他のすべてのバイトをチェーンの下にシフトします。発生したシフトを含むFIFOからのレジスタベクトルの埋め込み
reg [ 7:0] mac_rx_regs [0 : 1361];
generate for (ii=0; ii<1361; ii=ii+1)
begin: mac_rx_regs_inst
always @(posedge rx_clk_int, posedge tx_reset)
if (tx_reset) begin
mac_rx_regs[ii] <= 8'b0;
mac_rx_regs[1361] <= 8'b0;
end else begin
if (rx_data_valid_r) begin
mac_rx_regs[ii] <= mac_rx_regs[ii+1];
mac_rx_regs[1361] <= rx_data_r;
end
end
end
endgenerate
これを行うには、これが良い方法かどうかをご確認ください。 FIFOを読み込むバイト数でレジスタ・ベクタをアドレスするだけで済みます。私は、これは常に生成されたブロックが実行される順序が指定されていないという点で決定的なものではなく、あるレジスタから別のレジスタへデータを移動するために多くの不要なロジックが作成されるようです。
答えをありがとう。私があなたを正しく理解していれば、私の元のコードはうまくいくはずですが、あなたのバージョンははるかに良くなります。はるかにクリーンで機能はより明白です。 – JMF