Can';不要在verilog中使用else始终阻塞
我在尝试编译时从Quartus收到此错误: 错误(10200):Verilog HDL条件语句错误 time_of_day_FSM.v(166):无法将条件中的操作数匹配到 始终的封闭事件控件中的相应边 构造 以下是一些背景。我正在制作一个时钟,对于这个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),因
始终
块,我希望以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