問題描述:將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) );
所以,需要不同的量化位數時,只需要改變輸入參數和聲明的端口信號位寬。