这个例子展示了如何从FPGA建模外部内存访问来旋转ASCII艺术图像。很多应用需要FPGA按照算法的要求随机访问内存。您将学习如何设计内存地址生成以及其他AXI4主信号来使用SoC块集读写内存的特定区域。您将在硬件上模拟、实现和验证您的设计。
金宝app支持硬件平台:
Artix®7 35T附庸风雅FPGA评估板
赛灵思Kintex®7 KC705开发板
Xilinx Zynq®ZC706评估试剂盒
赛灵思的UltraScale ZYNQ™+片上多核ZCU102评估套件
Altera的的Cyclone®V SoC开发套件
Altera公司的Arria®10 SoC开发套件
所述ASCII技术的图像被编码为24 * 64的UINT8字符矩阵。设计任务是通过模拟在FPGA逻辑AXI4主接口用于外部存储器访问来旋转图像。通过模拟与外部存储器模型和AXI4协议的设计,您在验证应用程序设计时的行为。这样可以节省时间,在实施阶段,调试硬件设计,否则花。
总体数据流将在下面图中所描述的。图像被存储在外部存储器中的存储区域从0x00000000地址到0x000017FF。FPGA算法从该区域读取图像,并通过以相反的顺序写入所述存储区域从0x00001800旋转它。最后,数据从内存读取。
该模型是使用模型引用的结构。超模 'soc_image_rotation“包括FPGA模型”soc_image_rotation_fpga'使用模型块作为模型参考。
top model涵盖以下领域:
测试平台输入它模拟刺激以建立模拟设计。的AXI4主源
块将输入图像数据初始化到外部内存。的算法开始
块通过寄存器通道块向FPGA算法发送一个开始信号。打开预加载功能soc_image_rotation_init.m怎么看模型参数和输入数据进行初始化。
Testbench输出:该AXI4主水槽
块从外部存储器读取输出图像数据。输出数据保存在工作区中的变量AXI4MasterSinkContent中。打开停止功能soc_image_rotation_post.m查看输入数据和输出数据是如何绘制的。
记忆:存储器系统使用一个内存控制器和两个存储器通道块建模。输入只读存储器通道
块模型存储区域1,其中输入图像存储和输出写入内存通道
块模型存储区域2,其中旋转图像存储。
FPGA:该区域实例化FPGA模型引用,该引用为AXI4主接口和数据旋转建模逻辑。
FPGA模型实现的算法三个子系统,AXI4MasterRead
,ReverseDataOrder
和AXI4MasterWrite
。图像旋转打开FPGA子系统:
作为正沿开始
检测到信号时,AXIMasterRead
读取一行图像数据并将其发送到ReverseDataOrder
用于颠倒数据的顺序。然后将反向的数据写入外部存储器AXIMasterWrite
子系统。一旦一行的数据被写入时,它发送一个信号request_next_line
触发下一行的读取AXIMasterRead
。这个循环一直持续到图像的所有线条都被处理完。
打开AXI4MasterReadController和AXI4MasterWriteController块来检查AXI4主接口的MATLAB®代码。这些块设计用于读取和写入操作的寻址逻辑按照AXI4协议。SoC的模块库支持AXI4金宝app万事达协议和AXI4信号的时序图,请参考用于AXI4主接口生成的模型设计。
运行模型并从FPGA模型打开逻辑分析仪。请注意以下要点:
数据的一行被写入/由主人在一个突发读取。由于每一行是长64个字符;突发长度为64(0×40)。需要注意的信号这个值rd_len
和wr_len
。
每个字符在扩展到uint32数据类型时都有4个字节,这使得行64x4 = 256 (0x100)字节。因此,地址递增/递减0x100。请注意这个rd_addr
和wr_addr
信号。
一个读突发后是一个写突发。如何观察rd_dvalid
和wr_dvalid
或者切换。
request_next_line
断言之后每个写突发,这触发下一个读取脉冲串。
仿真结束时绘制输入和输出图像:
本部分需要以下产品:下载188bet金宝搏
HDL编码器™
SoC块集支持包的Xili金宝appnx设备,或
SoC的模块库支持包英特尔金宝app®设备
为了实现在支持的FPGA板型号,使用金宝appSoC的构建应用。执行前请确保您已安装所需的产品和FPGA供应商软件。下载188bet金宝搏
打开SoC的构建通过点击“配置,构建和部署”的工具条按钮,并按照下列步骤操作:
选择“设置”屏幕上的“构建模式”。点击下一步'。
点击“查看/编辑记忆地图”可在“查看记忆地图”屏幕上查看记忆地图。注意,被分配到的基址是0x00000000输入只读存储器通道
块,以及基地址0x00001800被分配给输出写入内存通道
块。AXI4地址是基础地址和来自FPGA算法的地址的和。例如,wr_addr
FPGA算法从0x1700开始。输出数据将从地址0x00001800 + 0x1700 = 0x00002F00写入外部内存。指用于AXI4主接口生成的模型设计约基地址寄存器的计算的详细信息。点击下一步'。
在“选择项目文件夹”屏幕上指定项目文件夹。点击下一步'。
选择“选择Build行动”屏幕上“建造,负载和运行”。点击下一步'。
点击“验证”检查模式的兼容性“验证模式”屏幕上实现。点击下一步'。
单击“Build”开始在“Build model”屏幕上构建模型。当FPGA合成开始时,外部外壳将打开。点击“下一步”以“加载比特流”屏幕。
该FPGA合成可能需要超过30分钟完成。为了节省时间,您可能希望通过以下步骤来使用所提供的预先生成的比特流:
关闭外壳终止合成。
通过运行下面,然后将命令复制生成的预流到项目文件夹,
点击“加载”按钮来加载预生成的比特流。
的CopyFile(完整文件(matlabroot,“工具箱”,'SOC','socexamples',“比特流”,“soc_image_rotation-zc706.bit”),'./soc_prj');
要运行此示例,请将示例测试工作台复制到您的项目文件夹中。
的CopyFile(完整文件(matlabroot,“工具箱”,'SOC','socexamples',“soc_image_rotation_aximaster.m”),'./soc_prj',“f”);
输入以下命令来运行测试平台:
soc_image_rotation_aximaster
该试验台执行以下操作:
初始化图像旋转IP
写入输入的图像数据到外部存储器
启动图像旋转操作
从外部存储器读取和显示输出图像数据
如果您的FPGA板不是Xilinx Zynq ZC706评估工具包,您需要在启动SoC Builder之前在顶级模型的配置参数中进行以下设置。
选择“硬件板”下“硬件实现”面板,以配合您的主板。
取消选中“包括处理系统”下“硬件实现 - >目标硬件资源 - > FPGA设计(顶级)”面板。
将“硬件实现->目标硬件资源-> FPGA设计(mem通道)”面板下的“互连数据宽度(位)”设置为“32”。
可用的预产生的位流:
“soc_image_rotation-zc706.bit”
“soc_image_rotation-arty.bit”
'soc_image_rotation-kc705.bit'
'soc_image_rotation-a10soc.sof'
修改拷贝文件命令和示例测试工作台来匹配您的板和选择适当的项目文件夹。注意,如果您自定义内存映射,预生成的位流可能无法工作。
该示例示出了使用的SoC模块库通过旋转ASCII艺术图像以随机方式访问外部存储器的AXI4主接口建模。您可以使用此作为指导来设计自己的算法来直接访问存储器使用AXI4主协议。