Verilog always块中的First if语句最初总是计算为true

Verilog always块中的First if语句最初总是计算为true,verilog,Verilog,我试图编写一个始终块,在FPGA的段显示上显示其相应的数字。出于某种原因,即使开关关闭,第一个if条件最初也被评估为true: always @(posedge i2 or posedge i1) begin if(i2) inp11 = x5; else if(i1) inp11 = x9; end inp11最初设置为0,所以我希望当我第一次打开FPGA时,inp11会显示一个0。但是显示一个5(值x5),然后我可以正常正确地在5和9之间切换。那么,

我试图编写一个始终块,在FPGA的段显示上显示其相应的数字。出于某种原因,即使开关关闭,第一个if条件最初也被评估为true:

always @(posedge i2 or posedge i1)
begin
 if(i2)
    inp11 = x5;
  else
    if(i1)
        inp11 = x9;

end

inp11最初设置为0,所以我希望当我第一次打开FPGA时,inp11会显示一个0。但是显示一个5(值x5),然后我可以正常正确地在5和9之间切换。那么,在开关i2未打开的情况下,inp11怎么可能设置为5呢?

查看日志文件,它可能正在报告代码中的警告。您推断的是一个非常丑陋的级别敏感闩锁。RTL模拟和后期合成之间存在行为不匹配

如果您想要组合逻辑:

always @*
begin
  if(i2)
    inp11 = x5;
  else if(i1)
    inp11 = x9;
  else
    inp11 = 'h0; // or some other deterministic value. Do NOT use inp11=inpt11
    // Without the final 'else', a level-sensitive latch is inferred
end
如果您想要同步逻辑:

always @(posedge clk)
begin
  if(i2)
    inp11 <= x5;
  else if(i1)
    inp11 <= x9;
end
始终@(posedge clk)
开始
if(i2)

inp11模拟显示了什么?我没有运行模拟,我把输出放在板上。如果你有几年的HDL经验,你可以不进行模拟,我可以从你没有的代码中看出这一点。为了回答HDL问题,我们需要代码和测试台。首先进行模拟,查看波形并开始调试。还可以在internet上查看Verilog代码的外观。开始使用时钟,不要像对待其他“标准”编程语言那样对待Verilog/VHDL。谢谢你,这已经奏效了!我正在进行uni项目,该项目要求我创建一个小型数学游戏,其中有3个级别,每个级别与1个单位数字的方程式相关联,并且有一个计数器来回答这些方程式。到目前为止,我已将方程式转换为显示在7段显示屏上。如果您不介意,你能给我一个关于如何做这项作业的概述吗?我应该补充一点,我目前的问题是验证答案,因为我已经存储了答案,输入更改正确,但我无法验证答案。