主要内容

实现硬件高效的实数分割HDL优化

本示例演示如何使用嵌入在Simulink®模型中的硬件高效的MATLAB®代码执行实数除法。万博1manbetx本例中使用的模型适用于用于定点输入的HDL代码生成。该算法采用全流水线架构,适用于关注吞吐量的FPGA或ASIC设备。这种实现还明智地使用了可用的芯片资源,使其也适用于资源意识设计。

实数除法

两个实数的除法运算 一个 而且 b ,在那里 b 0 ,定义为 一个 b c ,以致于 一个 b c

CORDIC算法

CORDIC是坐标旋转数字计算机的首字母缩写,可用于有效地计算许多三角函数、双曲函数和算术函数。有关CORDIC算法及其在三角函数计算中的应用的详细说明,请参阅使用CORDIC旋转核计算正弦和余弦

全管道定点计算

Real Divide HDL Optimized块支持为具有二进制点缩万博1manbetx放的定点数据生成HDL代码。它在设计时就考虑到了这个应用程序,并采用了特定于硬件的语义和优化。其中一项优化是将整个内部电路流水线化,以保持非常高的吞吐量。

当将复杂的算法部署到FPGA或ASIC设备时,对于给定的计算,通常需要在资源使用和总吞吐量之间进行权衡。资源共享通常会减少设计所消耗的资源,但也会降低流程中的吞吐量。简单的算术和三角计算通常构成较大计算的一部分,需要高吞吐量来进一步驱动电路的设计。因此,完全流水线实现消耗更多的片上资源,但在大型设计中是有益的。

Real Divide HDL Optimized块中的所有关键计算单元都在内部完全流水线化。这不仅包括用于执行吉文斯旋转的CORDIC电路,还包括设计中其他地方使用的加器和移位器,从而确保最大吞吐量。

如何与真正的划分HDL优化块接口

由于其完全流水线的性质,Real Divide HDL Optimized块能够在任何周期(包括连续周期)上接受输入数据。函数将输入数据发送到块validIn信号必须是真正的.当块完成计算并准备发送输出时,它将发生变化validOut真正的对于一个时钟周期。对于连续周期发送的输入,validOut还会设置为真正的在连续的循环中。分子和分母必须在同一个周期内一起发送。

protocol.png

打开模型并定义输入数据

要打开示例模型,在命令行输入:

mdl =“fxpdemo_realDivide”;open_system (mdl)

该模型包含Real Divide HDL Optimized块,该块连接到一个数据源,该数据源接收输入数组(分子和分母),并在连续的周期中将输入值从每个数组传递到块。为每个值计算的输出存储在工作空间变量中。处理完所有输入后,模拟结束。

定义输入数组realDivideNumerators而且realDivideDenominators.对于本例,输入是双精度变量。注意,分子和分母都应该具有相同的数据类型。

rng (“默认”);realDivideNumerators = 9*rand(1000,1) + 1;realDivideDenominators = 9*rand(1000,1) + 1;

定义要在模型中使用的输出数据类型。对于本例,输出也是双精度对象。注意,定点类型输出只能与定点类型输入一起使用。

OutputType =“双”

模拟模型并检查输出

模拟模型。

sim (mdl);

当模拟完成时,一个新的工作空间变量,realDivideOutputs,用于保存每对输入的计算值。

为了检查计算的错误,将Real Divide HDL Optimized块的输出与内置的MATLAB®除法函数的输出进行比较。

expectedOutput = realdividenumerator ./realDivideDenominators;actualOutput = realDivideOutputs;maxError = max(abs(expectedOutput - actualOutput))
maxError = 0