Lazy_Philosopher 0 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Доброго времени суток! Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно :smile3046: Вопрос простой, но я на него не смог найти рабочего решения: Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено). В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний, и не хочется хвастаться таким произведением. :laughing: СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 22 октября, 2017 Опубликовано 22 октября, 2017 · Жалоба Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено). В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. На самом деле, без кода - это гадание на кофейной гуще... Во время симуляции в моделсиме в окне запуска есть птичка - "отключить оптимизацию"... Но на самом деле что-то в вопросе не так.О какой оптимизации идет речь? Если выходы регистра нигде не используются, то при оптимизации его могут выкинуть... У Вас RTL симуляция? Я могу показать, как я это делаю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ А не перед? Весь код программы я добавлю в случае надобности.Нет никакой программы. Верилог -- не язык программирования. О какой оптимизации идет речь? Если выходы регистра нигде не используются, то при оптимизации его могут выкинуть...Очевидно, об оптимизации при синтезе. У Вас RTL симуляция?Очевидно, нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба Доброго времени суток! Сразу хочу сказать что я новичок во вселенной FPGA да и вообще на форуме. За глупые ошибки не бейте больно :smile3046: Вопрос простой, но я на него не смог найти рабочего решения: Как отключить оптимизацию одного конкретного регистра так, чтобы его содержимое отображалось на диаграмме? В программе я использую сложение define и переменной в регистре а выход такой как будто в условиях только define (хотя значение переменной должно быть присвоено). В поисках решения я нашел совет ставить следующий комментарий за именем объявленной переменной: /* synthesis syn_keep = 1 syn_preserve = 1*/ Но очевидного результата это не дало. Весь код программы я добавлю в случае надобности. Потому что я пока использую примитивный автомат состояний, и не хочется хвастаться таким произведением. :laughing: СПАСИБО ЗА ЛЮБОЙ КОММЕНТАРИЙ! (* noprune *) reg [15:0] data; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lazy_Philosopher 0 23 октября, 2017 Опубликовано 23 октября, 2017 (изменено) · Жалоба Наверное стоило упомянуть что я использую Altera Quartus... В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL. Итак отправляю исходный код описания логики а также выход симулятора. (Чтобы было не чересчур сложно разбирать эти дебри я обозначил важные места в коде и на диаграммах. А также то, как должна была бы выглядеть диаграмма.) Плюс картинка диаграммы программы, в которой я использовал переменную для реализации задержки. (Не хотел делать архив для этого. А все вместе не влезло...) *** Предыдущая картинка показывает желаемый результат. И извиняйте за код *** __________.txt switch.txt Изменено 23 октября, 2017 пользователем Lazy_Philosopher Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба В нём для отладки я использовал диаграммы waveform. Полагаю что это считается отладкой в реальном времени, т.е. RTL. Всё смешалось, люди, кони... Waveform - это наглядное представление сигнала. Реальное время тут вообще никаким боком RTL - это register-transfer level. Хотя бы гугелем пользуйтесь сначала, попробуйте найти информацию сами, а потом уже на форуме других людей озадачивайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lazy_Philosopher 0 23 октября, 2017 Опубликовано 23 октября, 2017 (изменено) · Жалоба Спасибо, учту. Я на форуме и зарегистрировался из-за того что личного, свободного от учебы, времени перестало хватать. И все же проблема остается прежней: почему-то if странно срабатывает. (Как указано в моем предыдущем посту) А именно имя кода с использованием переменной не смог прочитаться сайтом. И русские буквы заменились на подчерки. Изменено 23 октября, 2017 пользователем Lazy_Philosopher Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба И все же проблема остается прежней: почему-то if странно срабатывает. (Как указано в моем предыдущем посту) Вот во всех местах, таких как здесь: 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 и сигнал разрешения к ним... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 октября, 2017 Опубликовано 23 октября, 2017 · Жалоба Ваш Delay_Reg состоит из 32х битов, а вы пытаетесь в эти отдельные биты присвоить 0 (что нормально) и 1000 (что совершенно не нормально). Результатом всегда будет 0 И оптимизация тут совершенно не при чем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lazy_Philosopher 0 24 октября, 2017 Опубликовано 24 октября, 2017 · Жалоба (* noprune *) reg [15:0] data; Спасибо, я заметил ошибку. Я неправильно присваивал значения. Однльное спасибо Realking. Совет с "(* noprune *) reg [15:0] data;" помог. С моей стороны вопрос исчерпан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
el.d 0 15 ноября, 2017 Опубликовано 15 ноября, 2017 (изменено) · Жалоба Вот во всех местах, таких как здесь: 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; ? Изменено 15 ноября, 2017 пользователем el.d Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 15 ноября, 2017 Опубликовано 15 ноября, 2017 · Жалоба 1. бинарная запись, с явным указанием размера 2. шестнадцетиричная запись, с явным указанием размера 3. десятичная запись, без указания размера, число по умолчанию имеет размер 32 бита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 15 ноября, 2017 Опубликовано 15 ноября, 2017 · Жалоба А можно вопрос, оффтопом? В чем разница между 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 бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
el.d 0 15 ноября, 2017 Опубликовано 15 ноября, 2017 (изменено) · Жалоба 1. бинарная запись, с явным указанием размера 2. шестнадцетиричная запись, с явным указанием размера 3. десятичная запись, без указания размера, число по умолчанию имеет размер 32 бита Однако, если например сделать раз: logic [15:0] test; Сделать два: test = 0; То например та же Vivado ничего не скажет о том, что 32 битное число обрезается до 16 бит. Вопрос, собсно, был вызван тем, что я примерно также и думал, но поигрался с этим делом немного в Vivado 2017 и есть честно не заметил никакой разницы по ресурсам или сообщений синтезатора, что имеются какие-то неиспользуемые биты, которые отбрасываются. Да и работало оно как задумывалось что в симуляции, что в железе. И как бы если нет разницы (интересно было бы послушать, если кто-то эту разницу реально ловил), то зачем писать более длинную конструкцию? Изменено 15 ноября, 2017 пользователем el.d Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 15 ноября, 2017 Опубликовано 15 ноября, 2017 (изменено) · Жалоба И как бы если нет разницы (интересно было бы послушать, если кто-то эту разницу реально ловил), то зачем писать более длинную конструкцию? По сути это линтовая ошибка или предупреждение (в зависимости от настроек тула). И на это будут ругаться линтовые тулы и тулы статического анализа кода. В общем-то и в них это чаще warning, чем error. Но, чтобы лишний раз не отвлекаться на ложное срабатывание, лучше писать "более длинно". И да, если вы работаете в одном туле (например, Vivado), то ваша запись - это ваше личное дело. Но если вы делитесь своим кодом (продавая, отдавая бесплатно, открывая исходный код), то вы не знаете заранее, в каком туле будет происходить работа, и лучше такие моменты искоренять. Но я даже не знаю сегодня тула, который бы сам не смог правильно привести данные. Vivado, Quartus, DC, VCS, ModelSim, Icarus это воспринимают нормально. Изменено 15 ноября, 2017 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться