外部存储器的随机存取

这个例子展示了如何从FPGA对外部存储器访问进行建模,以旋转ASCII艺术图像。许多应用要求FPGA按照算法要求随机存取存储器。您将学习如何设计内存地址生成以及使用SoC块集读取和写入特定内存区域的其他AXI4主信号。您将在硬件上模拟、实现和验证您的设计。

金宝app支持的硬件平台:

  • Artix®7 35T Arty现场可编程门阵列评估工具包

  • 赛灵思Kintex®7 KC705开发板

  • Xilinx Zynq®ZC706评价试剂盒

  • 锡林克斯Zynq超声仪™+MPSoC 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_图像_旋转_fpga'使用模型块作为模型参考

顶部模型包括以下方面:

  • 测试台输入:它对刺激进行建模,以建立模拟设计。这个AXI4主源块初始化外部存储器的输入图像数据。这个算法开始块通过寄存器通道块向FPGA算法发送启动信号。打开预加载功能soc_image_rotation_init.m怎么看模型参数和输入数据进行初始化。

  • 测试台输出:该AXI4主水槽块对从外部存储器读取输出图像数据进行建模。输出数据保存在工作区中的变量AXI4MasterSinkContent中。启停功能soc_图像_旋转_post.m查看如何绘制输入数据和输出数据。

  • 记忆:存储器系统使用一个内存控制器和两个存储器通道块建模。输入只读存储器通道块对存储输入图像的存储器区域1建模,并且输出写入内存通道块对存储旋转图像的存储器区域2建模。

  • 现场可编程门阵列:此区域实例化对AXI4主接口和数据旋转的逻辑建模的FPGA模型参考。

该算法在三个子系统中实现,Axi4主机ReverseDataOrderAxi4主机。图像旋转打开FPGA子系统:

作为正沿开始检测到信号,AXIMasterRead公司读取一行图像数据并将其传递给ReverseDataOrder用于反转数据的顺序。然后,通过AXIMasterWrite公司子系统。一旦一行的数据被写入,它就会发送一个信号request_next_line触发下一行的读取AXIMasterRead公司. 这个循环一直持续到图像的所有行都被处理完毕。

打开AXI4MasterReadControllerAXI4MasterWriteController块来检查AXI4主接口的MATLAB®代码。这些块设计用于读取和写入操作的寻址逻辑按照AXI4协议。SoC的模块库支持AXI4金宝app万事达协议和AXI4信号的时序图,请参考AXI4主界面生成模型设计

模拟

运行模型并从FPGA模型打开逻辑分析仪。请注意以下要点:

  • 数据的一行被写入/由主人在一个突发读取。由于每一行是长64个字符;突发长度为64(0×40)。需要注意的信号这个值rd_len沃伦

  • 每个字符扩展到uint32数据类型时有4个字节,这使得64x4行的长度为256(0x100)字节。因此,地址递增/递减0x100。注意这个地址wr_addr信号。

  • 一个读突发后是一个写突发。如何观察德瓦利德瓦利德交替切换。

  • request_next_line每次写入突发后断言,触发下一次读取突发。

在模拟结束时绘制输入和输出图像:

实施

本节要求提供以下产品下载188bet金宝搏:

  • HDL编码器™

  • SoC的模块库支持包Xil金宝appinx器件,或

  • 针对英特尔设备的SoC块集金宝app支持包

为了实现在支持的FPGA板型号,使用金宝appSoC的构建应用。执行前请确保您已安装所需的产品和FPGA供应商软件。下载188bet金宝搏

打开SoC的构建通过点击“配置,构建和部署”的工具条按钮,并按照下列步骤操作:

  • 在“设置”屏幕上选择“生成模型”。单击“下一步”。

  • 单击“查看/编辑内存映射”可在“查看内存映射”屏幕上查看内存映射。注意,基址0x00000000被分配给输入只读存储器通道块,以及基地址0x00001800被分配给输出写入内存通道封锁。AXI4地址是基址和来自FPGA算法的地址之和。例如,wr_addr从FPGA开始,算法从0x1700开始。输出数据将从地址0x00001800+0x1700=0x00002800写入外部存储器。参考AXI4主界面生成模型设计约基地址寄存器的计算的详细信息。点击下一步'。

  • 在“选择项目文件夹”屏幕上指定项目文件夹。单击“下一步”。

  • 选择“选择Build行动”屏幕上“建造,负载和运行”。点击下一步'。

  • 点击“验证”检查模式的兼容性“验证模式”屏幕上实现。点击下一步'。

  • 单击“生成”开始在“生成模型”屏幕上生成模型。当FPGA合成开始时,外部外壳将打开。单击“下一步”以“加载位流”屏幕。

该FPGA合成可能需要超过30分钟完成。为了节省时间,您可能希望通过以下步骤来使用所提供的预先生成的比特流:

  • 关闭外壳终止合成。

  • 通过运行下面,然后将命令复制生成的预流到项目文件夹,

  • 单击“加载”按钮加载预生成的比特流。

的CopyFile(完整文件(matlabroot,'工具箱''SOC''socexamples'“比特流”'soc_image_rotation-zc706.位'),'./soc_prj');

要运行此示例,请将示例测试工作台复制到项目文件夹中。

的CopyFile(完整文件(matlabroot,'工具箱''SOC''socexamples''soc_image_rotation_aximaster.m'),'./soc_prj'“f”);

输入以下命令来运行测试平台:

soc_图像_旋转_aximaster

该试验台执行以下操作:

  • 初始化图像旋转IP

  • 写入输入的图像数据到外部存储器

  • 启动图像旋转操作

  • 从外部存储器读取并显示输出图像数据

如果您的FPGA板不是Xilinx Zynq ZC706评估工具包,在启动SoC生成器之前,您需要在顶级模型的配置参数中进行以下设置。

  • 选择“硬件板”下“硬件实现”面板,以配合您的主板。

  • 取消选中“包括处理系统”下“硬件实现 - >目标硬件资源 - > FPGA设计(顶级)”面板。

  • 在“硬件实现->目标硬件资源->FPGA设计(mem通道)”面板下,将“互连数据宽度(位)”设置为“32”。

可用的预产生的位流:

  • 'soc_image_rotation-zc706.位'

  • soc_图像旋转-艺术比特'

  • 'soc_image_rotation-kc705.位'

  • 'soc_image_rotation-a10soc.sof'

修改复制文件命令和示例测试工作台,以匹配您的板和选定的项目文件夹(视情况而定)。请注意,如果自定义内存映射,则预生成的位流可能无法工作。

结论

该示例示出了使用的SoC模块库通过旋转ASCII艺术图像以随机方式访问外部存储器的AXI4主接口建模。您可以使用此作为指导来设计自己的算法来直接访问存储器使用AXI4主协议。