要求在else之后结束的未知Verilog错误 模块空白( 输入[7:0]r1, 输入[7:0]g1, 输入[7:0]b1, 输入en1, 输出寄存器[7:0]r2, 输出寄存器[7:0]g2, 输出寄存器[7:0]b2, 输出en2 ); 始终@(*) 开始 如果(48

要求在else之后结束的未知Verilog错误 模块空白( 输入[7:0]r1, 输入[7:0]g1, 输入[7:0]b1, 输入en1, 输出寄存器[7:0]r2, 输出寄存器[7:0]g2, 输出寄存器[7:0]b2, 输出en2 ); 始终@(*) 开始 如果(48,verilog,Verilog,这是用于阈值的,我希望它能够检测人类肤色,并将其变为白色,将其他颜色变为黑色。有两个问题: if else中的条件可能取决于输入,而不是输出 就像在C、Java等语言中一样,您需要在if else之后执行{},而在Verilog中,您需要begin end才能执行多个操作 您的代码应该如下所示: module blank( input[7:0]r1, input[7:0]g1, input[7:0]b1, input en1, output reg[7:0] r2, ou

这是用于阈值的,我希望它能够检测人类肤色,并将其变为白色,将其他颜色变为黑色。

有两个问题:

  • if else
    中的条件可能取决于输入,而不是输出
  • 就像在C、Java等语言中一样,您需要在
    if else
    之后执行
    {}
    ,而在Verilog中,您需要
    begin end
    才能执行多个操作
  • 您的代码应该如下所示:

    module blank(
      input[7:0]r1,
      input[7:0]g1,
      input[7:0]b1,
      input en1,
      output reg[7:0] r2,
      output reg[7:0] g2,
      output reg[7:0] b2,
      output en2
    );
    
    always @(*)
    begin 
      if ( 48 < r2 < 255  &&  0 < g2 < 223  && 0  < b2 < 196 ) 
         r2 = 255;
         g2 = 255;
         b2 = 255;
      else   
         r2 = 0;
         g2 = 0;
         b2 = 0;
    end
    endmodule
    
    始终@(*)
    开始
    如果(48
    有两个问题:

  • if else
    中的条件可能取决于输入,而不是输出
  • 就像在C、Java等语言中一样,您需要在
    if else
    之后执行
    {}
    ,而在Verilog中,您需要
    begin end
    才能执行多个操作
  • 您的代码应该如下所示:

    module blank(
      input[7:0]r1,
      input[7:0]g1,
      input[7:0]b1,
      input en1,
      output reg[7:0] r2,
      output reg[7:0] g2,
      output reg[7:0] b2,
      output en2
    );
    
    always @(*)
    begin 
      if ( 48 < r2 < 255  &&  0 < g2 < 223  && 0  < b2 < 196 ) 
         r2 = 255;
         g2 = 255;
         b2 = 255;
      else   
         r2 = 0;
         g2 = 0;
         b2 = 0;
    end
    endmodule
    
    始终@(*)
    开始
    如果(48
    我同意Qui的评论,但还有一个问题。看起来您是一名Python程序员,认为
    48
    会检查r1是否在48和255之间。这在Verilog中不起作用。相反,它将检查r1是否大于48,并由此产生0或1。然后,它将根据255检查0或1,这将始终为真。我重写了这个等式:

    always @(*)
    begin 
      if ( 48 < r1 &&  ...  && b1 < 196 ) begin
        r2 = 255;
        g2 = 255;
        b2 = 255;
      end else begin   
        r2 = 0;
        g2 = 0;
        b2 = 0;
      end
    end
    
    始终@(*)
    开始
    如果(48
    我同意Qui的评论,但还有一个问题。看起来您是一名Python程序员,认为
    48
    会检查r1是否在48和255之间。这在Verilog中不起作用。相反,它将检查r1是否大于48,并由此产生0或1。然后,它将根据255检查0或1,这将始终为真。我重写了这个等式:

    always @(*)
    begin 
      if ( 48 < r1 &&  ...  && b1 < 196 ) begin
        r2 = 255;
        g2 = 255;
        b2 = 255;
      end else begin   
        r2 = 0;
        g2 = 0;
        b2 = 0;
      end
    end
    
    始终@(*)
    开始
    如果(48
    您得到的实际错误是什么?错误(10170):文本“else”附近blank.v(21)处的Verilog HDL语法错误;预期“结束”您有
    begin
    ,但您忘记了
    end
    ,但是您的代码还有其他问题。底部有end和endmodule,我忘了在代码中添加它抱歉!但是错误仍然是一样的,您得到的实际错误是什么?错误(10170):Verilog HDL语法错误位于blank.v(21)文本“else”附近;预期“结束”您有
    begin
    ,但您忘记了
    end
    ,但是您的代码还有其他问题。底部有end和endmodule,我忘了在代码中添加它抱歉!但是错误仍然是samethanks guy的帮助,仍然有一些错误,但是一旦我添加了assign en2=en1,错误就解决了:)感谢guy的帮助,仍然有一些错误,但是一旦我添加assign en2=en1,错误就解决了:)