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

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

4 hours ago, Nick_K said:

Да, я уже проверял) И в generat'е не работает и в foreach'е тоже. Но такие же фокусы в Верилоге можно сделать ;)

Макро подстановка работает ДО момента начала компиляции. То есть когда "работает" цикл макро уже нет :(

Поэтому  можно лепить макро только упрощающие код,  типа такого

`define asgnXX(a_name, v_name, idx1, len) \
  if (len>0)  assign a_name[idx1``0] = v_name``idx1``0; \
  if (len>9)  assign a_name[idx1``9] = v_name``idx1``9; \
  if (len>10) assign a_name[-1]      = 1

reg [48:0] va;
reg r_00, ..., r_48;
generate
  `asgnXX(va, r_, 0, 10);
  ...
  `asgnXX(va, r_, 4, 9);
endgenerate

Но тут тоже проблемы могут быть так как может ругаться на отсутствующие переменные (типа r_49) если в коде таких нет. Хотя они реально и не присваиваются.    

Удачи! Rob.

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


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

1 hour ago, des00 said:

Ткните носом где это допускается в стандарте на верилог?

Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++

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


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

1 hour ago, Nick_K said:

Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++

Понятно. Нет, эта фича только SV. В классическом V этого не было. А в виваде, грани между языками стерты, как и в квартусе :(

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


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

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

1 hour ago, Nick_K said:

Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++

Какая конструкция?

Удачи! Rob.

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


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

1 hour ago, RobFPGA said:

Какая конструкция?

У меня спокойно работает вот такой тестовый файл чисто Верилоговского происхождения (не SV)

`define my_sig(x) in_sig_``x

module two_test_v #(
		parameter p_len = 16)
	(
		input	i_clk,
		output	`my_sig(0),
		output	`my_sig(1),
		input	[p_len - 1 : 0] i_a,
		output	[p_len - 1 : 0] o_c);

	reg [p_len - 1 : 0] s_c;

	genvar i;
	generate
		for (i = 0; i < p_len; i = i + 1) begin: gen_out
			always @(posedge i_clk)
				s_c[i] <= i_a[p_len - i - 1];
		end
	endgenerate

	assign o_c = s_c;
	assign in_sig_0 = s_c[0];
	assign in_sig_1 = s_c[1];

endmodule

Товарисч @des00 говорит, что такое стандартом не предусмотрено. Но я не вкурсах что там и как в стандарте. Мне главное, чтобы синтезатор прожевал.

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


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

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

1 minute ago, Nick_K said:

Товарисч @des00 говорит, что такое стандартом не предусмотрено. Но я не вкурсах что там и как в стандарте. Мне главное, чтобы синтезатор прожевал.

То что у вас это как раз стандартная конкатенация строки в макро-подстановке. Поддерживается вроде с 2005 года.  Кроме того могло поддерживаться разными вендорами и ранее,  еще до включения в стандарт.

Удачи! Rob.

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


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

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

Пока суть да дело, да очередная компиляция идет прикинул вариант без ругани на отсутствующие переменные  

`define  asgXX(   a_name, v_name, i1, n) `_asgXX_``n(a_name, v_name, i1)
`define _asgXX_1( a_name, v_name, i1)                                assign a_name[i1``0] = v_name``i1``0;
`define _asgXX_2( a_name, v_name, i1) `_asgXX_1( a_name, v_name, i1) assign a_name[i1``1] = v_name``i1``1;
...
`define _asgXX_10(a_name, v_name, i1) `_asgXX_9( a_name, v_name, i1) assign a_name[i1``9] = v_name``i1``9;

generate
  `asgnXX(va, r_, 0, 10);
  ...
  `asgnXX(va, r_, 4, 9);
endgenerate

Писанины чуть больше,  ругани при компиляции меньше.

Удачи! Rob.   

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


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

В VHDL может быть можно что-то придумать используя атрибуты "начало_имени_сигнала"&'image(тут переменная цикла) и имя_сигнала'simple_name. И далее сравнивая строковые представления... Но сходу в голову не идет решение.

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


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

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

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

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

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

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

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

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

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

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