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

Можно ли сделать аналог #if DEBUG на verilog

Иногда приходится перепроверять\изменять функционал уже однажды отлаженных модулей.

После этой первой отладки ненужные для работы (тестовые) порты были закомментированы\удалены, как и тестовые сообщения и т.п. Соответственно теперь нужно все это восстанавливать.

В то же время в "обычных" языках программирования есть возможность включать режим отладки (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
...

Если это невозможно, то как быть? Хотелось бы поменьше механической работы.

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


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

есть тот же самый

'define 'ifdef

работает не во всех средах

можно через generate делать.

Но опять же работает не во всех средах, в ксалинксе у меня даже среда падал от дефайнов.

скорее всего самой малой кровью будет отладочные порты оставлять, просто срубать с них функционал чтобы не жрали вентили и все, порты модуля через дефайн менять для среды (во всяком случае ксалинкса) было крайне тяжко

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


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

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

 

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


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

`ifdef __USE_DEBUG__

работает не во всех средах, в ксалинксе у меня даже среда падал от дефайнов.

Спасибо! Буду проверять в квартусе.

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


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

А вот в VHDL нет такого препороцессора... фтопку его )))

К стати, через generate невозможно порты то использовать, то нет. А через препроцессор - можно.

Ну а ещё лучше для изврата с составом портов наверное использовать SV, интерфейсы

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


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

Если уж verilog не все среды до конца поддерживают, то SV и подавно.

 

А если есть навыки программирования - то и свой препроцессор написать легко, а возможности безграничны :)

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


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

Если уж verilog не все среды до конца поддерживают, то SV и подавно.

Вероятнее, кто-то что-то не так делал, а не не до конца поддержано. Элементарщина навроде `define работает везде.

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


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

А вот в 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)

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


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

Вероятнее, кто-то что-то не так делал, а не не до конца поддержано. Элементарщина навроде `define работает везде.

 

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

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


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

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

Да банальный глюк софта. У меня оно в разное время на чем только не висло. Это несерьезная претензия.

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


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

SM

а среды синтеза держат какие-либо предефайны, чтобы их можно было легко отличить от моделсима, к примеру. ?

а то вырезать кусок текста из синтеза прагмой синтезис - это просто. а как сказать моделсиму, что ему надо бы "увидеть" чуть другой исходник, чем уходит на синтез?

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


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

а среды синтеза держат какие-либо предефайны, чтобы их можно было легко отличить от моделсима, к примеру. ?

а то вырезать кусок текста из синтеза прагмой синтезис - это просто. а как сказать моделсиму, что ему надо бы "увидеть" чуть другой исходник, чем уходит на синтез?

 

Не знаю. Зато точно знаю, что среды содержат возможность через командную строку/свойства проекта/TCL определять любые дефайны, чем я и пользуюсь.

 

Да, в более простых случаях, также, кстати, не стоит и забывать про /* synthesis translate on/off */

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


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

Я делаю по другому: просто при симуляции например в моделсиме - вывожу все сигналы необходимые для отладки (прописать в 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

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


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

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

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

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

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

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

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

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

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

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