在FPGA實現中,經常會遇到由上位機循環下發數據(文件),底層FPGA按照所要求的幀長度和幀間隔發送出去的情況。一般這個時候上位機下發的數據位寬爲32位,如果文件總長度不是4字節的整數倍,則會在末尾補零構成32位數據。這個時候FPGA下發數據是就需要將數據中無效的0數據去除掉。由於上位機會告知FPGA文件的有效數據長度值,FPGA則根據有效數據長度值,計算末尾所補得0字節的個數,然後根據有效長度值依次取數,並按照幀長度和幀間隔發送數據。下面爲該情況處理的FPGA代碼:
reg [1:0] S_complement;//定義餘數
always @ (posedge clk or posedge fifo_rst)
begin
if(fifo_rst)
S_complement <= 0;
else
S_complement <= S_VALID_LENGTH % 4;
end
reg [31:0] S_REAL_LENGTH;//實際下發的數據長度
always @ (posedge clk or posedge fifo_rst)
begin
if(fifo_rst)
S_REAL_LENGTH <= 0;
else
case(S_complement )
0:S_REAL_LENGTH <= S_REAL_LENGTH;
1:S_REAL_LENGTH <= S_REAL_LENGTH + 3;
2:S_REAL_LENGTH <= S_REAL_LENGTH + 2;
3:S_REAL_LENGTH <= S_REAL_LENGTH + 1;
endcase
end
然後再根據實際的數據長度和有效數據長度,將補的0字節剔除掉就可以了。