首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法将条件中的操作数与always构造的封闭事件控件中的对应边缘匹配

无法将条件中的操作数与always构造的封闭事件控件中的对应边缘匹配
EN

Stack Overflow用户
提问于 2018-09-08 14:02:40
回答 1查看 5.9K关注 0票数 2

此代码无法编译,并在标题中的"if(overflow)“行给出错误。

代码语言:javascript
复制
always @(posedge clk or negedge overflow) begin
    if(overflow)
        count_posedge = count_posedge + 1;
    else
        count_posedge = 0;
end

我在互联网上的某个地方,我必须这样改变它:

代码语言:javascript
复制
always @(posedge clk or negedge overflow) begin
    if(~overflow)
        count_posedge = 0;
    else
        count_posedge = count_posedge + 1;
end

...and它工作得很完美。

据我所知,这两个代码的行为应该是一样的。第一个有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 08:19:04

这更可能是合成器的问题,而不是模拟器的问题。可能的问题是,第一个代码与其用于异步复位的同步触发器的任何模板都不匹配。

常见的编码实践是在分配任何其他逻辑之前分配您的重置逻辑。这种编码实践已经存在了几十年。我假设这种特殊的编码实践背后的理性源于:

在许多设计中,

  • 复位逻辑至关重要;特别是在设计变得越来越大和越来越复杂的情况下。structures.
  • The的重要性和它通常比同步逻辑代码行数少的事实被放在了首位,
  • 早期的合成器非常有限,只能合成特定的代码,因此编码风格成了优先选择。没有人会改变它,除非你能说服并证明其他东西是优越的或具有特定的优势。

在您的例子中,您的合成器正在进行lint检查,并已确定您的代码没有遵循传统的编码实践。你的合成器的创建者已经决定只支持通用的编码结构,几乎没有改变的动机。

仅供参考:您应该使用非阻塞分配(<=)来分配同步逻辑。组合逻辑应该使用阻塞赋值(=)。如果您不遵循适当的编码实践,则会增加引入竞争条件、RTL与gate不匹配以及其他错误的风险。

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

https://stackoverflow.com/questions/52232515

复制
相关文章

相似问题

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