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)
    );

所以,需要不同的量化位数时,只需要改变输入参数和声明的端口信号位宽。

posted @ 2020-04-17 11:28  ygpygp1234  阅读(1378)  评论(0编辑  收藏  举报