dmm*_*dmm 2 verilog vhdl system-verilog
使用组合逻辑在VHDL/Verilog中驱动模块的输出是一种很好的设计实践吗?
是否可以直接在组合块中使用模块输入,并使用该组合块的输出来驱动同一模块中的另一个顺序块?
正如摩根在评论中指出的那样,这两个问题的答案实际上取决于总体设计方法和条件,并且将以意见为基础.
这些问题与大型设计特别相关,时间推到了极限,多个设计师为不同模块做出贡献.在这种情况下,重要的是预先确定一个回答两个问题的设计方法,以确保不同设计者提供的模块可以平滑地集成而不会出现时间问题.
在每个模块的所有输出上使用触发器进行设计,具有以下优点:当输出用作其他模块的输入时,输入时序是合理定义的,并且仅取决于路由延迟.这使问题1成立.
具有合理定义良好的输入时序使得可以直接在输入上制作复杂的组合逻辑,因为大部分时钟周期都可用于此.因此,对于问题2,这也是肯定的.
使用上述Yes/Yes设计方法,可用的周期时间仅使用一次,即在输出上的触发器之前,在模块的输入侧.结果是,多个模块将像LEGO砖一样很好地点击,如下图所示.

如果在不同的模块中没有遵守严格的设计方法,那么一些模块可能会在输入上放置触发器,而在输出上放置一些触发器.因此,需要更长的循环时间,因此需要更慢的频率,因为最坏情况路径经过组合逻辑深度的两倍.这种设计如下图所示,应该避免.

存在第三种选择,其中触发器放置在所有输入上,如果两个不同的模块使用相同的输出,则设计将如下图所示.

这种方法的一个缺点是触发器的数量可能更高,因为相同的输出用作多个触发器的输入,并且合成工具可能不组合这些等效的触发器.如果产生输出的模块也必须制作一个用于内部使用的翻转版本,那么甚至可能需要比这更多的触发器,这通常就是这种情况.
所以问题的简短回答是:是和是.