浅析vivado和ModelSim联合仿真信号处理

(整期优先)网络出版时间:2022-11-16
/ 3

浅析vivado和ModelSim联合仿真信号处理

赵洋 ,李坤

陕西凌云电器集团有限公司设计所,陕西 宝鸡  721006

摘要:本文基于对识别音抗干扰模块的功能仿真,来浅析基于信号处理类的FPGA设计的仿真过程。通过MATLAB仿真产生激励数据文件,由vivado开发软件读取测试数据作为输入数据源,联合Modelsim产生相应的输出波形和文件进行分析,以此来判断FPGA程序是否满足设计需求。

关键词:功能仿真;信号处理类;Vivado;Modelsim;

1  引言

数字信号处理系统在很多领域中,都发挥着十分重要的作用,随着社会的不断发展,对于数字信号处理系统的功能设计要求也日益提升。FPGA技术的发展,在数字信号处理系统设计中,能够发挥出良好的作用与效果,而功能仿真是FPGA项目开发中重要一环,它是确保HDL设计代码在功能上准确无误的重要方法,对于FPGA设计效率和质量的提升,有着极大的积极作用。本文以对识别音抗干扰模块的功能仿真做为应用背景,结合实际经验,探究了信号处理类的FPGA设计的仿真过程。

2  识别音抗干扰模块的功能仿真

2.1  识别音抗干扰模块功能简介

仪表着陆功能不仅具备引导着陆功能,还可以通过识别音信号告知飞行员飞临的机场编码。识别音信号是用1020Hz±50Hz单音幅度调制到航向射频载波上产生,调制度在5%至15%限度之间。识别音发送采用国际莫尔斯电码形式,因此1020Hz±50Hz单音为键控调制。飞机在进场着陆时(射频信号强度在-101dBm左右),作用距离较远处,本身射频载波信号幅度很小,空间存在干扰信号,加之识别音信号调制度浅,键控调制的识别音信号很难区分。很有可能会出现识别音信号解析错误的情况。针对上述问题,提出改进方法以提高识别音功能抗干扰能力。此处的识别音抗干扰模块代码为mores_process.vhd。

2.2  在Vivado中和ModelSim进行联合仿真

Modelsim是优秀的HDL仿真软件之一,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速度快,编译平台与代码无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力手段,是FPGA/ASIC设计的首选仿真软件。

Vivado支持第三方仿真工具,如ModelSim或QuestaSim。这里以ModelSim为例。首先需要用ModelSim编译Xilinx库(library),Vivado提供了非常友好的用户界面用于第三方工具编译Xilinx库。编译之后生成的报告,查看编译信息。库编译完毕后即可调用ModelSim仿真,此处需要制定编译库的存放路径。下面为Vivado和Modelsim联合仿真的详细操作。

2.2.1在Vivado中进行功能仿真测试设置

a) 建立新工程添加被测模块:在Vivado2018.3中新建工程,操作菜单上的File->Project->New,建立一个Test的工程后,在左侧窗口Flow Navigator处,选择Add Sources,选择Add and creat design sources将被测试的源代码添加到新建工程里,可查看Design sources下已将mores_process.vhd模块添加成功。

b)建立被测模块的激励文件:在左侧窗口Flow Navigator处,选择Add Sources,选择Add and creat simulation sources后Creat File,建立一个mores_process_tb.v。

c)编译仿真库:使得Vivado和ModelSim进行联合仿真,就需要编译FPGA的库,此处使用的是Vivado2018.3。通过操作Vivado2018.3菜单中的Tools选择Compile Simulation Libraries可出现其窗口,选择编译库的相关操作,Simulator选ModelSim Simulator;Language语言、Library库类型和Family支持的FPGA芯片均选ALL,Compile Library Location为编译库的路径此处为E:/XILINX/SimVivado2018.3; Simulator executable path选择Modelsim安装路径此处为C:/modeltech64_10.6d/win64;Miscellaneous options为其他选项,根据需要选择相应的选项,设置完成后点击Compile。编译完成后可查看路径E:/XILINX/SimVivado2018.3下有相关的库文件和modelsim.ini。后续使用可不用再次编库,只需将此处编译库路径复制到新项目库路径处即可。

d)修改ModelSim的配置信息“modelsim.ini”:修改编译库路径下的modelsim.ini文件,此文件包含了Modelsim仿真的一些配置信息。根据仿真需要更改文件中的具体内容。Eg: Resolution = ps设置最小仿真刻度为ps;CodeCoverage = 1打开代码覆盖率等设置。

2.2.2  在Vivado中执行功能仿真的操作

a) Vivado和Modelsim联合仿真设置:在Vivado2018.3开发工具左侧窗口Flow Navigator处点击setings,选择3rd Party Simulators出现其窗口,Install Paths下的ModelSim窗口处选择modelsim软件的安装路径,此处为C:/modeltech64_10.6d/win64。Default Compiled Library Paths下的ModelSim窗口选择的是Vivado下编译库的路径,此处为E:/XILINX/SimVivado2018.3,点击OK,第三方仿真工具关联设置完成。

