首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Verilog Latch in clk@(高级clk)

Verilog Latch in clk@(高级clk)
EN

Stack Overflow用户
提问于 2015-03-17 23:29:19
回答 1查看 957关注 0票数 0

如果我正确理解闩锁,它是在组合块中创建的,在组合块中,当将变量赋值时并不会声明所有可能的条件。我怎么把锁锁在我的顺序块里?

当我通过Quartus编译我的代码时,它实现了2FMAX,这表明我有一个锁存器。

代码语言:javascript
代码运行次数:0
运行
复制
   always@(posedge clk or negedge nreset) begin
      case(counter)
         0: begin
            if(state == IDLE) begin
               // DOES SOMETHING
            end
         end

         1: begin
           // DOES ASSIGNMENT
         end // PROLOG

         81: begin
           // DOES ASSIGNMENT
         end // EPILOG


         82: begin
            // DOES ASSIGNMENT
         end // POSTPROC

         default: begin
            // DOES ASSIGNMENT
         end // ROUNDS

      endcase  

我已经检查了每一个案例,并确保所有的作业都是非阻塞的。知道我为什么会被锁住吗?

我的代码是计算SHA1

我有2始终@(后缘clk),一个计算下一个Wt,上面计算下一个A、B、C、D、E值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 00:33:50

您的else上没有if,statement.The合成器不知道接下来需要发生什么,从而推断锁存器。

如果这不是有意的,而是您为堆栈溢出示例编写的代码,那么问题可能在您的另一个始终块中。

锁存器就是没有时钟的触发器。合成器之所以认为它们不好,是因为它们可能会导致计时错误。锁锁也不总是一个问题,事实上,有时你可能已经知道,它们是故意的。

检查您的assign语句,看看是否在初始化为0的always块之外声明了任何regs或某些值。

在这种情况下,您可能希望尝试初始块。语法:

代码语言:javascript
代码运行次数:0
运行
复制
 initial
 begin

 value = 0;
 input = 0; // or something

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

https://stackoverflow.com/questions/29111599

复制
相关文章

相似问题

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