【技术实现步骤摘要】
一种基于python实现CIC滤波器代码自动生成的方法
[0001]本专利技术涉及数字下变频
,特别涉及一种基于python实现CIC滤波器代码自动生成的方法。
技术介绍
[0002]在数字下变频技术中,将信号与振荡器产生的载波信号进行混频,混频后的信号中心频谱被搬移至低频处。随后利用抽取滤波器滤除高频信号,最终输出低速基带数据,因此抽取滤波器对数字下变频电路至关重要。
[0003]由于CIC滤波器具有无乘法器、无系数存储器,占用资源少,实现简单且速度快等特性,因此适用于软件无线电通信系统中处于高采样率的数字下变频电路。现有的技术多采用多级级联的CIC抽取滤波器,如图1所示,包括积分单元、抽取单元和梳状单元。由于积分单元的溢出问题,使得整个系统的数据位宽都为式B
max
=Nlog
2DM
+B
in
,所计算的最大位宽,不仅增加了硬件的使用量,也大幅增加了功耗损失。此外,对于固定抽取比的抽取器来说,不能适应不同的抽取环境,输出带宽单一,使得下一级模块的硬件消耗增 ...
【技术保护点】
【技术特征摘要】
1.一种基于python实现CIC滤波器代码自动生成的方法,其特征在于,包括如下步骤:运行python脚本,在弹出的图形化窗口依据提示输入相应的参数信息,通过列表保存收集的参数信息;对列表中的参数信息进行处理,自动生成各子模块RTL代码、模块例化RTL代码和顶层模块RTL代码;查看产生的检查结果是否存在问题。2.如权利要求1所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述python脚本通过引入tkinter库产生所述图形化窗口,按照窗口指示输入CIC滤波器的包括输入位宽、抽取倍数、延迟因子、级联数和输出位宽在内的参数信息。3.如权利要求2所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述python脚本按照verilog语法规范自动生成CIC滤波器中各子模块RTL代码、模块例化RTL代码和顶层模块RTL代码。4.如权利要求3所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述python脚本分为六个函数:第一个函数生成图形化界面;第二个函数完成接口位宽定义;第三个函数按照verilog语法规范自动生成端口定义、I/O说明、内部信号说明部分的RTL代码;第四个函数按照verilog语法规范自动生成不同分频时钟RTL代码;第五个函数按照verilog语法规范自动生成模块例化RTL代码;第六个函数完成各函数的调度管理和自动生成CIC滤波器中各模块固定的RTL代码。5.如权利要求4所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第一个函数通过引入tkinter库产生图形化窗口;按照窗口中标签Lable指示输入相应CIC滤波器的输入端口位宽B
in
、抽取倍数D、延迟因子M、级联数N和输出位宽B
out
信息,利用get()函数获取信息并将其存储在列表index中。6.如权利要求5所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第二个函数利用公式B
max
=Nlog
2DM
+B
in
和B
min
=B
max
/4计算得出整个CIC滤波器的端口的最大位宽B
max
和最小位宽B
min
保存至列表里面,其中N为级联数,D为抽取倍数,B
in
为输入端口位宽;如果最大位宽非4的整数倍,则将计算值最大位宽扩展为最接近该值的4的整数倍。7.如权利要求6所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第三个函数根据verilog语法规范自动生成端口部分的RTL代码,首先每个模块以关键词module开始,定义端口名,并将I/O说明放入端口列表中;其中输入输出和内部信号位宽为1的信号位于列表,位宽大于1的位于内嵌于列表的字典中,信号变量的名字索引分别为bus_name、bus_max和bus_min,值分别为信号名字、信号位宽的最大值和最小值;完成内部reg和wire型信号定义,通过内置函数len(max(,key=len))求得信号字符和信号位宽的最大值和最小值,依据最大长度调整RTL代码书写格式。8.如权利要求7所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第四个函数根据获取的抽取倍数D,通过运算获得不同的分频倍数,利用列表存储分频倍数,将分频倍数作为计数值,产生相应的计数器;依据时钟需求,产生计数器计数时时钟
翻转点的值或区间,并利用列表寄存,通过计数器产生不同占空比和不同分频倍数的低频时钟;分频时钟模块产生信号包括:积分器模块所需的使能信号en_itg,抽取器模块所需的采样时钟clk_decimate,梳状滤波器所需的采样时钟clk_comb和使能信号en_comb,以及串并转换模块所需的采样时钟clk_parallel_serial;其中:en_itg为clk的4分频,clk_comb为clk的D分频,clk_decimate、en_comb和clk_parallel_to_serial都为clk的4*D分频,且占空比和相位相同。9.如权利要求8所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第五个函数提取所需模块接口信息,生成模块例化RTL代码,提取文件中的字符按行分离为一个字符串列表,并赋给一个变量,预编译含有接口信息的正则表达式,利用for循环在每一行里搜索该正则表达式,如果搜索到,则进入下一步,利用for循环在每一行里搜索该正则表达式,将搜索到的字符串按空格或者逗号分离成一个个单独的字符串,以根据下标提取接口信息,通过定义模块名和连线信号以此完成模块例化。10.如权利要求9所述的基于python实现CIC滤波器代码自动生成的方法,其特征在于,所述第六个函数根据标准的verilog语法,定义CIC滤波器中基本的模块名、端口列表、输入输出端口和内部信号的表述,以及固定的逻辑功能描述和结束符,同时完成第一个函数、第二个函数、第三个函数、第四个函数和第五个函数的调度,最终完成CIC滤波器中各模块、模块例化和顶层模块RTL代码的生成;包括以下部分:调用第一个函数,生成图形化界面;调用第二个函数获取信号总线最大位宽和最小位宽;利用函数os.getcwd()获得当前python脚本所在路径,再通过os.path.dirname()函数获得当前脚本所在目录,在该目录下面创建一个新的rtl文件夹,用变量path_rtl保存该目录路径;定义各模块名称,包括:时钟生成模块、编码模块、包含一个输出端口的积分器模块、包含四个输出端口的积分器模块、抽取器模块、梳状滤波器模块、级联积分器模块、级联梳状滤波器模块和顶层模块;path_rtl目录下的各模块的RTL代码文件具体路径为path_rtl符号变量加上各模块名再加上符号“.v”并分别保存至path_rtl_clk_gen、path_rtl_code、path_rtl_itg_one、path_rtl_itg_four、path_rtl_decimation、path_rtl_comb、path_rtl_parallel_to_serial、p...
【专利技术属性】
技术研发人员:万书芹,高敏,邵杰,卓琳,蒋颖丹,王祖锦,
申请(专利权)人:中国电子科技集团公司第五十八研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。