シフト記号を除算記号として使用する場合、以下の問題が見つかりました
cnt_8Kが偶数と奇数 で出力データが異なる
reg [10:0] cnt_8K;
reg [10:0] ram1_addra;
always@(posedge clk_16M)
begin
if(ram_out_flag )begin
if(cnt_8K[0] == 1'd0)
ram1_addra <= cnt_8K >> 1 ;
else
ram1_addra <= cnt_8K >> 1 + 11'd128;//注意这里
end
end
ただし、実際の代入処理では、次のコードの出力は次のようになります。奇数の場合は常に 0 が出力されます。
括弧を変更して追加するだけで、出力は通常どおりになります。
//ram1_addra <= cnt_8K >> 1 + 11'd128;
ram1_addra <= (cnt_8K >> 1) + 11'd128;