61 lines
2.2 KiB
Verilog
61 lines
2.2 KiB
Verilog
`timescale 1ns / 1ns
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
// Company:
|
||
// Engineer:
|
||
//
|
||
// Create Date: 21:27:25 01/18/2018
|
||
// Design Name:
|
||
// Module Name: Normalization_Factor_0_8125
|
||
// Project Name:
|
||
// Target Devices:
|
||
// Tool versions:
|
||
// Description:
|
||
//
|
||
// Dependencies:
|
||
//
|
||
// Revision:
|
||
// Revision 0.01 - File Created
|
||
// Additional Comments:
|
||
//
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
module Normalization_Factor_0_8125 #(
|
||
parameter WIDTH = 4'd8
|
||
) (
|
||
input clk,
|
||
input [WIDTH-1:0] din_NF, //输入为非负数
|
||
output reg [WIDTH-1:0] dout_NF = 8'd0 //输出相对输入延时3个时钟周期
|
||
);
|
||
|
||
reg [WIDTH-1:0] din_NF_reg0 = 8'd0, din_NF_reg1 = 8'd0;
|
||
reg [WIDTH-1:0] sum_1 = 8'd0, sum_2 = 8'd0;
|
||
always @(posedge clk) begin
|
||
din_NF_reg0 <= din_NF;
|
||
din_NF_reg1 <= din_NF_reg0;
|
||
end
|
||
always @(posedge clk) begin //对输入数据乘以系数0.8125
|
||
sum_1 <= (din_NF >> 1) + (din_NF >> 2);
|
||
sum_2 <= sum_1 + (din_NF_reg0 >> 4);
|
||
case ({
|
||
din_NF_reg1[3:0]
|
||
}) //matlab中用round函数,verilog中默认是floor函数
|
||
4'b0000: dout_NF <= sum_2 + 8'd0;
|
||
4'b0001: dout_NF <= sum_2 + 8'd1;
|
||
4'b0010: dout_NF <= sum_2 + 8'd1;
|
||
4'b0011: dout_NF <= sum_2 + 8'd1;
|
||
4'b0100: dout_NF <= sum_2 + 8'd0;
|
||
4'b0101: dout_NF <= sum_2 + 8'd1;
|
||
4'b0110: dout_NF <= sum_2 + 8'd1; //32个数,0~15和16~31的数是一样的,所以用din_NF_reg1&4'b1111,
|
||
4'b0111: dout_NF <= sum_2 + 8'd2; //例如,din_NF_reg1=6'd19,经过din_NF_reg1&4'b1111之后,变成了6'd3
|
||
4'b1000: dout_NF <= sum_2 + 8'd1;
|
||
4'b1001: dout_NF <= sum_2 + 8'd1;
|
||
4'b1010: dout_NF <= sum_2 + 8'd1;
|
||
4'b1011: dout_NF <= sum_2 + 8'd2;
|
||
4'b1100: dout_NF <= sum_2 + 8'd1;
|
||
4'b1101: dout_NF <= sum_2 + 8'd2;
|
||
4'b1110: dout_NF <= sum_2 + 8'd1;
|
||
4'b1111: dout_NF <= sum_2 + 8'd2;
|
||
default: dout_NF <= 8'd0;
|
||
endcase
|
||
end
|
||
endmodule
|