锁相环技术原理及FPGA实现(第一章1.5)

1.6.4 MATLAB 与 Quartus 的数据交互

        在 FPGA 设计过程中,目前的仿真调试工具,如 ModelSim,只能提供仿真测试数据的时域波形,无法显示数据的频谱等特性,且在对数据进行分析、处理时不够方便。例如,在设计数字滤波器时,只在 FPGA 开发环境中很难直观、准确地判断滤波器的频率响应特性,在编写仿真测试激励文件时,依靠 VHDL 或 Verilog HDL 语言也很难产生用户所需要的具有任意信噪比的输入信号。这些问题给数字信号处理技术的 FPGA 设计与实现带来了不小的困难。 FPGA 开发环境中无法解决的复杂信号产生、处理、分析的问题在 MATLAB软件环境中却很容易实现。因此,只要能在 FPGA 开发环境与 MATLAB 软件之间搭建起可以相互交换数据的通道,即可有效解决 FPGA 设计中所遇到的难题。
        使用 MATLAB 辅助 FPGA 设计有三种方式:第一种是由 MATLAB 软件仿真、设计出来的系统参数直接在 FPGA 设计中实现,如在 FIR 数字滤波器设计过程中,由 MATLAB 软件设计出用户所需性能的滤波器系统参数,在 FPGA 设计中直接使用,作为滤波器参数即可;第二种方法用于仿真测试过程中,即由 MATLAB 仿真产生出所需特性的测试数据并存放在数据文件中,由 Quartus II 等开发软件读取测试数据作为输入数据源,由 Quartus II 仿真出的结果数据存放在另一数据文件中, MATLAB 再读取由 Quartus II 仿真后的数据,并对数据进行分析,以此判断 FPGA 程序是否满足设计需求;第三种是由 MATLAB 软件设计出相应的数字信号处理系统,并在 MATLAB 软件中直接将 MATLAB 代码转换成 VHDL 或Verilog HDL 语言代码,在 Quartus II 等开发环境中直接嵌入这些代码即可。前两种方式最为常用,也是本书将会采用的设计方式;第三种方式近年来应用也较为广泛,这种方式可以在用户完全不熟悉 FPGA 硬件编程的情况下完成 FPGA 设计,但这种方式在一些系统时钟较为复杂或对时序要求较为严格的场合不易满足设计者的要求。
        众所周知, MATLAB 软件对文件数据的处理能力是很强的,关键在于 FPGA 开发环境中对外部文件读取及存储功能是否能满足要求。在 FPGA 设计过程中,需对程序进行仿真测试时, Quartus II 软件提供了波形测试文件类型( Waveform)和 HDL 代码文件类型( TestBench)两种。其中, Waveform 是在波形界面上通过直观修改波形数据产生所需的测试数据,简单直观但不够灵活,无法生成复杂的测试数据,也不能将仿真后的结果数据单独存储; Test Bench 是根据所测试的程序文件自动生成测试文件框架,用户在测试文件中修改或添加代码,可灵活地产生所需的测试数据,且可方便地将测试数据存入指定的文本文件中,或从指定的外部文件中读取数据作为仿真测试的输入数据。也就是说, MATLAB 与 QuartusII 等 FPGA 开发环境之间可以通过文本文件进行数据交互。

1.7 SystemView 软件

1.7.1 SystemView 简介

        初次接触到 SystemView 软件是十几年前上研究生的时候,导师要求我们用这个软件搭建一个通信仿真模型,当时就对这款软件的易用性留下了深刻的印响。在编写锁相环技术内容时,回想起这款软件,感觉用来对模拟电路的工作原理进行仿真讲解十分方便。
        SystemView 是一个用于现代工程与科学系统设计及仿真的动态系统分析平台。从滤波
器设计、信号处理、完整通信系统的设计与仿真,到一般的系统数学模型建立等各个领域,
System View 在友好而且功能齐全的窗口环境下,为用户提供了一个精密的嵌入式分析工具。
        SystemView 是美国 ELANIX 公司推出的,基于 Windows 环境下运行的用于系统仿真分析的可视化软件工具,它使用功能模块,有时也称为图符块( Token)描述程序。利用SystemView,可以构造各种复杂的模拟、数字、数模混合系统和各种多速率系统,因此,它可用于各种线性或非线性控制系统的设计和仿真。用户在进行系统设计时,只需从
        SystemView 配置的图标库中调出有关图标并进行参数设置,完成图标间的连线,然后运行
