利用MATLAB设计FIR滤波器,生成代码verilog HDL代码

Section 1 : 目的

  1. 基于MATLAB平台设计FIR(Finite Impulse Response, FIR)滤波器
  2. 对设计的滤波器进行定点量化
  3. 生成verilog HDL代码
  4. 利用Modelsim进行仿真

Section 2 : 理论回顾

  1. Fir滤波器
    这部分知识是我搬运了杜勇老师的书籍《数字滤波器的 MATLAB与FPGA实现 Altera/Verilog版》。虽然之前自己也做过好几次的FIR滤波器的demo,但是对他的了解总是记了又忘。杜勇老师的理论部分,我再重新总结提取一下:
    1)线性时不变系统(LTI):我们设计一个数字滤波器,本质上是设计一个线性时不变系统。待滤波的信号输入至一个线性时不变系统,然后输出一个滤波后的数据。这个系统符合叠加原理与时不变原理。我理解成,信号x1(n)输入至线性时不变系统,输出为y1(n)。信号x2(n)输入至线性时不变系统,输出为y2(n)。如果同时输入信号x1(n)与x2(n),那么线性时不变系统输出即为y1(n)+y2(n)。用通俗的话讲,我星期一跑了100m,我运动卡路里消耗100千卡。星期二我做了20个俯卧撑,消耗了20千卡。星期三我跑了100m后又做了20个俯卧撑,那么我星期三我消耗了120千卡(这个是叠加性)。如果我本来星期四要跑100m,但是有事我延迟到了星期五再去跑,那么我运动消耗也延迟到了星期五(这个是时不变性,也就是输出是会跟踪输入的变化)。
    2)对数字信号处理而言,所有处理的信号都是离散的序列。如果说原本的信号是x(t), 式中 t 是连续的时间。在数字信号处理中,处理的信号是x(n), 式中 n 是离散的时间点。点与点之间的时间间隔是采样频率的倒数。比如一个ADC的采样频率位1.25MHz , 那么相邻的采样点之间的时间间隔是800 ns 。
    3)一个离散的序列x(n)可以分解成一系列单位冲激信号δ(n)累加而成:
    在这里插入图片描述
    4)对于一个LTI系统,当上述的离散序列x(n)输入时,其输出表示如下:
    在这里插入图片描述
    上式中 h(n-k) 为 δ(n-k) 的系统响应,及系统的单位冲激响应。那么根据LTI系统的叠加性,那么对于序列x(n)的输入,此时系统的输出是一系列单位冲激响应的累加。而x(k)可以认为是单位冲激信号的增益系数,因此最终的输出就是x(k)乘上对应的δ(n-k)的响应h(n-k)。
    5)所谓FIR滤波器,即有限冲激响应滤波器,也就是说系统的单位冲激响应h(n-k) 的数量是有限的。系统的单位冲激响应只在有限时间段内不为0,其他时间段内为0.
    在这里插入图片描述
    上面部分仅仅是一些最浅显的部分,更多也可以参考江志红主编的《深入浅出数字信号处理》

MATLAB设计流程

参考文章链接:

matlab滤波器设计与verilog生成

本文设计目标与滤波器参数选择

  1. 采样率选择:本文根据实际设计需求,选择采样率为1.25MHz.这个根据ADC与系统处理能力进行综合选择。
  2. 本文根据实际PGC(Phase-Generated-Carrier)解调算法需要,载波为48kHz,因此要设计的低通滤波器(LPF)通带为载波的一半。本设计中截止频率取为20kHz.
  3. MATLAB中的filter designer设计工具,界面如下:
    滤波器设计界面
  4. 进入设计界面后,首先进行滤波器参数设计,本文选取参数如下界面。本文选取低通滤波器,设计方法选择FIR中的等波纹,当然也可以选择其他的方法,如窗函数法等。滤波器阶数选择最小阶,这个是设置完所有参数后,点击设计滤波器按钮后自动生成的阶数,比如下面参数他自动生成的阶数为275阶。频率设定,Fs为采样频率设置为1250kHz,即1.25MHz.通带截止频率(Fpass)设置为20kHz,阻带截止频率(Fstop)设置为30kHz。幅值设定,通带纹波Apass设置为0.5dB。这个参数就是通带内增益会有波动,0.5dB就是上下抖动不超过+/-0.5dB,局部放大如下图(通带纹波)。阻带幅值设置为-60dB,所以阻带幅值可以看出被压在了-60dB,换算出幅值,也就是缩小了1000倍。最后点击设计滤波器会自动生成阶数。
    滤波器参数设计界面

通带纹波

  1. FPGA定点数量化参数设计。FPGA设计需要进行参数量化,如果没有ARM核的纯FPGA就是定点数运算,因此需要把FIR滤波器的单位冲激响应参数进行定点数量化,如下图。滤波器单位冲激响应参数量化为16位定点数。由于我们这里不是输出参数给IP核,因此不需要设计小数,直接点击最佳精度小数长度。本文输入设计为32位,这个根据实际需要滤波的序列位数来设计。设计完后点击应用,它会自动计算出输出位长。
    单位冲激响应参数量化输入输出参数设计
  2. Verilog HDL代码输出。点击目标->生成HDL
    生产HDL
    输出语言选择verilog,滤波器代码与输出文件夹自己选择。最重要选择滤波器结构,有很多种,全串行,半串行,全并行等。这里选择半串行,这里是兼具考虑资源与运行速度两种考量选择的结果。具体选择依据参考杜勇老师的滤波器设计书籍有很详细的介绍。
    输出HDL参数选择
  3. 生成后进行Modelsim仿真

Testbench 代码

`timescale 1ns/1ps

/*	PGC算法仿真测试文件	*/

module Tb_Data();

localparam					LEN	=	500000			;

reg			[15:0]			adc_mea[LEN-1:0]		;
reg			[15:0]			adc_car[LEN-1:0]		;
reg							clk						;
reg							clk_200M				;
reg							rst						;
reg			[17:0]			cnt						;
reg	signed	[15:0]			sim_mea					;
reg			[15:0]			sim_car					;
reg							data_come,data_come1	;
reg							data_valid;
wire						sys_clk;	
wire						sample_clk;
reg							sam_clk;
wire						lock;
wire	[31:0]				Inter_Car_line;
wire	[31:0]				Inter_Car2_line;
//wire	signed	[52:0]		filter_out;	//注意看滤波器输出位数,需要匹配
wire	signed	[51:0]		filter_out;
wire	signed	[31:0]		filter_in;

wire	[15:0]				sign;
assign	sign = {16{sim_mea[15]}};
assign	filter_in = {sign,sim_mea};


//读取MATLAB的仿真干涉信号与载波信号
initial	begin
	$readmemb("D:/FPGA_MATLAB_Learning/PGC_FPGA_Realize/Sim/Fir_5M_60K/testdata_1_25M_.txt", adc_mea);
end

initial	begin
	clk		= 0;
	rst		= 1;
	cnt		= 0;
	sam_clk  = 0;
	clk_200M = 0;
	#1000;
	rst		= 0;
end
	
always	#10		clk			=	~clk		;
always	#1.67	clk_300M 	= 	~clk_300M	;		//300MHz系统时钟
always	#400 	sam_clk		=	~sam_clk	;	//1.25MHz采样时钟

always@(posedge sam_clk or posedge rst)
begin
	if(rst)	begin
		cnt <= 0;
		data_come <= 0;
	end
	else	begin
		cnt		<= cnt + 1;
		sim_mea	<= adc_mea[cnt];
		data_come = ~data_come;		//数据准备完成翻转
	end
end

always@(posedge clk_300M or posedge rst)
begin
	if(rst)	begin
		data_come1 <= 0;
	end
	else	begin
		data_come1 <= data_come;
	end
end


always@(posedge clk_300M or posedge rst)
begin
	if(rst)	begin
		data_valid <= 1'b0;
	end
	else	if(data_come1 != data_come)	//数据准备完成
		data_valid <= 1'b1;
	else
		data_valid <= 1'b0;
end

 Fir_1_25M_20K_30K	u1(
	
    .clk(clk_300M),
    .clk_enable(1'b1),
    .reset(rst),
	.data_valid(data_valid),
    .filter_in(filter_in),
    .filter_out(filter_out),
	.finish_flag()
); 

endmodule


MATLAB生成待滤波的数据

%% 清空初始化
clc;
clear all;
close all;

%%
% 采样频率1.25MHz
fs= 1.25e6;
% 时间序列
t=0:1/fs:0.1-(1/fs);
% 序列长度
N = length(t);
% 频率刻度
f = (0:N/2)*fs/N;

%signal = 0.2*sin(2*pi*10e3*t)+1.1*sin(2*pi*122e3*t)+0.5*sin(2*pi*100e3*t);
signal = 1.2*sin(2*pi*10e3*t)+1.1*sin(2*pi*50e3*t)+0.5*sin(2*pi*100e3*t);
signal = signal/5;

figure(1);
plot(signal);
title('待量化干涉信号');

%%
%%%%%% 存储ADC数据

%量化位数
nbit = 16;
% 满量程2VPP
full_scale = 2;
%参考电压1V
Vref=1;
%最小辨识电压
LSB = 2/2^16;

% 信号量化(利用二进制补码进行表示)
for i=1:length(signal)
    if(signal(i)<0)
        signal2(i) = round(signal(i)/LSB);
    elseif(signal(i)==0)
        signal2(i) = 0;
    else
        signal2(i) = round(signal(i)/LSB);
    end
end
% 转换为二进制数
fid=fopen('D:\FPGA_MATLAB_Learning\PGC_FPGA_Realize\Sim\Fir_5M_60K\testdata_1_25M_.txt','w');
for k=1:length(signal2)
    B_s=dec2bin(signal2(k),nbit);
    for j=1:nbit
        if B_s(j)=='1'
            tb=1;
        else
            tb=0;
        end
        fprintf(fid,'%d',tb);
    end
    fprintf(fid,'\r\n');
end
fprintf(fid,';');
fclose(fid);

由MATLAB滤波器设计工具生成的滤波器代码(进行了适当的修改)。值得注意的是需要保证滤波器处理速度与ADC采样频率一致。比如ADC采样频率设置为1.25MHz,那么采样间隔为800ns.这也就是意味着在800ns内Fir滤波器要完成一次滤波操作,并且也只能完成一次滤波操作。因此设置了datavalid用于提示滤波器可以开始处理数据。滤波器的处理时钟为300MHz.滤波器阶数为275阶,那么由于半串行操作需要进行137个时钟周期,而300MHz相对于1.25MHz是其240倍,所以可以在1.25MHz的采样频率间隔内,完成一次FIR滤波操作(卷积运算:乘法与累加)。每当完成一次FIR滤波操作后,应该关闭内部的滤波操作,因此需要增加一个内部用来指示开始滤波的寄存器Start_flag.具体代码如下:

// -------------------------------------------------------------
//
// Module: Fir_1_25M_20K_30K
// Generated by MATLAB(R) 9.13 and Filter Design HDL Coder 3.1.12.
// Generated on: 2024-10-27 13:22:44
// -------------------------------------------------------------

// -------------------------------------------------------------
// HDL Code Generation Options:
//
// TargetDirectory: D:\FPGA_MATLAB_Learning\PGC_FPGA_Realize\Sim\Fir_1_25M_20K_30K
// Name: Fir_1_25M_20K_30K
// SerialPartition: [138  138]
// TargetLanguage: Verilog
// TestBenchStimulus: impulse step ramp chirp noise 
// GenerateHDLTestBench: off

// -------------------------------------------------------------
// HDL Implementation    : Partly Serial
// Folding Factor        : 138
// -------------------------------------------------------------




`timescale 1 ns / 1 ns

module Fir_1_25M_20K_30K
               (
                clk,
                clk_enable,
                reset,
                filter_in,
				data_valid,
                filter_out,
				finish_flag
                );

  input   clk; 
  input   clk_enable;
  input	  data_valid;  
  input   reset; 
  input   signed [31:0] filter_in; //sfix32
  output  signed [51:0] filter_out; //sfix52_En19
  output  finish_flag;

