|
Как отключить оптимизацию регистра в Verilog?, Тайны Verilog |
|
|
|
Oct 22 2017, 18:45
|
Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347

|
Доброго времени суток! Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно Вопрос простой, но я на него не смог найти рабочего решения: Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено). В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний, и не хочется хвастаться таким произведением. СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Oct 22 2017, 19:53
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Lazy_Philosopher @ Oct 22 2017, 21:45)  Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено).
В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. На самом деле, без кода - это гадание на кофейной гуще... Во время симуляции в моделсиме в окне запуска есть птичка - "отключить оптимизацию"... Но на самом деле что-то в вопросе не так.О какой оптимизации идет речь? Если выходы регистра нигде не используются, то при оптимизации его могут выкинуть... У Вас RTL симуляция? Я могу показать, как я это делаю...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Oct 23 2017, 05:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Lazy_Philosopher @ Oct 22 2017, 21:45)  В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ А не перед? Цитата Весь код программы я добавлю в случае надобности. Нет никакой программы. Верилог -- не язык программирования. Цитата(iosifk @ Oct 22 2017, 22:53)  О какой оптимизации идет речь? Если выходы регистра нигде не используются, то при оптимизации его могут выкинуть... Очевидно, об оптимизации при синтезе. Цитата У Вас RTL симуляция? Очевидно, нет.
|
|
|
|
|
Oct 23 2017, 05:35
|
Местный
  
Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771

|
Цитата(Lazy_Philosopher @ Oct 22 2017, 21:45)  Доброго времени суток! Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно Вопрос простой, но я на него не смог найти рабочего решения: Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено). В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний, и не хочется хвастаться таким произведением. СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ! (* noprune *) reg [15:0] data;
--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
|
|
|
|
|
Oct 23 2017, 16:33
|
Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347

|
Наверное стоило упомянуть что я использую Altera Quartus... В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL. Итак отправляю исходный код описания логики а также выход симулятора. (Чтобы было не чересчур сложно разбирать эти дебри я обозначил важные места в коде и на диаграммах. А также то, как должна была бы выглядеть диаграмма.) Плюс картинка диаграммы программы, в которой я использовал переменную для реализации задержки. (Не хотел делать архив для этого. А все вместе не влезло...) *** Предыдущая картинка показывает желаемый результат. И извиняйте за код  ***
Сообщение отредактировал Lazy_Philosopher - Oct 23 2017, 16:31
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 23 2017, 16:52
|
Знающий
   
Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664

|
Цитата В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL. Всё смешалось, люди, кони... Waveform - это наглядное представление сигнала. Реальное время тут вообще никаким боком RTL - это register-transfer level. Хотя бы гугелем пользуйтесь сначала, попробуйте найти информацию сами, а потом уже на форуме других людей озадачивайте.
|
|
|
|
|
Oct 23 2017, 17:05
|
Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347

