2015-04-27 33 views
0
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 

這是用於閾值,我希望它能夠檢測人的膚色,並將其變成白色和其他黑色。未知的Verilog錯誤要求結束後其他

+0

你得到的實際錯誤是什麼? –

+0

錯誤(10170):在blank.v(21)附近的文本「else」處出現Verilog HDL語法錯誤;期待「結束」 – Dom

+2

你有'開始',但你忘記了'結束',但是你的代碼也有其他問題。 – Qiu

回答

2

我同意從魁的意見,但有另一個問題。它看起來像你是一個Python程序員,並認爲48 < r1 < 255會檢查r1是否在48和255之間。這在Verilog中不起作用。相反,它會檢查r1是否大於48,並從中產生一個0或1.然後它將檢查0或1與255之間始終爲真。我已經改寫了這個公式:

always @(*) 
begin 
    if (48 < r1 && r1 < 255 && 0 < g1 && g1 < 223 && 0 < b1 && b1 < 196) begin 
    r2 = 255; 
    g2 = 255; 
    b2 = 255; 
    end else begin 
    r2 = 0; 
    g2 = 0; 
    b2 = 0; 
    end 
end 
2

有幾個問題:

  1. 你在if-else條件也許應該依賴於投入,沒有產出。
  2. 與C,Java等一樣,您需要{}之後if-else,在Verilog中需要begin-end才能執行多個操作。

你的代碼看起來應該像下面的:

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 
+0

感謝人幫忙還有一些錯誤,但一旦我添加分配en2 = en1錯誤已解決:) – Dom