////////////////////////////////////////////////////////////////
//Module Architecture: Fir_1_25M_20K_30K
////////////////////////////////////////////////////////////////
  // Local Functions
  // Type Definitions
  // Constants
  parameter signed [15:0] coeff1 = 16'b0000000101101110; //sfix16_En19
  parameter signed [15:0] coeff2 = 16'b0000000010010011; //sfix16_En19
  parameter signed [15:0] coeff3 = 16'b0000000010101111; //sfix16_En19
  parameter signed [15:0] coeff4 = 16'b0000000011001100; //sfix16_En19
  parameter signed [15:0] coeff5 = 16'b0000000011101011; //sfix16_En19
  parameter signed [15:0] coeff6 = 16'b0000000100001011; //sfix16_En19
  parameter signed [15:0] coeff7 = 16'b0000000100101100; //sfix16_En19
  parameter signed [15:0] coeff8 = 16'b0000000101001110; //sfix16_En19
  parameter signed [15:0] coeff9 = 16'b0000000101101111; //sfix16_En19
  parameter signed [15:0] coeff10 = 16'b0000000110010001; //sfix16_En19
  parameter signed [15:0] coeff11 = 16'b0000000110110001; //sfix16_En19
  parameter signed [15:0] coeff12 = 16'b0000000111010000; //sfix16_En19
  parameter signed [15:0] coeff13 = 16'b0000000111101100; //sfix16_En19
  parameter signed [15:0] coeff14 = 16'b0000001000000110; //sfix16_En19
  parameter signed [15:0] coeff15 = 16'b0000001000011101; //sfix16_En19
  parameter signed [15:0] coeff16 = 16'b0000001000101111; //sfix16_En19
  parameter signed [15:0] coeff17 = 16'b0000001000111101; //sfix16_En19
  parameter signed [15:0] coeff18 = 16'b0000001001000110; //sfix16_En19
  parameter signed [15:0] coeff19 = 16'b0000001001001010; //sfix16_En19
  parameter signed [15:0] coeff20 = 16'b0000001001000111; //sfix16_En19
  parameter signed [15:0] coeff21 = 16'b0000001000111101; //sfix16_En19
  parameter signed [15:0] coeff22 = 16'b0000001000101101; //sfix16_En19
  parameter signed [15:0] coeff23 = 16'b0000001000010101; //sfix16_En19
  parameter signed [15:0] coeff24 = 16'b0000000111110110; //sfix16_En19
  parameter signed [15:0] coeff25 = 16'b0000000111001111; //sfix16_En19
  parameter signed [15:0] coeff26 = 16'b0000000110100001; //sfix16_En19
  parameter signed [15:0] coeff27 = 16'b0000000101101011; //sfix16_En19
  parameter signed [15:0] coeff28 = 16'b0000000100101110; //sfix16_En19
  parameter signed [15:0] coeff29 = 16'b0000000011101010; //sfix16_En19
  parameter signed [15:0] coeff30 = 16'b0000000010100000; //sfix16_En19
  parameter signed [15:0] coeff31 = 16'b0000000001010000; //sfix16_En19
  parameter signed [15:0] coeff32 = 16'b1111111111111011; //sfix16_En19
  parameter signed [15:0] coeff33 = 16'b1111111110100010; //sfix16_En19
  parameter signed [15:0] coeff34 = 16'b1111111101000101; //sfix16_En19
  parameter signed [15:0] coeff35 = 16'b1111111011100110; //sfix16_En19
  parameter signed [15:0] coeff36 = 16'b1111111010000111; //sfix16_En19
  parameter signed [15:0] coeff37 = 16'b1111111000100111; //sfix16_En19
  parameter signed [15:0] coeff38 = 16'b1111110111001001; //sfix16_En19
  parameter signed [15:0] coeff39 = 16'b1111110101101110; //sfix16_En19
  parameter signed [15:0] coeff40 = 16'b1111110100011000; //sfix16_En19
  parameter signed [15:0] coeff41 = 16'b1111110011000111; //sfix16_En19
  parameter signed [15:0] coeff42 = 16'b1111110001111101; //sfix16_En19
  parameter signed [15:0] coeff43 = 16'b1111110000111100; //sfix16_En19
  parameter signed [15:0] coeff44 = 16'b1111110000000101; //sfix16_En19
  parameter signed [15:0] coeff45 = 16'b1111101111011001; //sfix16_En19
  parameter signed [15:0] coeff46 = 16'b1111101110111001; //sfix16_En19
  parameter signed [15:0] coeff47 = 16'b1111101110100111; //sfix16_En19
  parameter signed [15:0] coeff48 = 16'b1111101110100011; //sfix16_En19
  parameter signed [15:0] coeff49 = 16'b1111101110101110; //sfix16_En19
  parameter signed [15:0] coeff50 = 16'b1111101111001001; //sfix16_En19
  parameter signed [15:0] coeff51 = 16'b1111101111110011; //sfix16_En19
  parameter signed [15:0] coeff52 = 16'b1111110000101110; //sfix16_En19
  parameter signed [15:0] coeff53 = 16'b1111110001111001; //sfix16_En19
  parameter signed [15:0] coeff54 = 16'b1111110011010100; //sfix16_En19
  parameter signed [15:0] coeff55 = 16'b1111110100111110; //sfix16_En19
  parameter signed [15:0] coeff56 = 16'b1111110110110110; //sfix16_En19
  parameter signed [15:0] coeff57 = 16'b1111111000111011; //sfix16_En19
  parameter signed [15:0] coeff58 = 16'b1111111011001100; //sfix16_En19
  parameter signed [15:0] coeff59 = 16'b1111111101101000; //sfix16_En19
  parameter signed [15:0] coeff60 = 16'b0000000000001101; //sfix16_En19
  parameter signed [15:0] coeff61 = 16'b0000000010110111; //sfix16_En19
  parameter signed [15:0] coeff62 = 16'b0000000101100111; //sfix16_En19
  parameter signed [15:0] coeff63 = 16'b0000001000011000; //sfix16_En19
  parameter signed [15:0] coeff64 = 16'b0000001011001001; //sfix16_En19
  parameter signed [15:0] coeff65 = 16'b0000001101110110; //sfix16_En19
  parameter signed [15:0] coeff66 = 16'b0000010000011110; //sfix16_En19
  parameter signed [15:0] coeff67 = 16'b0000010010111101; //sfix16_En19
  parameter signed [15:0] coeff68 = 16'b0000010101010000; //sfix16_En19
  parameter signed [15:0] coeff69 = 16'b0000010111010110; //sfix16_En19
  parameter signed [15:0] coeff70 = 16'b0000011001001010; //sfix16_En19
  parameter signed [15:0] coeff71 = 16'b0000011010101011; //sfix16_En19
  parameter signed [15:0] coeff72 = 16'b0000011011110110; //sfix16_En19
  parameter signed [15:0] coeff73 = 16'b0000011100101001; //sfix16_En19
  parameter signed [15:0] coeff74 = 16'b0000011101000011; //sfix16_En19
  parameter signed [15:0] coeff75 = 16'b0000011101000000; //sfix16_En19
  parameter signed [15:0] coeff76 = 16'b0000011100100001; //sfix16_En19
  parameter signed [15:0] coeff77 = 16'b0000011011100011; //sfix16_En19
  parameter signed [15:0] coeff78 = 16'b0000011010000111; //sfix16_En19
  parameter signed [15:0] coeff79 = 16'b0000011000001100; //sfix16_En19
  parameter signed [15:0] coeff80 = 16'b0000010101110010; //sfix16_En19
  parameter signed [15:0] coeff81 = 16'b0000010010111011; //sfix16_En19
  parameter signed [15:0] coeff82 = 16'b0000001111100110; //sfix16_En19
  parameter signed [15:0] coeff83 = 16'b0000001011110111; //sfix16_En19
  parameter signed [15:0] coeff84 = 16'b0000000111101110; //sfix16_En19
  parameter signed [15:0] coeff85 = 16'b0000000011001111; //sfix16_En19
  parameter signed [15:0] coeff86 = 16'b1111111110011100; //sfix16_En19
  parameter signed [15:0] coeff87 = 16'b1111111001011001; //sfix16_En19
  parameter signed [15:0] coeff88 = 16'b1111110100001010; //sfix16_En19
  parameter signed [15:0] coeff89 = 16'b1111101110110010; //sfix16_En19
  parameter signed [15:0] coeff90 = 16'b1111101001010111; //sfix16_En19
  parameter signed [15:0] coeff91 = 16'b1111100011111110; //sfix16_En19
  parameter signed [15:0] coeff92 = 16'b1111011110101010; //sfix16_En19
  parameter signed [15:0] coeff93 = 16'b1111011001100010; //sfix16_En19
  parameter signed [15:0] coeff94 = 16'b1111010100101100; //sfix16_En19
  parameter signed [15:0] coeff95 = 16'b1111010000001011; //sfix16_En19
  parameter signed [15:0] coeff96 = 16'b1111001100000111; //sfix16_En19
  parameter signed [15:0] coeff97 = 16'b1111001000100100; //sfix16_En19
  parameter signed [15:0] coeff98 = 16'b1111000101100111; //sfix16_En19
  parameter signed [15:0] coeff99 = 16'b1111000011010110; //sfix16_En19
  parameter signed [15:0] coeff100 = 16'b1111000001110110; //sfix16_En19
  parameter signed [15:0] coeff101 = 16'b1111000001001010; //sfix16_En19
  parameter signed [15:0] coeff102 = 16'b1111000001010111; //sfix16_En19
  parameter signed [15:0] coeff103 = 16'b1111000010100001; //sfix16_En19
  parameter signed [15:0] coeff104 = 16'b1111000100101011; //sfix16_En19
  parameter signed [15:0] coeff105 = 16'b1111000111110111; //sfix16_En19
  parameter signed [15:0] coeff106 = 16'b1111001100000110; //sfix16_En19
  parameter signed [15:0] coeff107 = 16'b1111010001011100; //sfix16_En19
  parameter signed [15:0] coeff108 = 16'b1111010111110110; //sfix16_En19
  parameter signed [15:0] coeff109 = 16'b1111011111010111; //sfix16_En19
  parameter signed [15:0] coeff110 = 16'b1111100111111011; //sfix16_En19
  parameter signed [15:0] coeff111 = 16'b1111110001100011; //sfix16_En19
  parameter signed [15:0] coeff112 = 16'b1111111100001011; //sfix16_En19
  parameter signed [15:0] coeff113 = 16'b0000000111110001; //sfix16_En19
  parameter signed [15:0] coeff114 = 16'b0000010100010000; //sfix16_En19
  parameter signed [15:0] coeff115 = 16'b0000100001100011; //sfix16_En19
  parameter signed [15:0] coeff116 = 16'b0000101111100110; //sfix16_En19
  parameter signed [15:0] coeff117 = 16'b0000111110010011; //sfix16_En19
  parameter signed [15:0] coeff118 = 16'b0001001101100010; //sfix16_En19
  parameter signed [15:0] coeff119 = 16'b0001011101001101; //sfix16_En19
  parameter signed [15:0] coeff120 = 16'b0001101101001101; //sfix16_En19
  parameter signed [15:0] coeff121 = 16'b0001111101011010; //sfix16_En19
  parameter signed [15:0] coeff122 = 16'b0010001101101011; //sfix16_En19
  parameter signed [15:0] coeff123 = 16'b0010011101111001; //sfix16_En19
  parameter signed [15:0] coeff124 = 16'b0010101101111010; //sfix16_En19
  parameter signed [15:0] coeff125 = 16'b0010111101100110; //sfix16_En19
  parameter signed [15:0] coeff126 = 16'b0011001100110110; //sfix16_En19
  parameter signed [15:0] coeff127 = 16'b0011011011100000; //sfix16_En19
  parameter signed [15:0] coeff128 = 16'b0011101001011100; //sfix16_En19
  parameter signed [15:0] coeff129 = 16'b0011110110100011; //sfix16_En19
  parameter signed [15:0] coeff130 = 16'b0100000010101101; //sfix16_En19
  parameter signed [15:0] coeff131 = 16'b0100001101110011; //sfix16_En19
  parameter signed [15:0] coeff132 = 16'b0100010111101111; //sfix16_En19
  parameter signed [15:0] coeff133 = 16'b0100100000011100; //sfix16_En19
  parameter signed [15:0] coeff134 = 16'b0100100111110011; //sfix16_En19
  parameter signed [15:0] coeff135 = 16'b0100101101110010; //sfix16_En19
  parameter signed [15:0] coeff136 = 16'b0100110010010100; //sfix16_En19
  parameter signed [15:0] coeff137 = 16'b0100110101010111; //sfix16_En19
  parameter signed [15:0] coeff138 = 16'b0100110110111001; //sfix16_En19
  parameter signed [15:0] coeff139 = 16'b0100110110111001; //sfix16_En19
  parameter signed [15:0] coeff140 = 16'b0100110101010111; //sfix16_En19
  parameter signed [15:0] coeff141 = 16'b0100110010010100; //sfix16_En19
  parameter signed [15:0] coeff142 = 16'b0100101101110010; //sfix16_En19
  parameter signed [15:0] coeff143 = 16'b0100100111110011; //sfix16_En19
  parameter signed [15:0] coeff144 = 16'b0100100000011100; //sfix16_En19
  parameter signed [15:0] coeff145 = 16'b0100010111101111; //sfix16_En19
  parameter signed [15:0] coeff146 = 16'b0100001101110011; //sfix16_En19
  parameter signed [15:0] coeff147 = 16'b0100000010101101; //sfix16_En19
  parameter signed [15:0] coeff148 = 16'b0011110110100011; //sfix16_En19
  parameter signed [15:0] coeff149 = 16'b0011101001011100; //sfix16_En19
  parameter signed [15:0] coeff150 = 16'b0011011011100000; //sfix16_En19
  parameter signed [15:0] coeff151 = 16'b0011001100110110; //sfix16_En19
  parameter signed [15:0] coeff152 = 16'b0010111101100110; //sfix16_En19
  parameter signed [15:0] coeff153 = 16'b0010101101111010; //sfix16_En19
  parameter signed [15:0] coeff154 = 16'b0010011101111001; //sfix16_En19
  parameter signed [15:0] coeff155 = 16'b0010001101101011; //sfix16_En19
  parameter signed [15:0] coeff156 = 16'b0001111101011010; //sfix16_En19
  parameter signed [15:0] coeff157 = 16'b0001101101001101; //sfix16_En19
  parameter signed [15:0] coeff158 = 16'b0001011101001101; //sfix16_En19
  parameter signed [15:0] coeff159 = 16'b0001001101100010; //sfix16_En19
  parameter signed [15:0] coeff160 = 16'b0000111110010011; //sfix16_En19
  parameter signed [15:0] coeff161 = 16'b0000101111100110; //sfix16_En19
  parameter signed [15:0] coeff162 = 16'b0000100001100011; //sfix16_En19
  parameter signed [15:0] coeff163 = 16'b0000010100010000; //sfix16_En19
  parameter signed [15:0] coeff164 = 16'b0000000111110001; //sfix16_En19
  parameter signed [15:0] coeff165 = 16'b1111111100001011; //sfix16_En19
  parameter signed [15:0] coeff166 = 16'b1111110001100011; //sfix16_En19
  parameter signed [15:0] coeff167 = 16'b1111100111111011; //sfix16_En19
  parameter signed [15:0] coeff168 = 16'b1111011111010111; //sfix16_En19
  parameter signed [15:0] coeff169 = 16'b1111010111110110; //sfix16_En19
  parameter signed [15:0] coeff170 = 16'b1111010001011100; //sfix16_En19
  parameter signed [15:0] coeff171 = 16'b1111001100000110; //sfix16_En19
  parameter signed [15:0] coeff172 = 16'b1111000111110111; //sfix16_En19
  parameter signed [15:0] coeff173 = 16'b1111000100101011; //sfix16_En19
  parameter signed [15:0] coeff174 = 16'b1111000010100001; //sfix16_En19
  parameter signed [15:0] coeff175 = 16'b1111000001010111; //sfix16_En19
  parameter signed [15:0] coeff176 = 16'b1111000001001010; //sfix16_En19
  parameter signed [15:0] coeff177 = 16'b1111000001110110; //sfix16_En19
  parameter signed [15:0] coeff178 = 16'b1111000011010110; //sfix16_En19
  parameter signed [15:0] coeff179 = 16'b1111000101100111; //sfix16_En19
  parameter signed [15:0] coeff180 = 16'b1111001000100100; //sfix16_En19
  parameter signed [15:0] coeff181 = 16'b1111001100000111; //sfix16_En19
  parameter signed [15:0] coeff182 = 16'b1111010000001011; //sfix16_En19
  parameter signed [15:0] coeff183 = 16'b1111010100101100; //sfix16_En19
  parameter signed [15:0] coeff184 = 16'b1111011001100010; //sfix16_En19
  parameter signed [15:0] coeff185 = 16'b1111011110101010; //sfix16_En19
  parameter signed [15:0] coeff186 = 16'b1111100011111110; //sfix16_En19
  parameter signed [15:0] coeff187 = 16'b1111101001010111; //sfix16_En19
  parameter signed [15:0] coeff188 = 16'b1111101110110010; //sfix16_En19
  parameter signed [15:0] coeff189 = 16'b1111110100001010; //sfix16_En19
  parameter signed [15:0] coeff190 = 16'b1111111001011001; //sfix16_En19
  parameter signed [15:0] coeff191 = 16'b1111111110011100; //sfix16_En19
  parameter signed [15:0] coeff192 = 16'b0000000011001111; //sfix16_En19
  parameter signed [15:0] coeff193 = 16'b0000000111101110; //sfix16_En19
  parameter signed [15:0] coeff194 = 16'b0000001011110111; //sfix16_En19
  parameter signed [15:0] coeff195 = 16'b0000001111100110; //sfix16_En19
  parameter signed [15:0] coeff196 = 16'b0000010010111011; //sfix16_En19
  parameter signed [15:0] coeff197 = 16'b0000010101110010; //sfix16_En19
  parameter signed [15:0] coeff198 = 16'b0000011000001100; //sfix16_En19
  parameter signed [15:0] coeff199 = 16'b0000011010000111; //sfix16_En19
  parameter signed [15:0] coeff200 = 16'b0000011011100011; //sfix16_En19
  parameter signed [15:0] coeff201 = 16'b0000011100100001; //sfix16_En19
  parameter signed [15:0] coeff202 = 16'b0000011101000000; //sfix16_En19
  parameter signed [15:0] coeff203 = 16'b0000011101000011; //sfix16_En19
  parameter signed [15:0] coeff204 = 16'b0000011100101001; //sfix16_En19
  parameter signed [15:0] coeff205 = 16'b0000011011110110; //sfix16_En19
  parameter signed [15:0] coeff206 = 16'b0000011010101011; //sfix16_En19
  parameter signed [15:0] coeff207 = 16'b0000011001001010; //sfix16_En19
  parameter signed [15:0] coeff208 = 16'b0000010111010110; //sfix16_En19
  parameter signed [15:0] coeff209 = 16'b0000010101010000; //sfix16_En19
  parameter signed [15:0] coeff210 = 16'b0000010010111101; //sfix16_En19
  parameter signed [15:0] coeff211 = 16'b0000010000011110; //sfix16_En19
  parameter signed [15:0] coeff212 = 16'b0000001101110110; //sfix16_En19
  parameter signed [15:0] coeff213 = 16'b0000001011001001; //sfix16_En19
  parameter signed [15:0] coeff214 = 16'b0000001000011000; //sfix16_En19
  parameter signed [15:0] coeff215 = 16'b0000000101100111; //sfix16_En19
  parameter signed [15:0] coeff216 = 16'b0000000010110111; //sfix16_En19
  parameter signed [15:0] coeff217 = 16'b0000000000001101; //sfix16_En19
  parameter signed [15:0] coeff218 = 16'b1111111101101000; //sfix16_En19
  parameter signed [15:0] coeff219 = 16'b1111111011001100; //sfix16_En19
  parameter signed [15:0] coeff220 = 16'b1111111000111011; //sfix16_En19
  parameter signed [15:0] coeff221 = 16'b1111110110110110; //sfix16_En19
  parameter signed [15:0] coeff222 = 16'b1111110100111110; //sfix16_En19
  parameter signed [15:0] coeff223 = 16'b1111110011010100; //sfix16_En19
  parameter signed [15:0] coeff224 = 16'b1111110001111001; //sfix16_En19
  parameter signed [15:0] coeff225 = 16'b1111110000101110; //sfix16_En19
  parameter signed [15:0] coeff226 = 16'b1111101111110011; //sfix16_En19
  parameter signed [15:0] coeff227 = 16'b1111101111001001; //sfix16_En19
  parameter signed [15:0] coeff228 = 16'b1111101110101110; //sfix16_En19
  parameter signed [15:0] coeff229 = 16'b1111101110100011; //sfix16_En19
  parameter signed [15:0] coeff230 = 16'b1111101110100111; //sfix16_En19
  parameter signed [15:0] coeff231 = 16'b1111101110111001; //sfix16_En19
  parameter signed [15:0] coeff232 = 16'b1111101111011001; //sfix16_En19
  parameter signed [15:0] coeff233 = 16'b1111110000000101; //sfix16_En19
  parameter signed [15:0] coeff234 = 16'b1111110000111100; //sfix16_En19
  parameter signed [15:0] coeff235 = 16'b1111110001111101; //sfix16_En19
  parameter signed [15:0] coeff236 = 16'b1111110011000111; //sfix16_En19
  parameter signed [15:0] coeff237 = 16'b1111110100011000; //sfix16_En19
  parameter signed [15:0] coeff238 = 16'b1111110101101110; //sfix16_En19
  parameter signed [15:0] coeff239 = 16'b1111110111001001; //sfix16_En19
  parameter signed [15:0] coeff240 = 16'b1111111000100111; //sfix16_En19
  parameter signed [15:0] coeff241 = 16'b1111111010000111; //sfix16_En19
  parameter signed [15:0] coeff242 = 16'b1111111011100110; //sfix16_En19
  parameter signed [15:0] coeff243 = 16'b1111111101000101; //sfix16_En19
  parameter signed [15:0] coeff244 = 16'b1111111110100010; //sfix16_En19
  parameter signed [15:0] coeff245 = 16'b1111111111111011; //sfix16_En19
  parameter signed [15:0] coeff246 = 16'b0000000001010000; //sfix16_En19
  parameter signed [15:0] coeff247 = 16'b0000000010100000; //sfix16_En19
  parameter signed [15:0] coeff248 = 16'b0000000011101010; //sfix16_En19
  parameter signed [15:0] coeff249 = 16'b0000000100101110; //sfix16_En19
  parameter signed [15:0] coeff250 = 16'b0000000101101011; //sfix16_En19
  parameter signed [15:0] coeff251 = 16'b0000000110100001; //sfix16_En19
  parameter signed [15:0] coeff252 = 16'b0000000111001111; //sfix16_En19
  parameter signed [15:0] coeff253 = 16'b0000000111110110; //sfix16_En19
  parameter signed [15:0] coeff254 = 16'b0000001000010101; //sfix16_En19
  parameter signed [15:0] coeff255 = 16'b0000001000101101; //sfix16_En19
  parameter signed [15:0] coeff256 = 16'b0000001000111101; //sfix16_En19
  parameter signed [15:0] coeff257 = 16'b0000001001000111; //sfix16_En19
  parameter signed [15:0] coeff258 = 16'b0000001001001010; //sfix16_En19
  parameter signed [15:0] coeff259 = 16'b0000001001000110; //sfix16_En19
  parameter signed [15:0] coeff260 = 16'b0000001000111101; //sfix16_En19
  parameter signed [15:0] coeff261 = 16'b0000001000101111; //sfix16_En19
  parameter signed [15:0] coeff262 = 16'b0000001000011101; //sfix16_En19
  parameter signed [15:0] coeff263 = 16'b0000001000000110; //sfix16_En19
  parameter signed [15:0] coeff264 = 16'b0000000111101100; //sfix16_En19
  parameter signed [15:0] coeff265 = 16'b0000000111010000; //sfix16_En19
  parameter signed [15:0] coeff266 = 16'b0000000110110001; //sfix16_En19
  parameter signed [15:0] coeff267 = 16'b0000000110010001; //sfix16_En19
  parameter signed [15:0] coeff268 = 16'b0000000101101111; //sfix16_En19
  parameter signed [15:0] coeff269 = 16'b0000000101001110; //sfix16_En19
  parameter signed [15:0] coeff270 = 16'b0000000100101100; //sfix16_En19
  parameter signed [15:0] coeff271 = 16'b0000000100001011; //sfix16_En19
  parameter signed [15:0] coeff272 = 16'b0000000011101011; //sfix16_En19
  parameter signed [15:0] coeff273 = 16'b0000000011001100; //sfix16_En19
  parameter signed [15:0] coeff274 = 16'b0000000010101111; //sfix16_En19
  parameter signed [15:0] coeff275 = 16'b0000000010010011; //sfix16_En19
  parameter signed [15:0] coeff276 = 16'b0000000101101110; //sfix16_En19

  // Signals
  reg  [7:0] cur_count; // ufix8
  reg	Start_flag;
  wire phase_137; // boolean
  wire phase_0; // boolean
  reg  signed [31:0] delay_pipeline [0:275] ; // sfix32
  wire signed [31:0] inputmux_1; // sfix32
  wire signed [31:0] inputmux_2; // sfix32
  reg  signed [51:0] acc_final; // sfix52_En19
  reg  signed [51:0] acc_out_1; // sfix52_En19
  wire signed [46:0] product_1; // sfix47_En19
  wire signed [15:0] product_1_mux; // sfix16_En19
  wire signed [47:0] mul_temp; // sfix48_En19
  wire signed [51:0] prod_typeconvert_1; // sfix52_En19
  wire signed [51:0] acc_sum_1; // sfix52_En19
  wire signed [51:0] acc_in_1; // sfix52_En19
  wire signed [51:0] add_signext; // sfix52_En19
  wire signed [51:0] add_signext_1; // sfix52_En19
  wire signed [52:0] add_temp; // sfix53_En19
  reg  signed [51:0] acc_out_2; // sfix52_En19
  wire signed [46:0] product_2; // sfix47_En19
  wire signed [15:0] product_2_mux; // sfix16_En19
  wire signed [47:0] mul_temp_1; // sfix48_En19
  wire signed [51:0] prod_typeconvert_2; // sfix52_En19
  wire signed [51:0] acc_sum_2; // sfix52_En19
  wire signed [51:0] acc_in_2; // sfix52_En19
  wire signed [51:0] add_signext_2; // sfix52_En19
  wire signed [51:0] add_signext_3; // sfix52_En19
  wire signed [52:0] add_temp_1; // sfix53_En19
  wire signed [51:0] sum1; // sfix52_En19
  wire signed [51:0] add_signext_4; // sfix52_En19
  wire signed [51:0] add_signext_5; // sfix52_En19
  wire signed [52:0] add_temp_2; // sfix53_En19
  reg  signed [51:0] output_register; // sfix52_En19
  
  //处理标志
  always@(posedge clk or posedge reset)
  begin
	if(reset)
		Start_flag <= 1'b0;
	else if(data_valid == 1'b1)
		Start_flag <= 1'b1;
	else if(cur_count >= 8'b10001001)
		Start_flag <= 1'b0;
  end

  // Block Statements
  always @ (posedge clk or posedge reset)
    begin: Counter_process
      if (reset == 1'b1) begin
        cur_count <= 8'b10001001;
      end
      else begin
        if (clk_enable == 1'b1) begin
          if (cur_count >= 8'b10001001) begin
            cur_count <= 8'b00000000;
          end
          else if(Start_flag == 1'b1)  begin
            cur_count <= cur_count + 8'b00000001;
          end
        end
      end
    end // Counter_process

  assign  phase_137 = (cur_count == 8'b10001001 && clk_enable == 1'b1) ? 1'b1 : 1'b0;

  assign  phase_0 = (cur_count == 8'b00000000 && clk_enable == 1'b1 && Start_flag==1'b1) ? 1'b1 : 1'b0;

  assign  finish_flag = (phase_137 == 1'b1) ? 1'b1 : 1'b0 ;
  
  always @( posedge clk or posedge reset)
    begin: Delay_Pipeline_process
      if (reset == 1'b1) begin
        delay_pipeline[0] <= 0;
        delay_pipeline[1] <= 0;
        delay_pipeline[2] <= 0;
        delay_pipeline[3] <= 0;
        delay_pipeline[4] <= 0;
        delay_pipeline[5] <= 0;
        delay_pipeline[6] <= 0;
        delay_pipeline[7] <= 0;
        delay_pipeline[8] <= 0;
        delay_pipeline[9] <= 0;
        delay_pipeline[10] <= 0;
        delay_pipeline[11] <= 0;
        delay_pipeline[12] <= 0;
        delay_pipeline[13] <= 0;
        delay_pipeline[14] <= 0;
        delay_pipeline[15] <= 0;
        delay_pipeline[16] <= 0;
        delay_pipeline[17] <= 0;
        delay_pipeline[18] <= 0;
        delay_pipeline[19] <= 0;
        delay_pipeline[20] <= 0;
        delay_pipeline[21] <= 0;
        delay_pipeline[22] <= 0;
        delay_pipeline[23] <= 0;
        delay_pipeline[24] <= 0;
        delay_pipeline[25] <= 0;
        delay_pipeline[26] <= 0;
        delay_pipeline[27] <= 0;
        delay_pipeline[28] <= 0;
        delay_pipeline[29] <= 0;
        delay_pipeline[30] <= 0;
        delay_pipeline[31] <= 0;
        delay_pipeline[32] <= 0;
        delay_pipeline[33] <= 0;
        delay_pipeline[34] <= 0;
        delay_pipeline[35] <= 0;
        delay_pipeline[36] <= 0;
        delay_pipeline[37] <= 0;
        delay_pipeline[38] <= 0;
        delay_pipeline[39] <= 0;
        delay_pipeline[40] <= 0;
        delay_pipeline[41] <= 0;
        delay_pipeline[42] <= 0;
        delay_pipeline[43] <= 0;
        delay_pipeline[44] <= 0;
        delay_pipeline[45] <= 0;
        delay_pipeline[46] <= 0;
        delay_pipeline[47] <= 0;
        delay_pipeline[48] <= 0;
        delay_pipeline[49] <= 0;
        delay_pipeline[50] <= 0;
        delay_pipeline[51] <= 0;
        delay_pipeline[52] <= 0;
        delay_pipeline[53] <= 0;
        delay_pipeline[54] <= 0;
        delay_pipeline[55] <= 0;
        delay_pipeline[56] <= 0;
        delay_pipeline[57] <= 0;
        delay_pipeline[58] <= 0;
        delay_pipeline[59] <= 0;
        delay_pipeline[60] <= 0;
        delay_pipeline[61] <= 0;
        delay_pipeline[62] <= 0;
        delay_pipeline[63] <= 0;
        delay_pipeline[64] <= 0;
        delay_pipeline[65] <= 0;
        delay_pipeline[66] <= 0;
        delay_pipeline[67] <= 0;
        delay_pipeline[68] <= 0;
        delay_pipeline[69] <= 0;
        delay_pipeline[70] <= 0;
        delay_pipeline[71] <= 0;
        delay_pipeline[72] <= 0;
        delay_pipeline[73] <= 0;
        delay_pipeline[74] <= 0;
        delay_pipeline[75] <= 0;
        delay_pipeline[76] <= 0;
        delay_pipeline[77] <= 0;
        delay_pipeline[78] <= 0;
        delay_pipeline[79] <= 0;
        delay_pipeline[80] <= 0;
        delay_pipeline[81] <= 0;
        delay_pipeline[82] <= 0;
        delay_pipeline[83] <= 0;
        delay_pipeline[84] <= 0;
        delay_pipeline[85] <= 0;
        delay_pipeline[86] <= 0;
        delay_pipeline[87] <= 0;
        delay_pipeline[88] <= 0;
        delay_pipeline[89] <= 0;
        delay_pipeline[90] <= 0;
        delay_pipeline[91] <= 0;
        delay_pipeline[92] <= 0;
        delay_pipeline[93] <= 0;
        delay_pipeline[94] <= 0;
        delay_pipeline[95] <= 0;
        delay_pipeline[96] <= 0;
        delay_pipeline[97] <= 0;
        delay_pipeline[98] <= 0;
        delay_pipeline[99] <= 0;
        delay_pipeline[100] <= 0;
        delay_pipeline[101] <= 0;
        delay_pipeline[102] <= 0;
        delay_pipeline[103] <= 0;
        delay_pipeline[104] <= 0;
        delay_pipeline[105] <= 0;
        delay_pipeline[106] <= 0;
        delay_pipeline[107] <= 0;
        delay_pipeline[108] <= 0;
        delay_pipeline[109] <= 0;
        delay_pipeline[110] <= 0;
        delay_pipeline[111] <= 0;
        delay_pipeline[112] <= 0;
        delay_pipeline[113] <= 0;
        delay_pipeline[114] <= 0;
        delay_pipeline[115] <= 0;
        delay_pipeline[116] <= 0;
        delay_pipeline[117] <= 0;
        delay_pipeline[118] <= 0;
        delay_pipeline[119] <= 0;
        delay_pipeline[120] <= 0;
        delay_pipeline[121] <= 0;
        delay_pipeline[122] <= 0;
        delay_pipeline[123] <= 0;
        delay_pipeline[124] <= 0;
        delay_pipeline[125] <= 0;
        delay_pipeline[126] <= 0;
        delay_pipeline[127] <= 0;
        delay_pipeline[128] <= 0;
        delay_pipeline[129] <= 0;
        delay_pipeline[130] <= 0;
        delay_pipeline[131] <= 0;
        delay_pipeline[132] <= 0;
        delay_pipeline[133] <= 0;
        delay_pipeline[134] <= 0;
        delay_pipeline[135] <= 0;
        delay_pipeline[136] <= 0;
        delay_pipeline[137] <= 0;
        delay_pipeline[138] <= 0;
        delay_pipeline[139] <= 0;
        delay_pipeline[140] <= 0;
        delay_pipeline[141] <= 0;
        delay_pipeline[142] <= 0;
        delay_pipeline[143] <= 0;
        delay_pipeline[144] <= 0;
        delay_pipeline[145] <= 0;
        delay_pipeline[146] <= 0;
        delay_pipeline[147] <= 0;
        delay_pipeline[148] <= 0;
        delay_pipeline[149] <= 0;
        delay_pipeline[150] <= 0;
        delay_pipeline[151] <= 0;
        delay_pipeline[152] <= 0;
        delay_pipeline[153] <= 0;
        delay_pipeline[154] <= 0;
        delay_pipeline[155] <= 0;
        delay_pipeline[156] <= 0;
        delay_pipeline[157] <= 0;
        delay_pipeline[158] <= 0;
        delay_pipeline[159] <= 0;
        delay_pipeline[160] <= 0;
        delay_pipeline[161] <= 0;
        delay_pipeline[162] <= 0;
        delay_pipeline[163] <= 0;
        delay_pipeline[164] <= 0;
        delay_pipeline[165] <= 0;
        delay_pipeline[166] <= 0;
        delay_pipeline[167] <= 0;
        delay_pipeline[168] <= 0;
        delay_pipeline[169] <= 0;
        delay_pipeline[170] <= 0;
        delay_pipeline[171] <= 0;
        delay_pipeline[172] <= 0;
        delay_pipeline[173] <= 0;
        delay_pipeline[174] <= 0;
        delay_pipeline[175] <= 0;
        delay_pipeline[176] <= 0;
        delay_pipeline[177] <= 0;
        delay_pipeline[178] <= 0;
        delay_pipeline[179] <= 0;
        delay_pipeline[180] <= 0;
        delay_pipeline[181] <= 0;
        delay_pipeline[182] <= 0;
        delay_pipeline[183] <= 0;
        delay_pipeline[184] <= 0;
        delay_pipeline[185] <= 0;
        delay_pipeline[186] <= 0;
        delay_pipeline[187] <= 0;
        delay_pipeline[188] <= 0;
        delay_pipeline[189] <= 0;
        delay_pipeline[190] <= 0;
        delay_pipeline[191] <= 0;
        delay_pipeline[192] <= 0;
        delay_pipeline[193] <= 0;
        delay_pipeline[194] <= 0;
        delay_pipeline[195] <= 0;
        delay_pipeline[196] <= 0;
        delay_pipeline[197] <= 0;
        delay_pipeline[198] <= 0;
        delay_pipeline[199] <= 0;
        delay_pipeline[200] <= 0;
        delay_pipeline[201] <= 0;
        delay_pipeline[202] <= 0;
        delay_pipeline[203] <= 0;
        delay_pipeline[204] <= 0;
        delay_pipeline[205] <= 0;
        delay_pipeline[206] <= 0;
        delay_pipeline[207] <= 0;
        delay_pipeline[208] <= 0;
        delay_pipeline[209] <= 0;
        delay_pipeline[210] <= 0;
        delay_pipeline[211] <= 0;
        delay_pipeline[212] <= 0;
        delay_pipeline[213] <= 0;
        delay_pipeline[214] <= 0;
        delay_pipeline[215] <= 0;
        delay_pipeline[216] <= 0;
        delay_pipeline[217] <= 0;
        delay_pipeline[218] <= 0;
        delay_pipeline[219] <= 0;
        delay_pipeline[220] <= 0;
        delay_pipeline[221] <= 0;
        delay_pipeline[222] <= 0;
        delay_pipeline[223] <= 0;
        delay_pipeline[224] <= 0;
        delay_pipeline[225] <= 0;
        delay_pipeline[226] <= 0;
        delay_pipeline[227] <= 0;
        delay_pipeline[228] <= 0;
        delay_pipeline[229] <= 0;
        delay_pipeline[230] <= 0;
        delay_pipeline[231] <= 0;
        delay_pipeline[232] <= 0;
        delay_pipeline[233] <= 0;
        delay_pipeline[234] <= 0;
        delay_pipeline[235] <= 0;
        delay_pipeline[236] <= 0;
        delay_pipeline[237] <= 0;
        delay_pipeline[238] <= 0;
        delay_pipeline[239] <= 0;
        delay_pipeline[240] <= 0;
        delay_pipeline[241] <= 0;
        delay_pipeline[242] <= 0;
        delay_pipeline[243] <= 0;
        delay_pipeline[244] <= 0;
        delay_pipeline[245] <= 0;
        delay_pipeline[246] <= 0;
        delay_pipeline[247] <= 0;
        delay_pipeline[248] <= 0;
        delay_pipeline[249] <= 0;
        delay_pipeline[250] <= 0;
        delay_pipeline[251] <= 0;
        delay_pipeline[252] <= 0;
        delay_pipeline[253] <= 0;
        delay_pipeline[254] <= 0;
        delay_pipeline[255] <= 0;
        delay_pipeline[256] <= 0;
        delay_pipeline[257] <= 0;
        delay_pipeline[258] <= 0;
        delay_pipeline[259] <= 0;
        delay_pipeline[260] <= 0;
        delay_pipeline[261] <= 0;
        delay_pipeline[262] <= 0;
        delay_pipeline[263] <= 0;
        delay_pipeline[264] <= 0;
        delay_pipeline[265] <= 0;
        delay_pipeline[266] <= 0;
        delay_pipeline[267] <= 0;
        delay_pipeline[268] <= 0;
        delay_pipeline[269] <= 0;
        delay_pipeline[270] <= 0;
        delay_pipeline[271] <= 0;
        delay_pipeline[272] <= 0;
        delay_pipeline[273] <= 0;
        delay_pipeline[274] <= 0;
        delay_pipeline[275] <= 0;
      end
      else begin
        if (phase_137 == 1'b1) begin
          delay_pipeline[0] <= filter_in;
          delay_pipeline[1] <= delay_pipeline[0];
          delay_pipeline[2] <= delay_pipeline[1];
          delay_pipeline[3] <= delay_pipeline[2];
          delay_pipeline[4] <= delay_pipeline[3];
          delay_pipeline[5] <= delay_pipeline[4];
          delay_pipeline[6] <= delay_pipeline[5];
          delay_pipeline[7] <= delay_pipeline[6];
          delay_pipeline[8] <= delay_pipeline[7];
          delay_pipeline[9] <= delay_pipeline[8];
          delay_pipeline[10] <= delay_pipeline[9];
          delay_pipeline[11] <= delay_pipeline[10];
          delay_pipeline[12] <= delay_pipeline[11];
          delay_pipeline[13] <= delay_pipeline[12];
          delay_pipeline[14] <= delay_pipeline[13];
          delay_pipeline[15] <= delay_pipeline[14];
          delay_pipeline[16] <= delay_pipeline[15];
          delay_pipeline[17] <= delay_pipeline[16];
          delay_pipeline[18] <= delay_pipeline[17];
          delay_pipeline[19] <= delay_pipeline[18];
          delay_pipeline[20] <= delay_pipeline[19];
          delay_pipeline[21] <= delay_pipeline[20];
          delay_pipeline[22] <= delay_pipeline[21];
          delay_pipeline[23] <= delay_pipeline[22];
          delay_pipeline[24] <= delay_pipeline[23];
          delay_pipeline[25] <= delay_pipeline[24];
          delay_pipeline[26] <= delay_pipeline[25];
          delay_pipeline[27] <= delay_pipeline[26];
          delay_pipeline[28] <= delay_pipeline[27];
          delay_pipeline[29] <= delay_pipeline[28];
          delay_pipeline[30] <= delay_pipeline[29];
          delay_pipeline[31] <= delay_pipeline[30];
          delay_pipeline[32] <= delay_pipeline[31];
          delay_pipeline[33] <= delay_pipeline[32];
          delay_pipeline[34] <= delay_pipeline[33];
          delay_pipeline[35] <= delay_pipeline[34];
          delay_pipeline[36] <= delay_pipeline[35];
          delay_pipeline[37] <= delay_pipeline[36];
          delay_pipeline[38] <= delay_pipeline[37];
          delay_pipeline[39] <= delay_pipeline[38];
          delay_pipeline[40] <= delay_pipeline[39];
          delay_pipeline[41] <= delay_pipeline[40];
          delay_pipeline[42] <= delay_pipeline[41];
          delay_pipeline[43] <= delay_pipeline[42];
          delay_pipeline[44] <= delay_pipeline[43];
          delay_pipeline[45] <= delay_pipeline[44];
          delay_pipeline[46] <= delay_pipeline[45];
          delay_pipeline[47] <= delay_pipeline[46];
          delay_pipeline[48] <= delay_pipeline[47];
          delay_pipeline[49] <= delay_pipeline[48];
          delay_pipeline[50] <= delay_pipeline[49];
          delay_pipeline[51] <= delay_pipeline[50];
          delay_pipeline[52] <= delay_pipeline[51];
          delay_pipeline[53] <= delay_pipeline[52];
          delay_pipeline[54] <= delay_pipeline[53];
          delay_pipeline[55] <= delay_pipeline[54];
          delay_pipeline[56] <= delay_pipeline[55];
          delay_pipeline[57] <= delay_pipeline[56];
          delay_pipeline[58] <= delay_pipeline[57];
          delay_pipeline[59] <= delay_pipeline[58];
          delay_pipeline[60] <= delay_pipeline[59];
          delay_pipeline[61] <= delay_pipeline[60];
          delay_pipeline[62] <= delay_pipeline[61];
          delay_pipeline[63] <= delay_pipeline[62];
          delay_pipeline[64] <= delay_pipeline[63];
          delay_pipeline[65] <= delay_pipeline[64];
          delay_pipeline[66] <= delay_pipeline[65];
          delay_pipeline[67] <= delay_pipeline[66];
          delay_pipeline[68] <= delay_pipeline[67];
          delay_pipeline[69] <= delay_pipeline[68];
          delay_pipeline[70] <= delay_pipeline[69];
          delay_pipeline[71] <= delay_pipeline[70];
          delay_pipeline[72] <= delay_pipeline[71];
          delay_pipeline[73] <= delay_pipeline[72];
          delay_pipeline[74] <= delay_pipeline[73];
          delay_pipeline[75] <= delay_pipeline[74];
          delay_pipeline[76] <= delay_pipeline[75];
          delay_pipeline[77] <= delay_pipeline[76];
          delay_pipeline[78] <= delay_pipeline[77];
          delay_pipeline[79] <= delay_pipeline[78];
          delay_pipeline[80] <= delay_pipeline[79];
          delay_pipeline[81] <= delay_pipeline[80];
          delay_pipeline[82] <= delay_pipeline[81];
          delay_pipeline[83] <= delay_pipeline[82];
          delay_pipeline[84] <= delay_pipeline[83];
          delay_pipeline[85] <= delay_pipeline[84];
          delay_pipeline[86] <= delay_pipeline[85];
          delay_pipeline[87] <= delay_pipeline[86];
          delay_pipeline[88] <= delay_pipeline[87];
          delay_pipeline[89] <= delay_pipeline[88];
          delay_pipeline[90] <= delay_pipeline[89];
          delay_pipeline[91] <= delay_pipeline[90];
          delay_pipeline[92] <= delay_pipeline[91];
          delay_pipeline[93] <= delay_pipeline[92];
          delay_pipeline[94] <= delay_pipeline[93];
          delay_pipeline[95] <= delay_pipeline[94];
          delay_pipeline[96] <= delay_pipeline[95];
          delay_pipeline[97] <= delay_pipeline[96];
          delay_pipeline[98] <= delay_pipeline[97];
          delay_pipeline[99] <= delay_pipeline[98];
          delay_pipeline[100] <= delay_pipeline[99];
          delay_pipeline[101] <= delay_pipeline[100];
          delay_pipeline[102] <= delay_pipeline[101];
          delay_pipeline[103] <= delay_pipeline[102];
          delay_pipeline[104] <= delay_pipeline[103];
          delay_pipeline[105] <= delay_pipeline[104];
          delay_pipeline[106] <= delay_pipeline[105];
          delay_pipeline[107] <= delay_pipeline[106];
          delay_pipeline[108] <= delay_pipeline[107];
          delay_pipeline[109] <= delay_pipeline[108];
          delay_pipeline[110] <= delay_pipeline[109];
          delay_pipeline[111] <= delay_pipeline[110];
          delay_pipeline[112] <= delay_pipeline[111];
          delay_pipeline[113] <= delay_pipeline[112];
          delay_pipeline[114] <= delay_pipeline[113];
          delay_pipeline[115] <= delay_pipeline[114];
          delay_pipeline[116] <= delay_pipeline[115];
          delay_pipeline[117] <= delay_pipeline[116];
          delay_pipeline[118] <= delay_pipeline[117];
          delay_pipeline[119] <= delay_pipeline[118];
          delay_pipeline[120] <= delay_pipeline[119];
          delay_pipeline[121] <= delay_pipeline[120];
          delay_pipeline[122] <= delay_pipeline[121];
          delay_pipeline[123] <= delay_pipeline[122];
          delay_pipeline[124] <= delay_pipeline[123];
          delay_pipeline[125] <= delay_pipeline[124];
          delay_pipeline[126] <= delay_pipeline[125];
          delay_pipeline[127] <= delay_pipeline[126];
          delay_pipeline[128] <= delay_pipeline[127];
          delay_pipeline[129] <= delay_pipeline[128];
          delay_pipeline[130] <= delay_pipeline[129];
          delay_pipeline[131] <= delay_pipeline[130];
          delay_pipeline[132] <= delay_pipeline[131];
          delay_pipeline[133] <= delay_pipeline[132];
          delay_pipeline[134] <= delay_pipeline[133];
          delay_pipeline[135] <= delay_pipeline[134];
          delay_pipeline[136] <= delay_pipeline[135];
          delay_pipeline[137] <= delay_pipeline[136];
          delay_pipeline[138] <= delay_pipeline[137];
          delay_pipeline[139] <= delay_pipeline[138];
          delay_pipeline[140] <= delay_pipeline[139];
          delay_pipeline[141] <= delay_pipeline[140];
          delay_pipeline[142] <= delay_pipeline[141];
          delay_pipeline[143] <= delay_pipeline[142];
          delay_pipeline[144] <= delay_pipeline[143];
          delay_pipeline[145] <= delay_pipeline[144];
          delay_pipeline[146] <= delay_pipeline[145];
          delay_pipeline[147] <= delay_pipeline[146];
          delay_pipeline[148] <= delay_pipeline[147];
          delay_pipeline[149] <= delay_pipeline[148];
          delay_pipeline[150] <= delay_pipeline[149];
          delay_pipeline[151] <= delay_pipeline[150];
          delay_pipeline[152] <= delay_pipeline[151];
          delay_pipeline[153] <= delay_pipeline[152];
          delay_pipeline[154] <= delay_pipeline[153];
          delay_pipeline[155] <= delay_pipeline[154];
          delay_pipeline[156] <= delay_pipeline[155];
          delay_pipeline[157] <= delay_pipeline[156];
          delay_pipeline[158] <= delay_pipeline[157];
          delay_pipeline[159] <= delay_pipeline[158];
          delay_pipeline[160] <= delay_pipeline[159];
          delay_pipeline[161] <= delay_pipeline[160];
          delay_pipeline[162] <= delay_pipeline[161];
          delay_pipeline[163] <= delay_pipeline[162];
          delay_pipeline[164] <= delay_pipeline[163];
          delay_pipeline[165] <= delay_pipeline[164];
          delay_pipeline[166] <= delay_pipeline[165];
          delay_pipeline[167] <= delay_pipeline[166];
          delay_pipeline[168] <= delay_pipeline[167];
          delay_pipeline[169] <= delay_pipeline[168];
          delay_pipeline[170] <= delay_pipeline[169];
          delay_pipeline[171] <= delay_pipeline[170];
          delay_pipeline[172] <= delay_pipeline[171];
          delay_pipeline[173] <= delay_pipeline[172];
          delay_pipeline[174] <= delay_pipeline[173];
          delay_pipeline[175] <= delay_pipeline[174];
          delay_pipeline[176] <= delay_pipeline[175];
          delay_pipeline[177] <= delay_pipeline[176];
          delay_pipeline[178] <= delay_pipeline[177];
          delay_pipeline[179] <= delay_pipeline[178];
          delay_pipeline[180] <= delay_pipeline[179];
          delay_pipeline[181] <= delay_pipeline[180];
          delay_pipeline[182] <= delay_pipeline[181];
          delay_pipeline[183] <= delay_pipeline[182];
          delay_pipeline[184] <= delay_pipeline[183];
          delay_pipeline[185] <= delay_pipeline[184];
          delay_pipeline[186] <= delay_pipeline[185];
          delay_pipeline[187] <= delay_pipeline[186];
          delay_pipeline[188] <= delay_pipeline[187];
          delay_pipeline[189] <= delay_pipeline[188];
          delay_pipeline[190] <= delay_pipeline[189];
          delay_pipeline[191] <= delay_pipeline[190];
          delay_pipeline[192] <= delay_pipeline[191];
          delay_pipeline[193] <= delay_pipeline[192];
          delay_pipeline[194] <= delay_pipeline[193];
          delay_pipeline[195] <= delay_pipeline[194];
          delay_pipeline[196] <= delay_pipeline[195];
          delay_pipeline[197] <= delay_pipeline[196];
          delay_pipeline[198] <= delay_pipeline[197];
          delay_pipeline[199] <= delay_pipeline[198];
          delay_pipeline[200] <= delay_pipeline[199];
          delay_pipeline[201] <= delay_pipeline[200];
          delay_pipeline[202] <= delay_pipeline[201];
          delay_pipeline[203] <= delay_pipeline[202];
          delay_pipeline[204] <= delay_pipeline[203];
          delay_pipeline[205] <= delay_pipeline[204];
          delay_pipeline[206] <= delay_pipeline[205];
          delay_pipeline[207] <= delay_pipeline[206];
          delay_pipeline[208] <= delay_pipeline[207];
          delay_pipeline[209] <= delay_pipeline[208];
          delay_pipeline[210] <= delay_pipeline[209];
          delay_pipeline[211] <= delay_pipeline[210];
          delay_pipeline[212] <= delay_pipeline[211];
          delay_pipeline[213] <= delay_pipeline[212];
          delay_pipeline[214] <= delay_pipeline[213];
          delay_pipeline[215] <= delay_pipeline[214];
          delay_pipeline[216] <= delay_pipeline[215];
          delay_pipeline[217] <= delay_pipeline[216];
          delay_pipeline[218] <= delay_pipeline[217];
          delay_pipeline[219] <= delay_pipeline[218];
          delay_pipeline[220] <= delay_pipeline[219];
          delay_pipeline[221] <= delay_pipeline[220];
          delay_pipeline[222] <= delay_pipeline[221];
          delay_pipeline[223] <= delay_pipeline[222];
          delay_pipeline[224] <= delay_pipeline[223];
          delay_pipeline[225] <= delay_pipeline[224];
          delay_pipeline[226] <= delay_pipeline[225];
          delay_pipeline[227] <= delay_pipeline[226];
          delay_pipeline[228] <= delay_pipeline[227];
          delay_pipeline[229] <= delay_pipeline[228];
          delay_pipeline[230] <= delay_pipeline[229];
          delay_pipeline[231] <= delay_pipeline[230];
          delay_pipeline[232] <= delay_pipeline[231];
          delay_pipeline[233] <= delay_pipeline[232];
          delay_pipeline[234] <= delay_pipeline[233];
          delay_pipeline[235] <= delay_pipeline[234];
          delay_pipeline[236] <= delay_pipeline[235];
          delay_pipeline[237] <= delay_pipeline[236];
          delay_pipeline[238] <= delay_pipeline[237];
          delay_pipeline[239] <= delay_pipeline[238];
          delay_pipeline[240] <= delay_pipeline[239];
          delay_pipeline[241] <= delay_pipeline[240];
          delay_pipeline[242] <= delay_pipeline[241];
          delay_pipeline[243] <= delay_pipeline[242];
          delay_pipeline[244] <= delay_pipeline[243];
          delay_pipeline[245] <= delay_pipeline[244];
          delay_pipeline[246] <= delay_pipeline[245];
          delay_pipeline[247] <= delay_pipeline[246];
          delay_pipeline[248] <= delay_pipeline[247];
          delay_pipeline[249] <= delay_pipeline[248];
          delay_pipeline[250] <= delay_pipeline[249];
          delay_pipeline[251] <= delay_pipeline[250];
          delay_pipeline[252] <= delay_pipeline[251];
          delay_pipeline[253] <= delay_pipeline[252];
          delay_pipeline[254] <= delay_pipeline[253];
          delay_pipeline[255] <= delay_pipeline[254];
          delay_pipeline[256] <= delay_pipeline[255];
          delay_pipeline[257] <= delay_pipeline[256];
          delay_pipeline[258] <= delay_pipeline[257];
          delay_pipeline[259] <= delay_pipeline[258];
          delay_pipeline[260] <= delay_pipeline[259];
          delay_pipeline[261] <= delay_pipeline[260];
          delay_pipeline[262] <= delay_pipeline[261];
          delay_pipeline[263] <= delay_pipeline[262];
          delay_pipeline[264] <= delay_pipeline[263];
          delay_pipeline[265] <= delay_pipeline[264];
          delay_pipeline[266] <= delay_pipeline[265];
          delay_pipeline[267] <= delay_pipeline[266];
          delay_pipeline[268] <= delay_pipeline[267];
          delay_pipeline[269] <= delay_pipeline[268];
          delay_pipeline[270] <= delay_pipeline[269];
          delay_pipeline[271] <= delay_pipeline[270];
          delay_pipeline[272] <= delay_pipeline[271];
          delay_pipeline[273] <= delay_pipeline[272];
          delay_pipeline[274] <= delay_pipeline[273];
          delay_pipeline[275] <= delay_pipeline[274];
        end
      end
    end // Delay_Pipeline_process


  assign inputmux_1 = (cur_count == 8'b00000000) ? delay_pipeline[0] :
                     (cur_count == 8'b00000001) ? delay_pipeline[1] :
                     (cur_count == 8'b00000010) ? delay_pipeline[2] :
                     (cur_count == 8'b00000011) ? delay_pipeline[3] :
                     (cur_count == 8'b00000100) ? delay_pipeline[4] :
                     (cur_count == 8'b00000101) ? delay_pipeline[5] :
                     (cur_count == 8'b00000110) ? delay_pipeline[6] :
                     (cur_count == 8'b00000111) ? delay_pipeline[7] :
                     (cur_count == 8'b00001000) ? delay_pipeline[8] :
                     (cur_count == 8'b00001001) ? delay_pipeline[9] :
                     (cur_count == 8'b00001010) ? delay_pipeline[10] :
                     (cur_count == 8'b00001011) ? delay_pipeline[11] :
                     (cur_count == 8'b00001100) ? delay_pipeline[12] :
                     (cur_count == 8'b00001101) ? delay_pipeline[13] :
                     (cur_count == 8'b00001110) ? delay_pipeline[14] :
                     (cur_count == 8'b00001111) ? delay_pipeline[15] :
                     (cur_count == 8'b00010000) ? delay_pipeline[16] :
                     (cur_count == 8'b00010001) ? delay_pipeline[17] :
                     (cur_count == 8'b00010010) ? delay_pipeline[18] :
                     (cur_count == 8'b00010011) ? delay_pipeline[19] :
                     (cur_count == 8'b00010100) ? delay_pipeline[20] :
                     (cur_count == 8'b00010101) ? delay_pipeline[21] :
                     (cur_count == 8'b00010110) ? delay_pipeline[22] :
                     (cur_count == 8'b00010111) ? delay_pipeline[23] :
                     (cur_count == 8'b00011000) ? delay_pipeline[24] :
                     (cur_count == 8'b00011001) ? delay_pipeline[25] :
                     (cur_count == 8'b00011010) ? delay_pipeline[26] :
                     (cur_count == 8'b00011011) ? delay_pipeline[27] :
                     (cur_count == 8'b00011100) ? delay_pipeline[28] :
                     (cur_count == 8'b00011101) ? delay_pipeline[29] :
                     (cur_count == 8'b00011110) ? delay_pipeline[30] :
                     (cur_count == 8'b00011111) ? delay_pipeline[31] :
                     (cur_count == 8'b00100000) ? delay_pipeline[32] :
                     (cur_count == 8'b00100001) ? delay_pipeline[33] :
                     (cur_count == 8'b00100010) ? delay_pipeline[34] :
                     (cur_count == 8'b00100011) ? delay_pipeline[35] :
                     (cur_count == 8'b00100100) ? delay_pipeline[36] :
                     (cur_count == 8'b00100101) ? delay_pipeline[37] :
                     (cur_count == 8'b00100110) ? delay_pipeline[38] :
                     (cur_count == 8'b00100111) ? delay_pipeline[39] :
                     (cur_count == 8'b00101000) ? delay_pipeline[40] :
                     (cur_count == 8'b00101001) ? delay_pipeline[41] :
                     (cur_count == 8'b00101010) ? delay_pipeline[42] :
                     (cur_count == 8'b00101011) ? delay_pipeline[43] :
                     (cur_count == 8'b00101100) ? delay_pipeline[44] :
                     (cur_count == 8'b00101101) ? delay_pipeline[45] :
                     (cur_count == 8'b00101110) ? delay_pipeline[46] :
                     (cur_count == 8'b00101111) ? delay_pipeline[47] :
                     (cur_count == 8'b00110000) ? delay_pipeline[48] :
                     (cur_count == 8'b00110001) ? delay_pipeline[49] :
                     (cur_count == 8'b00110010) ? delay_pipeline[50] :
                     (cur_count == 8'b00110011) ? delay_pipeline[51] :
                     (cur_count == 8'b00110100) ? delay_pipeline[52] :
                     (cur_count == 8'b00110101) ? delay_pipeline[53] :
                     (cur_count == 8'b00110110) ? delay_pipeline[54] :
                     (cur_count == 8'b00110111) ? delay_pipeline[55] :
                     (cur_count == 8'b00111000) ? delay_pipeline[56] :
                     (cur_count == 8'b00111001) ? delay_pipeline[57] :
                     (cur_count == 8'b00111010) ? delay_pipeline[58] :
                     (cur_count == 8'b00111011) ? delay_pipeline[59] :
                     (cur_count == 8'b00111100) ? delay_pipeline[60] :
                     (cur_count == 8'b00111101) ? delay_pipeline[61] :
                     (cur_count == 8'b00111110) ? delay_pipeline[62] :
                     (cur_count == 8'b00111111) ? delay_pipeline[63] :
                     (cur_count == 8'b01000000) ? delay_pipeline[64] :
                     (cur_count == 8'b01000001) ? delay_pipeline[65] :
                     (cur_count == 8'b01000010) ? delay_pipeline[66] :
                     (cur_count == 8'b01000011) ? delay_pipeline[67] :
                     (cur_count == 8'b01000100) ? delay_pipeline[68] :
                     (cur_count == 8'b01000101) ? delay_pipeline[69] :
                     (cur_count == 8'b01000110) ? delay_pipeline[70] :
                     (cur_count == 8'b01000111) ? delay_pipeline[71] :
                     (cur_count == 8'b01001000) ? delay_pipeline[72] :
                     (cur_count == 8'b01001001) ? delay_pipeline[73] :
                     (cur_count == 8'b01001010) ? delay_pipeline[74] :
                     (cur_count == 8'b01001011) ? delay_pipeline[75] :
                     (cur_count == 8'b01001100) ? delay_pipeline[76] :
                     (cur_count == 8'b01001101) ? delay_pipeline[77] :
                     (cur_count == 8'b01001110) ? delay_pipeline[78] :
                     (cur_count == 8'b01001111) ? delay_pipeline[79] :
                     (cur_count == 8'b01010000) ? delay_pipeline[80] :
                     (cur_count == 8'b01010001) ? delay_pipeline[81] :
                     (cur_count == 8'b01010010) ? delay_pipeline[82] :
                     (cur_count == 8'b01010011) ? delay_pipeline[83] :
                     (cur_count == 8'b01010100) ? delay_pipeline[84] :
                     (cur_count == 8'b01010101) ? delay_pipeline[85] :
                     (cur_count == 8'b01010110) ? delay_pipeline[86] :
                     (cur_count == 8'b01010111) ? delay_pipeline[87] :
                     (cur_count == 8'b01011000) ? delay_pipeline[88] :
                     (cur_count == 8'b01011001) ? delay_pipeline[89] :
                     (cur_count == 8'b01011010) ? delay_pipeline[90] :
                     (cur_count == 8'b01011011) ? delay_pipeline[91] :
                     (cur_count == 8'b01011100) ? delay_pipeline[92] :
                     (cur_count == 8'b01011101) ? delay_pipeline[93] :
                     (cur_count == 8'b01011110) ? delay_pipeline[94] :
                     (cur_count == 8'b01011111) ? delay_pipeline[95] :
                     (cur_count == 8'b01100000) ? delay_pipeline[96] :
                     (cur_count == 8'b01100001) ? delay_pipeline[97] :
                     (cur_count == 8'b01100010) ? delay_pipeline[98] :
                     (cur_count == 8'b01100011) ? delay_pipeline[99] :
                     (cur_count == 8'b01100100) ? delay_pipeline[100] :
                     (cur_count == 8'b01100101) ? delay_pipeline[101] :
                     (cur_count == 8'b01100110) ? delay_pipeline[102] :
                     (cur_count == 8'b01100111) ? delay_pipeline[103] :
                     (cur_count == 8'b01101000) ? delay_pipeline[104] :
                     (cur_count == 8'b01101001) ? delay_pipeline[105] :
                     (cur_count == 8'b01101010) ? delay_pipeline[106] :
                     (cur_count == 8'b01101011) ? delay_pipeline[107] :
                     (cur_count == 8'b01101100) ? delay_pipeline[108] :
                     (cur_count == 8'b01101101) ? delay_pipeline[109] :
                     (cur_count == 8'b01101110) ? delay_pipeline[110] :
                     (cur_count == 8'b01101111) ? delay_pipeline[111] :
                     (cur_count == 8'b01110000) ? delay_pipeline[112] :
                     (cur_count == 8'b01110001) ? delay_pipeline[113] :
                     (cur_count == 8'b01110010) ? delay_pipeline[114] :
                     (cur_count == 8'b01110011) ? delay_pipeline[115] :
                     (cur_count == 8'b01110100) ? delay_pipeline[116] :
                     (cur_count == 8'b01110101) ? delay_pipeline[117] :
                     (cur_count == 8'b01110110) ? delay_pipeline[118] :
                     (cur_count == 8'b01110111) ? delay_pipeline[119] :
                     (cur_count == 8'b01111000) ? delay_pipeline[120] :
                     (cur_count == 8'b01111001) ? delay_pipeline[121] :
                     (cur_count == 8'b01111010) ? delay_pipeline[122] :
                     (cur_count == 8'b01111011) ? delay_pipeline[123] :
                     (cur_count == 8'b01111100) ? delay_pipeline[124] :
                     (cur_count == 8'b01111101) ? delay_pipeline[125] :
                     (cur_count == 8'b01111110) ? delay_pipeline[126] :
                     (cur_count == 8'b01111111) ? delay_pipeline[127] :
                     (cur_count == 8'b10000000) ? delay_pipeline[128] :
                     (cur_count == 8'b10000001) ? delay_pipeline[129] :
                     (cur_count == 8'b10000010) ? delay_pipeline[130] :
                     (cur_count == 8'b10000011) ? delay_pipeline[131] :
                     (cur_count == 8'b10000100) ? delay_pipeline[132] :
                     (cur_count == 8'b10000101) ? delay_pipeline[133] :
                     (cur_count == 8'b10000110) ? delay_pipeline[134] :
                     (cur_count == 8'b10000111) ? delay_pipeline[135] :
                     (cur_count == 8'b10001000) ? delay_pipeline[136] :
                     delay_pipeline[137];

  assign inputmux_2 = (cur_count == 8'b00000000) ? delay_pipeline[138] :
                     (cur_count == 8'b00000001) ? delay_pipeline[139] :
                     (cur_count == 8'b00000010) ? delay_pipeline[140] :
                     (cur_count == 8'b00000011) ? delay_pipeline[141] :
                     (cur_count == 8'b00000100) ? delay_pipeline[142] :
                     (cur_count == 8'b00000101) ? delay_pipeline[143] :
                     (cur_count == 8'b00000110) ? delay_pipeline[144] :
                     (cur_count == 8'b00000111) ? delay_pipeline[145] :
                     (cur_count == 8'b00001000) ? delay_pipeline[146] :
                     (cur_count == 8'b00001001) ? delay_pipeline[147] :
                     (cur_count == 8'b00001010) ? delay_pipeline[148] :
                     (cur_count == 8'b00001011) ? delay_pipeline[149] :
                     (cur_count == 8'b00001100) ? delay_pipeline[150] :
                     (cur_count == 8'b00001101) ? delay_pipeline[151] :
                     (cur_count == 8'b00001110) ? delay_pipeline[152] :
                     (cur_count == 8'b00001111) ? delay_pipeline[153] :
                     (cur_count == 8'b00010000) ? delay_pipeline[154] :
                     (cur_count == 8'b00010001) ? delay_pipeline[155] :
                     (cur_count == 8'b00010010) ? delay_pipeline[156] :
                     (cur_count == 8'b00010011) ? delay_pipeline[157] :
                     (cur_count == 8'b00010100) ? delay_pipeline[158] :
                     (cur_count == 8'b00010101) ? delay_pipeline[159] :
                     (cur_count == 8'b00010110) ? delay_pipeline[160] :
                     (cur_count == 8'b00010111) ? delay_pipeline[161] :
                     (cur_count == 8'b00011000) ? delay_pipeline[162] :
                     (cur_count == 8'b00011001) ? delay_pipeline[163] :
                     (cur_count == 8'b00011010) ? delay_pipeline[164] :
                     (cur_count == 8'b00011011) ? delay_pipeline[165] :
                     (cur_count == 8'b00011100) ? delay_pipeline[166] :
                     (cur_count == 8'b00011101) ? delay_pipeline[167] :
                     (cur_count == 8'b00011110) ? delay_pipeline[168] :
                     (cur_count == 8'b00011111) ? delay_pipeline[169] :
                     (cur_count == 8'b00100000) ? delay_pipeline[170] :
                     (cur_count == 8'b00100001) ? delay_pipeline[171] :
                     (cur_count == 8'b00100010) ? delay_pipeline[172] :
                     (cur_count == 8'b00100011) ? delay_pipeline[173] :
                     (cur_count == 8'b00100100) ? delay_pipeline[174] :
                     (cur_count == 8'b00100101) ? delay_pipeline[175] :
                     (cur_count == 8'b00100110) ? delay_pipeline[176] :
                     (cur_count == 8'b00100111) ? delay_pipeline[177] :
                     (cur_count == 8'b00101000) ? delay_pipeline[178] :
                     (cur_count == 8'b00101001) ? delay_pipeline[179] :
                     (cur_count == 8'b00101010) ? delay_pipeline[180] :
                     (cur_count == 8'b00101011) ? delay_pipeline[181] :
                     (cur_count == 8'b00101100) ? delay_pipeline[182] :
                     (cur_count == 8'b00101101) ? delay_pipeline[183] :
                     (cur_count == 8'b00101110) ? delay_pipeline[184] :
                     (cur_count == 8'b00101111) ? delay_pipeline[185] :
                     (cur_count == 8'b00110000) ? delay_pipeline[186] :
                     (cur_count == 8'b00110001) ? delay_pipeline[187] :
                     (cur_count == 8'b00110010) ? delay_pipeline[188] :
                     (cur_count == 8'b00110011) ? delay_pipeline[189] :
                     (cur_count == 8'b00110100) ? delay_pipeline[190] :
                     (cur_count == 8'b00110101) ? delay_pipeline[191] :
                     (cur_count == 8'b00110110) ? delay_pipeline[192] :
                     (cur_count == 8'b00110111) ? delay_pipeline[193] :
                     (cur_count == 8'b00111000) ? delay_pipeline[194] :
                     (cur_count == 8'b00111001) ? delay_pipeline[195] :
                     (cur_count == 8'b00111010) ? delay_pipeline[196] :
                     (cur_count == 8'b00111011) ? delay_pipeline[197] :
                     (cur_count == 8'b00111100) ? delay_pipeline[198] :
                     (cur_count == 8'b00111101) ? delay_pipeline[199] :
                     (cur_count == 8'b00111110) ? delay_pipeline[200] :
                     (cur_count == 8'b00111111) ? delay_pipeline[201] :
                     (cur_count == 8'b01000000) ? delay_pipeline[202] :
                     (cur_count == 8'b01000001) ? delay_pipeline[203] :
                     (cur_count == 8'b01000010) ? delay_pipeline[204] :
                     (cur_count == 8'b01000011) ? delay_pipeline[205] :
                     (cur_count == 8'b01000100) ? delay_pipeline[206] :
                     (cur_count == 8'b01000101) ? delay_pipeline[207] :
                     (cur_count == 8'b01000110) ? delay_pipeline[208] :
                     (cur_count == 8'b01000111) ? delay_pipeline[209] :
                     (cur_count == 8'b01001000) ? delay_pipeline[210] :
                     (cur_count == 8'b01001001) ? delay_pipeline[211] :
                     (cur_count == 8'b01001010) ? delay_pipeline[212] :
                     (cur_count == 8'b01001011) ? delay_pipeline[213] :
                     (cur_count == 8'b01001100) ? delay_pipeline[214] :
                     (cur_count == 8'b01001101) ? delay_pipeline[215] :
                     (cur_count == 8'b01001110) ? delay_pipeline[216] :
                     (cur_count == 8'b01001111) ? delay_pipeline[217] :
                     (cur_count == 8'b01010000) ? delay_pipeline[218] :
                     (cur_count == 8'b01010001) ? delay_pipeline[219] :
                     (cur_count == 8'b01010010) ? delay_pipeline[220] :
                     (cur_count == 8'b01010011) ? delay_pipeline[221] :
                     (cur_count == 8'b01010100) ? delay_pipeline[222] :
                     (cur_count == 8'b01010101) ? delay_pipeline[223] :
                     (cur_count == 8'b01010110) ? delay_pipeline[224] :
                     (cur_count == 8'b01010111) ? delay_pipeline[225] :
                     (cur_count == 8'b01011000) ? delay_pipeline[226] :
                     (cur_count == 8'b01011001) ? delay_pipeline[227] :
                     (cur_count == 8'b01011010) ? delay_pipeline[228] :
                     (cur_count == 8'b01011011) ? delay_pipeline[229] :
                     (cur_count == 8'b01011100) ? delay_pipeline[230] :
                     (cur_count == 8'b01011101) ? delay_pipeline[231] :
                     (cur_count == 8'b01011110) ? delay_pipeline[232] :
                     (cur_count == 8'b01011111) ? delay_pipeline[233] :
                     (cur_count == 8'b01100000) ? delay_pipeline[234] :
                     (cur_count == 8'b01100001) ? delay_pipeline[235] :
                     (cur_count == 8'b01100010) ? delay_pipeline[236] :
                     (cur_count == 8'b01100011) ? delay_pipeline[237] :
                     (cur_count == 8'b01100100) ? delay_pipeline[238] :
                     (cur_count == 8'b01100101) ? delay_pipeline[239] :
                     (cur_count == 8'b01100110) ? delay_pipeline[240] :
                     (cur_count == 8'b01100111) ? delay_pipeline[241] :
                     (cur_count == 8'b01101000) ? delay_pipeline[242] :
                     (cur_count == 8'b01101001) ? delay_pipeline[243] :
                     (cur_count == 8'b01101010) ? delay_pipeline[244] :
                     (cur_count == 8'b01101011) ? delay_pipeline[245] :
                     (cur_count == 8'b01101100) ? delay_pipeline[246] :
                     (cur_count == 8'b01101101) ? delay_pipeline[247] :
                     (cur_count == 8'b01101110) ? delay_pipeline[248] :
                     (cur_count == 8'b01101111) ? delay_pipeline[249] :
                     (cur_count == 8'b01110000) ? delay_pipeline[250] :
                     (cur_count == 8'b01110001) ? delay_pipeline[251] :
                     (cur_count == 8'b01110010) ? delay_pipeline[252] :
                     (cur_count == 8'b01110011) ? delay_pipeline[253] :
                     (cur_count == 8'b01110100) ? delay_pipeline[254] :
                     (cur_count == 8'b01110101) ? delay_pipeline[255] :
                     (cur_count == 8'b01110110) ? delay_pipeline[256] :
                     (cur_count == 8'b01110111) ? delay_pipeline[257] :
                     (cur_count == 8'b01111000) ? delay_pipeline[258] :
                     (cur_count == 8'b01111001) ? delay_pipeline[259] :
                     (cur_count == 8'b01111010) ? delay_pipeline[260] :
                     (cur_count == 8'b01111011) ? delay_pipeline[261] :
                     (cur_count == 8'b01111100) ? delay_pipeline[262] :
                     (cur_count == 8'b01111101) ? delay_pipeline[263] :
                     (cur_count == 8'b01111110) ? delay_pipeline[264] :
                     (cur_count == 8'b01111111) ? delay_pipeline[265] :
                     (cur_count == 8'b10000000) ? delay_pipeline[266] :
                     (cur_count == 8'b10000001) ? delay_pipeline[267] :
                     (cur_count == 8'b10000010) ? delay_pipeline[268] :
                     (cur_count == 8'b10000011) ? delay_pipeline[269] :
                     (cur_count == 8'b10000100) ? delay_pipeline[270] :
                     (cur_count == 8'b10000101) ? delay_pipeline[271] :
                     (cur_count == 8'b10000110) ? delay_pipeline[272] :
                     (cur_count == 8'b10000111) ? delay_pipeline[273] :
                     (cur_count == 8'b10001000) ? delay_pipeline[274] :
                     delay_pipeline[275];

  //   ------------------ Serial partition # 1 ------------------

  assign product_1_mux = (cur_count == 8'b00000000) ? coeff1 :
                        (cur_count == 8'b00000001) ? coeff2 :
                        (cur_count == 8'b00000010) ? coeff3 :
                        (cur_count == 8'b00000011) ? coeff4 :
                        (cur_count == 8'b00000100) ? coeff5 :
                        (cur_count == 8'b00000101) ? coeff6 :
                        (cur_count == 8'b00000110) ? coeff7 :
                        (cur_count == 8'b00000111) ? coeff8 :
                        (cur_count == 8'b00001000) ? coeff9 :
                        (cur_count == 8'b00001001) ? coeff10 :
                        (cur_count == 8'b00001010) ? coeff11 :
                        (cur_count == 8'b00001011) ? coeff12 :
                        (cur_count == 8'b00001100) ? coeff13 :
                        (cur_count == 8'b00001101) ? coeff14 :
                        (cur_count == 8'b00001110) ? coeff15 :
                        (cur_count == 8'b00001111) ? coeff16 :
                        (cur_count == 8'b00010000) ? coeff17 :
                        (cur_count == 8'b00010001) ? coeff18 :
                        (cur_count == 8'b00010010) ? coeff19 :
                        (cur_count == 8'b00010011) ? coeff20 :
                        (cur_count == 8'b00010100) ? coeff21 :
                        (cur_count == 8'b00010101) ? coeff22 :
                        (cur_count == 8'b00010110) ? coeff23 :
                        (cur_count == 8'b00010111) ? coeff24 :
                        (cur_count == 8'b00011000) ? coeff25 :
                        (cur_count == 8'b00011001) ? coeff26 :
                        (cur_count == 8'b00011010) ? coeff27 :
                        (cur_count == 8'b00011011) ? coeff28 :
                        (cur_count == 8'b00011100) ? coeff29 :
                        (cur_count == 8'b00011101) ? coeff30 :
                        (cur_count == 8'b00011110) ? coeff31 :
                        (cur_count == 8'b00011111) ? coeff32 :
                        (cur_count == 8'b00100000) ? coeff33 :
                        (cur_count == 8'b00100001) ? coeff34 :
                        (cur_count == 8'b00100010) ? coeff35 :
                        (cur_count == 8'b00100011) ? coeff36 :
                        (cur_count == 8'b00100100) ? coeff37 :
                        (cur_count == 8'b00100101) ? coeff38 :
                        (cur_count == 8'b00100110) ? coeff39 :
                        (cur_count == 8'b00100111) ? coeff40 :
                        (cur_count == 8'b00101000) ? coeff41 :
                        (cur_count == 8'b00101001) ? coeff42 :
                        (cur_count == 8'b00101010) ? coeff43 :
                        (cur_count == 8'b00101011) ? coeff44 :
                        (cur_count == 8'b00101100) ? coeff45 :
                        (cur_count == 8'b00101101) ? coeff46 :
                        (cur_count == 8'b00101110) ? coeff47 :
                        (cur_count == 8'b00101111) ? coeff48 :
                        (cur_count == 8'b00110000) ? coeff49 :
                        (cur_count == 8'b00110001) ? coeff50 :
                        (cur_count == 8'b00110010) ? coeff51 :
                        (cur_count == 8'b00110011) ? coeff52 :
                        (cur_count == 8'b00110100) ? coeff53 :
                        (cur_count == 8'b00110101) ? coeff54 :
                        (cur_count == 8'b00110110) ? coeff55 :
                        (cur_count == 8'b00110111) ? coeff56 :
                        (cur_count == 8'b00111000) ? coeff57 :
                        (cur_count == 8'b00111001) ? coeff58 :
                        (cur_count == 8'b00111010) ? coeff59 :
                        (cur_count == 8'b00111011) ? coeff60 :
                        (cur_count == 8'b00111100) ? coeff61 :
                        (cur_count == 8'b00111101) ? coeff62 :
                        (cur_count == 8'b00111110) ? coeff63 :
                        (cur_count == 8'b00111111) ? coeff64 :
                        (cur_count == 8'b01000000) ? coeff65 :
                        (cur_count == 8'b01000001) ? coeff66 :
                        (cur_count == 8'b01000010) ? coeff67 :
                        (cur_count == 8'b01000011) ? coeff68 :
                        (cur_count == 8'b01000100) ? coeff69 :
                        (cur_count == 8'b01000101) ? coeff70 :
                        (cur_count == 8'b01000110) ? coeff71 :
                        (cur_count == 8'b01000111) ? coeff72 :
                        (cur_count == 8'b01001000) ? coeff73 :
                        (cur_count == 8'b01001001) ? coeff74 :
                        (cur_count == 8'b01001010) ? coeff75 :
                        (cur_count == 8'b01001011) ? coeff76 :
                        (cur_count == 8'b01001100) ? coeff77 :
                        (cur_count == 8'b01001101) ? coeff78 :
                        (cur_count == 8'b01001110) ? coeff79 :
                        (cur_count == 8'b01001111) ? coeff80 :
                        (cur_count == 8'b01010000) ? coeff81 :
                        (cur_count == 8'b01010001) ? coeff82 :
                        (cur_count == 8'b01010010) ? coeff83 :
                        (cur_count == 8'b01010011) ? coeff84 :
                        (cur_count == 8'b01010100) ? coeff85 :
                        (cur_count == 8'b01010101) ? coeff86 :
                        (cur_count == 8'b01010110) ? coeff87 :
                        (cur_count == 8'b01010111) ? coeff88 :
                        (cur_count == 8'b01011000) ? coeff89 :
                        (cur_count == 8'b01011001) ? coeff90 :
                        (cur_count == 8'b01011010) ? coeff91 :
                        (cur_count == 8'b01011011) ? coeff92 :
                        (cur_count == 8'b01011100) ? coeff93 :
                        (cur_count == 8'b01011101) ? coeff94 :
                        (cur_count == 8'b01011110) ? coeff95 :
                        (cur_count == 8'b01011111) ? coeff96 :
                        (cur_count == 8'b01100000) ? coeff97 :
                        (cur_count == 8'b01100001) ? coeff98 :
                        (cur_count == 8'b01100010) ? coeff99 :
                        (cur_count == 8'b01100011) ? coeff100 :
                        (cur_count == 8'b01100100) ? coeff101 :
                        (cur_count == 8'b01100101) ? coeff102 :
                        (cur_count == 8'b01100110) ? coeff103 :
                        (cur_count == 8'b01100111) ? coeff104 :
                        (cur_count == 8'b01101000) ? coeff105 :
                        (cur_count == 8'b01101001) ? coeff106 :
                        (cur_count == 8'b01101010) ? coeff107 :
                        (cur_count == 8'b01101011) ? coeff108 :
                        (cur_count == 8'b01101100) ? coeff109 :
                        (cur_count == 8'b01101101) ? coeff110 :
                        (cur_count == 8'b01101110) ? coeff111 :
                        (cur_count == 8'b01101111) ? coeff112 :
                        (cur_count == 8'b01110000) ? coeff113 :
                        (cur_count == 8'b01110001) ? coeff114 :
                        (cur_count == 8'b01110010) ? coeff115 :
                        (cur_count == 8'b01110011) ? coeff116 :
                        (cur_count == 8'b01110100) ? coeff117 :
                        (cur_count == 8'b01110101) ? coeff118 :
                        (cur_count == 8'b01110110) ? coeff119 :
                        (cur_count == 8'b01110111) ? coeff120 :
                        (cur_count == 8'b01111000) ? coeff121 :
                        (cur_count == 8'b01111001) ? coeff122 :
                        (cur_count == 8'b01111010) ? coeff123 :
                        (cur_count == 8'b01111011) ? coeff124 :
                        (cur_count == 8'b01111100) ? coeff125 :
                        (cur_count == 8'b01111101) ? coeff126 :
                        (cur_count == 8'b01111110) ? coeff127 :
                        (cur_count == 8'b01111111) ? coeff128 :
                        (cur_count == 8'b10000000) ? coeff129 :
                        (cur_count == 8'b10000001) ? coeff130 :
                        (cur_count == 8'b10000010) ? coeff131 :
                        (cur_count == 8'b10000011) ? coeff132 :
                        (cur_count == 8'b10000100) ? coeff133 :
                        (cur_count == 8'b10000101) ? coeff134 :
                        (cur_count == 8'b10000110) ? coeff135 :
                        (cur_count == 8'b10000111) ? coeff136 :
                        (cur_count == 8'b10001000) ? coeff137 :
                        coeff138;
  assign mul_temp = inputmux_1 * product_1_mux;
  assign product_1 = mul_temp[46:0];

  assign prod_typeconvert_1 = $signed({{5{product_1[46]}}, product_1});

  assign add_signext = prod_typeconvert_1;
  assign add_signext_1 = acc_out_1;
  assign add_temp = add_signext + add_signext_1;
  assign acc_sum_1 = add_temp[51:0];

  assign acc_in_1 = (phase_0 == 1'b1) ? prod_typeconvert_1 :
                   acc_sum_1;

  always @ (posedge clk or posedge reset)
    begin: Acc_reg_1_process
      if (reset == 1'b1) begin
        acc_out_1 <= 0;
      end
      else begin
        if (clk_enable == 1'b1 && Start_flag==1'b1) begin
          acc_out_1 <= acc_in_1;
        end
      end
    end // Acc_reg_1_process

  //   ------------------ Serial partition # 2 ------------------

  assign product_2_mux = (cur_count == 8'b00000000) ? coeff139 :
                        (cur_count == 8'b00000001) ? coeff140 :
                        (cur_count == 8'b00000010) ? coeff141 :
                        (cur_count == 8'b00000011) ? coeff142 :
                        (cur_count == 8'b00000100) ? coeff143 :
                        (cur_count == 8'b00000101) ? coeff144 :
                        (cur_count == 8'b00000110) ? coeff145 :
                        (cur_count == 8'b00000111) ? coeff146 :
                        (cur_count == 8'b00001000) ? coeff147 :
                        (cur_count == 8'b00001001) ? coeff148 :
                        (cur_count == 8'b00001010) ? coeff149 :
                        (cur_count == 8'b00001011) ? coeff150 :
                        (cur_count == 8'b00001100) ? coeff151 :
                        (cur_count == 8'b00001101) ? coeff152 :
                        (cur_count == 8'b00001110) ? coeff153 :
                        (cur_count == 8'b00001111) ? coeff154 :
                        (cur_count == 8'b00010000) ? coeff155 :
                        (cur_count == 8'b00010001) ? coeff156 :
                        (cur_count == 8'b00010010) ? coeff157 :
                        (cur_count == 8'b00010011) ? coeff158 :
                        (cur_count == 8'b00010100) ? coeff159 :
                        (cur_count == 8'b00010101) ? coeff160 :
                        (cur_count == 8'b00010110) ? coeff161 :
                        (cur_count == 8'b00010111) ? coeff162 :
                        (cur_count == 8'b00011000) ? coeff163 :
                        (cur_count == 8'b00011001) ? coeff164 :
                        (cur_count == 8'b00011010) ? coeff165 :
                        (cur_count == 8'b00011011) ? coeff166 :
                        (cur_count == 8'b00011100) ? coeff167 :
                        (cur_count == 8'b00011101) ? coeff168 :
                        (cur_count == 8'b00011110) ? coeff169 :
                        (cur_count == 8'b00011111) ? coeff170 :
                        (cur_count == 8'b00100000) ? coeff171 :
                        (cur_count == 8'b00100001) ? coeff172 :
                        (cur_count == 8'b00100010) ? coeff173 :
                        (cur_count == 8'b00100011) ? coeff174 :
                        (cur_count == 8'b00100100) ? coeff175 :
                        (cur_count == 8'b00100101) ? coeff176 :
                        (cur_count == 8'b00100110) ? coeff177 :
                        (cur_count == 8'b00100111) ? coeff178 :
                        (cur_count == 8'b00101000) ? coeff179 :
                        (cur_count == 8'b00101001) ? coeff180 :
                        (cur_count == 8'b00101010) ? coeff181 :
                        (cur_count == 8'b00101011) ? coeff182 :
                        (cur_count == 8'b00101100) ? coeff183 :
                        (cur_count == 8'b00101101) ? coeff184 :
                        (cur_count == 8'b00101110) ? coeff185 :
                        (cur_count == 8'b00101111) ? coeff186 :
                        (cur_count == 8'b00110000) ? coeff187 :
                        (cur_count == 8'b00110001) ? coeff188 :
                        (cur_count == 8'b00110010) ? coeff189 :
                        (cur_count == 8'b00110011) ? coeff190 :
                        (cur_count == 8'b00110100) ? coeff191 :
                        (cur_count == 8'b00110101) ? coeff192 :
                        (cur_count == 8'b00110110) ? coeff193 :
                        (cur_count == 8'b00110111) ? coeff194 :
                        (cur_count == 8'b00111000) ? coeff195 :
                        (cur_count == 8'b00111001) ? coeff196 :
                        (cur_count == 8'b00111010) ? coeff197 :
                        (cur_count == 8'b00111011) ? coeff198 :
                        (cur_count == 8'b00111100) ? coeff199 :
                        (cur_count == 8'b00111101) ? coeff200 :
                        (cur_count == 8'b00111110) ? coeff201 :
                        (cur_count == 8'b00111111) ? coeff202 :
                        (cur_count == 8'b01000000) ? coeff203 :
                        (cur_count == 8'b01000001) ? coeff204 :
                        (cur_count == 8'b01000010) ? coeff205 :
                        (cur_count == 8'b01000011) ? coeff206 :
                        (cur_count == 8'b01000100) ? coeff207 :
                        (cur_count == 8'b01000101) ? coeff208 :
                        (cur_count == 8'b01000110) ? coeff209 :
                        (cur_count == 8'b01000111) ? coeff210 :
                        (cur_count == 8'b01001000) ? coeff211 :
                        (cur_count == 8'b01001001) ? coeff212 :
                        (cur_count == 8'b01001010) ? coeff213 :
                        (cur_count == 8'b01001011) ? coeff214 :
                        (cur_count == 8'b01001100) ? coeff215 :
                        (cur_count == 8'b01001101) ? coeff216 :
                        (cur_count == 8'b01001110) ? coeff217 :
                        (cur_count == 8'b01001111) ? coeff218 :
                        (cur_count == 8'b01010000) ? coeff219 :
                        (cur_count == 8'b01010001) ? coeff220 :
                        (cur_count == 8'b01010010) ? coeff221 :
                        (cur_count == 8'b01010011) ? coeff222 :
                        (cur_count == 8'b01010100) ? coeff223 :
                        (cur_count == 8'b01010101) ? coeff224 :
                        (cur_count == 8'b01010110) ? coeff225 :
                        (cur_count == 8'b01010111) ? coeff226 :
                        (cur_count == 8'b01011000) ? coeff227 :
                        (cur_count == 8'b01011001) ? coeff228 :
                        (cur_count == 8'b01011010) ? coeff229 :
                        (cur_count == 8'b01011011) ? coeff230 :
                        (cur_count == 8'b01011100) ? coeff231 :
                        (cur_count == 8'b01011101) ? coeff232 :
                        (cur_count == 8'b01011110) ? coeff233 :
                        (cur_count == 8'b01011111) ? coeff234 :
                        (cur_count == 8'b01100000) ? coeff235 :
                        (cur_count == 8'b01100001) ? coeff236 :
                        (cur_count == 8'b01100010) ? coeff237 :
                        (cur_count == 8'b01100011) ? coeff238 :
                        (cur_count == 8'b01100100) ? coeff239 :
                        (cur_count == 8'b01100101) ? coeff240 :
                        (cur_count == 8'b01100110) ? coeff241 :
                        (cur_count == 8'b01100111) ? coeff242 :
                        (cur_count == 8'b01101000) ? coeff243 :
                        (cur_count == 8'b01101001) ? coeff244 :
                        (cur_count == 8'b01101010) ? coeff245 :
                        (cur_count == 8'b01101011) ? coeff246 :
                        (cur_count == 8'b01101100) ? coeff247 :
                        (cur_count == 8'b01101101) ? coeff248 :
                        (cur_count == 8'b01101110) ? coeff249 :
                        (cur_count == 8'b01101111) ? coeff250 :
                        (cur_count == 8'b01110000) ? coeff251 :
                        (cur_count == 8'b01110001) ? coeff252 :
                        (cur_count == 8'b01110010) ? coeff253 :
                        (cur_count == 8'b01110011) ? coeff254 :
                        (cur_count == 8'b01110100) ? coeff255 :
                        (cur_count == 8'b01110101) ? coeff256 :
                        (cur_count == 8'b01110110) ? coeff257 :
                        (cur_count == 8'b01110111) ? coeff258 :
                        (cur_count == 8'b01111000) ? coeff259 :
                        (cur_count == 8'b01111001) ? coeff260 :
                        (cur_count == 8'b01111010) ? coeff261 :
                        (cur_count == 8'b01111011) ? coeff262 :
                        (cur_count == 8'b01111100) ? coeff263 :
                        (cur_count == 8'b01111101) ? coeff264 :
                        (cur_count == 8'b01111110) ? coeff265 :
                        (cur_count == 8'b01111111) ? coeff266 :
                        (cur_count == 8'b10000000) ? coeff267 :
                        (cur_count == 8'b10000001) ? coeff268 :
                        (cur_count == 8'b10000010) ? coeff269 :
                        (cur_count == 8'b10000011) ? coeff270 :
                        (cur_count == 8'b10000100) ? coeff271 :
                        (cur_count == 8'b10000101) ? coeff272 :
                        (cur_count == 8'b10000110) ? coeff273 :
                        (cur_count == 8'b10000111) ? coeff274 :
                        (cur_count == 8'b10001000) ? coeff275 :
                        coeff276;
  assign mul_temp_1 = inputmux_2 * product_2_mux;
  assign product_2 = mul_temp_1[46:0];

  assign prod_typeconvert_2 = $signed({{5{product_2[46]}}, product_2});

  assign add_signext_2 = prod_typeconvert_2;
  assign add_signext_3 = acc_out_2;
  assign add_temp_1 = add_signext_2 + add_signext_3;
  assign acc_sum_2 = add_temp_1[51:0];

  assign acc_in_2 = (phase_0 == 1'b1) ? prod_typeconvert_2 :
                   acc_sum_2;

  always @ (posedge clk or posedge reset)
    begin: Acc_reg_2_process
      if (reset == 1'b1) begin
        acc_out_2 <= 0;
      end
      else begin
        if (clk_enable == 1'b1 && Start_flag==1'b1) begin
          acc_out_2 <= acc_in_2;
        end
      end
    end // Acc_reg_2_process

  assign add_signext_4 = acc_out_2;
  assign add_signext_5 = acc_out_1;
  assign add_temp_2 = add_signext_4 + add_signext_5;
  assign sum1 = add_temp_2[51:0];

  always @ (posedge clk or posedge reset)
    begin: Finalsum_reg_process
      if (reset == 1'b1) begin
        acc_final <= 0;
      end
      else begin
        if (phase_0 == 1'b1 && Start_flag==1'b1) begin
          acc_final <= sum1;
        end
      end
    end // Finalsum_reg_process

  always @ (posedge clk or posedge reset)
    begin: Output_Register_process
      if (reset == 1'b1) begin
        output_register <= 0;
      end
      else begin
        if (phase_137 == 1'b1) begin
          output_register <= acc_final;
        end
      end
    end // Output_Register_process

  // Assignment Statements
  assign filter_out = output_register;
endmodule  // Fir_1_25M_20K_30K

Modelsim仿真。只要打开Modelsim,新建一个Project,选择work 作为library(没有的话新建),然后将Testbench文件与滤波器代码添加进去,然后compile all. 待到文件后面全部✔,回到work中右键testbench文件,选择simulate.最终结果如下.
仿真库
滤波结果

	完结,记录一下设计过程,下次遗忘自己方便回顾。
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