跳转到主要内容
国际橡塑展报名
国际橡塑展报名
国际橡塑展报名

System Generator

学会System Generator(14)——不同溢出与量化方式的对比

judy /

本文是该系列的第14篇。第5篇中在介绍Gateway In block时谈到了System Generator中的数据类型,及不同的量化和溢出方式。本文将以两个简单的设计实例,更直观地说明不同的量化和溢出方式有什么区别。

溢出(Overflow)方式对比
从Simulink向System Generator的数据转换过程中可能会出现溢出(Simulink中的值超出了所设置数据格式能够表示的范围),Overflow可以设置为不同的处理方式:
<li>Wrap:舍弃掉需要表示的值的高位。</li>
<li>Saturate:溢出的数转换为(所设置的数据格式能表达的)最大值或最小值。</li>
<li>Flag as error:溢出时Simulink会报错(这个选项只在Simulink仿真时有效,在导出到FPGA时仍当作wrap处理)。</li>

学会System Generator(13)——Vivado HLS调用C/C++代码

judy /

本文是该系列的第13篇。Vivado HLS是Xilinx FPGA开发套件中的一款软件,可以使用C/C++语言进行设计,并转换为RTL级模型。System Generator中的Vivado HLS block可以将HLS开发软件设计的C/C++代码整合到Simulink环境中,利用Simulink强大的仿真特性对设计进行仿真测试。

ug948中提供的官方例程为图像的中值滤波,该设计将一副256*256大小的RGB图像,添加噪声后提取出其中的Y通道,使用C++语言完成中值滤波。该设计将在Simulink环境下进行仿真。本文将完成改该设计,借此介绍上述功能。

<strong>Vivado HLS完成中值滤波设计</strong>
中值滤波是一种常见的图像滤波方法,选取一个核(本设计为3*3)在图像上滑动,取核的中间值作为核中心像素点的值。中值滤波在滤除椒盐噪声的同时模糊效应会明显低于线性平滑滤波。Xilinx提供的C++设计源文件代码清单如下:
#include "MedianFilter.h"
#define WINDOW_SIZE 3
typedef unsigned char PixelType;

学会System Generator(11)——Black Box调用HDL代码

judy /

本文是该系列的第11篇。从前面的设计中可以看出,System Generator最适合的是完成DSP系统的设计,可以大大提高设计效率,而其它设计任务通常仍需要使用HDL模型来设计。

但是System Generator提供了一个特性:可以通过black box这个block将其它HDL文件以黑盒的形式封装到System Generator设计中,在仿真时使用Simulink+Vivado Simulator(或ModelSim)协同仿真的方法,在Simulink环境中完成设计的仿真测试。

在本系列的第2篇中,我们用Digital FIR Filter这个block完成了数字滤波器的设计。本文设计将把其中的滤波模块改为由HDL实现,借此介绍上述功能。

本设计使用到的block
1.Xilinx block:
Black Box(->Basic Elements):调用HDL文件

2.其它block:
Step(Simulink->Sources):生成阶跃信号

这里给出了设计中用到的所有block在库中的路径,后文不再提及(前文用过的block没有给出;同一block会包含在多个库中,为了方便只列出一个路径)。

Xilinx System Generator模块中各个常见选项的含义

judy /

1. Precision:仿真计算时可按任意精度定点数进行,Full Precision,提供足够的精度;User defined Percision,由开发人员定义位数和小数位。(FPGA上运行的是浮点型?)

2. Aritchmetic Type:可以定义无符号或带符号位(二进制补码)作为输出类型。

3. Number of bits:定义定点数的数据格式:位数,小数位。最大位数为4096。

4. Overflow & Quantization:定义了数据的精度就会产生溢出和量化误差。Overflow,选择Saturate模式,数据溢出时保持正的最大值或负的最小值;选择Wrap模式,做绕回处理,最大值加1结果是最小值,再用最小值往上加,循环。Quantization,选择Round模式,将数据四舍五入;选择Truncate模式,将定义精度无法表示的部分数值丢弃。

5. Override with doubles:双精度替换选项,允许开发人员对整个设计进行基于双精度浮点数的仿真,便于调试和确定定点数位宽。

学会System Generator(10)——支持的MATLAB语法

judy /

本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制。本文将介绍System Generator支持的所有MATLAB语法。

限于篇幅,本文只记录了经常用到或相对重要的内容,更详细的信息可以参考xilinx官方文档ug958->第一章->MCode小节。

<strong>MCode block特性</strong>
MCode用于在Simulink环境下执行MATLAB函数。MCode的名称与管脚即为函数名称与函数接口。在将System Generator设计导出到FPGA时,软件会将MATLAB代码转换为对应的HDL模型。MCode经常用于实现一些简单的算法功能、有限状态机和控制逻辑。

调用的MATLAB函数必须遵循以下三条基本规则:
<li>所有的输入和输出必须是Xilinx的定点数据类型(xfix);</li>
<li>至少包含一个输出;</li>
<li>M文件应在MATLAB的搜索路径下,或与slx模型文件在同一目录。</li>

学会System Generator(3)——生成说明文档与testbench

judy /

本文是该系列的第3篇,上一篇以数字滤波器的设计为主题,介绍了System Generator的完整设计流程,最后自己编写testbench在示例工程中对System Generator导出的IP核进行测试。其实System Generator就可以导出整个设计的说明文档以及一个testbench,本文将介绍如何使用该特性。

<strong>生成说明文档</strong>
本文在上一篇设计的数字滤波器模型基础上进行修改。打开System Generator这个block,在Compilation标签下:
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/blog/201807/13197-38237-…; alt=""></center>

学会System Generator(2)——数字滤波器设计

judy /

本文是该系列的第2篇,上一篇介绍了System Generator的基本知识以及软件的安装。本文将以一个简单的数字滤波器的设计为主题,介绍Sysgem Generator的完整设计流程,同时详细介绍使用到的各个block。

本设计使用到的block
1.Xilinx block:
Digital FIR Filter(->DSP):数字滤波器
Gateway In(->Basic Elements):数据输入
Gateway Out(->Basic Elements):数据输出
System Generator(->Basic Elements):系统管理
FDATool(->DSP):滤波器设计

学会System Generator(1)——入门与安装

judy /

记录《学会System Generator》系列的目的是为了熟练掌握Xilinx公司旗下System Generator产品的使用。本文是该系列的第一篇,主要介绍System Generator的基本知识以及软件的安装。

<strong>System Generator基本特性</strong>
System Generator是一款DSP设计工具,其借助MATLAB中的Simulink开发环境完成FPGA的设计。这是一种与传统的“从RTL出发进行FPGA设计”完全不同的设计方法。

System Generator具有如下关键特性:
1. 超过90种DSP设计模块,包括加法器、乘法器、寄存器、FFT、滤波器、存储器等等;

2. 包含一个与7系列/UltraScale系列FPGA相贴合的FIR编译模块,支持多种滤波器模式,可以使用MATLAB函数或FDATOOL工具生成系数;

3. 包含一个MCode模块,可以接入MATLAB代码,完成简单的控制;

4. 支持硬件协同仿真(需要特定的硬件平台支持);