ConstHw 0 10 сентября, 2016 Опубликовано 10 сентября, 2016 (изменено) · Жалоба Всем привет У меня есть некоторый вычисительный блок, который я копирую N-раз в generate. Допустим я задал где то снаружи порт A и присвоил его в генерейте module foo_block #() ( input [7:0] port_a, input [7:0] port_b, output [7:0] port_c ); //------------------- logic [N-1:0][7:0] a_values; logic [N-1:0][7:0] c_rez; for (i = 0; i<N; i++) begin my_gen foo_block #( ) u_foo_block ( .port_a ( a_values [ i ] ), .port_c ( c_rez [ i ] ) ); end А вот к порту B я хочу иметь непосредственный доступ. То есть назначить каждый индивидуально my_gen[0].u_foo_block( .port_b(42) ); my_gen[0].u_foo_block( .port_b(17) ); my_gen[0].u_foo_block( .port_b(25) ) Как это сделать? Вариант создать массив B и задать в него руками значения, а потом присвоить в генерейте не подходит logic [N-1:0][7:0] b_values; assign b_vales[0] = 42; assign b_vales[0] = 17; assign b_vales[0] = 25; Не подходит потому что порт b на самом деле интерфейс, а Xilinx не поддерживает массив интерфейсов =/ Или поддерживает? Изменено 10 сентября, 2016 пользователем ConstHw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 сентября, 2016 Опубликовано 10 сентября, 2016 · Жалоба Приветствую! А кто мешает Вам требуемое значение присвоить созданному в теле цикла временному интерфейсу, который присваиваете порту B модуля который написал ConstHw :) Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 11 сентября, 2016 Опубликовано 11 сентября, 2016 · Жалоба Про поддержку интерфейсов у Xilinx тут: ug900-vivado-logic-simulation.pdf Страницы 196-197. Если порт B действительно интерфейс: module foo_block #() ( input logic [7:0] port_a, port_b_intf port_b, output logic [7:0] port_c ); //------------------- parameter N = 8; logic [N-1:0][7:0] a_values; logic [N-1:0][7:0] c_rez; port_b_intf port_b_intf_inst[N](); for (i = 0; i<N; i++) begin my_gen foo_block #( ) u_foo_block ( .port_a ( a_values [ i ] ), .port_b ( port_b_intf_inst [ i ] ), .port_c ( c_rez [ i ] ) ); end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 13 сентября, 2016 Опубликовано 13 сентября, 2016 · Жалоба lexus.mephi Это синтезабельно? RobFPGA То что синтезатор вивады не умеет в массив интерфейсов =/ http://www.xilinx.com/support/answers/55135.html Vivado Synthesis does not support the following SystemVerilog supported constructs and features: Alias Arrays of Interfaces С этим проектом пока приходится пользоваться старой вивадой, но может кто в курсе - в 16.2 не починили еще? Пока решил поставил костыль расщеплением интерфейса на структуры, протаскивание через generate цикл внутрь блока и сборка обратно в интерфейс внутри. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 13 сентября, 2016 Опубликовано 13 сентября, 2016 · Жалоба Приветствую! Я имел ввиду что то типа такого - если я конечно правильно понял проблему. interface tst_if (); logic [7:0] din; endinterface module foo ( input wire [7:0] A, tst_if B, output wire [7:0] C ); assign C=A^B.din; endmodule module bar ( input [7:0] A [0:7], output [7:0] C [0:7] ); logic [7:0] B_const [0:7] ='{1,2,3,4,5,6,7,8}; generate for (genvar gi=0; gi<8; gi++) begin tst_if B_gen (); assign B_gen.din = B_const[gi]; foo i_foo ( .A(A[gi] ), .B(B_gen), .C(C[gi] ) ); end endgenerate endmodule Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться