共享存储器的操作
共享存储器的操作System Generator硬件协仿真接口允许将共享存储器以及相关模块(共享FIFO以及共享寄存器等)编译到FPGA中完成协仿真。这些接口使得基于硬件的共享存储资源映射到PC机的通用地址空间。共享存储单元有助于在PC机和FPGA之间完成高速的数据传输,以及实时的硬件协仿真。本节以共享FIFO模块为例,介绍共享存储器在协仿真中的使用方法。其余类型共享存储器的操作步骤是类似的。
1.编译共享存储器
包含共享存储器设计的硬件协仿真和普通协仿真设计的编译过程是一样的,选择编译目标,并在System Generator对话框上点击“Generater”按键。在协仿真中被编译的共享存储器都会在硬件中通过IP Core或者HDL单元来实现。表7-11给出了共享存储单元和硬件实现的映射关系。
表7-11 共享存储器模块列表
2.含有FIFO的协仿真
在硬件协仿真中,可以生成To FIFO模块、From FIFO模块以及共享FIFO对模块,其中共享FIFO对模块由一个命名相同的To FIFO模块和From FIFO模块组成,To/From FIFO可通过Core Generator配置成独立时钟。
异步FIFO在多时钟应用中是最安全的交换时钟的方法。如果选择自由运行时钟模式,则FPGA和Simulink仿真是异步的,也就是二者没有保持同步锁相,必然会建立两个时钟域:Simulink仿真时钟域和FPGA自由运行时钟域。此时,共享FIFO提供了最可信、最安全的方式来完成PC和FPGA芯片的数据交互。此外,共享FIFO还在协仿真期间支持突发传送数据的能力,使得单次传送一个矢量或数据帧成为可能。
在协仿真中生成一个共享FIFO对,则仿真中的两个FIFO模块会被一个独立的异步FIFO代替。如图7-44所示,FIFO的读、写端全部连接到用户设计逻辑(用户逻辑由原始Simulink设计驱动)。同时,由于FIFO的两端全部连接到用户逻辑, PC端就不能在设计中控制FIFO。
图7-44 共享FIFO对的典型连接示意图
从图7-44中可以看出,虽然异步FIFO的两个时钟全部预留了,但是其时钟源来源于同一信号,和多时钟域工作还是不同的。单个共享FIFO和共享FIFO对的使用是有所不同的。FIFO的一端连接到PC接口逻辑上,另一端连接到原始的To/From FIFO模块上,这样控制逻辑就分布在PC和FPGA之间。如图7-45所示,当一个To FIFO模块编译成硬件后,FIFO的写控制端连接到用户逻辑上,读控制端连接到PC接口上,允许PC在仿真期间从FIFO接口读数。
图7-45 单个写FIFO的典型连接示意图
如图7-46所示的应用中,FIFO的读控制端连接到和用户设计中,写控制端被连接到PC接口上,允许PC在仿真期间向FIFO中写数。
图7-46 单个读FIFO的典型连接示意图
在硬件协仿真系统中,共享FIFO对经常分布于Simulink软件和FPGA硬件两端,也就是说一部分在FPGA中实现,另一部分通过To/From FIFO在软件中模拟,将软件和硬件合起来就构成了一个完整的异步FIFO。如果一个软件/硬件共享FIFO对被仿真,则System Generator会有效管理PC和FPGA之间的必要传输。在仿真中,当数据被写入软件端的To FIFO模块中时,相同的数据也会在硬件中写到FIFO中,硬件设计可通过读取数据获得该数据。类似地,如果在硬件中,将数据写入FIFO中,则在软件端,可通过From FIFO模块将数据读出来。
需要注意的是:共享FIFO的空指示信号、满指示信号、读使能、写使能并不能很好地反映出硬件FIFO的状态。在硬件协仿真中,将一个软件共享FIFO连接到硬件共享FIFO最简单的方法就是通过共享FIFO的名字指定。
3.共享内存的限制
在System Generator中使用共享内存,需要满足以下限制条件:
• 一旦编译后,共享存储器的访问特性不允许再改变;
• 共享存储器的地址数据位宽不能超过24比特,最深的访问深度为16,777,216字;
• 共享存储器,包括寄存器、FIFO等单元,其数据位宽不能超过32比特;
• 全部的共享存储器都是通过内部的块RAM来实现的,目前还不支持利用分布式RAM以及外部存储器来实现的功能;
• 共享存储器是不能重复命名的。
页:
[1]