реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как отключить оптимизацию регистра в Verilog?, Тайны Verilog
Lazy_Philosopher
сообщение Oct 22 2017, 18:45
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347



Доброго времени суток!
Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно smile3046.gif
Вопрос простой, но я на него не смог найти рабочего решения:
Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме?
В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено).

В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной:
/* synthesis syn_keep = 1 syn_preserve = 1*/
Но очевидного результата это не дало.

Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний,
и не хочется хвастаться таким произведением. laughing.gif

СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ!
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 22 2017, 19:53
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 708
Регистрация: 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
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Oct 23 2017, 05:23
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 832
Регистрация: 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 симуляция?
Очевидно, нет.
Go to the top of the page
 
+Quote Post
Realking
сообщение Oct 23 2017, 05:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 457
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



Цитата(Lazy_Philosopher @ Oct 22 2017, 21:45) *
Доброго времени суток!
Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно smile3046.gif
Вопрос простой, но я на него не смог найти рабочего решения:
Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме?
В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено).

В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной:
/* synthesis syn_keep = 1 syn_preserve = 1*/
Но очевидного результата это не дало.

Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний,
и не хочется хвастаться таким произведением. laughing.gif

СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ!


(* noprune *) reg [15:0] data;


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
Lazy_Philosopher
сообщение Oct 23 2017, 16:33
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347



Наверное стоило упомянуть что я использую Altera Quartus...
В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL.
Итак отправляю исходный код описания логики а также выход симулятора.

(Чтобы было не чересчур сложно разбирать эти дебри я обозначил важные места в коде и на диаграммах.
А также то, как должна была бы выглядеть диаграмма.)



Плюс картинка диаграммы программы, в которой я использовал переменную для реализации задержки.
(Не хотел делать архив для этого. А все вместе не влезло...)

***
Предыдущая картинка показывает желаемый результат.
И извиняйте за код biggrin.gif

***

Сообщение отредактировал Lazy_Philosopher - Oct 23 2017, 16:31
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  __________.txt ( 8.98 килобайт ) Кол-во скачиваний: 10
Прикрепленный файл  switch.txt ( 10.91 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Oct 23 2017, 16:52
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 736
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Цитата
В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL.

Всё смешалось, люди, кони...
Waveform - это наглядное представление сигнала.
Реальное время тут вообще никаким боком
RTL - это register-transfer level.

Хотя бы гугелем пользуйтесь сначала, попробуйте найти информацию сами, а потом уже на форуме других людей озадачивайте.
Go to the top of the page
 
+Quote Post
Lazy_Philosopher
сообщение Oct 23 2017, 17:05
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347



Спасибо, учту.
Я на форуме и зарегистрировался из-за того что личного, свободного от учебы, времени перестало хватать.
И все же проблема остается прежней: почему-то if странно срабатывает. (Как указано в моем предыдущем посту)

А именно имя кода с использованием переменной не смог прочитаться сайтом. И русские буквы заменились на подчерки.

Сообщение отредактировал Lazy_Philosopher - Oct 23 2017, 17:08
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 23 2017, 18:40
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 3 708
Регистрация: 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
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 23 2017, 21:36
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 040
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Ваш Delay_Reg состоит из 32х битов, а вы пытаетесь в эти отдельные биты присвоить 0 (что нормально) и 1000 (что совершенно не нормально). Результатом всегда будет 0
И оптимизация тут совершенно не при чем
Go to the top of the page
 
+Quote Post
Lazy_Philosopher
сообщение Oct 24 2017, 13:31
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 17-09-17
Из: Чехия
Пользователь №: 99 347



Цитата(Realking @ Oct 23 2017, 07:35) *
(* noprune *) reg [15:0] data;

Спасибо, я заметил ошибку. Я неправильно присваивал значения.
Однльное спасибо Realking. Совет с "(* noprune *) reg [15:0] data;" помог.
С моей стороны вопрос исчерпан.
Go to the top of the page
 
+Quote Post
el.d
сообщение Nov 15 2017, 14:23
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 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
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Nov 15 2017, 14:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 232
Регистрация: 17-02-06
Пользователь №: 14 454



1. бинарная запись, с явным указанием размера
2. шестнадцетиричная запись, с явным указанием размера
3. десятичная запись, без указания размера, число по умолчанию имеет размер 32 бита
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Nov 15 2017, 14:53
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 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 бит.
Go to the top of the page
 
+Quote Post
el.d
сообщение Nov 15 2017, 15:05
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 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
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Nov 15 2017, 15:13
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 736
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Цитата
И как бы если нет разницы (интересно было бы послушать, если кто-то эту разницу реально ловил), то зачем писать более длинную конструкцию?

По сути это линтовая ошибка или предупреждение (в зависимости от настроек тула). И на это будут ругаться линтовые тулы и тулы статического анализа кода. В общем-то и в них это чаще warning, чем error. Но, чтобы лишний раз не отвлекаться на ложное срабатывание, лучше писать "более длинно".

И да, если вы работаете в одном туле (например, Vivado), то ваша запись - это ваше личное дело. Но если вы делитесь своим кодом (продавая, отдавая бесплатно, открывая исходный код), то вы не знаете заранее, в каком туле будет происходить работа, и лучше такие моменты искоренять. Но я даже не знаю сегодня тула, который бы сам не смог правильно привести данные. Vivado, Quartus, DC, VCS, ModelSim, Icarus это воспринимают нормально.

Сообщение отредактировал one_eight_seven - Nov 15 2017, 15:17
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th December 2017 - 20:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016