说明 "if" 中 posedge 的使用

Clarification on uses of posedge in "if"

我正在尝试自学一些 Verilog。我正在尝试制作一个每秒迭代一次的 mod-10 计数器。我尝试 modify 的代码是我在一个旧论坛上找到的。

我尝试使用辅助计数器,它在“计数器”的第 26 位的每个上升沿上进行迭代。我不允许检查此类事件吗?我如何通过其他方式做到这一点?

always @(posedge clk) begin
    if (!enable) begin 
        counter <= counter + 1;
        
        if (posedge counter[26]) begin 
            seven_output = seven_output + 1;  //iterate the cumulative output state every second ish
        end     
    end
end

在这里,seven_output 只是另一个计数器,其目的是按照描述进行迭代,并将传递给一个单独的 module,其工作是确定 LED 的组合状态return.

我得到的唯一错误描述是

Line 73: Syntax error near "posedge".

第 73 行是最里面的 if 语句。

您收到语法错误,因为在以下行中使用 posedge 关键字是非法的:

    if (posedge counter[26]) begin 

因为没有定时事件控制,所以是非法的。例如,@(posedge something) 使用 posedge 关键字和边缘控制结构:@( ).

而不是在那里使用 posedge,您应该为 count[26] 信号的 edge detector 创建单独的逻辑;我们称它为 pe_count26.

此外,我建议将您的 2 个计数器分成 2 个单独的 always 块。

always @(posedge clk) begin
    if (!enable) begin 
        counter <= counter + 1;    
    end
end

always @(posedge clk) begin
    if (pe_count26) begin 
        seven_output <= seven_output + 1;
    end
end

为时序逻辑使用非阻塞赋值 (<=) 是一种推荐的良好编码习惯。我相应地更改了您的 seven_output 作业。