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

Vivado кастомизация параметров в IP Packager с помощью XPATH

1 hour ago, Vengin said:

Я так понимаю, предлагается вместо формулы вставить константу, равную рассчитанному значению:

Абсолютно нет! Я говорю что эту расчитанную константу не нужно запихивать в Генерик/Параметр. Используйте константу напрямую везде где она необходима. Не нужно лишнего переприсвоения. Параметризация будет сама разбросана.

1 hour ago, Vengin said:

1) Можно или нельзя напрямую из HDL кода подтягивать параметры, если в рассчётах параметров используются только стандарные библиотечные мат функции типа log2?

Да можно. Вопрос как вы это сделаете. Криво через 4 вложения или напрямую используете константу

1 hour ago, Vengin said:

А в какой Vivado это? Я пытаюсь на 2017.4. Может в версиях постарше постепенно решают проблемы..

В самой свежей. 17-тая может и не тянет. В 19 всё ок

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


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

32 минуты назад, RobFPGA сказал:

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

Никто и не пытается флудить - но простую (для вас) проблему надо еще и понять.

Из того что я понял - XPATH это некий стандарт описания констант и мат функций при применении которых в HDL  паковка последних в IP  будет сопровождаться автоматический парсингом.  То есть вам в HDL надо  переделать математику чтобы она использовала только такие функции.  Например такой вариант вашего примера распознается и вычисляется правильно (для шины di)


entity tst_xpath is
generic (
  DATA_WIDTH : natural := 64;
  ADDR_WIDTH : natural := 32 -- ceiling(log(2,DATA_WIDTH))
);
port(
  clk   : in  std_logic;
  addr  : in  std_logic_vector(ADDR_WIDTH-1 downto 0);
  di    : in  std_logic_vector(ceiling(log(2,DATA_WIDTH))-1 downto 0);
  do    : out std_logic_vector(DATA_WIDTH-1 downto 0)
);
end tst_xpath;

