FSK解调Verilog的实现及仿真

2015-05-30 10:00向舜然
科技创新与应用 2015年20期

摘 要:文章主要内容是根据建立的FSK解调算法模型设计各个模块的逻辑结构,并用Verilog代码实现,包括量化模块、乘法模块、差分模块。然后通过MATLAB、simulink、modelsim、QuartusII等软件完成代码的仿真验证。联合仿真测试电路功能的正确性。

关键词:simulink;modelsim;MATLAB

1 Verilog语言及modelsim简介

Verilog HDL 语言是硬件描述语言之一,常用的硬件描述语言有VHDL和Verilog,在欧美国家VHDL的使用要大于Verilog,而在中国Verilog所占份额要大于VHDL,Verilog语言与C语言非常相似,可以说是基于C语言的结构而发展起来的,VHDL语言的格式没有Verilog通俗易懂,但是VHDL更接近硬件,综合起来要优于Verilog。可以说Verilog和VHDL各有所长[1]。早期的集成电路模板是工程师根据电路原理图手工绘制的,由于早期的电路简单,所以这种手工绘制的方法暂时可以满足需求,但是随着集成电路的集成度和复杂度的增加,手工绘制越来越不能满足设计的需要,并且时常会出现一些错误。这样硬件描述语言就应运而生,早期硬件描述语言只是起到仿真和验证的作用,随着运用越来越广泛和后期添加功能,Verilog逐渐被设计者使用。到了今天,硬件描述语言Verilog已经广泛的运用于大规模、超大规模集成电路的设计。电子设计自动化也越来越不能离开硬件描述语言,并且衍生出新的语言比如:SystemVerilog。等高级语言。总而言之,Verilog解放人的大脑,让计算机强大的功能来实现人的电路思想[1]。Mentor公司的ModelSim是作为一款最优秀最精准的仿真软件,不仅仅能给用户提供一个简单易操作的界面环境,而且支持VHDL和Verilog混仿仅有的单内核软件。这个软件优化了仿真技术、可以使用Tcl/Tk命令,modelsim具有速度快编译代码普适性的特点,有利于用户使用并保护IP核,是 FPGA/ASIC设计的首选仿真软件[2]。

2 FSK解调系统总体设计

解调算法具体的设计指标为:

(1)输入信号码率10Kbps;(2)中频为fc=30KHz;(3)频率偏差?驻f=5KHz;根据第差分解调算法原理,建立解调算法Verilog系统框图,其中包括量化单元、差分滤波器、乘法器、低通滤波器等模块。

2.1 量化模块

量化模块将前端RF接收到的数字化后的调制信号进行量化。其采样的周期,量化的位数直接影响解调的性能和最终的芯片面积。这里对量化位数进一步说的。前级量化按照表1所示来量化,其中x是采样输入数据。

表1 接收信号量化

编写抽样量化Verilog代码。其中base_in是基带接收信号默认为经过采样的9位信号,由于没有调制模块,这里通过添加DDS,然后将数据导入modelsim测试文件。然后经过量化模块,实现位数的降低,最终输出为3位。量化模块最主要的是比较器模块。通过modelsim后仿真,最后综合得到量化模块的综合RTL级电路。

2.2 低通滤波器及IP核使用

低通滤波器的作用的滤除谐波分量。基于码率为10Kbps只需要滤除10Kbps以上的频率分量[3]。首先要利用fdatool工具获得抽头系数:首先进入fdatool工具设置好滤波器的参数。FPASS:9600。FSTOP:12000。specify order:60。Response type:lowpass。在设置好以上参数后,点击设计滤波器。然后生成滤波器的系数。得到的数据都是浮点数经过定点过后的数值。并且在低通滤波器中还可以输入滤波器的截断方式以及累乘加法的定点位数。这里选择的是与输入相同的位数也就是8位。然后通过与差分滤波器设计一样的流程设计了低通滤波器模块其Verilog代码其中输入数据data_in为乘法器输出的8位信号。data_out为输出为8位的信号,这里由于运算的需要通过饱和截断模块之后运算结果由最初的20位变为8位,以减少后级处理的负担和开销。在通过低通滤波器后,由于后级有维特比译码处理单元,而维特比译码比较的是欧式距离而不是汉明距离,因此在这里未采用抽样判决模块,而是直接将8位数据输入到维特比译码模块,而维特比译码模块在前级会将8位信号进行量化,变为3位8级的输入,然后判断欧式距离。由于FPGA本身带有乘法器IP核,因此这里直接例化乘法器模块添加到系统中,直接供给系统使用。

3 仿真

