alexadmin 0 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба Коллеги, имеется VHDL-код в котором значения аттрибутов синтеза вычисляются через входные параметры, примерно так: Generic ( X : natural; Y : natural) ... function FFBEL(n: natural) return string is ... attribute LOC of FFi:label is "SLICE_X" & integer'image(X)& "Y" & integer'image(Y); attribute BEL of FFi:label is FFBEL(2*i); ... FFi : FDCE ( ... Есть ли возможность написать эквивалентный код на (System)Verilog? Попытка написать что-то типа string s="SLICE_X13Y13"; //(* LOC="SLICE_X13Y13" *) FDCE FFi ( (* LOC=s *) FDCE FFi ( ... сразу дает ошибку "ERROR: [Synth 8-1002] s is not a constant", про попытки преобразования чисел в строку я уж и не говорю. Что в общем логично, если верить стандарту 1800, который определяет аттрибуты как константы: attribute_instance ::= (* attr_spec { , attr_spec } *) attr_spec ::= attr_name [ = constant_expression ] Может можно придумать какой-то обходной путь? Vivado, если что. Переписывать на tcl не предлагать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба Вычисляйте localparam из paremeter'ов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба 3 hours ago, alexadmin said: Может можно придумать какой-то обходной путь? Vivado, если что. Переписывать на tcl не предлагать. нет. потому что это не константы, а комментарии Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба Я пока наколдовал конструкцию function [1:8*2] str_itoa(integer n); begin $sformat(str_itoa, "%d", n); end endfunction localparam s={"SLICE_X",str_itoa(X)}; // "SLICE_X"+str.itoa(X); (* LOC=s *) FDCE i ( ... но на нее выдается предупреждение Could not create 'LOC' constraint because the specified site '72'b01010011010011000100100101000011010001010101111101011000xxxxxxxxxxxxxxxx' could not be found in current part Похоже и вызов функции не отрабатывается и что-то идет не так при назначении подобной строки в аттрибут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба Вы можете описать, чего вы хотите? А-то вопрос по SystemVerilog на русскоязычном форуме, а в теме нет даже намёка на то, что вы хотите получить ни на SystemVerilog'е, ни на русском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба 29 minutes ago, one_eight_seven said: Вы можете описать, чего вы хотите? Самое первое предложение: Quote значения аттрибутов синтеза вычисляются через входные параметры Тоже иногда возникает такая задача, но всё как-то руки не доходили посмотреть. Как выяснилось, в VHDL всё хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 17 ноября, 2022 Опубликовано 17 ноября, 2022 · Жалоба Вот так в Vivado вроде работает (v2022.1). localparam XY = $sformatf("SLICE_X%dY%d", XX, YY); (* LOC = XY *) logic test_reg ... Так что в SV с этим тоже нормально. Только все одно LOC в коде плохая практика P.S. И даже так работает (* LOC = $sformatf("SLICE_X%dY%d", XX, YY) *) logic test_reg ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 18 ноября, 2022 Опубликовано 18 ноября, 2022 · Жалоба On 11/17/2022 at 9:40 PM, RobFPGA said: Вот так в Vivado вроде работает (v2022.1). localparam XY = $sformatf("SLICE_X%dY%d", XX, YY); (* LOC = XY *) logic test_reg ... Так что в SV с этим тоже нормально. Спасибо! Получилось. Версия 2019.1 в процессе синтеза выдает "Could not create 'LOC' constraint because the specified site '1'b0' could not be found in current part". А на версии 2020.2 собралось нормально. On 11/17/2022 at 9:40 PM, RobFPGA said: Только все одно LOC в коде плохая практика Так-то да, но в данном случае расстановка локов - и есть основная задача всего этого кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться