matlab - 如何优化(减少)由给定 Simulink 模型的 MATLAB HDL CODER 插件生成的 verilog HDL 代码(硬件)的延迟?
问题描述
提前致谢,
我有一个简单的 Simulink 模型,它采用 IEEE-754 格式的 32 位数字并添加相同的数字,从而再次以 32 位宽 IEEE-754 格式提供输出。我使用了 MATLAB 的 HDL CODER 插件并为它生成了 Verilog HDL 代码。当我为它编写一个测试平台时,我发现我从这段代码中得到的延迟是 100ns。但是有没有办法可以将它进一步减少,比如大约 10ns。
下面我附上了我用来生成 Verilog HDL 代码的 Simulink 模型,以及生成的 Verilog 文件。另外,我附上了模拟的屏幕截图,以防您不想浪费时间运行脚本
解决方案
我的观点是如何在转换前使用管道设置
我假设“管道设置”是一个 MATLAB HDL 生成器参数。
基本上你所做的是“尝试”:使用管道设置并合成代码。如果你有松弛,你可以:
减少流水线阶段的数量。
或者
增加时钟频率。
(对于负松弛,您使用反向方法)
现在事情变得棘手
了:大多数时候你不能真正加快速度。某个功能需要时间来计算。一些算法可以通过使用更多的并行资源来加速,但只能达到一个限制。加法器就是一个很好的例子:你可以有波纹进位、超前进位和更高级的技术,但你不能无限加速。(否则这些天的 CPU 将以 Terra Hz 运行)
我怀疑最后你会发现做你的 IEEE-754 加法器需要 T 时间。这可以是 A MHz 的 X 个时钟周期。B MHz 的时钟或 Y 时钟周期。但是X乘以A大约等于Y乘以B。
您可以做的是将大量计算注入您的管道,以便每个时钟周期都有一个新的计算出来。但是延迟仍然存在。
推荐阅读
- python - 在 Pyglet 中播放视频文件
- typescript - 打字稿:返回一个返回承诺类型定义的对象
- python - tkinter 标签重叠 (.place(),.pack())
- angular - 如果值发生变化,是否有可能记录事件?
- azure - 计时器触发器 Azure 功能停止工作,没有任何更改
- java - 无法从 EditText 获取文本
- c# - 如何使用 WebRequest C# 在没有 ssl 验证的情况下发送请求?
- python - 我如何在其他功能中使用 get_queryset()object 'list_object'
- sql - 检测包含除“,”和“\ n”以外的特殊字符的列 - Postgresql
- java - Docker 在 IntelliJ 项目设置中找不到我的 .java 文件