首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL工艺风格

VHDL工艺风格
EN

Stack Overflow用户
提问于 2010-12-10 22:04:10
回答 2查看 1.8K关注 0票数 3

我一直在阅读这里的各种问题,因为我正在学习VHDL,并一直在寻求改进。然而,这条评论让我很好奇:

Simple State Machine Problem

在我大学里简短的VHDL课程中,我被告知分离进程是分离同步方面的最好形式。

显然,这是个人偏好,但我希望一些更有经验的用户能够用他们自己的偏好来阐明优缺点。一种比另一种更常见吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-11 00:45:00

好吧,因为是我说出了你链接到的东西...我最好评论一下:)

坏东西(IMHO)如果你把东西放在不同的进程中:

  • 你必须严格地保持你的敏感度列表是最新的,你必须为每个输出提供默认值,除非你想要异步锁存器(通常不需要)
  • 逻辑是分开的,所以如果你添加一个状态到状态机,你必须把新的状态放在两个进程中
  • 如果你想要一个信号同时被注册和取消注册,你最终会复制它。对于单个进程,您可以使用变量来实现这一点。
  • 有些人认为它更难阅读。

好东西:

  • 您可以将状态的“输出”取消注册。这可以很好地减少延迟,但对于几乎所有的目的,您都希望每个块的输出上都有寄存器,以使会议计时更容易。
  • 有些人认为读取

更容易

我的观点是,像你所听到的法令(“保持分离”)源于合成器不太擅长区分逻辑和flops的日子,所以把flops放在时钟过程中是有意义的。

此外,这种方法与那个时代的人在有HDL之前绘制示意图的方式相匹配。

如今,合成器可以在时钟过程中处理任意复杂的逻辑。我可以以合理的方式编写它,而不必明确说明每一小块逻辑所在的位置。只有当时间真的很紧的时候,我才会真正认真地考虑把flops和逻辑放在正确的地方。

我的“规则”是:

  • Keep it readable
  • 如果它满足要求(例如电源、时序和功能正常),你就完成了。
  • 如果不是,那么也只有到那时才会玩

不可读的把戏

很像编写软件:)

票数 5
EN

Stack Overflow用户

发布于 2010-12-14 23:02:34

我在“保持分离”阵营里。在我的代码中,我有一个单独的同步进程,它执行重置和时钟行为。其他的都是异步的。注册过程如下所示:

代码语言:javascript
复制
Wait for Clock;
If Reset then
    Value <= '0';
else
    Value <= nextValue;
endif

我喜欢的东西:

  • ,很明显,哪些信号是失败的。我只写了一次寄存器进程就忘了它。
  • 你所有的异步进程都是没有保留状态的“纯”函数。
  • 强迫你在寄存器中拆分逻辑,分离流水线阶段,等等。
  • 它推广了一种多,小,简单,异步的风格到这个逻辑锥体更容易理解,并且异步进程可能是在时序闭合方面有问题的进程。提早警铃。

负面影响:

  • 敏感度列表,但是Emacs有一个用于此的宏,并且它以警告的形式出现。如果列表很大,那么对于每个输出来说,您的进程都太big.
  • Defaults了,但这实际上是文档。就在进程开始时,这些是我的输出和默认值。再一次,如果我弄错了,就会受到警告。与额外的触发器相比,捕获锁存器(你几乎永远不会想要它)也要容易得多,因为和异步项并不是在一条路径上分配的。

从Martin的回答中我不太理解的事情:

  • 逻辑是拆分的,因此如果您将状态添加到状态机,则必须将新状态放入

的两个进程中

我更改了状态变量的类型(即添加枚举),然后继续。与统一风格完全相同。

  • 如果你想让一个信号同时被注册和取消注册,你最终会复制它。对于单个进程,您可以使用变量来实现这一点。

在split style中,你已经有了注册和未注册的版本。它们是注册进程的输入和输出。根本不需要额外的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4409532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档