Но не все так радужно   - для GENERIC это почему-то не работает :( 

Удачи! Rob.

О, а я пробовал с GENERIC - не клеилось, на портах и не проверял. Как и упоминалось на форумах Xilinx какой-то очень сырой и своеобразный этот парсер IP Packager.

Да и не совсем понятно, что этот подход (использование XPATH функций) даёт? Допустим IP Packager не ругается на модифицированный HDL (с использованием XPATH функции вместо стандартный). Но ведь при этом сам HDL код уже не скомпилишь для симуляции/синтеза. В чём тогда смысл?

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


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

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

1 minute ago, Vengin said:

Да и не совсем понятно, что этот подход (использование XPATH функций) даёт? Допустим IP Packager не ругается на модифицированный HDL (с использованием XPATH функции вместо стандартный). Но ведь при этом сам HDL код уже не скомпилишь для симуляции/синтеза. В чём тогда смысл?

Смысл в стандартизации (надо же прогресс как то двигать) - типа пишем HDL единообразно и не паримся с паковкой в различных IP пакерах.  Ну а для того чтобы скомпилировалось в симуляции/синтезе напишем еще одну стандартную библиотеку или package. Ни кто ведь вам не мешает сделать XPATH врапперы над обычными функциями ieee math.

Но одно ясно - без мозолистых рук вам не обойтись :gamer2::gamer3:   

Удачи! Rob.

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


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

Я наверное сам виноват, что не показал на примере, но вот написано то же самое:

2 hours ago, Nick_K said:

А зачем Вам эта вся головная боль? Наличие генерика DATA_WIDTH обосновано полностью, но параметр ADDR_WIDTH - это чисто внутренняя структура. поменяйте в портах ADDR_WIDTH на natural(ceil(log2(real( DATA_WIDTH )))) а в коде сделайте константу ADDR_WIDTH_С а пользуйтесь ею. И не будет проблем и мороки. Иначе ADDR_WIDTH можно нечаянно поменять в топе (особенно в IP коре, особенно нерадивому юзеру) и будут потом проблемы

ADDR_WIDTH убрать и в порт прописать natural(ceil(log2(real( DATA_WIDTH ))))

далее по модулю объявить constant ADDR_WIDTH_C: natural := (ceil(log2(real( DATA_WIDTH )))); и пользоваться ею...

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


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

55 минут назад, Nick_K сказал:

Я наверное сам виноват, что не показал на примере, но вот написано то же самое:

ADDR_WIDTH убрать и в порт прописать natural(ceil(log2(real( DATA_WIDTH ))))

далее по модулю объявить constant ADDR_WIDTH_C: natural := (ceil(log2(real( DATA_WIDTH )))); и пользоваться ею...

Подход понятен. Но проблемы это не решает (по крайней мере в VHDL). Если даже убрать параметр Generic ADDR_WIDTH и в явном виде прописать ширину порта:

addr  : in  std_logic_vector(natural(ceil(log2(real( DATA_WIDTH ))))-1 downto 0);

Получаем ошибку:

[IP_Flow 19-627] Port 'addr': XPath expression failed: Unsupported function call or array usage "real" found in expression "(natural(ceil(log2(real(spirit:decode(id('MODELPARAM_VALUE.DATA_WIDTH')))))) - 1)".

 

 

 

Кстати попробовал в Vivado 2019.1 - те же ошибки. А ещё попробовал Verilog код, и там тоже не всё так гладко:

module top #
(
  parameter DW = 32,
  parameter AW = $clog2(DW)
) (
  input clk,

  input  [AW-1:0]          addr1,
  input  [$clog2(DW)-1:0]  addr2,
  input  [DW-1:0] din,
  output [DW-1:0] dout
);

endmodule

IP Packager выдаёт warnings:

[IP_Flow 19-5101] Packaging a component with a SystemVerilog top file is not fully supported. Please refer to UG1118 'Creating and Packaging Custom IP'.
[IP_Flow 19-329] [HDL Parser] Unable to determine the value format for HDL parameter 'AW' with value 'spirit:log(2,DW)'. The parameter type is not supported in this release.
[IP_Flow 19-533] HDL Parameter 'AW (Aw)': Missing data type

Не нравится именно parameter AW = $clog2(DW).

В итоге получается модуль, у когорого шина addr1[0:0], addr2[4:0]:

image.thumb.png.3608a22bb3b24b7e864519e87fe069bf.png

 

Наверное чем иметь такой ненужный геморрой с этим IP Packager лучше в Block Design выпихнуть наружу порты, которые нужно подключать к корке и склеивать это всё уже в HDL. Бррр...

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


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

37 minutes ago, Vengin said:

В итоге получается модуль, у когорого шина addr1[0:0], addr2[4:0]:

А скиньте ещё скрины "Customization Parameters" и "Ports and Intefaces" из приведённого примера, пожалуйста.

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


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

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

41 minutes ago, Vengin said:

Не нравится именно parameter AW = $clog2(DW).

В итоге получается модуль, у когорого шина addr1[0:0], addr2[4:0]:

Ну все предсказуемо :unknw: 

Гы,  немного поэкспериментировал - на строке 

...
input  [log(2, DATA_WH)-1:0] addr2,
...

пакер в 19.1 уходит бесконечную медитацию бросив перед этим в лог ворчливое 

WARNING: [IP_Flow 19-5150] The Range '(log(2DATA_WH) - 1):0' is present  ...

Прикольно  парсер работает :shok: не уж то региональные настройки (. ,) могут влиять на это?

Удачи! Rob.

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


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

1 час назад, Nick_K сказал:

А скиньте ещё скрины "Customization Parameters" и "Ports and Intefaces" из приведённого примера, пожалуйста.

image.thumb.png.1c8f3d9d1c2c7ec7c2609821fa7061bb.png

image.thumb.png.0464cfa57119e031768fabe4572cab83.png

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


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

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

Если хотите чтобы в V/SV правильно парсило функции для parameter не забывайте добавлять тип параметра

module tst_xpath2 #(
  parameter integer ADDR_WH = 32             ,
  parameter integer DATA_WH = $clog2(ADDR_WH),
  parameter string  NAME = "some_name"
...

А иначе пакер автоматом тип string лепит

Удачи!  Rob.

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


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

34 minutes ago, Vengin said:

image.thumb.png.1c8f3d9d1c2c7ec7c2609821fa7061bb.png

image.thumb.png.0464cfa57119e031768fabe4572cab83.png

Я даже ради спортивного интереса у себя сделал проект - всё работает. Скиньте свой, будем поглядеть.

P.S. Всмысле свой проект-пример. Не основной

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


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

16 часов назад, Nick_K сказал:

Я даже ради спортивного интереса у себя сделал проект - всё работает. Скиньте свой, будем поглядеть.

P.S. Всмысле свой проект-пример. Не основной

Вот

tst_ip_packager.xpr.zip

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


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

56 minutes ago, Vengin said:

Во-первых это не проект, во-вторых это не тот проект (пример со скриншотов). Но я взял один ваш файл и сделал с него компонент. Всё работает и никаких глюков.

p.s. Создайте проект просто запустив build.tcl с папки в среде Вивадо

sv_prj_wb_intercon.zip

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


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

В 09.09.2019 в 16:40, RobFPGA сказал:

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

Если хотите чтобы в V/SV правильно парсило функции для parameter не забывайте добавлять тип параметра


module tst_xpath2 #(
  parameter integer ADDR_WH = 32             ,
  parameter integer DATA_WH = $clog2(ADDR_WH),
  parameter string  NAME = "some_name"
...

А иначе пакер автоматом тип string лепит

Удачи!  Rob.

Действительно, после того как добавил тип параметра integer, warning-и исчезли и компонент лепистся нормально. Эх, жаль что всё уже на VHDL написано...

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


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

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

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

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

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

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

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

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

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

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