作者: Fisher Yang,来源:FPGA FAE技术分享选集
一、System Generator介绍
System Generator是AMD一款系统级建模工具,有助于加快FPGA的硬件设计。AMD对Simlink进行了扩展,提供了一个非常适合硬件设计的建模环境,不仅可在 MathWorks MATLAB® 和 Simulink® 环境中进行快速设计、仿真算法,而且还可通过自动代码生成直接在AMD器件上运行,加速投产进程。
自2021.1版起System Generator不再按独立工具提供,System Generator将是Vitis Model Composer的一部分,Vitis Model Composer包含HLS Library、AI Engine Library、HDL Library(System Generator部分),HDL Library包含了之前System Generator工具中所有的库。在Vitis Model Composer中可以打开和新建System Generator设计。
图 1 2021.1版起System Generator工具是Vitis Model Composer的一部分
图 2 软件图标
图 3 MATLAB & Simulink中Xilinx库
二、使用System Generator开发的优势
A. 使用 MATLAB 和 Simulink 环境设计、分析、调试与可视化,缩短开发周期;
B. 直接从 Simulink 库浏览器使用优化的HDL模块;
C. 通过建模和仿真,不用在Vivado里编译代码,执行快速、可重复的测试,实现快速设计迭代;
D. 代码自动生成,几乎不用设计人员Coding,减少人为错误,缩短开发时间;
E. 算法开发工程师可以专注于算法设计上,通过可视化精确的仿真,不用关注硬件,实现算法的快速设计迭代;
F. 自动将您的设计转化为优质的布局布线,可直接在AMD器件上运行;
以上优势System Generator非常适用于数字信号处理、图像处理等开发,下面基于System Generator的实现分享一个FSK(Frequency Shift Keying)频移键控法的调制和解调。
三、2FSK调制解调的实现
1. FSK介绍;
FSK(Frequency Shift Keying)频移键控法是数字通信重要的调制方式之一,是信息传输中使用较早的一种调制方式,由于具有抗噪声性能好、传输距离远、误码率低、实现起来方便等优点,在中低速数据传输中得到了广泛的应用。
2. 2FSK信号的调制及实现
a. 原理
FSK信号是通过载波频率的变化来传输信息的状态,将载波的频率随着二进制序列0、1状态而变化,载波为f0代表传输信息0,载波为f1时代表传输信息1。
2FSK可以用以下数学方程式表示:
通常FSK频移键控信号的产生方法有两种:
A. 一种可以采用模拟调频电路来实现;
B. 另一种可以采用键控法来实现;
键控法是在二进制基带脉冲的控制下通过开关电路对两个不同的独立频率源进行选通,实现起来比较简单,获得了广泛的应用。这里System Generator的实现采用的是频率选择法。
b. System Generator的实现
A. 2FSK信号的产生在System Generator中实现非常简单,双击运行System Generator(按自己的版本打开即可),然后就会调用MATLAB的运行程序,等待打开完成;
单击MATLAB工具栏的Simulink按钮,打开Simulink,如下图所示:
图 4 运行Simulink
B. 打开Simulink后,新建一个空白模型,打开Library Browser,将仿真库里HDL Library中的DDS、Mux拖入Simlink中并进行配置;
图 5 打开Library Browser
C. 以同样方式添加Gateway In和Gateway Out并进行配置,任何的设计都必须包含Gateway In和Gateway Out,以定义设计的System Generator块与Simlink部分之间的界限,根据设计的输入和输出,可以有多个Gateway In和Gateway Out;
D. 添加System Generator块,配置选用的FPGA器件;
E. 添加示波器、伯努利随机二进制数生成器;
F. 按住鼠标左键并绘制一条从源端口到目标端口的线,以将块连接在一起;
G. 完整2FSK信号调制信号模型如下所示:
图 6 2FSK信号调制模型
H. 单击Run按钮对2FSK信号调制模型仿真并验证输出:
图7 2FSK信号调制模型仿真输出
第一行为伯努利随机二进制数生成器的输出,第二行为2FSK调制信号的输出,对比第一行和第二行,证明2FSK调试输出结果正确。
I. 代码的生成,双击System Generator进行配置,确保clocking选项卡下的Simulink system period与Gateway In块的采样周期相同,配置完成后,点击Generate,就会在模型的目录下生成netlist;
图 8 System Generator代码的生成
J. 打开Vivado工程,点击打开IP Catalog,再IP Catalog中右键然后单击Add Repository,然后选中模型所在目录刚刚System Generator生成的netlist文件夹;
图 9 Vivado中添加netlist
图 10 Vivado中添加netlist
K. 如下图所示,System Generator生成的IP就已经添加到Vivado的IP Catalog中了,我们在Vivado工程中添加这个IP就可以直接使用了。
图 11 System Generator生成的IP添加完成
3. 2FSK信号的解调及实现
a. 原理
2FSK信号的解调是将已调制的载波2FSK信号还原成基带信号,2FSK的解调通常采用非相干解调或相干解调方法。非相干解调不需要同频同相的载波信号,实现起来结构简单、成本低,这里使用非相干解调方式。
b. 非相干解调其原理基于对调制信号的频率进行解调,具体步骤如下:
A. 接收到FSK调制信号后,首先硬件需要对信号进行预处理,包括滤波和放大等操作,以提高信号质量和幅度;
B. 输入信号E(t)与f0和f1的复信号进行分别进行混频;
C. 对混频后信号做低通滤波,将高频频率滤除掉;
D. 对两个通道的复信号分别求模再做差,可以得出正负信号的包络,大于0的为逻辑1,小于0的为逻辑0;
E. 找到最优判决点,得出解调结果。
图12 非相干解调原理框图
C. 公式推导
A. 输入信号分别与f0和f1的复信号混频:
当调制信号为0时,N0=1,N1=0,当调制信号为1时,N0=0,N1=1。
B. 低通滤波:
将阻带设置到|f0-f1|
C. 对两个复信号分别计算能量后再做差:
当信号为1时,E0的能量N0=0,E1的能量E1=(N1/2)^2;做差为-N1^2/4;
当信号为0时,E0的能量N0=(N0/2)^2,E1的能量E1=0;做差为N0^2/4;
D. 对做差后的包络判决:
对于大于0的信号判定为逻辑0,小于0的信号判决为逻辑1。
d. System Generator的实现
A. 2FSK信号解调信号的模型可参照上面讲的步骤和公式推导在Simulink中用仿真库HDL Library里的模块进行搭建,搭建完成后,完整2FSK信号解调信号模型如下所示:
图 13 2FSK信号解调模型
B. 混频模型如下所示:
图 14 混频模型
C. 低通滤波模型如下所示:
图 15 低通滤波模型
D. 判定模型如下所示:
图16 判定模型
E. 单击Run按钮对2FSK信号解调模型仿真并验证输出:
图17 2FSK信号解调模型仿真输出
第一行为解调的数字信号,第二行为判决之前的信号包络,第三行为调制的数字信号。对比第一行和第三行,证明解调结果正确。
F. 参照上面调制中讲的生成netlist后添加到Vivado工程中就可以在工程中使用了。
四、结语
通过以上AMD的System Generator工具对2FSK调试和解调的实现,我们可以看到,按照算法的公式推导在Simulink中去搭建模型就可以实现,通过在Simulink中仿真,执行快速、可重复的测试,实现算法的快速设计迭代,大大的节省了开发周期,加快产品的上市,体现了AMD的System Generator工具开发的优势。