2016-05-13 60 views
1

我想實現如下簡單的Verilog代碼:爲什麼verilog中會出現以下重新聲明錯誤?

module test1(
    input ACLK, 
    input RST, 
    output test_output1, 
    output test_output2 
    ); 

//wire ACLK; 
//wire RST; 
reg test_output1; 
reg test_output2; 


assign test_output1 = ACLK; 

always @(posedge ACLK or negedge RST) 
begin 
    if(!RST) 
    begin 
     //test_output1 <=0; 
     test_output2 <=0; 
    end 
    else 
    begin 
     //test_output1 <=0; 
     test_output2 <=1; 
    end 
end 


endmodule 

我收到以下錯誤消息時我嘗試合成它的賽靈思ISE:

========================================================================= 
*       HDL Compilation        * 
========================================================================= 
Compiling verilog file "test1.v" in library work 
ERROR:HDLCompilers:27 - "test1.v" line 30 Illegal redeclaration of 'test_output1' 
ERROR:HDLCompilers:27 - "test1.v" line 31 Illegal redeclaration of 'test_output2` 

我無法解決這個錯誤。任何幫助將不勝感激。

+1

test_output1已被聲明爲寄存器和導線。 – vim

回答

1

添加以下修改:

  1. 您在賦值語句中使用test_output1所以它應該是類型的線。

    module test1(
        input wire ACLK, 
        input wire RST, 
        output wire test_output1, 
        output reg test_output2 
    ); 
    
  2. 你已經宣佈test_output1test_outpu2作爲輸出,它是由默認類型導線的,所以你只需要隱含指定線或根據使用章,

    // reg test_output1; 
    // reg test_output2; 
    
3

如果聲明端口列表中的端口方向,則還必須聲明該類型。這被稱爲ANSI風格的標題。

還有一個非ANSI風格的標題,用於分隔portlist,方向和類型。如果您正在使用IEEE1364-1995約定,那麼您必須使用非ANSI樣式,並且不能聲明該類型(例如,output reg test_output2;是非法的,而output test_output2; reg test_output2;是合法的)。由於IEEE1364-2001支持ANSI和非ANSI風格(並且非ANSI允許output reg test_output2;)。所有現代的Verilog仿真器都是SystemVerilog(IEEE1800)仿真器,因此它是設計者的選擇。 (由於輸入較少,ANSI風格更受歡迎)。

ANSI風格的頭:

module test1(
    input ACLK, 
    input RST, 
    output test_output1, 
    output reg test_output2); 

非ANSI風格的頭:

module test1(ACLK, RST, test_output1, test_output2); 
    input ACLK; 
    input RST; 
    output test_output1; 
    output test_output2; 

    reg test_output2; 

注意:使用IEEE1364,你不能駕駛regassign聲明,它必須是一個網式。 IEEE1800已經軟化了重新開始的規則logic而不是reg,但是一般如果你打算使用assign那麼你應該分配一個網絡(例如wire)。

相關問題