作为 备份
module fxp_zoom #(
parameter WII = 8, // 输入整数部分宽度
parameter WIF = 8, // 输入小数部分宽度
parameter WOI = 8, // 输出整数部分宽度
parameter WOF = 8, // 输出小数部分宽度
parameter ROUND= 1 // 舍入方式(0:截断;1:四舍五入)
)(
input wire [WII+WIF-1:0] in, // 输入信号
output wire [WOI+WOF-1:0] out, // 输出信号
output reg overflow // 溢出标志位
);
initial overflow = 1'b0; // 初始化溢出标志位为0
reg [WII+WOF-1:0] inr = 0; // 缩放后的输入信号
reg [WII-1:0] ini = 0; // 输入信号的整数部分
reg [WOI-1:0] outi = 0; // 输出信号的整数部分
reg [WOF-1:0] outf = 0; // 输出信号的小数部分
generate
if (WOF < WIF) begin
if (ROUND == 0) begin
always @ (*) inr = in[WII+WIF-1:WIF-WOF]; // 截断方式,直接取需要的位数
end
else if (WII+WOF >= 2) begin
always @ (*) begin
inr = in[WII+WIF-1:WIF-WOF]; // 截断方式,取需要的位数
if (in[WIF-WOF-1] & ~(~inr[WII+WOF-1] & (&inr[WII+WOF-2:0]))) // 判断是否需要舍入
inr = inr + 1; // 舍入操作
end
end
else begin
always @ (*) begin
inr = in[WII+WIF-1:WIF-WOF]; // 截断方式,取需要的位数
if (in[WIF-WOF-1] & inr[WII+WOF-1]) // 判断是否需要舍入
inr = inr + 1; // 舍入操作
end
end
end
else if (WOF == WIF) begin
always @ (*) inr[WII+WOF-1:WOF-WIF] = in; // 直接复制输入信号
end
else begin
always @ (*) begin
inr[WII+WOF-1:WOF-WIF] = in; // 复制输入信号
inr[WOF-WIF-1:0] = 0; // 将多余位数设为0
end
end
endgenerate