|
|
  |
microblaze verilog, ошибка при компиляции |
|
|
|
May 28 2013, 10:38
|
Частый гость
 
Группа: Участник
Сообщений: 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 , то ошибок нет . но тогда шины превращаются в одиночную. что не нужно.
|
|
|
|
|
May 28 2013, 12:15
|
Частый гость
 
Группа: Участник
Сообщений: 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; результат тот же. если убрать декларацию в для ввода в первый , то ошибок нет. но нарушается разрядность сигналов.
|
|
|
|
|
May 28 2013, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
module mb_top input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin; это 32 пина входных, то есть снаружи блока их могут менять
mb_i .DIP_Switches_32Bits_GPIO_IO_I_pin ( DIP_Switches_32Bits_GPIO_IO_I_pin ), это еще 32 пина которые идут в модуль МБ_И, у них тоже имя, и среда их направила со входа главного модуля в этот
а дальше
data_video_in_out instance_name ( .data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin_wire ), еще 32 пина которые идут из модуля видео_ин_аут, и поскольку дальше assign DIP_Switches_32Bits_GPIO_IO_I_pin = DIP_Switches_32Bits_GPIO_IO_I_pin_wire фактически они тоже имя (DIP_Switches_32Bits_GPIO_IO_I_pin) и среда их воткнул на вход блока мб и подключила к ним вход верхнего блока
входной сигнал главного модуля и выходной ин оута конфликтуют.
допустим у вас есть MB с сигналом SIGNAL_IN есть VIDEO_OUT с сигналом SIGNAL_OUT делаете
wire [31:0] signal_wire
и даете им обоим на вход (поставьте в скобочки при подключении блока), это свяжет ваши 2 блока между собой.
MB( .... .SIGNAL_IN(signal_wire) ...
VIDEO_OUT( ... .SIGNAL_OUT(signal_wire) ...
в вашем последнем коде все верно, можно только использовать 1 wire, и надо убедиться что в объявлении верхнего модуля в котором вставлены эти 2 блока нет входов с тем же именем, а именно DIP_Switches_32Bits_GPIO_IO_I_pin,
как это нарушается разрядность? по каким критериям это видно? Внутри блоков правильная разрядность?
|
|
|
|
|
May 29 2013, 06:44
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(Golikov A. @ May 28 2013, 17:17)  входной сигнал главного модуля и выходной ин оута конфликтуют допустим у вас есть MB с сигналом SIGNAL_IN есть VIDEO_OUT с сигналом SIGNAL_OUT делаете
wire [31:0] signal_wire
и даете им обоим на вход (поставьте в скобочки при подключении блока), это свяжет ваши 2 блока между собой.
MB( .... .SIGNAL_IN(signal_wire) ...
VIDEO_OUT( ... .SIGNAL_OUT(signal_wire) ...
в вашем последнем коде все верно, можно только использовать 1 wire, и надо убедиться что в объявлении верхнего модуля в котором вставлены эти 2 блока нет входов с тем же именем, а именно DIP_Switches_32Bits_GPIO_IO_I_pin,
как это нарушается разрядность? по каким критериям это видно? Внутри блоков правильная разрядность? насколько я понимаю я так и делал с самого начала. Код module mb_top ( DIP_Switches_32Bits_GPIO_IO_I_pin, Push_Buttons_5Bits_GPIO_IO_I_pin, clock_generator_0_CLKOUT4_pin );
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_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 ), .strob_v_out(Push_Buttons_5Bits_GPIO_IO_I_pin ) ); endmodule Push_Buttons_5Bits_GPIO_IO_I_pin встречается только здесь в вышеприведенном и в module mb и это делала среда ISE. и это вход. и он должен просто завести данные в mb.и дальше работает программа. Код module mb ( DIP_Switches_32Bits_GPIO_IO_I_pin, Push_Buttons_5Bits_GPIO_IO_I_pin, );
input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin; input [4:0] Push_Buttons_5Bits_GPIO_IO_I_pin;
assign DIP_Switches_32Bits_GPIO_IO_I = DIP_Switches_32Bits_GPIO_IO_I_pin; assign Push_Buttons_5Bits_GPIO_IO_I = Push_Buttons_5Bits_GPIO_IO_I_pin; assign clock_generator_0_CLKOUT4_pin = clock_generator_0_CLKOUT4; Isim все показывает нормально. strob_v_out, Push_Buttons_5Bits_GPIO_IO_I_pin, Push_Buttons_5Bits_GPIO_IO_I совпадают. где конфликт???
|
|
|
|
|
May 29 2013, 09:37
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(Golikov A. @ May 29 2013, 13:08)  data_v_out это входной или выходной порт?
по названию выходной. Получается что входные сигнал МБ_ТОП вы заводите на вход БМ - это нормально, но потом их же заводите на дата_в_оут, и если это выходной порт, то вы фактически вход на выход пихаете... data_v_out - выходной. .data_v_out(DIP_Switches_32Bits_GPIO_IO_I_pin ), это значит что контакт data_v_out (это выход) подключен к DIP_Switches_32Bits_GPIO_IO_I_pin (который вход)
|
|
|
|
|
May 29 2013, 12:59
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(Golikov A. @ May 29 2013, 15:34)  замечательно, а куда подключены input [31:0] DIP_Switches_32Bits_GPIO_IO_I_pin;
модуля mb_top? внутри которого ваши модули соединены?
на тот же вход. Вы не видите в этом проблемы? да, теперь вижу. получается связь через топ пин. и там нужно, чтобы эту связь сделать , два пина вход и выход. я пытался связать их напрямую.т.е. не через пины верхнего уровня, но в нем. wire[31:0] data; wire [5:0]Push; и их в связи. и все нормально в симуляторе , но при компиляции выдает ошибку что data и Push уже задекларированы. а когда я убираю декларацию, вот тут и возникает ошибка потери разрядности. т.е. они превращаются в одноразрязрядные.
|
|
|
|
|
May 30 2013, 05:24
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(Golikov A. @ May 29 2013, 17:49)  регистры и провода надо декларировать до добавления модулей да, так и есть. все прошло. огромное спасибо за помощь.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|