首页 > 其他 > 详细

Verilog Module Parameter可以让例化模块接收参数

时间:2020-04-17 13:08:58      阅读:438      评论:0      收藏:0      [点我收藏+]

问题描述:将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{1b0}};
            dq_reg <= {WIDTH_OUT{1b0}};
        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)
    );

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

 

Verilog Module Parameter可以让例化模块接收参数

原文:https://www.cnblogs.com/YangGuangPu/p/12718023.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!