2016-05-13 2 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 

Я получаю следующее сообщение об ошибке, когда я пытаюсь синтезировать его в Xilinx 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_output1 и test_outpu2 в качестве выходного сигнала, и это по умолчанию типа провода, так что вы просто должны неявно указать провод или рег в соответствии с использованием,

    // reg test_output1; 
    // reg test_output2; 
    
3

Если вы укажете направление порта в списке портов, вы также должны объявить тип. Это называется заголовком стиля ANSI.

Существует также заголовок стиля, отличного от ANSI, который разделяет список портов, направление и тип. Если вы принимаете соглашение IEEE1364-1995, вы должны использовать стиль, отличный от ANSI, и вы не можете объявить тип (например, output reg test_output2; является незаконным, а output test_output2; reg test_output2; является законным). Поскольку IEEE1364-2001 поддерживает стандарт ANSI и non-ANSI (а не ANSI разрешает output reg test_output2;). Все современные симуляторы Verilog - симуляторы SystemVerilog (IEEE1800), поэтому это выбор дизайнеров. (Стиль ANSI более популярен, так как он меньше печатает).

ANSI стиль заголовка:

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

стиль Non-ANSI заголовок:

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

    reg test_output2; 

Примечание: С IEEE1364, вы не можете управлять reg с assign заявление, оно должно быть чистым типом , IEEE1800 смягчил правило, оно возобновлено logic вместо reg, но в целом, если вы собираетесь использовать assign, вам следует назначить сеть (например, wire).

Смежные вопросы