Nick_K 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 1 hour ago, Vengin said: Я так понимаю, предлагается вместо формулы вставить константу, равную рассчитанному значению: Абсолютно нет! Я говорю что эту расчитанную константу не нужно запихивать в Генерик/Параметр. Используйте константу напрямую везде где она необходима. Не нужно лишнего переприсвоения. Параметризация будет сама разбросана. 1 hour ago, Vengin said: 1) Можно или нельзя напрямую из HDL кода подтягивать параметры, если в рассчётах параметров используются только стандарные библиотечные мат функции типа log2? Да можно. Вопрос как вы это сделаете. Криво через 4 вложения или напрямую используете константу 1 hour ago, Vengin said: А в какой Vivado это? Я пытаюсь на 2017.4. Может в версиях постарше постепенно решают проблемы.. В самой свежей. 17-тая может и не тянет. В 19 всё ок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vengin 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 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 код уже не скомпилишь для симуляции/синтеза. В чём тогда смысл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба Приветствую! 1 minute ago, Vengin said: Да и не совсем понятно, что этот подход (использование XPATH функций) даёт? Допустим IP Packager не ругается на модифицированный HDL (с использованием XPATH функции вместо стандартный). Но ведь при этом сам HDL код уже не скомпилишь для симуляции/синтеза. В чём тогда смысл? Смысл в стандартизации (надо же прогресс как то двигать) - типа пишем HDL единообразно и не паримся с паковкой в различных IP пакерах. Ну а для того чтобы скомпилировалось в симуляции/синтезе напишем еще одну стандартную библиотеку или package. Ни кто ведь вам не мешает сделать XPATH врапперы над обычными функциями ieee math. Но одно ясно - без мозолистых рук вам не обойтись Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба Я наверное сам виноват, что не показал на примере, но вот написано то же самое: 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 )))); и пользоваться ею... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vengin 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 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]: Наверное чем иметь такой ненужный геморрой с этим IP Packager лучше в Block Design выпихнуть наружу порты, которые нужно подключать к корке и склеивать это всё уже в HDL. Бррр... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 37 minutes ago, Vengin said: В итоге получается модуль, у когорого шина addr1[0:0], addr2[4:0]: А скиньте ещё скрины "Customization Parameters" и "Ports and Intefaces" из приведённого примера, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба Приветствую! 41 minutes ago, Vengin said: Не нравится именно parameter AW = $clog2(DW). В итоге получается модуль, у когорого шина addr1[0:0], addr2[4:0]: Ну все предсказуемо Гы, немного поэкспериментировал - на строке ... input [log(2, DATA_WH)-1:0] addr2, ... пакер в 19.1 уходит бесконечную медитацию бросив перед этим в лог ворчливое WARNING: [IP_Flow 19-5150] The Range '(log(2DATA_WH) - 1):0' is present ... Прикольно парсер работает не уж то региональные настройки (. ,) могут влиять на это? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vengin 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 1 час назад, Nick_K сказал: А скиньте ещё скрины "Customization Parameters" и "Ports and Intefaces" из приведённого примера, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба Приветствую! Если хотите чтобы в 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба 34 minutes ago, Vengin said: Я даже ради спортивного интереса у себя сделал проект - всё работает. Скиньте свой, будем поглядеть. P.S. Всмысле свой проект-пример. Не основной Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vengin 0 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба 16 часов назад, Nick_K сказал: Я даже ради спортивного интереса у себя сделал проект - всё работает. Скиньте свой, будем поглядеть. P.S. Всмысле свой проект-пример. Не основной Вот tst_ip_packager.xpr.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 10 сентября, 2019 Опубликовано 10 сентября, 2019 · Жалоба 56 minutes ago, Vengin said: Вот tst_ip_packager.xpr.zip Во-первых это не проект, во-вторых это не тот проект (пример со скриншотов). Но я взял один ваш файл и сделал с него компонент. Всё работает и никаких глюков. p.s. Создайте проект просто запустив build.tcl с папки в среде Вивадо sv_prj_wb_intercon.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vengin 0 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба В 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 написано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться