说明 "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
作业。
我正在尝试自学一些 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
作业。