9.2 AccelDSP综合工具 - 获得恒定时钟周期数的MATLAB编码风格限制是什么?

问题描述

在构建设计功能时,为了连接到系统生成器或硬件仿真(HW-CoSim),我需要一个每次调用设计函数时具有恒定时钟周期数的电路(有时称为恒定吞吐量)。如何编写MATLAB行为以实现恒定的时钟周期数?

解决/修复方法

System Generator中的“块”需要在连续输入之间有固定数量的时钟周期。因此,对于每次调用设计函数,来自AccelDSP的块必须具有固定数量的时钟周期。此外,AccelDSP中的HW-CoSim流程使用System Generator来构建硬件接口。因此,它也需要恒定的循环次数。

恒定数量的时钟周期(有时称为“恒定吞吐量”)很大程度上取决于MATLAB代码的编写方式。条件分支内的循环和循环的条件“退出”通常导致非恒定的吞吐量。因此,最好使用不使用这些结构的MATLAB编码样式。

为了获得恒定的吞吐量,Xilinx建议使用以下限制编写设计函数的MATLAB行为:

- 不要使用While循环。

- 使用具有常量“开始”,“步骤”和“结束”值的FOR循环。

- 不要在IF-THEN-ELSE语句中放置FOR循环(在FOR循环中可以有一个条件)。

警告 :矩阵算术运算和AccelWare函数通常包含FOR循环。

提示:展开FOR循环(完全展开)有效地移除了FOR循环,但增加了电路的大小。

- 不要使用条件存在来提前循环。

- 在FOR循环内部,不要覆盖循环变量/索引。

- 保持条件行为简单。如果有条件地执行复杂行为,则重写它以便始终执行。例如,重写以下内容:

if(<condition>)

y = sin(x);

结束

如下:

tmp = sin(x);

if(<condition>)

y = tmp;

结束

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-18 20:39:10 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它