前言
上次發的博文使用了可綜合task,綜合上兩者沒有區別,但在仿真中,task在全部執行完畢才會賦值,所以可能導致多個task並發調用會不正確。
則可以使用function達到既可以綜合也可以仿真。
目的
在進行多通道數據處理的時候,對於數據截位這樣的操作,重復性的功能則可使用function進行預先定義,直接調用。
減少代碼量及代碼出錯概率及后期修改容易程度。
注意
vivado支持function綜合,但需保證function中的代碼本來就是可以綜合的。
function中只能使用組合邏輯。
代碼驗證
////截位function function [15:0] f_lpf_out_trc; input [17:0] f_lpf_in_data; if (f_lpf_in_data[17]) //如果是負數 begin if (&f_lpf_in_data[16:15] == 1'b0) f_lpf_out_trc = {f_lpf_in_data[17],{15{1'b0}}}; else f_lpf_out_trc = {f_lpf_in_data[17],f_lpf_in_data[14:0]}; end else //是正數 begin if (|f_lpf_in_data[16:15] == 1'b1) //溢出限幅 f_lpf_out_trc = {f_lpf_in_data[17],{15{1'b1}}}; else f_lpf_out_trc = {f_lpf_in_data[17],f_lpf_in_data[14:0]}; end endfunction
always @(posedge i_clk) begin r_lpf_m_axis_data_tdata_0_dout <= f_lpf_out_trc(w_lpf_m_axis_data_tdata[34:17]); end
以上。