vea 0 25 января, 2015 Опубликовано 25 января, 2015 · Жалоба Иногда приходится перепроверять\изменять функционал уже однажды отлаженных модулей. После этой первой отладки ненужные для работы (тестовые) порты были закомментированы\удалены, как и тестовые сообщения и т.п. Соответственно теперь нужно все это восстанавливать. В то же время в "обычных" языках программирования есть возможность включать режим отладки (debug) при компиляции, указав параметр. То есть там модули 2в1: в тексте остается весь код для отладки, а использовать его или нет - решается по ходу компиляции. Можно ли такое же сделать на языках описания аппаратуры? То есть (псевдокод): module foo #parameter DEBUG=0 ( input clk, input rst_n, output [31:0] odata, if (DEBUG) begin output [31:0] test_counter1; end ) if (DEBUG) begin assign test_counter1=counter1; end ... Если это невозможно, то как быть? Хотелось бы поменьше механической работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Opex 0 25 января, 2015 Опубликовано 25 января, 2015 · Жалоба Можно использовать `define `ifdef `else `endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 января, 2015 Опубликовано 25 января, 2015 · Жалоба есть тот же самый 'define 'ifdef работает не во всех средах можно через generate делать. Но опять же работает не во всех средах, в ксалинксе у меня даже среда падал от дефайнов. скорее всего самой малой кровью будет отладочные порты оставлять, просто срубать с них функционал чтобы не жрали вентили и все, порты модуля через дефайн менять для среды (во всяком случае ксалинкса) было крайне тяжко Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 25 января, 2015 Опубликовано 25 января, 2015 · Жалоба module uut ( input in, output out `ifdef __USE_DEBUG__ ,input in_tst, output out_tst `endif ); `ifdef __USE_DEBUG__ assign out_tst = in_tst; `endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vea 0 25 января, 2015 Опубликовано 25 января, 2015 · Жалоба `ifdef __USE_DEBUG__ работает не во всех средах, в ксалинксе у меня даже среда падал от дефайнов. Спасибо! Буду проверять в квартусе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба А вот в VHDL нет такого препороцессора... фтопку его ))) К стати, через generate невозможно порты то использовать, то нет. А через препроцессор - можно. Ну а ещё лучше для изврата с составом портов наверное использовать SV, интерфейсы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Opex 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба Если уж verilog не все среды до конца поддерживают, то SV и подавно. А если есть навыки программирования - то и свой препроцессор написать легко, а возможности безграничны :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба Если уж verilog не все среды до конца поддерживают, то SV и подавно. Вероятнее, кто-то что-то не так делал, а не не до конца поддержано. Элементарщина навроде `define работает везде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба А вот в VHDL нет такого препороцессора... фтопку его ))) это Вы зачем пишете? :laughing: Иногда приходится перепроверять\изменять функционал уже однажды отлаженных модулей. После этой первой отладки ненужные для работы (тестовые) порты были закомментированы\удалены, как и тестовые сообщения и т.п. Соответственно теперь нужно все это восстанавливать. В то же время в "обычных" языках программирования есть возможность включать режим отладки (debug) при компиляции, указав параметр. То есть там модули 2в1: в тексте остается весь код для отладки, а использовать его или нет - решается по ходу компиляции. Можно ли такое же сделать на языках описания аппаратуры? То есть (псевдокод): module foo #parameter DEBUG=0 ( input clk, input rst_n, output [31:0] odata, if (DEBUG) begin output [31:0] test_counter1; end ) if (DEBUG) begin assign test_counter1=counter1; end ... Если это невозможно, то как быть? Хотелось бы поменьше механической работы. Навскидку - создать разные архитектурные тела для синтеза и компиляции + использование атрибутов (для синтеза, для симуляции). Но это при большом проекте с большим количеством вложений - серьезная работа... Я делаю по другому: просто при симуляции например в моделсиме - вывожу все сигналы необходимые для отладки (прописать в do файле, чтобы каждый раз не не выводить), тогда проект для синтеза и симуляции будет один и тот же Сигналы предназначеные для симуляции (как вспомогательные) в модулях - для синтеза запрещаете, используя атрибут В принципе синтезатор их сам уберет, а Вам об этом сообщит в отчете/предупреждениях(warning) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба это Вы зачем пишете?Холивара для )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба Вероятнее, кто-то что-то не так делал, а не не до конца поддержано. Элементарщина навроде `define работает везде. летом дело было, обсуждали, ISE нафиг повис, а потом файл убил и синтезить отказался наотрез... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба летом дело было, обсуждали, ISE нафиг повис, а потом файл убил и синтезить отказался наотрез... Да банальный глюк софта. У меня оно в разное время на чем только не висло. Это несерьезная претензия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mahagam 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба SM а среды синтеза держат какие-либо предефайны, чтобы их можно было легко отличить от моделсима, к примеру. ? а то вырезать кусок текста из синтеза прагмой синтезис - это просто. а как сказать моделсиму, что ему надо бы "увидеть" чуть другой исходник, чем уходит на синтез? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба а среды синтеза держат какие-либо предефайны, чтобы их можно было легко отличить от моделсима, к примеру. ? а то вырезать кусок текста из синтеза прагмой синтезис - это просто. а как сказать моделсиму, что ему надо бы "увидеть" чуть другой исходник, чем уходит на синтез? Не знаю. Зато точно знаю, что среды содержат возможность через командную строку/свойства проекта/TCL определять любые дефайны, чем я и пользуюсь. Да, в более простых случаях, также, кстати, не стоит и забывать про /* synthesis translate on/off */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 27 января, 2015 Опубликовано 27 января, 2015 · Жалоба Я делаю по другому: просто при симуляции например в моделсиме - вывожу все сигналы необходимые для отладки (прописать в do файле, чтобы каждый раз не не выводить), тогда проект для синтеза и симуляции будет один и тот же Сигналы предназначеные для симуляции (как вспомогательные) в модулях - для синтеза запрещаете, используя атрибут В принципе синтезатор их сам уберет, а Вам об этом сообщит в отчете/предупреждениях(warning) Я юзаю такой способ. Вывожу на порты все сигналы для теста какие нужно. Этот модуль ложу в другой, в котором выведены только необходимые порты. В тестбенче вызываю вложенный модуль. Что-то вроде такого: module M_1( output Out1, output Out2, output Out3, input In1); M1 M1( .Out1(Out1), .Out2(Out2), .Out3(Out2), .Out4(), .Out5(), .Out6(), .Out7(), .In1(In1)); endmodule module M1( output Out1, output Out2, output Out3, output Out4, output Out5, output Out6, output Out7, input In1); ................................. endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться