问题描述
在构建设计功能时,为了连接到系统生成器或硬件仿真(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;
结束
没有回复内容