仿真操作,最终以时域波形、眼图、功率谱等形式给出系统的仿真分析结果。SystemView 中的功能模块可分为基本库、专业库和扩展库三种。基本库中包括多种信号源、接收器、加法器、乘法器,以及各种函数运算器等。其极具特色的是,用户可以从不同角度、以不同方式,按要求设计多种滤波器,并可自行完成滤波器各种指标—如幅频特性、伯德图、传递函数、根轨迹图等之间的转换;专业库主要包括通信( Communication)、逻辑( Logic)、数字信号处理( DSP)、射频/模拟( RF/Analog)等,特别适合于现代通信系统的设计、仿真和方案论证。它还可以实时仿真各种 DSP 结构,并进行各种系统时域和频域分析、谱分析,及对各种逻辑电路、射频/模拟电路(含混合器、放大器、 RLC 电路、运放电路等)进行理论和失真分析等;扩展库主要包括近现代不断发展的通信技术功能块,如码分多址( Code Division Multiple Access, CDMA) 、数字视频广播( Digital Video Broadcasting, DVB)等。
        利用 SystemView,不用写一行代码即可完成各种系统的设计与仿真,快速地建立和修改系统,访问与调整参数,方便地加入注释。它具有与外部文件的接口,可直接获得并处理输入/输出实时数据。另外,还提供了与编程语言 VC++的接口,可以很方便地调用函数。SystemView 还提供了与 DSP 芯片设计的接口,可以将其 DSP 库中的部分器件生成 DSP 芯片编程的 C 语言代码。
        在进行系统设计仿真时, SystemView 能自动执行系统连接检查,给出连接错误或悬空的待连接端信息,通知用户连接出错,并显示出错的图标。系统运行时给出大约时间,方便设计人员进行调试。

        在系统仿真方面, SystemView 还提供了一个灵活的动态探针功能,可以仿真实际的示
波器或频谱分析仪的工作状态,还有真实而灵活的分析窗口用以检查系统波形。内部数据
的图形放大、缩小、滚动等,全部可以通过单击鼠标方便地实现。另外,其带有的“接收
计算器”功能强大,可以完成仿真运行结果的各种运算、频谱分析等。

1.7.2 SystemView 工作界面

        1.设计窗口
        SystemView 主要有两个常用界面:设计窗口和分析窗口。其中本书主要使用设计窗口如图 1-12 所示,读者可以查阅其他资料了解分析窗口的使用方法[14]。

        所有系统的设计、搭建等基本操作都是在设计窗口内完成的。设计窗口中间的大片区域为用户搭建各种系统的地方。设计窗口的最上端一行是下拉式命令菜单行,通过调用这些菜单可以执行 SystemView 的各项功能;设计窗口中菜单行的下面,紧邻在设计区域上端一行是工具栏,它包含了在系统设计、仿真中可能用到的各种操作按钮;工具栏的最右端是提示信息,当鼠标置于某一工具按钮上时,在该处会显示对该按钮的说明和提示信息;紧邻在设计区域左端是各种器件图标库;设计域的底部有一个消息显示区,用来显示系统仿真状态信息。
        在设计窗口内,只须单击鼠标及进行必要的参数输入,就可以通过设置图标、连接图标等操作完成一个完整系统的基本搭建工作,创建各种连续域或离散域系统,并可极其方便地给系统加入注释。

2.图符块库
        图符块(有时也称为图标)是 SystemView 仿真运算、处理的基本单元,共分三类:第一类为信源库,它只有输出端没有输入端;第二类为观察窗图标库,它只有输入端没有输
出端;第三类包括其他所有图符块,这类图符块都有一定个数的输入端和输出端。
        在设计窗口的左边有一个图标库区,一组是基本库( Main Libraires),共 8 个,分别包
括信源库( Source)、子系统库( Meta System)、加法器( Adder)、子系统输入输出端口( MetaI/O)、算子库( Operator)、函数库( Function)、乘法器( Multiplier)及观察库( Sink)八组基本器件;另一组是可选择的专业库( Optional Libraries),如通信库( Communication)、数字信号处理库( DSP)、逻辑库( Logic)、射频/模拟库( RF/Analog)等,支持用户用 C/C++语言编写源代码定义图标,以完成所需自定义功能的用户自定义库( Custom),以及可调用、访问 MATLAB 的 M-Link 函数。基本库与专业库之间由“库选择”按钮进行切换,而扩展库则要由自定义库通过动态链接库( *.dll)加载进来。
        3.图符块定义
        用户在选中的图标上双击鼠标左键,或选中该图标并按住鼠标左键将其拖至设计域内,就可以把某一图标库中的通用图符块添加进自己的仿真系统,这时所选中的图符块会出现在设计区域中。双击设计窗口中的图符块后,图符块窗口将出现在屏幕上,图 1-13 是信号源图符块的示例。
        弹出信号源窗口后,用鼠标单击选中某个图符块,然后单击“参数( Parameters)”按钮进入参数设置窗口,也可双击所选中的图符块打开参数设置窗口,如选中正弦信号图符块( Sinusoid),其参数设置界面如图 1-14 所示。用户通过这个窗口输入所需要的参数,单击“ OK”按钮即可完成图符块参数的设置。

