首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使能的模拟行为

使能的模拟行为
EN

Stack Overflow用户
提问于 2017-10-26 08:46:19
回答 1查看 666关注 0票数 3

我刚刚开始使用VCS编译和模拟用verilog编写的TB。

我很困惑它是如何对待0->1或1->0的。我相信,为了评估的目的,0->1的转换实际上被看作是0,1->0被看作是1。我希望在我的sims中,这种行为会使我的设计行为正确。

但在我的一生中,我不明白为什么它将生成的输入刺激‘0->1转换为1,1->0作为0。

下面是与此相关的部分代码。这是一个简单的失败,有一个启用信号- "en“,这是一个输入刺激,从一个由同一个时钟控制的事件随机触发,clk。clk在TB和设计中到处使用。

代码语言:javascript
复制
always @(posedge clk or negedge reset_) begin
  if (!reset_) begin
    q <= {5{1'b0}};
  end else begin
    if (!en) begin
      q <= d;
    end 
  end
end

现在发生的情况是,当事件被触发时,即在en上发生0->1的转换,然后我希望触发器仍然是0和触发器d。而在en的下降边缘(与clk的另一个前缘相吻合),我需要确保触发器不会发生(它应该被看作是1)。

这些模拟所做的与我所期望的相反,除非我稍微推迟了en触发,我认为这不是理想的解决方案。

期望这样的行为是错误的吗?如果没有,那我怎么解决这个问题呢?任何见解都将不胜感激。

如果你需要更多的details.TIA,请告诉我

EN

回答 1

Stack Overflow用户

发布于 2020-09-29 01:00:08

将Greg的评论提出来回答,这样就可以将这个问题标记为已回答:

如果使用阻塞语句(=)分配clk,用非阻塞语句(<=)分配en,则不会出现争用条件。这是正确的编码方式。那么,唯一需要记住的是en和d的采样值,如果时钟边缘是左边的。-格雷格10月26日下午14:44

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

https://stackoverflow.com/questions/46949667

复制
相关文章

相似问题

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