реклама на сайте
подробности

 
 
> microblaze verilog, ошибка при компиляции
serg_k1
сообщение May 28 2013, 10:38
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



система с головной microblaze и подчиненный data_video_in_out . В microblaze добавлены

input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
input [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;
output clock_generator_0_CLKOUT4_pin;

RESET и clock_generator_0_CLKOUT4_pin входные для data_video_in_out ,
в нем data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin ) и strob_v_out(Push_Buttons_5Bits_GPIO_IO_I_pin )
выходы и входы для microblaze.
симуляция в Isim работает. правда для этого потребовалось убрать в сгенерированном Verilog Test Fixture

//reg [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
//reg [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;

при компиляции выдает следующую ошибку

Multi-source in Unit <mb_top> on signal <Push_Buttons_5Bits_GPIO_IO_I_pin<4>>; this signal is connected to multiple drivers.
такая же выдается для всех Push_Buttons_5Bits_GPIO_IO_I_pin и DIP_Switches_32Bits_GPIO_IO_I_pin
но они же и должны быть для одного входы для другого выходы.
Сначала было

Код
assign  DIP_Switches_32Bits_GPIO_IO_I_pin = data_v_out;
...
.data_v_out(data_v_out ),
...
...
результат тот же.
где ошибка?

Код

// mb_top.v
//-----------------------------------------------------------------------------

module mb_top
  (
   ...
   RESET,
   ...
    DIP_Switches_4Bits_TRI_I,
    CLK_P,
    CLK_N,
    DIP_Switches_32Bits_GPIO_IO_I_pin,
    Push_Buttons_5Bits_GPIO_IO_I_pin,
    clock_generator_0_CLKOUT4_pin
  );
  
...
  input [3:0] DIP_Switches_4Bits_TRI_I;
  input CLK_P;
  input CLK_N;
  input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
  input [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;
  output clock_generator_0_CLKOUT4_pin;

  (* BOX_TYPE = "user_black_box" *)
  mb
    mb_i (
      
      ...
     ...
    
      .DIP_Switches_4Bits_TRI_I ( DIP_Switches_4Bits_TRI_I ),
      .CLK_P ( CLK_P ),
      .CLK_N ( CLK_N ),
      .DIP_Switches_32Bits_GPIO_IO_I_pin ( DIP_Switches_32Bits_GPIO_IO_I_pin ),
      .Push_Buttons_5Bits_GPIO_IO_I_pin ( Push_Buttons_5Bits_GPIO_IO_I_pin ),
      .clock_generator_0_CLKOUT4_pin ( clock_generator_0_CLKOUT4_pin )
    );

wire RESET, clock_generator_0_CLKOUT4_pin;
wire [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
wire [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;



// Instantiate the module
data_video_in_out instance_name (
    ...

    .clock_mb(clock_generator_0_CLKOUT4_pin),
    .reset(RESET),
    .data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin ),

    ...

   .strob_v_out(Push_Buttons_5Bits_GPIO_IO_I_pin )
    );
    
endmodule


если задать разные имена , то ошибка будет
<DIP_Switches_32Bits_GPIO_IO_I_pin_1> is already implicitly declared earlier.
если же убрать декларацию wire , то ошибок нет . но тогда шины превращаются в одиночную. что не нужно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение May 28 2013, 10:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



this signal is connected to multiple drivers
означает что у вас есть несколько источников которые пытаются изменить этот сигнал.

как среде различить

input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
input [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;
output clock_generator_0_CLKOUT4_pin;

и

wire RESET, clock_generator_0_CLKOUT4_pin;
wire [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
wire [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;

wire я так понимаю нужен чтобы связать 2 блока, у одного эти выключатели выходные, у другого входные,

и есть еще общий выход из этого блока? Тогда наверное имеет смысл порты выхода назвать не так как wire
и добавить процедуру assign, только надо учитывать
если у вас есть
вход выключатель А
есть выход другого блока выключатель В
и вход 3 блока выключатель С

то нельзя все эти 3 блока связать, потому что на вход выключатель С пойдут выключатель В и А, и как понять кто из них главный? что собственно у вас и произошло.

input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin; - входной сигнал управляется снаружи
data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin ) - я так понимаю выходной модуля, то есть внутри модуля он меняется
и все это
DIP_Switches_32Bits_GPIO_IO_I_pin ( DIP_Switches_32Bits_GPIO_IO_I_pin )
на вход 3 модулю...
Go to the top of the page
 
+Quote Post
serg_k1
сообщение May 28 2013, 12:15
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(Golikov A. @ May 28 2013, 14:58) *
wire я так понимаю нужен чтобы связать 2 блока, у одного эти выключатели выходные, у другого входные,

и есть еще общий выход из этого блока? Тогда наверное имеет смысл порты выхода назвать не так как wire
и добавить процедуру assign, только надо учитывать
если у вас есть
вход выключатель А
есть выход другого блока выключатель В
и вход 3 блока выключатель С

то нельзя все эти 3 блока связать, потому что на вход выключатель С пойдут выключатель В и А, и как понять кто из них главный? что собственно у вас и произошло.

я все это понимаю. как избавиться?
два блока, связаны четырмя сигналами. у одного reset и CLKOUT4 выходы. У другого это входы. с ними все нормально.
у второго есть выходы Push_Buttons_5Bits_GPIO_IO_I_pin -шина 5 сигналов и DIP_Switches_32Bits_GPIO_IO_I_pin -32 сигнала. это входы для первого.
wire используется для соединения.
это то что нужно и что по моему сделано. и здесь нет неопределенности, т.е. я не виже где два сигнала подаются.
пробовал другое.

Код
mb_i (
      .DIP_Switches_32Bits_GPIO_IO_I_pin ( DIP_Switches_32Bits_GPIO_IO_I_pin ),
      .Push_Buttons_5Bits_GPIO_IO_I_pin ( Push_Buttons_5Bits_GPIO_IO_I_pin  ),
      .clock_generator_0_CLKOUT4_pin ( clock_generator_0_CLKOUT4_pin )
    );
data_video_in_out instance_name (
    
    .clock_mb(clock_generator_0_CLKOUT4_pin),
    .reset(RESET),
    .data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin_wire ),
    
    .strob_v_out(Push_Buttons_5Bits_GPIO_IO_I_pin_wire )
    );



// для выхода из второго
wire [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin_wire;  
wire [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin_wire;  
  
// для ввода в первый
wire [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;  
wire [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;
assign  Push_Buttons_5Bits_GPIO_IO_I_pin = Push_Buttons_5Bits_GPIO_IO_I_pin_wire;
assign  DIP_Switches_32Bits_GPIO_IO_I_pin = DIP_Switches_32Bits_GPIO_IO_I_pin_wire;


результат тот же.
если убрать декларацию в для ввода в первый , то ошибок нет. но нарушается разрядность сигналов.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 10:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016