前面完成了从算法设计到Verilog实现的步骤,并针对数字集成电路的低功耗优化进行了Verilog代码设计,下面主要完成代码的仿真验证。通过MATLAB、simulink、modelsim、QuartusII等软件联合仿真测试电路功能的正确性。首先通过在modelsim软件中添加testbench文件測试解调模块、维特比译码模块的功能,并严格对比MATLAB的输出来判定代码的正确性。然后选取Altera公司的CycloneIV系列FPGA芯片EP4CGX22CF19C6作为目标芯片,通过QuartusII软件综合整个解调解码系统生成报告。通过分析系统性能满足设计要求。

3.1 量化模块仿真

图1 Verilog量化模块仿真图

从图1可以看到输入基带信号由“0”变为“1”的过程中,量化后的调制信号周期缩短为原来的一半。并且量化的位数和范围符合表1所示。

3.2 差分滤波器仿真

首先在MATLAB建立的差分滤波器模型中输入5000个随机信号,然后将MATLAB模型输出的5022个结果保存到data.txt文件里。将输入MATLAB模型的5000个随机信号生成testbench文件tb3.v,通过modelsim软件测试差分滤波器模块。将modelsim仿真结果导出到data_out.txt。这个过程是通过下面的Verilog代码实现的:w_file = $fopen("data_out.txt"); $fmonitor(w_file,"%b",filter_out);然后对比分析MATLAB与modelsim的输出。由于对比数量巨大无法通过肉眼观察,因此通过ultraedit软件的比较工具实现MATLAB的滤波器输出和modelsim仿真滤波器的输出。一般设置输出数据文档data.txt是MATLAB的输出,data_out.txt为modelsim的输出。通过最后比对可以得到MATLAB模型与modelsim输出结果完全一致有5023行匹配,0行差异。那么用Verilog建立的FIR滤波器模块能正确实现所要求的滤波器功能。文章设计的滤波器可以修改抽头系数、输出位宽、输入位宽,为通用型滤波器。低通滤波器就是在此滤波器的基础上改变参数得到。因此其仿真结果不再展示。

3.3 差分解调仿真

输入信号以9位二进制的形式进入滤波器模块,通过量化模块量化为3位二进制信号,在分别进入乘法器和差分滤波器,通过差分滤波器的一路信号经过差分滤波之后为11位二进制信号,然后与进入乘法器(3*11位)的另外一路信号相乘,再做截断处理得到8位信号。通过低通滤波器做卷积相乘,得到16位信号,也做截断处理得到8位信号。最后通过量化判断得到基带原始信号[3]。通过波形的对比,证明能模块能正确解调信号。通过前仿真后通过为了验证代码的正确性,首先通过MATLAB生成原始基带信号,然后调制成20KHz和40KHz的调频信号,将调频信号取离散采样,将得到的数据输入testbench作为采样过后的信号,通过modelsim级联仿真验证代码时序正确性。选Altera公司的CycloneIV系列FPGA芯片EP4CGX22CF19C6,在Altera公司开发的集成开发工具QuartusII中输入代码,进行综合和布局布线,提取器件的延时参数,根据Quartus II的静态时序分析报告所示。然后得到sdf/sdn文件导入modelsim[4],验证代码的时序正确性。报告得到,驱动时钟"clk"时间裕量非常充足,其最高工作速度可以达到220MHz,而解调周期是32个时钟周期,解调速度满足10kpbs的要求[5]。

4 结束语

文章通过分析FSK解调的部分模块,通过MATLAB建立解调的各个模块,并用Verilog代码实现,主要内容是根据建立的FSK解调算法模型设计各个模块的逻辑结构,重点分析了量化模块、低通滤波器模块以及乘法模块。仿真验证中,通过搭建一个联系起modelsim、MATLAB、simulink的平台来验证代码的正确性,通过对比代码的输入输出与MATLAB及simulink的输入输出得到代码的功能是否正确。首先验证了设计的正确性,其次在以后的前仿真中也可以利用搭建起来的这一平台来验证代码的正确性。

参考文献

[1]陈磊.基于FPGA的DMR系统4FSK调制解调的实现[D].西安:西安电子科技大学,2011.

[2]谢晓燕,宁永海.基于MATLAB的通信系统仿真应用研究[J].通信技术,2007,12(40):82-84.

[3]黎玉玲,张延华.基于MATLAB的通信系统仿真平台设计[J].计算机应用研究,2006(10):248-250.

[4]李莹,路卫军,于敦山.一种在FPGA上实现FIR數字滤波器的资源优化算法[J].北京大学学报(自然科学版),2009(45):222-226.

[5]冷邦平.高速FIR数字滤波器在FPGA上的实现[D].成都:电子科技大学,2008.

作者简介:向舜然(1987,3-),男,重庆人,硕士研究生,研究方向:数字信号处理FPGA实现,单位:重庆城市管理职业学院。