b)执行仿真查看输出波形:在Vivado2018.3开发工具左侧窗口Flow Navigator处点击setings,选择Simulation出现其窗口,设置Target simulator为ModelSim Simulator;Simulator language处根据实际项目使用的硬件语言选择,此处选择Mixed;Simulation Top module name为测试激励的文件名,此处为mores_process_tb;Compiled library location为编译库的路径,此处为E:/XILINX/SimVivado2018.3。切换此窗口的simulition通过modelsim.simulator.runtime设置仿真时长,此处为2500000000ns,设置完成后点击OK。在Vivado2018.3开发工具左侧窗口Flow Navigator处点击Run Simulation选Run Behavioral Simulation后开始运行,运行结束后,跳出窗口ModelSim SE-64 10.6d和Wave窗口,通过Wave窗口查看相关数据波形。

2.3  测试激励文件的设计

本测试中的测试激励文件为mores_process_tb.v。其使用的是Verilog Test Fixture语法,所有用于FPGA设计描述的Verilog语法都可以应用到Verilog Test Fixture的编写当中来,并且语法元素的意义和用法不变。其次,Verilog Test Fixture中的代码并不需要有实际的数字电路与之相对应,即便有这样的数字电路存在,我们也没必要知道,因为这些代码仅仅用于计算机仿真,而不会对应到最终的FPGA芯片实现,因此Verilog Test Fixture中还支持很多FPGA设计描述所不支持的语法元素。通过对激励文件的详细解析来明确FPGA测试激励文件的设计思路。

2.3.1 对激励文件的设计解析

一个完整的激励文件应由以下几个部分构成:

Part1:时间单位及精度定义部分。Timescale是Verilog中的一条编译指令,是用来定义时间单位和时间精度的,为后续代码指明本次仿真所使用的时间单位等信息。

Eg`timescale 1ns / 1ps

Part2:模块声明部分,它除了定义了模块的名称之外,没有任何的实质性内容。

Egmodule mores_process_tb;

Part3:变量声明部分。为了给DUT输送仿真激励以及观察DUT的输出波形,必须通过信号量将DUT的端口与仿真代码连接起来,这时就需要声明一些信号量作为媒介。除此之外,还可以定义一些仿真中的常量,例如时钟周期等。

Eg:// Inputs                                          

      reg clk_5k;

// Outputs

      wire audio;

Part4:模块例化语句。该部分例化的就是FPGA设计,也叫待仿真设计,业内常称之为Design Under Test,简称DUT。注意,在仿真代码面前,FPGA设计代码中顶层模块的地位已经被动摇,此时整个代码中的“老大”变成了仿真代码中的顶层模块。所以,此时要将整个FPGA设计作为一个元件进行声明,从而方便后续进行仿真调用。

Eg:mores_process uut (                                

     .clk_5k(clk_5k),

     ……)

Part5:复位信号生成程序块,用来生成输送给DUT的复位信号和仿真程序中的复位信号。

Eg: initial begin                                       

     reset = 0;

   #100000;

   reset = 1;

   #300000;

   reset = 0;

   end

Part6:时钟信号生成程序块,用来生成输送给DUT的时钟信号。

Eg: always  #100000 clk_5k=~clk_5k;  

Part7:数据信号生成程序块,用来生成输送给DUT的数据信号。

Eg: vor_alarm = 0;

course_modula_too_low = 0; ……

2.3.2信号处理类激励的产生

在FPGA设计过程中,目前的仿真调试工具,如ModelSim,只能提供仿真测试数据的时域波形,无法显示数据的频谱等特性,且在对数据进行分析、处理时不够方便。比如,在编写仿真测试激励文件时,依靠VHDL语言也很难产生用户所需要的具有任意信噪比的输入信号。这些问题给数字信号处理技术的FPGA设计与实现带来了不小的困难。虽然如此,FPGA开发环境中无法解决的复杂信号产生、处理、分析的问题在MATLAB软件环境中却很容易实现。因此,使用MATLAB辅助FPGA设计,用于仿真测试过程,即由MATLAB产生出所需特性的测试数据并存放在数据文件中,由Vivado等开发软件读取测试数据作为输入数据源,并对数据进行分析,以此判断FPGA程序满足设计需求。本例中使用MATLAB产生一个90Hz和150Hz混频的信号,采样频率为5K,其加入高斯白噪声后的信号作为激励信号,执行MATLAB代码后,可查看图1为生成的原始信号Figure1和图2为加入高斯白噪声信号Figure2,同时将生成激励信号的时域文件存放到Wave90_150_5k.txt

图1  Figure1 原始信号

图2  Figure2 增加了高斯白噪声的信号

2.3.3Vivado中的Testbench中读取测试数据.TXT文件的操作

Wave90_150_5k.txt为激励信号的时域数据,其为识别音干扰模块的输入信号,在Testbench文件mores_process_tb.v中读取Wave90_150_5k.txt文件的信号作为激励输入信号。

2.3.4Modelsim仿真后的输入输出对比信号

干扰信号和经过滤波代码后的信号对比,来验证识别音抗干扰模块的有效性。图3`为干扰激励信号course_1020_lpf_to_comp和经过抗干扰模块后信号course_1020_lpf_comp_out的对比。

图3 干扰激励信号和过抗干扰模块后信号的对比

3  结束语

本文采用vivado和Modelsim联合仿真的方式,对抗干扰模块进行了功能仿真,通过抗干扰前后信号的对比,可以看到加入高斯白噪声信号通过抗干扰模块后可滤除信号上的噪声信号,因此通过功能仿真可验证抗干扰模块设计的有效性。

参考文献:[1]杜勇  数字调制解调技术的MATLAB与FPGA实现  第1版 2014年7月

[2]狄超 刘萌   FPGA之道  2014年8月

[3]杨瑞  论文浅析仪表着陆识别音功能抗干扰能力提升  721006