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

SV: динамическое вычисление аттрибутов

Коллеги, имеется 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 не предлагать.

 

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


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

3 hours ago, alexadmin said:

Может можно придумать какой-то обходной путь? Vivado, если что. Переписывать на tcl не предлагать.

нет. потому что это не константы, а комментарии

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


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

Я пока наколдовал конструкцию

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

Похоже и вызов функции не отрабатывается и что-то идет не так при назначении подобной строки в аттрибут.

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


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

Вы можете описать, чего вы хотите? А-то вопрос по SystemVerilog на русскоязычном форуме, а в теме нет даже намёка на то, что вы хотите получить ни на SystemVerilog'е, ни на русском.

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


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

29 minutes ago, one_eight_seven said:

Вы можете описать, чего вы хотите?

Самое первое предложение:

Quote

значения аттрибутов синтеза вычисляются через входные параметры

Тоже иногда возникает такая задача, но всё как-то руки не доходили посмотреть. Как выяснилось, в VHDL всё хорошо.

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


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

Вот так в 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 ... 

 

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


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

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 в коде  плохая практика 

Так-то да, но в данном случае расстановка локов - и есть основная задача всего этого кода.

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


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

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

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

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

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

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

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

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

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

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