Can';不要在verilog中使用else始终阻塞

Can';不要在verilog中使用else始终阻塞,verilog,block,quartus,Verilog,Block,Quartus,我在尝试编译时从Quartus收到此错误: 错误(10200):Verilog HDL条件语句错误 time_of_day_FSM.v(166):无法将条件中的操作数匹配到 始终的封闭事件控件中的相应边 构造 以下是一些背景。我正在制作一个时钟,对于这个始终块,我希望以hh:mm:ss的格式递增并设置某些值,以类似时钟的行为。我有一个每毫秒高一次的时钟源,我正在使用计数器设置secondPassedreg 我希望块中的代码每过一秒就更新一次,比如时钟,或者在我的板上按键[2](down=0),因

我在尝试编译时从Quartus收到此错误:

错误(10200):Verilog HDL条件语句错误 time_of_day_FSM.v(166):无法将条件中的操作数匹配到 始终的封闭事件控件中的相应边 构造

以下是一些背景。我正在制作一个时钟,对于这个
始终
块,我希望以
hh:mm:ss
的格式递增并设置某些值,以类似时钟的行为。我有一个每毫秒高一次的时钟源,我正在使用计数器设置
secondPassed
reg

我希望块中的代码每过一秒就更新一次,比如时钟,或者在我的板上按
键[2]
down=0
),因为这是用户在设置时钟时间时用来增加小时、分钟或秒数的。下面是有问题的
始终
块(很抱歉嵌套了if语句,我想不出更好的方法了):

//每秒钟。过去只是为了让时间继续。独立于国家。
始终@(posedge secondPassed,negedge键[2],negedge键[0])开始
如果(键[0]==0)开始

hr1您在
始终
块中混合了组合逻辑和同步逻辑,这是编码的坏习惯。通常,在大多数设计中有两个主
始终

组合式:

always@(*) // * adds anything under this always block to sensitivity list.
begin      // Which makes this always block combinational.
    count_reg_d <= somelogic;
end
always@(*)//*将此always块下的任何内容添加到灵敏度列表中。
begin//这使它始终是块组合的。

count_reg_d您在
始终
块中混合了组合逻辑和同步逻辑,这是编码的坏习惯。通常,在大多数设计中有两个主
始终

组合式:

always@(*) // * adds anything under this always block to sensitivity list.
begin      // Which makes this always block combinational.
    count_reg_d <= somelogic;
end
always@(*)//*将此always块下的任何内容添加到灵敏度列表中。
begin//这使它始终是块组合的。

count_reg_d我猜它试图识别时钟,它是一个未使用的“边缘”元素。您有两个未使用的,它会变得混乱。尝试从灵敏度列表中删除键[2]。我猜它尝试识别时钟,它是一个未使用的“边缘”元素。您有两个未使用的,它会变得混乱。尝试从灵敏度列表中删除键[2]。
always@(*) // * adds anything under this always block to sensitivity list.
begin      // Which makes this always block combinational.
    count_reg_d <= somelogic;
end
always@(posedge clk, negedge rst)
begin
    if(~rst)
        count_reg_q <= 0;
    else
    begin
        count_reg_q <= count_reg_d;
    end
end