FPGA去掉每幀幀尾無效的零數據

   在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字節剔除掉就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章