CN111988018B - 一种半带插值滤波器rtl模型自动生成方法 - Google Patents
一种半带插值滤波器rtl模型自动生成方法 Download PDFInfo
- Publication number
- CN111988018B CN111988018B CN202010896699.XA CN202010896699A CN111988018B CN 111988018 B CN111988018 B CN 111988018B CN 202010896699 A CN202010896699 A CN 202010896699A CN 111988018 B CN111988018 B CN 111988018B
- Authority
- CN
- China
- Prior art keywords
- hbfir
- filter
- file
- input
- printing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03H—IMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
- H03H17/00—Networks using digital techniques
- H03H17/02—Frequency selective networks
- H03H17/0211—Frequency selective networks using specific transformation algorithms, e.g. WALSH functions, Fermat transforms, Mersenne transforms, polynomial transforms, Hilbert transforms
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/70—Reducing energy consumption in communication networks in wireless communication networks
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开一种半带插值滤波器RTL模型自动生成方法,属于数字滤波器领域。RTL模型生成器从文件coefficient.txt和parameter_input.txt中读取滤波器的配置信息,计算滤波器组件模型的全部参数,将生成的参数保存在文件parameter_output.txt中;RTL模型生成器读取滤波器系数文件,根据步骤1中计算的滤波器组件模型的参数生成全部滤波器组件的RTL模型;抓取RTL源代码,打印testbench文件,生成测试环境。
Description
技术领域
本发明涉及数字滤波器技术领域,特别涉及一种半带插值滤波器RTL模型自动生成方法。
背景技术
在信号的发送***中,基带信号通常需要在DUC模块上变频至中频段,DUC模块包括插值、滤波和混频三个步骤。半带插值滤波器(half band interpolator)能在插值的同时进行滤波;此外,由于系数有接近一半为零,相对于普通滤波器能够大幅减小计算量,在保证计算精度和功能的同时,能够减少硬件开销和节约功耗。正是由于具有这些特点,半带插值滤波器在DAC中得到了广泛的应用。
对于高速DAC,插值滤波器的计算速率能够达到甚至超过1Ghz,通常需要采用多路并行的方式才能实现。除此之外,复杂的乘加操作需要***多级流水线结构。所以高速半带插值滤波器需要综合考虑并行处理,插值运算和流水线结构的设计等问题,普通的开发者难以在短时间内完成设计验证工作。
发明内容
本发明的目的在于提供一种半带插值滤波器RTL模型自动生成方法,以解决现有高度半带插值滤波器设计过程复杂,开发周期长的问题。
为解决上述技术问题,本发明提供了一种半带插值滤波器RTL模型自动生成方法,包括:
步骤1、RTL模型生成器从文件coefficient.txt和parameter_input.txt中读取滤波器的配置信息,计算滤波器组件模型的全部参数,将生成的参数保存在文件parameter_output.txt中;
步骤2、RTL模型生成器读取滤波器系数文件,根据步骤1中计算的滤波器组件模型的参数生成全部滤波器组件的RTL模型;
步骤3、抓取RTL源代码,打印testbench文件,生成测试环境。
可选的,文件coefficient.txt为滤波器系数文件,包含半带滤波器的全部定点化系数,但不包括0系数;
文件parameter_input.txt为滤波器配置文件,包含滤波器输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度;所述滤波器长度L满足L=4N+3,且中心对称,其中N为非负整数;
所述滤波器组件模型的全部参数包括加法流水线级数、延时周期数、加法器位宽、乘法器位宽、截位宽度,以及所述滤波器配置文件parameter_input.txt中的全部信息。
可选的,步骤1的具体步骤为:
步骤1.1,读取文件parameter_input.txt中的全部信息,储存在数组parameter_in_array中,剔除数组parameter_in_array中的无效信息;将输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度分别存储在变量data_in_width,data_out_width,coefficient_width,filter_length中;
步骤1.2,计算需要的乘法器个数product_num,根据乘法器个数计算需要的加法流水线级数sum_stage;根据滤波器长度计算延时单元需要的延时周期数delay_cycle;计算加法器位宽adder_width;计算乘法器位宽product_width;计算截位宽度trucation_width;
步骤1.3,首先将步骤1.1中数组parameter_in_array全部打印到文件parameter_output.txt中;然后将步骤1.2计算出的全部参数打印到文件parameter_output.txt。
可选的,所述RTL模型生成器包括参数计算模块、延时单元生成器、加法单元生成器、乘法单元生成器、求和单元生成器、溢出处理单元生成器、单通道单元生成器和顶层单元生成器。
可选的,步骤2中RTL模型生成的具体步骤为:
步骤2.1,运行延时单元生成器,生成延时模块hbfir_delay,打印在文件hbfir_delay.v中;
步骤2.2,运行加法单元生成器,生成加法模块hbfir_adder,打印在文件hbfir_adder.v中;
步骤2.3,运行乘法单元生成器,生成乘法模块hbfir_mult,打印在文件hbfir_mult.v中;
步骤2.4,运行求和单元生成器,生成加法模块hbfir_sum,打印在文件hbfir_sum.v中;
步骤2.5,运行溢出处理单元生成器,生成溢出处理模块hbfir_overrange_handle,打印在文件hbfir_overrange_handle.v;
步骤2.6,运行单通道单元生成器,生成单通道模块hbfir_signle_channel,打印在文件hbfir_signle_channel.v中;单通道分别例化子模型hbfir_adder,hbfir_mult,hbfir_sum和hbfir_overrange_handle,例化名分别为u_hbfir_adder,u_hbfir_mult,u_hbfir_sum和u_hbfir_overrange_handle;
步骤2.7,运行顶层单元生成器,生成半带滤波器的顶层模型,打印在文件hbfir_top.v中;顶层单元例化两个hbfir_signle_channel模块,例化名称分别为hbfir_signle_channel_odd和hbfir_signle_channel_even;顶层单元同时例化一个延时模块hbfir_delay。
可选的,所述步骤2.1包括:
步骤2.1.1,读取文件parameter_output.txt中的输入数据位宽data_in_width和延时周期数delay_cycle;
步骤2.1.2,打印输入输出信号:输入信号分别为clk,din_n_0,din_n_2;输出信号为din_n_4,din_n_6,din_n_8,din_n_10…;输出共有2*delay_cycle个;
步骤2.1.3,打印always时序结构产生所有的输出信号,其中din_n_4,din_n_8,din_n_12…由din_n_0延时产生,din_n_6,din_n_10,din_n_14…由din_n_2延时产生。
可选的,步骤2.2具体为:
步骤2.2.1,读取文件parameter_output.txt中的输入数据位宽data_in_width和滤波器长度filter_length;
步骤2.2.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/2个,分别为din_n_0,din_n_2,din_n_4,din_n_6……;输出信号有(filter_length+1)/4个,分别为adder_00,adder_02,adder_04……;
步骤2.2.3,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号为半带折叠结构对应的延时数据相加。
可选的,所述步骤2.3包括:
步骤2.3.1,读取文件parameter_output.txt中的加法器位宽adder_width、滤波器长度filter_length以及滤波器的定点系数位宽coefficient_width;读取文件coefficient.txt中的滤波器定点系数至系数数组coefficient_array;
步骤2.3.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/4个,分别为adder_00,adder_02,adder_04……;输出信号也是(filter_length+1)/4个,分别为mult_h00,mult_h02,mult_h04……;
步骤2.3.3,打印滤波器系数,共(filter_length+1)/4个;系数全部定义为有符号数,位宽均为coefficient_width,系数分别为h00,h02,h04……;
步骤2.3.4,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号数值为对应半带滤波器系数和加法器的乘积。
可选的,所述步骤2.4包括:
步骤2.4.1,读取文件parameter_output.txt中的乘法器位宽product_width,滤波器长度filter_length,截位长度truncation_width和加法流水线级数sum_stage;
步骤2.4.2,打印输入输出信号,输入时钟信号为clk;输入信号有(filter_length+1)/4个,分别为mult_h00,mult_h02,mult_h04……,输出信号为sum;
步骤2.4.3,按照加法器流水线级数打印加法器,每一个加法器只对两个数据进行相加;每一级的加法器个数分别为2^(sum_stage-1),2^(sum_stage-2)……直至最后一级加法器只有单个加法器;第一级加法器对输入信号mult_h00,mult_h02,mult_h04……相加,如果输入数据不够2^sum_stage,则用0补齐;
步骤2.4.4,对步骤2.4.3最后一级加法器的计算结果截位后输出。
可选的,所述步骤2.7包括:
步骤2.7.1,计算延时节拍,从所述步骤2.1生成的延时模块hbfir_delay输出端口连接对应值作为两相输出dout_n_0和dout_n_2;
步骤2.7.2,例化所述步骤2.1生成的延时模块hbfir_delay为u_hbfir_delay;例化两个所述步骤2.6生成的单通道模块hbfir_single_channel,分别为hbfir_single_channe_odd和hbfir_single_channel_even,对应输出分别为dout_n_1和dout_n_3。
可选的,所述步骤3包括:
步骤3.1,打开fh_tb文件操作句柄,指向新文件tb_hbfir_top.v装载后续步骤打印的testbench代码;抓取RTL源代码,识别input output信号及其位宽;
步骤3.2,打印文件头,module名称为tb_hbfir;
步骤3.3,打印input和output对应的reg和wire;
步骤3.4,打印initial模块,为所有reg型变量赋初值为0;
步骤3.5,打印时钟模块,产生时钟信号clk;
步骤3.6,打开文件操作句柄fh_case,指向新文件CASE0.v;打印测试例至文件CASE0.v,包括随机数激励产生和复位信号rst跳变信号;
步骤3.7,打印波形保存命令至文件CASE0.v;根据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择保存波形verilog语法,如果参数输入参数为0,保存shm格式波形,如果参数为1保存fsdb格式波形;关闭文件操作句柄fh_case;
步骤3.8,打印滤波器例化;
步骤3.9,打印仿真配置环境文件list.f和run,其中list.f为仿真文件目录,run为仿真运行命令;据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择仿真器语法,如果参数输入参数为0,使用NC_verilog仿真,如果未1使用VCS仿真;
步骤3.10,新建目录tb,dc,formal,CASE,waveform,data_in,data_out;将list.f,run和tb_hbfir.v移动到tb文件夹下;CASE0.v移动到CASE目录下。
在本发明提供的半带插值滤波器RTL模型自动生成方法中,RTL模型生成器从文件coefficient.txt和parameter_input.txt中读取滤波器的配置信息,计算滤波器组件模型的全部参数,将生成的参数保存在文件parameter_output.txt中;RTL模型生成器读取滤波器系数文件,根据步骤1中计算的滤波器组件模型的参数生成全部滤波器组件的RTL模型;抓取RTL源代码,打印testbench文件,生成测试环境。本发明避免了高速半带滤波器代码设计调试周期长,难度大的问题,实现了开发过程中RTL模型设计和验证代码的自动化生成。
附图说明
图1是程序架构;
图2是实施例中coefficient.txt文件内容;
图3是实施例中parameter_input.txt文件内容;
图4是实施例中运行过程中产生的parameter_output.txt内容;
图5是RTL模型生成器生成的半带滤波器RTL模型架构;
图6是程序运行后Verdi文件层次视图;
图7是Makefile文件内容;
图8是程序运行前文件树形结构;
图9是程序运行后文件树形结构。
具体实施方式
以下结合附图和具体实施例对本发明提出的一种半带插值滤波器RTL模型自动生成方法作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
实施例一
本发明提供了一种半带插值滤波器RTL模型自动生成方法,程序架构如图1所示。
上述方法具体包括如下步骤:
步骤1、RTL模型生成器从文件coefficient.txt和parameter_input.txt中读取滤波器的配置信息,计算滤波器组件模型的全部参数,将生成的参数保存在文件parameter_output.txt中。文件coefficient.txt为滤波器系数文件,包含半带滤波器的全部定点化系数,但不包括0系数;文件parameter_input.txt为滤波器配置文件,包含滤波器输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度;所述滤波器长度L满足L=4N+3,且中心对称,其中N为非负整数。步骤1的具体步骤为:
步骤1.1,读取文件parameter_input.txt中的全部信息,储存在数组parameter_in_array中,剔除数组parameter_in_array中的无效信息;将输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度分别存储在变量data_in_width,data_out_width,coefficient_width,filter_length中;
步骤1.2,计算需要的乘法器个数product_num=(filter_length+1)/4=3,根据乘法器个数计算需要的加法流水线级数sum_stage=2;根据滤波器长度计算延时单元需要的延时周期数delay_cycle=8;计算加法器位宽adder_width=data_in_width+1=17;计算乘法器位宽product_widthh=data_in_width+coefficient_width=28;计算截位宽度trucation_width=product_width-data_out_width-1=11;
步骤1.3,首先将步骤1.1中数组parameter_in_array全部打印到文件parameter_output.txt中;即:
data_in_wide:16
data_out_wide:16
coefficient_wide:12
filter_length:11。
然后将步骤1.2计算出的全部参数打印到文件parameter_output.txt,即:
sum_stage:2
delay_cycle:8
adder_width:17
product_width:28
truncation_width:11。
图2是本发明实施例中文件coefficient.txt,coefficient.txt依次存放N+2个非0定点系数,图2中系数为29,-214,1209,2048,对应的全部半带滤波器系数为29,0,-214,0,1209,2048,1209,0,-214,0,29;图3是本发明实施例中parameter_input.txt内容其中:
“data_in_wide:16”表示配置输入位宽为16bit;
“data_out_wide:16”表示配置输出位宽为16bit;
“coefficient_wide:12”表示定点系数位宽为12bit;
“filter_length:11”表示滤波器长度为11。
所述滤波器组件模型的全部参数包括加法流水线级数、延时周期数、加法器位宽、乘法器位宽、截位宽度,以及所述滤波器配置文件parameter_input.txt中的全部信息。
图4是实施例中运行过程中产生的parameter_output.txt内容。其中:
“data_in_wide:16”表示配置输入位宽为16bit;
“data_out_wide:16”表示配置输出位宽为16bit;
“coefficient_wide:12”表示定点系数位宽为12bit;
“filter_length:11”表示滤波器长度为11;
“sum_stage:2”表示所述求和单元生成器(hbfir_sum_gen.pl)需要两级流水计算加法;
“delay_cycle:8”表示所述延时单元生成器(hbfir_delay_gen.pl)延时8个周期;
“adder_width:17”表示所述加法单元生成器(hbfir_adder_gen.pl)输出数据位宽为17比特;
“product_width:28”表示所述乘法单元生成器(hbfir_mult_gen.pl)输出的乘法位宽为28比特;
“truncation_width:11”表示所述求和单元生成器(hbfir_sum_gen.pl),需要在最终输出截断11比特数据。
步骤2、RTL模型生成器读取滤波器系数文件parameter_output.txt,根据步骤1中计算的滤波器组件模型的参数生成全部滤波器组件的RTL模型;所述RTL模型生成器包括参数计算模块、延时单元生成器、加法单元生成器、乘法单元生成器、求和单元生成器、溢出处理单元生成器、单通道单元生成器和顶层单元生成器。步骤2中RTL模型生成的具体步骤为:
步骤2.1,运行延时单元生成器(hbfir_delay_gen.pl),生成延时模块hbfir_delay,打印在文件hbfir_delay.v中;
所述步骤2.1具体为:
步骤2.1.1,读取文件parameter_output.txt中的输入数据位宽data_in_width=17和延时周期数delay_cycle;
步骤2.1.2,打印输入输出信号:输入信号分别为clk,din_n_0,din_n_2;输出信号为din_n_4,din_n_6,din_n_8,din_n_10…,din_n_32,din_n_34;输出共有2*delay_cycle=16个;
步骤2.1.3,打印always时序结构产生所有的输出信号,其中din_n_4,din_n_8,din_n_12…,din_n_32由din_n_0延时产生,din_n_6,din_n_10,din_n_14…,din_n_34由din_n_2延时产生。
步骤2.2,运行加法单元生成器(hbfir_adder_gen.pl),生成加法模块hbfir_adder,打印在文件hbfir_adder.v中;
步骤2.2具体为:
步骤2.2.1,读取文件parameter_output.txt中的输入数据位宽data_in_width=17和滤波器长度filter_length=11;
步骤2.2.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/2=6个,分别为din_n_0,din_n_2,din_n_4,din_n_6,din_n_8,din_n_10;输出信号有(filter_length+1)/4=3个,分别为adder_00,adder_02,adder_04;
步骤2.2.3,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号为半带折叠结构对应的延时数据相加。
步骤2.3,运行乘法单元生成器(hbfir_mult_gen.pl),生成乘法模块hbfir_mult,打印在文件hbfir_mult.v中;
所述步骤2.3包括:
步骤2.3.1,读取文件parameter_output.txt中的加法器位宽adder_width=17、滤波器长度filter_length=11以及滤波器的定点系数位宽coefficient_width=12;读取文件coefficient.txt中的滤波器定点系数至系数数组coefficient_array={29,-214,1209,2048};
步骤2.3.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/4=3个,分别为adder_00,adder_02,adder_04;输出信号也是(filter_length+1)/4=3个,分别为mult_h00,mult_h02,mult_h04;
步骤2.3.3,打印滤波器系数,共(filter_length+1)/4=3个;系数全部定义为有符号数,位宽均为coefficient_width=12,系数分别为h00=29,h02=-214,h04=1209;
步骤2.3.4,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号数值为对应半带滤波器系数和加法器的乘积。
步骤2.4,运行求和单元生成器(hbfir_sum_gen.pl),生成加法模块hbfir_sum,打印在文件hbfir_sum.v中;
所述步骤2.4具体为:
步骤2.4.1,读取文件parameter_output.txt中的乘法器位宽product_width,滤波器长度filter_length,截位长度truncation_width和加法流水线级数sum_stage;
步骤2.4.2,打印输入输出信号,输入时钟信号为clk;输入信号有(filter_length+1)/4=3个,分别为mult_h00,mult_h02,mult_h04……,输出信号为sum;
步骤2.4.3,按照加法器流水线级数打印加法器,每一个加法器只对两个数据进行相加;每一级的加法器个数分别为2^(sum_stage-1)=2,2^(sum_stage-2)=1;第一级加法器对输入信号mult_h00,mult_h02,mult_h04相加,如果输入数据不够2^sum_stage,则用0补齐;第一级加法有两个加法器,即:
sum_stage1_0=add_h00+add_h02;
sum_stage1_1=add_h04+0;
第二级加法器有一级加法直接输出,即:
sum_stage2_0=sum_stage1_0+sum_stage1_1。
步骤2.4.4,对步骤2.4.3最后一级加法器的计算结果截位后输出,即sum[17:0]=sum_stage2_0[28:11]。
步骤2.5,运行溢出处理单元生成器(hbfir_overflow_handle_gen.pl),生成溢出处理模块hbfir_overrange_handle,打印在文件hbfir_overrange_handle.v;
步骤2.6,运行单通道单元生成器(hbfir_single_channel_gen.pl),生成单通道模块hbfir_signle_channel,打印在文件hbfir_signle_channel.v中;单通道分别例化子模型hbfir_adder,hbfir_mult,hbfir_sum和hbfir_overrange_handle,例化名分别为u_hbfir_adder,u_hbfir_mult,u_hbfir_sum和u_hbfir_overrange_handle;
步骤2.7,运行顶层单元生成器(hbfir_top_gen.pl),生成半带滤波器的顶层模型,打印在文件hbfir_top.v中;顶层单元例化两个hbfir_signle_channel模块,例化名称分别为hbfir_signle_channel_odd和hbfir_signle_channel_even;顶层单元同时例化一个延时模块hbfir_delay。
所述步骤2.7包括:
步骤2.7.1,计算延时节拍,从所述步骤2.1生成的延时模块hbfir_delay输出端口连接对应值作为两相输出dout_n_0和dout_n_2;
步骤2.7.2,例化所述步骤2.1生成的延时模块hbfir_delay为u_hbfir_delay;例化两个所述步骤2.6生成的单通道模块hbfir_single_channel,分别为hbfir_single_channe_odd和hbfir_single_channel_even,对应输出分别为dout_n_1和dout_n_3。
步骤2全部执行完毕后,生成的半带滤波器RTL模型架构如图5所示。
步骤3、抓取RTL源代码,打印testbench文件,生成测试环境。所述步骤3具体包括:
步骤3.1,打开fh_tb文件操作句柄,指向新文件tb_hbfir_top.v装载后续步骤打印的testbench代码;抓取RTL源代码,识别input output信号及其位宽;
步骤3.2,打印文件头,module名称为tb_hbfir;
步骤3.3,打印input和output对应的reg和wire;
步骤3.4,打印initial模块,为所有reg型变量赋初值为0;
步骤3.5,打印时钟模块,产生时钟信号clk;
步骤3.6,打开文件操作句柄fh_case,指向新文件CASE0.v;打印测试例至文件CASE0.v,包括随机数激励产生和复位信号rst跳变信号;
步骤3.7,打印波形保存命令至文件CASE0.v;根据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择保存波形verilog语法,如果参数输入参数为0,保存shm格式波形,如果参数为1保存fsdb格式波形;关闭文件操作句柄fh_case;
步骤3.8,打印滤波器例化;
步骤3.9,打印仿真配置环境文件list.f和run,其中list.f为仿真文件目录,run为仿真运行命令;据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择仿真器语法,如果参数输入参数为0,使用NC_verilog仿真,如果未1使用VCS仿真;
步骤3.10,新建目录tb,dc,formal,CASE,waveform,data_in,data_out;将list.f,run和tb_hbfir.v移动到tb文件夹下;CASE0.v移动到CASE目录下。
步骤3执行完毕后,Verdi文件层次视图如图6所示。
步骤1-3采用Makefile命令顺序执行,具体内容如图7所示。Makefile命令执行前文件树结构如图8所示,Makefile命令执行后的文件树结构如图9所示。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
Claims (7)
1.一种半带插值滤波器RTL模型自动生成方法,其特征在于,包括:
步骤1、RTL模型生成器从文件coefficient.txt和parameter_input.txt中读取滤波器的配置信息,计算滤波器组件模型的全部参数,将生成的参数保存在文件parameter_output.txt中;
步骤2、RTL模型生成器读取滤波器系数文件,根据步骤1中计算的滤波器组件模型的参数生成全部滤波器组件的RTL模型;
步骤3、抓取RTL源代码,打印testbench文件,生成测试环境;
文件coefficient.txt为滤波器系数文件,包含半带滤波器的全部定点化系数,但不包括0系数;文件parameter_input.txt为滤波器配置文件,包含滤波器输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度;所述滤波器的长度L满足L=4N+3,且中心对称,其中N为非负整数;
所述滤波器组件模型的全部参数包括加法流水线级数、延时周期数、加法器位宽、乘法器位宽、截位宽度,以及所述滤波器配置文件parameter_input.txt中的全部信息;
步骤1的具体步骤为:步骤1.1,读取文件parameter_input.txt中的全部信息,储存在数组parameter_in_array中,剔除数组parameter_in_array中的无效信息;将输入数据位宽、输出数据位宽、定点系数位宽和滤波器长度分别存储在变量data_in_width,data_out_width,coefficient_width,filter_length中;
步骤1.2,计算需要的乘法器个数product_num,根据乘法器个数计算需要的加法流水线级数sum_stage;根据滤波器长度计算延时单元需要的延时周期数delay_cycle;计算加法器位宽adder_width;计算乘法器位宽product_width;计算截位宽度trucation_width;
步骤1.3,首先将步骤1.1中数组parameter_in_array全部打印到文件parameter_output.txt中;然后将步骤1.2计算出的全部参数打印到文件parameter_output.txt;
所述RTL模型生成器包括参数计算模块、延时单元生成器、加法单元生成器、乘法单元生成器、求和单元生成器、溢出处理单元生成器、单通道单元生成器和顶层单元生成器;
步骤2中RTL模型生成的具体步骤为:步骤2.1,运行延时单元生成器,生成延时模块hbfir_delay,打印在文件hbfir_delay.v中;
步骤2.2,运行加法单元生成器,生成加法模块hbfir_adder,打印在文件hbfir_adder.v中;
步骤2.3,运行乘法单元生成器,生成乘法模块hbfir_mult,打印在文件hbfir_mult.v中;
步骤2.4,运行求和单元生成器,生成加法模块hbfir_sum,打印在文件hbfir_sum.v中;
步骤2.5,运行溢出处理单元生成器,生成溢出处理模块hbfir_overrange_handle,打印在文件hbfir_overrange_handle.v;
步骤2.6,运行单通道单元生成器,生成单通道模块hbfir_signle_channel,打印在文件hbfir_signle_channel.v中;单通道分别例化子模型hbfir_adder,hbfir_mult,hbfir_sum和hbfir_overrange_handle,例化名分别为u_hbfir_adder,u_hbfir_mult,u_hbfir_sum和u_hbfir_overrange_handle;
步骤2.7,运行顶层单元生成器,生成半带滤波器的顶层模型,打印在文件hbfir_top.v中;顶层单元例化两个hbfir_signle_channel模块,例化名称分别为hbfir_signle_channel_odd和hbfir_signle_channel_even;顶层单元同时例化一个延时模块hbfir_delay。
2.如权利要求1所述的半带插值滤波器RTL模型自动生成方法,其特征在于,所述步骤2.1包括:
步骤2.1.1,读取文件parameter_output.txt中的输入数据位宽data_in_width和延时周期数delay_cycle;
步骤2.1.2,打印输入输出信号:输入信号分别为clk,din_n_0,din_n_2;输出信号为din_n_4,din_n_6,din_n_8,din_n_10…;输出共有2*delay_cycle个;
步骤2.1.3,打印always时序结构产生所有的输出信号,其中din_n_4,din_n_8,din_n_12…由din_n_0延时产生,din_n_6,din_n_10,din_n_14…由din_n_2延时产生。
3.如权利要求2所述的半带插值滤波器RTL模型自动生成方法,其特征在于,步骤2.2具体为:
步骤2.2.1,读取文件parameter_output.txt中的输入数据位宽data_in_width和滤波器长度filter_length;
步骤2.2.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/2个,分别为din_n_0,din_n_2,din_n_4,din_n_6……;输出信号有(filter_length+1)/4个,分别为adder_00,adder_02,adder_04……;
步骤2.2.3,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号为半带折叠结构对应的延时数据相加。
4.如权利要求3所述的半带插值滤波器RTL模型自动生成方法,其特征在于,所述步骤2.3包括:
步骤2.3.1,读取文件parameter_output.txt中的加法器位宽adder_width、滤波器长度filter_length以及滤波器的定点系数位宽coefficient_width;读取文件coefficient.txt中的滤波器定点系数至系数数组coefficient_array;
步骤2.3.2,打印输入输出信号:输入时钟信号为clk;输入数据信号有(filter_length+1)/4个,分别为adder_00,adder_02,adder_04……;输出信号也是(filter_length+1)/4个,分别为mult_h00,mult_h02,mult_h04……;
步骤2.3.3,打印滤波器系数,共(filter_length+1)/4个;系数全部定义为有符号数,位宽均为coefficient_width,系数分别为h00,h02,h04……;
步骤2.3.4,打印always时序结构产生所有的输出信号,输入输出均按照有符号数进行处理,输出信号数值为对应半带滤波器系数和加法器的乘积。
5.如权利要求4所述的半带插值滤波器RTL模型自动生成方法,其特征在于,所述步骤2.4包括:
步骤2.4.1,读取文件parameter_output.txt中的乘法器位宽product_width,滤波器长度filter_length,截位长度truncation_width和加法流水线级数sum_stage;
步骤2.4.2,打印输入输出信号,输入时钟信号为clk;输入信号有(filter_length+1)/4个,分别为mult_h00,mult_h02,mult_h04……,输出信号为sum;
步骤2.4.3,按照加法器流水线级数打印加法器,每一个加法器只对两个数据进行相加;每一级的加法器个数分别为2^(sum_stage-1),2^(sum_stage-2)……直至最后一级加法器只有单个加法器;第一级加法器对输入信号mult_h00,mult_h02,mult_h04……相加,如果输入数据不够2^sum_stage,则用0补齐;
步骤2.4.4,对步骤2.4.3最后一级加法器的计算结果截位后输出。
6.如权利要求5所述的半带插值滤波器RTL模型自动生成方法,其特征在于,所述步骤2.7包括:
步骤2.7.1,计算延时节拍,从所述步骤2.1生成的延时模块hbfir_delay输出端口连接对应值作为两相输出dout_n_0和dout_n_2;
步骤2.7.2,例化所述步骤2.1生成的延时模块hbfir_delay为u_hbfir_delay;例化两个所述步骤2.6生成的单通道模块hbfir_single_channel,分别为hbfir_single_channe_odd和hbfir_single_channel_even,对应输出分别为dout_n_1和dout_n_3。
7.如权利要求6所述的半带插值滤波器RTL模型自动生成方法,其特征在于,所述步骤3包括:
步骤3.1,打开fh_tb文件操作句柄,指向新文件tb_hbfir_top.v装载后续步骤打印的testbench代码;抓取RTL源代码,识别input output信号及其位宽;
步骤3.2,打印文件头,module名称为tb_hbfir;
步骤3.3,打印input和output对应的reg和wire;
步骤3.4,打印initial模块,为所有reg型变量赋初值为0;
步骤3.5,打印时钟模块,产生时钟信号clk;
步骤3.6,打开文件操作句柄fh_case,指向新文件CASE0.v;打印测试例至文件CASE0.v,包括随机数激励产生和复位信号rst跳变信号;
步骤3.7,打印波形保存命令至文件CASE0.v;根据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择保存波形verilog语法,如果参数输入参数为0,保存shm格式波形,如果参数为1保存fsdb格式波形;关闭文件操作句柄fh_case;
步骤3.8,打印滤波器例化;
步骤3.9,打印仿真配置环境文件list.f和run,其中list.f为仿真文件目录,run为仿真运行命令;据Design_Auto_Gen_TB_v2.3.pl的输入参数自动选择仿真器语法,如果参数输入参数为0,使用NC_verilog仿真,如果未1使用VCS仿真;
步骤3.10,新建目录tb,dc,formal,CASE,waveform,data_in,data_out;将list.f,run和tb_hbfir.v移动到tb文件夹下;CASE0.v移动到CASE目录下。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010896699.XA CN111988018B (zh) | 2020-08-31 | 2020-08-31 | 一种半带插值滤波器rtl模型自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010896699.XA CN111988018B (zh) | 2020-08-31 | 2020-08-31 | 一种半带插值滤波器rtl模型自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111988018A CN111988018A (zh) | 2020-11-24 |
CN111988018B true CN111988018B (zh) | 2022-08-16 |
Family
ID=73440476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010896699.XA Active CN111988018B (zh) | 2020-08-31 | 2020-08-31 | 一种半带插值滤波器rtl模型自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111988018B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113568598B (zh) * | 2021-09-26 | 2021-12-14 | 中科亿海微电子科技(苏州)有限公司 | 基于yosys实现求和运算的FPGA逻辑综合方法及装置 |
CN117973288B (zh) * | 2024-04-01 | 2024-06-11 | 西安智多晶微电子有限公司 | 一种基于fpga dsp的滤波器ip生成*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592103A (zh) * | 2003-08-30 | 2005-03-09 | 华为技术有限公司 | N阶半带插值滤波器 |
CN111125976A (zh) * | 2019-12-06 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种rtl模型自动生成方法 |
-
2020
- 2020-08-31 CN CN202010896699.XA patent/CN111988018B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592103A (zh) * | 2003-08-30 | 2005-03-09 | 华为技术有限公司 | N阶半带插值滤波器 |
CN111125976A (zh) * | 2019-12-06 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种rtl模型自动生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111988018A (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sander et al. | System modeling and transformational design refinement in ForSyDe [formal system design] | |
EP1604312B1 (en) | Mixed-level hdl/high-level co-simulation of a circuit design | |
CN111988018B (zh) | 一种半带插值滤波器rtl模型自动生成方法 | |
Taylor | A single modulus complex ALU for signal processing | |
Aggarwal et al. | FIR filter designing using Xilinx system generator | |
CN111125976B (zh) | 一种rtl模型自动生成方法 | |
George et al. | Hardware design procedure: principles and practices | |
US6937969B1 (en) | Method for determining signals in mixed signal systems | |
Al-Dulaimi et al. | Design and Implementation of Communication Digital FIR Filter for Audio Signals on the FPGA Platform. | |
Radecka et al. | Arithmetic transforms for compositions of sequential and imprecise datapaths | |
US6401231B1 (en) | Method and apparatus for performing both negative and positive slack time budgeting and for determining a definite required constraint during integrated circuit design | |
Pulkkinen et al. | Integration of SDL and VHDL for high-level digital design | |
Shamaly et al. | A transformation for necessary optimality conditions for systems with polynomial nonlinearities | |
Lora et al. | Automatic integration of cycle-accurate descriptions with continuous-time models for cyber-physical virtual platforms | |
Lavagno et al. | A Simulink (c)-based approach to system level design and architecture selection | |
US7082594B1 (en) | Compilation in a high-level modeling system | |
Guillou et al. | High Level Design of Digital Filters in Mobile Comunications | |
Sarma et al. | High-level synthesis: Technology transfer to industry | |
Kountouris et al. | A method for the generation of HDL code at the RTL level from a high-level formal specification language | |
Boksuwan et al. | Code generation of fractional filters for dsPIC microcontrollers | |
Sowmya et al. | A 6tap Fir Filter Implementation Using Modified Bachet Architecture For Reduced Mapped Resources | |
Pongratz et al. | Performance evaluation of mathworks hdl coder as a vendor independent dfe generation | |
Haase et al. | Design Refinement of EmbeddedMixed-Signal Systems | |
Galkin et al. | Towards the Automatic Transformation of the SIMULINK Model into an FPGA-in-Loop System and its Real-Time Simulation | |
Merkelov et al. | Design and Implementation of Sampling Rate Converters for Conversions between Arbitrary Sampling Rates |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |