当前位置:首页 > 工业控制 > 工业控制
[导读]把数组推断成双口存储器后,并发访问并未自动变得安全。FPGA数据通路既要定义同地址读写时返回什么,也要证明每拍访问数没有超出物理端口,否则行为仿真与实际吞吐可能同时失真。

把数组推断成双口存储器后,并发访问并未自动变得安全。FPGA数据通路既要定义同地址读写时返回什么,也要证明每拍访问数没有超出物理端口,否则行为仿真与实际吞吐可能同时失真。

先区分端口自己的输出模式与跨端口碰撞。写优先、读优先和输出不变,描述的是特定存储原语及配置下的读写行为,不能被解释成所有同地址并发都有确定答案。同一时刻两口写入同一位置,即便设计者预期其中一路优先,硬件也未必提供这种仲裁。尤其使用字节写使能时,还应按实际写入字节检查重叠范围,不能仅根据完整字地址判断两个操作互不相干。

一口写、另一口读同址位置时,读出旧值、新值还是不确定值,与器件系列、时钟关系及端口模式有关。异步双时钟下更不存在由同一仿真时间戳自然建立的先后保证,接近的有效边沿可能落入原语规定的碰撞窗口。因此应查目标器件的碰撞表,把允许的行为写进接口契约。若算法必须拿到刚写入的数据,可以在有明确公共时钟及操作顺序的条件下设计旁路,而不能把仿真器调度顺序当作物理保证。

需要确定优先级时,应在进入存储端口前仲裁,或通过地址所有权避免冲突。例如一组缓冲区被生产者写入时,消费者只能访问已移交的另一组地址;移交之后再交换访问权限。这样约束的是操作是否合法,而不只是事后选择读出值。验证还应让模型在禁止碰撞时主动报错,并核对综合日志确实推断为预期原语。若数组因特殊清零或访问写法落成寄存器,原本依据块存储器建立的资源与行为预期都会改变。对读延迟同样需要建立明确契约。原语输出寄存器是否启用,会改变数据相对于地址的拍数;上层有效信号若没有同步调整,即使读出的数值正确,也会被归到另一笔访问。

即使完全不发生同址碰撞,端口数量仍会限制带宽。某滤波通路每拍要读取四个不同抽头,而一个物理存储块只提供两个可用读口,增大存储容量并不会增加可接受的访问次数。FPGA常把数组分成多个银行,让不同地址落到不同物理块上;是否真正并行,则取决于访问地址与银行映射的关系。总容量够用,只能证明存得下,不能证明能够按目标节拍取出来。

采用按地址低位交织的银行映射时,连续地址通常容易分散,但固定步长访问可能反复命中同一银行。四个银行面对步长为四的访问,就可能只忙其中一个,而其余三个闲置。应从算法的实际索引关系推导每拍银行占用,而不是只按并行运算单元数量切分数组。若访问模式可预知,可以改变数据排列或计算次序;若访问具有动态冲突,就必须允许仲裁和停顿,并把这种最坏情况计入吞吐预算。

复制只读表也是增加读带宽的方法,但它用额外容量和初始化成本换端口;对于运行中可写的数据,每次更新还需要传播到所有副本,并定义更新期间的读取规则。另一种办法是用更高内部存储时钟分时完成访问,但这会引入更紧的局部时序与调度约束,不能直接按频率倍数承诺收益。选型应比较访问模式、写入频率及可接受停顿,避免在计算单元已经铺开后才发现数据供给跟不上。

双口存储的边界由操作语义与端口预算共同决定。明确禁止碰撞的条件,再按实际索引验证银行占用,才能把纸面并行变成可兑现的通路带宽。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