|
Спасибо, учту. Я на форуме и зарегистрировался из-за того что личного, свободного от учебы, времени перестало хватать. И все же проблема остается прежней: почему-то if странно срабатывает. (Как указано в моем предыдущем посту)
А именно имя кода с использованием переменной не смог прочитаться сайтом. И русские буквы заменились на подчерки.
Сообщение отредактировал Lazy_Philosopher - Oct 23 2017, 17:08
|
|
|
|
|
Oct 23 2017, 18:40
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Lazy_Philosopher @ Oct 23 2017, 20:05)  И все же проблема остается прежней: почему-то if странно срабатывает. (Как указано в моем предыдущем посту) Вот во всех местах, таких как здесь: CODE if ( SPI_State_Reg == `SPI_PHASE_STOP) begin TFT_CD = 0; SPI_CS = 1; SPI_MOSI = 0; SPI_CLK = 0; SPI_Data_Reg = 8'b00000000; Выучить "блокирующие" и "неблокирующие"... Желательно убрать все вот такие: always @(posedge CLK_2MHz_Reg) и оставить только вот такие - always @(posedge i_Main_CLK) begin и сигнал разрешения к ним...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Oct 24 2017, 13:31
|
Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347

|
Цитата(Realking @ Oct 23 2017, 07:35)  (* noprune *) reg [15:0] data; Спасибо, я заметил ошибку. Я неправильно присваивал значения. Однльное спасибо Realking. Совет с "(* noprune *) reg [15:0] data;" помог. С моей стороны вопрос исчерпан.
|
|
|
|
|
Nov 15 2017, 14:23
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600

|
Цитата(iosifk @ Oct 23 2017, 18:40)  Вот во всех местах, таких как здесь: CODE if ( SPI_State_Reg == `SPI_PHASE_STOP) begin TFT_CD = 0; SPI_CS = 1; SPI_MOSI = 0; SPI_CLK = 0; SPI_Data_Reg = 8'b00000000; Выучить "блокирующие" и "неблокирующие"... Желательно убрать все вот такие: always @(posedge CLK_2MHz_Reg) и оставить только вот такие - always @(posedge i_Main_CLK) begin и сигнал разрешения к ним... А можно вопрос, оффтопом? В чем разница между SPI_Data_Reg = 8'b00000000; SPI_Data_Reg = 8'h00; и SPI_Data_Reg = 0; ?
Сообщение отредактировал el.d - Nov 15 2017, 14:23
|
|
|
|
|
Nov 15 2017, 14:53
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(el.d @ Nov 15 2017, 17:23)  А можно вопрос, оффтопом?
В чем разница между SPI_Data_Reg = 8'b00000000; SPI_Data_Reg = 8'h00; и SPI_Data_Reg = 0; ? Возможно, есть неточности по терминологии, но суть такая. 8'b00000000 и 8'h00 - одно и тоже, только в первом случае используется двоичный литерал, а во втором - хексовый. SPI_Data_Reg = 0 - а в этом случае 0 это целочисленный литерал (int или integer), который занимает 32 бита. Т.о. в этом случае компилятор приводит типы, забирая младшие 8 бит.
|
|
|
|
|
Nov 15 2017, 15:05
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600

|
Цитата(Golikov A. @ Nov 15 2017, 14:50)  1. бинарная запись, с явным указанием размера 2. шестнадцетиричная запись, с явным указанием размера 3. десятичная запись, без указания размера, число по умолчанию имеет размер 32 бита Однако, если например сделать раз: logic [15:0] test; Сделать два: test = 0; То например та же Vivado ничего не скажет о том, что 32 битное число обрезается до 16 бит. Вопрос, собсно, был вызван тем, что я примерно также и думал, но поигрался с этим делом немного в Vivado 2017 и есть честно не заметил никакой разницы по ресурсам или сообщений синтезатора, что имеются какие-то неиспользуемые биты, которые отбрасываются. Да и работало оно как задумывалось что в симуляции, что в железе. И как бы если нет разницы (интересно было бы послушать, если кто-то эту разницу реально ловил), то зачем писать более длинную конструкцию?
Сообщение отредактировал el.d - Nov 15 2017, 14:55
|
|
|
|
|
Nov 15 2017, 15:13
|
Знающий
   
Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664

|
Цитата И как бы если нет разницы (интересно было бы послушать, если кто-то эту разницу реально ловил), то зачем писать более длинную конструкцию? По сути это линтовая ошибка или предупреждение (в зависимости от настроек тула). И на это будут ругаться линтовые тулы и тулы статического анализа кода. В общем-то и в них это чаще warning, чем error. Но, чтобы лишний раз не отвлекаться на ложное срабатывание, лучше писать "более длинно". И да, если вы работаете в одном туле (например, Vivado), то ваша запись - это ваше личное дело. Но если вы делитесь своим кодом (продавая, отдавая бесплатно, открывая исходный код), то вы не знаете заранее, в каком туле будет происходить работа, и лучше такие моменты искоренять. Но я даже не знаю сегодня тула, который бы сам не смог правильно привести данные. Vivado, Quartus, DC, VCS, ModelSim, Icarus это воспринимают нормально.
Сообщение отредактировал one_eight_seven - Nov 15 2017, 15:17
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|