4.系统定时
        SystemView 是一个离散时间系统。在每次系统运行之前,首先需要设定一个系统频率。仿真各种系统运行时,系统先对信号以系统频率进行采样,然后按照系统对信号的处理计算各个采样点的值,最后输出时,在观察窗内按要求画出各个点的值或拟合曲线。因此,设置系统定时参数是系统运行之前一个必不可少的步骤。单击“系统定时( System Time)” 按钮,打开如图 1-15 所示的系统定时窗口。

        其中,起始时间和终止时间控制了系统的运行时间范围。 SystemView 对系统仿真运行时间基本上没有限制,只要求终止时间要大于起始时间。采样率和采样时间间隔在仿真过程中控制着时间步长,决定了系统的仿真效果。一般为了获得较好的仿真波形,系统的采样率应设为系统信号最高频率的 5 倍以上。当采样率为系统信号最高频率的 10 倍以上时,仿真波形就几乎没有失真了。采样点数 N 是由系统的运行时间T 和采样率fs 共同决定的。它们之间的关系为:

        因此,系统的运行时间、采样率、采样点数三者之间不是相互独立的,用户修改了其中的某一个或某两个,系统将会根据新的参数遵从下列规则自动修改相应的参数。在采样率不变的情况下:
        ( 1)如果用户改变了采样点数, SystemView 不会改变起始时间,但会根据新的采样间隔相应地修改终止时间;
        ( 2)如果用户对起始时间和终止时间中的一个或全部进行了修改,则采样点数会被自动修改;
        ( 3)采样点只能是整数,如果计算不能得到整数, SystemView 将把最接近的整数作为采样点数,并从所设置的起始时间开始完成设定采样点数的仿真;
        ( 4)除非用户进行了修改,否则系统会一直保持固定的采样点数。另外,为了在信号处理等过程中便于进行 FFT 变换等特殊运算,系统还可以自动设置 2的整数次幂的采样点数。用户更改了某一个时间参数后,单击“更新( Update)”按钮,系统会根据最新修改的参数对其他参数进行相应的修改,并在对话框下端给出该系统运行大约所需的时间及系统的总采样点数等信息。

1.8 小结—欲善其事先利其器

        很小的时候,就多次听到老师讲磨刀不误砍柴功的道理,后来又学到“工欲善其事,必
先利其器”的成语,可能由于这些道理太容易懂了,就仅停留在纸面上的理解。后来读到南
怀谨先生的《论语别裁》,其中讲到这下面这段文字,才发现这句话还有更有意思的解释。
子贡问为仁。子曰:工欲善其事,必先利其器。居是邦也。事其大夫之贤者,友其士
之仁者。
译:子贡问怎样修养仁德。孔子说:“ 工匠 要做好工作,必须先磨快工具。住在一个国
家,要侍奉大夫中的贤人,与 士人 中的仁人交朋友。”
“工欲善其事,必先利其器。”这也是两句名言,我们常常引用的,就是出自《论语》
这个地方,孔子说的话。孔子告诉子贡,一个做手工或工艺的人,要想把工作完成,做得
完善,应该先把工具准备好。那么为仁是用什么工具呢?住在这个国家,想对这个国家有
所贡献,必须结交上流社会,乃至政坛上的大员,政府的中坚;和这个国家社会上各种贤
达的人,都要交成朋友。换句话说,就是要先了解这个国家的内情,有了良好的关系,然
后才能得到有所贡献的机会,完成仁的目的。
根据汉语的句式特点,一句话的重点一般是放在后面讲。也就是说,孔子重点是要讲
从政的方法是先与这个国家的重要人物搞好关系。工匠做工与仁政的修养从表面上看来是
风马牛不相及 的事,但实质上却有相通的道理。

猜你喜欢

转载自blog.csdn.net/qq_43416206/article/details/135315605