Перейти к содержанию
    

SV: get acces to unit from generate

Всем привет

 

У меня есть некоторый вычисительный блок, который я копирую 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 не поддерживает массив интерфейсов =/

Или поддерживает?

Изменено пользователем ConstHw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

А кто мешает Вам требуемое значение присвоить созданному в теле цикла временному интерфейсу, который присваиваете порту B модуля который написал ConstHw :)

 

Успехов! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про поддержку интерфейсов у 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 цикл внутрь блока и сборка обратно в интерфейс внутри.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

Я имел ввиду что то типа такого - если я конечно правильно понял проблему.

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...