verilog可綜合function使用


參考博文:https://blog.csdn.net/qq_37147721/article/details/84889832?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4

 

前言

上次發的博文使用了可綜合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

 

以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM