FPGA/ASIC技术
在 PCIE 系统里面,TAG 管理是一个重要的问题。用户逻辑依赖于 TAG 来定位 completion对应于哪个 Non-Posted 事务。所以,每个发出的 Non-Posted 操作必须有自己的单独的 TAG。在XILINX的Virtex-7 FPGA Gen3 Integrated Block中,TAG管理相对于原来的Integrated Block for PCI Express v2.0 有一些新的特点,在使用时必须加以注意。
在 Integrated Block for PCI Express v2.0 中,TAG 由用户逻辑管理,用户逻辑来保证每个Non-Posted 事务的 TAG 是唯一的,同时负责从 completion 的 TAG 中检查对应的 Non-Posted事务。在 Gen3 Integrated Block 中,TAG 管理有两种工作模式。
第 一 种 工 作 模 式 是 使 用 内 部 TAG 管 理 器 管 理 。 这 种 工 作 模 式 通 过 设 置AXISTEN_IF_ENABLE_CLIENT_TAG 参数为 FALSE 选择。它也是默认工作模式。在这种模式下,Gen3 Integrated Block 内部的逻辑产生 TAG 给用户侧的 Non-Posted 事务请求。Gen3 Integrated Block 内部有一个可用的 TAG 列表。当用户逻辑在接口产生一个 Non-Posted事务请求时,Gen3 Integrated Block 将可用 TAG 中的一个值赋给这个 Non-Posted 事务。同时,这个 TAG 值出现在 pcie_rq_tag[5:0]接口上用于通知用户逻辑。这个端口的值当Integrated Block 置 pcie_rq_tag_vld 为 高 时 有 效 。 用 户 逻 辑 必 须 保 存pcie_rq_tag 的值,以便分辨completion对应的是哪个Non-Posted事务。同时,Integrated Block 内部的逻辑会检查 TAG 是 否 已 经 耗 尽 , 并 且 在 耗 尽 时 会 通 过s_axis_rq_tready 信号反压用户逻辑,阻止新的 Non-Posted 事务请求。
第二种工作模式是外部TAG管理。这种工作模式通过设置AXISTEN_IF_ENABLE_CLIENT_TAG参数为TRUE选择。在这种工作模式下,用户逻
辑必须自己给每个Non-Posted事务请求赋TAG值。用户逻辑必须保证赋给每个Non-Posted事务请求的TAG值在所有发出的Non-Posted事务中是唯一的。TAG值通过事务请求的descriptor通知Gen3 Integrated Block。Gen3 Integrated Block仍然将TAG值拷贝到Split Completion Table,以及对比completion和表中的TAG。但是它不检查每个TAG是否是唯一的。
同时,不管在哪种工作模式下,当发出的TAG数量达到Split Completion Table的限制64时,用户逻辑不能发出新的Non-Posted事务请求。除非有完整的completion返回,有TAG被释放,Split Completion Table才有位置容纳新的TAG,新的Non-Posted事务请求才会被接受。即使在外部TAG管理模式下,这个TABLE容量限制也无法通过设置被解除。图1是一个使用外部TAG管理模式下的仿真波形,可以看到当Non-Posted事务请求达到64时,s_axis_rq_tready变为1,用户不能发出新的Non-Posted事务请求。由于64的限制小于规范规定可以达到的最大值256,用户必须注意。特别是在高LATENCY的系统里面,为了提高性能,必须尽量发出多的事务请求。这种情况下,必须小心设计系统以减小LATENCY,使TAG值不被耗尽。
在外部TAG管理模式下,由于Gen3 Integrated Block不检查每个Non-Posted事务请求的唯一性,即使每个Non-Posted事务请求使用同样的TAG值,它们也能被发出。这个同样可以见图1仿真波形。但是将无法识别completion对应的是哪个Non-Posted事务,所以当使用外部TAG管理模式时,用户逻辑必须特别小心对TAG的管理。
全部0条评论
快来发表一下你的评论吧 !