RobFPGA 27 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 1 hour ago, des00 said: Ткните носом где это допускается в стандарте на верилог? Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 1 hour ago, Nick_K said: Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++ Понятно. Нет, эта фича только SV. В классическом V этого не было. А в виваде, грани между языками стерты, как и в квартусе :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба Приветствую! 1 hour ago, Nick_K said: Извините - в стандартах не силён. В проекте под Вивадо 2019.2 такая конструкция без проблем синтезируется и собирается. Думаю это ещё базовые функции языка, которые "мигрировали" с Си/С++ Какая конструкция? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба 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 говорит, что такое стандартом не предусмотрено. Но я не вкурсах что там и как в стандарте. Мне главное, чтобы синтезатор прожевал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба Приветствую! 1 minute ago, Nick_K said: Товарисч @des00 говорит, что такое стандартом не предусмотрено. Но я не вкурсах что там и как в стандарте. Мне главное, чтобы синтезатор прожевал. То что у вас это как раз стандартная конкатенация строки в макро-подстановке. Поддерживается вроде с 2005 года. Кроме того могло поддерживаться разными вендорами и ранее, еще до включения в стандарт. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба Приветствую! Пока суть да дело, да очередная компиляция идет прикинул вариант без ругани на отсутствующие переменные `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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 20 января, 2020 Опубликовано 20 января, 2020 · Жалоба В VHDL может быть можно что-то придумать используя атрибуты "начало_имени_сигнала"&'image(тут переменная цикла) и имя_сигнала'simple_name. И далее сравнивая строковые представления... Но сходу в голову не идет решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться