【问题标题】:Verilog Event control statementsVerilog 事件控制语句
【发布时间】:2015-02-05 22:20:44
【问题描述】:

我目前有此代码(如下)用于 fpga 上的按钮的去抖动器,但是我收到一条错误消息,提示“在这种情况下,不支持一个始终/初始进程块中的多个事件控制语句。”每当我尝试合成设计时。导致问题的行是@(posedge clk),但我想知道如何准确地替换这个逻辑。我本质上需要的是always @ (quarter & posedge clk)作为第一个始终阻止的敏感度列表,但这也不起作用。我对这门语言还很陌生,所以我还在研究一些语法问题。代码片段如下:

always @(quarter)
        begin

            @(posedge clk)
             begin
                 if (quarter != new) begin new <= quarter; count <= 0; end
                 else if (count == DELAY) cleanq <= new;
                 else count <= count+1;
              end
          end

【问题讨论】:

    标签: verilog fpga hdl


    【解决方案1】:

    而不是总是

    @(posedge event1)         
    @(posedge event2)
    create aflag (1bit reg) event2done :   reg event2done; initial event2done=0;
    always@(posedge event1)
    begin       if (!event2done & event 2)
            // event2done=1; + type ur code 
                else if(event2done & !event 2)
                    event2done =0;  end
    

    【讨论】:

    • 您能否通过使用反引号来评论代码部分来编辑您的答案(例如:this is code),这真的不可读。
    【解决方案2】:

    伪代码:

    always@(something1)
               @(something2)
                     do something
    

    查看 cmets 以了解为什么无法合成的解释

    always @(posedge clk)
                 /* over here you'll have to set the default values
                    for everything that's being changed in this always block, 
                    you'll otherwise generate latches. Which is likely
                    not what you want */
                 begin
                     if (quarter != new) begin new <= quarter; count <= 0; end
                     else if (count == DELAY) cleanq <= new;
                     else count <= count+1;
                  end
    

    我目前无法访问我的 verilog 设备,因此无法确认语法正确性

    【讨论】:

    • 我对您在评论区中添加的内容感到有些困惑。你的意思是你基本上初始化你的“变量”?如果是的话,我正在努力看看这如何代表相同的逻辑。代码块应在 posedge 和“四分之一”按下时执行。
    • 这个答案是错误的。 always @(something1) @(something2) do something 被解释为等待something1 事件,然后等待something2 事件。没有办法为两个事件同时发生编写或合成代码。大多数综合工具只允许一个始终块中的一个事件。
    • @dave_59 我可能错了。 Antoninus 你说的“四分压”是什么意思,它的价值已经改变了?我的意思不是初始化这些值,我的意思是明确说明它们的值。所以如果一个值没有改变,你会把 value
    • 是的,当您按下按钮时,它的值基本上会从 0 变为 1。我现在明白你的意思了,但它并不能真正让我代表相同的逻辑。不过我确实找到了解决方法,但感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多