Verilog Module Parameter可以讓例化模塊接收參數


問題描述:將12bit有符號數截取為多少長度合適?有可能是4bit,還有可能是5bit,8bit不能確定,如何通過輸入參數指定輸出的位寬/長度?

注意:與例化模塊連接的端口信號定義需要根據需要進行更改。

直接給出模塊定義:

//**************************************************************
//            Quantize the signed 12-bit to be signed n-bit Data
//
//
//**************************************************************

module quant_signed_n #(
    parameter WIDTH_OUT = 5 )(
    rst_n,
    ts_sam_clk,
    rdi,
    rdq,
    
    dout_i,
    dout_q
    
    );
    
    //****************************************
    //            Param Def
    //
    //****************************************
    localparam INDEX_BOUND = WIDTH_OUT - 1;
    
    //****************************************
    //            Port Def.
    //
    //****************************************
    input wire rst_n;
    input wire ts_sam_clk;
    
    input wire signed[11:0] rdi;
    input wire signed[11:0] rdq;
    
    output wire signed[INDEX_BOUND:0] dout_i;
    output wire signed[INDEX_BOUND:0] dout_q;
    
    //****************************************
    //            Status Define
    //
    //****************************************
    
    
    //****************************************
    //            Define
    //
    //****************************************

    
    //****************************************
    //            Variables
    //
    //****************************************
    reg signed[INDEX_BOUND:0] di_reg;
    reg signed[INDEX_BOUND:0] dq_reg;
    
    
    //****************************************
    //            Behaviour
    //
    //****************************************
    //***    Driving Output
    assign dout_i = di_reg;
    assign dout_q = dq_reg;
    
    //***    Truncate
    always@(posedge ts_sam_clk)begin
        if(!rst_n)begin
            di_reg <= {WIDTH_OUT{1'b0}};
            dq_reg <= {WIDTH_OUT{1'b0}};
        end
        else begin
            di_reg <= rdi[11:11-WIDTH_OUT+1];
            dq_reg <= rdq[11:11-WIDTH_OUT+1];
        end
    end
    
    
endmodule

例化方法:

    wire signed[3:0] rdi_4b;
    wire signed[3:0] rdq_4b;
    //***    Truncation for Short TS to be 5-bit signed
    quant_signed_n #(
    .WIDTH_OUT(4)
    )quant_signed_n_01(
    .rst_n(block_rst_n),
    .ts_sam_clk(ts_sam_clk),
    .rdi(rdi),
    .rdq(rdq),
    .dout_i(rdi_4b),
    .dout_q(rdq_4b)
    );

所以,需要不同的量化位數時,只需要改變輸入參數和聲明的端口信號位寬。


免責聲明!

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



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