首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Verilog中结合分块和NonBlocking

在Verilog中结合分块和NonBlocking
EN

Stack Overflow用户
提问于 2014-05-08 04:02:59
回答 1查看 258关注 0票数 0

如果我希望语句并行执行,并在所有其他语句完成时执行另一条语句,例如:

代码语言:javascript
复制
task read;
 begin
    if (de_if==NOP) begin 
        dp_op    <= 3'b000;
        dp_phase =  EXEC;
    end
    else begin
        if (de_if==EXEC_THEN) begin
            dp_const <= de_src3[0];
            dp_src   <= de_src3;
            dp_op    <= {NOP,de_ctrl3};
            dp_dest  <= de_dest1;
        end
        else if (get_value(de_ctrl1,de_src1)==dp_mem[de_src2]) begin
            dp_const <= de_src3[0];
            dp_src   <= de_src3;
            dp_op    <= {NOP,de_ctrl3};
            dp_dest  <= de_dest1;
        end 
        else begin
            dp_const <= de_src4[0];
            dp_src   <= de_src4;
            dp_op    <= {NOP,de_ctrl4};
            dp_dest  <= de_dest2;
        end
        #1 dp_phase=READ;
    end
 end
endtask

在这段代码中,我希望语句dp_phase = READ只在所有其他赋值完成后执行,我该怎么做呢?

正如你所看到的,我所做的是在分配之前等待一个时钟,但我不知道这是否是它是如何完成的……

EN

回答 1

Stack Overflow用户

发布于 2014-05-08 05:05:23

您需要一个状态机。这是让事情按特定顺序发生的规范方法。请记住,使用硬件描述语言与常规编程不同,language...you只是描述您希望硬件具有的那种行为。

要创建状态机,您需要一个状态寄存器,一个或多个触发器,用于跟踪您在所需的事件序列中所处的位置。触发器应该在时钟上升沿更新,但逻辑的其余部分可以是纯组合的。

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

https://stackoverflow.com/questions/23527289

复制
相关文章

相似问题

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