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

verilog из наглядного i<=i+1 счетчика синтезировать быстрый

4 минуты назад, blackfin сказал:

Прочитал. Вопросы все еще возникают. Прямая цитата на andrew_b будет?

Если вопросы все еще возникают, значит не прочитали. Читайте еще:) Насчет цитаты - Вы не помните кому и где Вы отвечали полчаса назад? Но впрочем извольте, вот Вам цитата. Еще вопросы?

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


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

3 minutes ago, Самурай said:

Но впрочем извольте, вот Вам цитата. Еще вопросы?

Последний вопрос: где в этой цитате вы увидели VHDL?

 

 :biggrin:

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


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

Только что, blackfin сказал:

Последний вопрос: где в этой цитате вы увидели VHDL?

Еще раз, последний - прочитайте ВНИМАТЕЛЬНО ВСЮ тему, со ВСЕМИ ссылками, тогда возможно Вы все поймете сами:)

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


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

19 минут назад, Flip-fl0p сказал:

Ничего не запрещает для unsigned писать так: cnt <= cnt + 1

Тогда в чём правы мои оппоненты?

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


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

2 минуты назад, MrGalaxy сказал:

Тогда в чём правы мои оппоненты?

В том, что трассировщику и синтезатор - им пофиг как Вы объявили счетчик. Inreger\natural\unsigned\std_logic_vector

А симулятору разница есть. 

Из-за этого могут быть всякие интересности. 

Например вы обявили счетчик: integer range 0 to 129. И засинтезировали эту схему.

И ожидаете, что счетчик будет обнуляться после достижения максимума. Однако он будет считать до 255 и только потом обнулится.

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


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

1 минуту назад, Flip-fl0p сказал:

Например вы обявили счетчик: integer range 0 to 129. И засинтезировали эту схему.

Не надо например. Я дал вполне конкретный код, степень двойки минус один (как и Вы, кстати). Только в этом случае будет корректный счёт и сброс по переполнению.

Коню понятно, что в иных случаях надо ставить условие сброса.

5 минут назад, Flip-fl0p сказал:

В том, что трассировщику и синтезатор - им пофиг как Вы объявили счетчик. Inreger\natural\unsigned\std_logic_vector

О чём и речь. А это не все понимают.

5 минут назад, Flip-fl0p сказал:

А симулятору разница есть. 

Квартусовскому симулятору без разницы.

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


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

13 минут назад, MrGalaxy сказал:

Не надо например. Я дал вполне конкретный код, степень двойки минус один (как и Вы, кстати). Только в этом случае будет корректный счёт и сброс по переполнению.

Коню понятно, что в иных случаях надо ставить условие сброса.

О чём и речь. А это не все понимают.

Квартусовскому симулятору без разницы.

Ну а нормальный симулятор даже если вы объявили что счетчик имеет 2**n - 1( например integer range 0 to 127) откуда будет знать что надо обнулиться ? Он досчитает до 128 и выдаст ошибку - уход за предел объявленного диапазона. Все честно.

Вот вы взяли ведро на 10 литров. А туда пытаетесь налить 20 литров. Это ненормально. Это ошибка. Симулятор Вам об этом и говорит. А вот ежели симулятор не проверяет такие вещи - то грош цена такому симулятору. Вас же не смущает то, что нельзя в VHDL соединять шины разных разновидностей между собой.

P.S. Да и вообще зачем пользоваться квартовским симулятором. Максимум на что он годится - в ВУЗах студентов мучать , чтобы пол пары студент тестовые воздействия руками вводил. Есть же нормальные типа Modelsim\questa, Active HDL. 

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


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

1 минуту назад, Flip-fl0p сказал:

 А вот ежели симулятор не проверяет такие вещи - то грош цена такому симулятору.

Он не проверять такие вещи должен, а симулировать реальное железо, что успешно и делает.

2 минуты назад, Flip-fl0p сказал:

Вот вы взяли ведро на 10 литров. А туда пытаетесь налить 20 литров.

Представьте, что у ведра дно-клапан, который открывается когда налит последний 10-й литр. :acute:

4 минуты назад, Flip-fl0p сказал:

Вас же не смущает то, что нельзя в VHDL соединять шины разных разновидностей между собой.

Шины у меня идут между блокам и могут передавать не все разряды, а только часть. Т.е. в одном блоке выходной порт может быть A[10..0], а в другом входной A[9..0].

А в пределах одного блока можно оперировать с частью вектора, не со всем сразу.

Упс! Прочитал вместо разновидности разрядности... :blush:

Тоже между блоками можно. Например, в одном блоке STD_LOFIC_VECTOR(10 downto 0), а в другом Integer range 0 to 2047.

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

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


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

1 час назад, blackfin сказал:

Из чего это следует?

Позвольте мне как объекту полемики ответить.

Это следует из поста

Там, как видите, тип счётчика -- целое число, проверки на максимальное значение нет. Поэтому при поведенческом моделировании выход за границу диапазона неизбежен.

8 минут назад, MrGalaxy сказал:

Он не проверять такие вещи должен, а симулировать реальное железо, что успешно и делает.

Безусловно, реальное железо он симулирует. Но в реальное железо синтезируется только часть языка, которое так и называется — "синтезируемое подмножество". Симулятор обязан также поддерживать и несинтезируемое. И не симулятора собачье дело решать, будет мой код реализован в железе или нет. Он обязан корректно симулировать всё, что я напишу. «Машина должна работать, а человек думать».

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


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

Цитата

Он не проверять такие вещи должен, а симулировать реальное железо, что успешно и делает.

А зачем, простите симулировать реально железо ? Мне пока всегда хватало поведенческого моделирования + отчета временного анализатора. Если что-то после этого не работало - это только потому, что я не проверил это в тесте. 

Цитата

Представьте, что у ведра дно-клапан, который открывается когда налит последний 10-й литр.

Integer range 0 to 2047 - вот ведро.

if (counter = 2047) then  - вот клапан.

Вы должны установить клапан вручную.

Цитата

Шины у меня идут между блокам и могут передавать не все разряды, а только часть. Т.е. в одном блоке выходной порт может быть A[10..0], а в другом входной A[9..0].

Ну Вы же не соединяете B(9 downto 0) <= A(10 downto 0). Вы же скорее всего делаете так: B(9 downto 0) <= A(9 downto 0)

Цитата

Тоже между блоками можно. Например, в одном блоке STD_LOFIC_VECTOR(10 downto 0), а в другом Integer range 0 to 2047.

В VHDL без преобразования одного типа к другому вы не можете назначить одно на другое. 

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


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

4 минуты назад, Flip-fl0p сказал:

делаете так: B(9 downto 0) <= A(9 downto 0)

Конечно.

4 минуты назад, Flip-fl0p сказал:

В VHDL без преобразования одного типа к другому вы не можете назначить одно на другое. 

Нельзя. А между блоками через порты в/в это делается автоматически.

 

18 минут назад, andrew_b сказал:

тип счётчика -- целое число, проверки на максимальное значение нет

Целое, но с уточнением "range 0 to 15", т.е. 4-разрядное. Почувствуйте разницу.

23 минуты назад, andrew_b сказал:

Безусловно, реальное железо он симулирует. Но в реальное железо синтезируется только часть языка, которое так и называется — "синтезируемое подмножество". Симулятор обязан также поддерживать и несинтезируемое. И не симулятора собачье дело решать, будет мой код реализован в железе или нет. Он обязан корректно симулировать всё, что я напишу. «Машина должна работать, а человек думать».

Всё правильно, кроме

24 минуты назад, andrew_b сказал:

Симулятор обязан также поддерживать и несинтезируемое.

Попробую объяснить. Исходники проекта на VHDL (и вообще на чём угодно) обязаны иметь только синтезируемые конструкции, иначе проект не соберётся. Симуляция запускается после сборки проекта и языка VHDL там как такового уже нет. Есть текстовый файл, задающий входные и выходные данные. И симулируется именно железо, а не исходный код.

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


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

1 час назад, MrGalaxy сказал:

Целое, но с уточнением "range 0 to 15", т.е. 4-разрядное. Почувствуйте разницу.

Я уже давно всё почувствовал. А вы поймите, о чём вам говорят.

1 час назад, MrGalaxy сказал:

Исходники проекта на VHDL (и вообще на чём угодно) обязаны иметь только синтезируемые конструкции, иначе проект не соберётся.

Ну если вы заранее привязываетесь к какому-то проекту, заранее делаете код непереносимым, то вопросов нет. Наслаждайтесь и дальше.

 

Кстати, вы в курсе, например, что

Цитата

Post-synthesis and post-fit gate-level simulations run significantly slower than RTL simulation. Altera recommends that you verify your design using RTL simulation for functionality and use the TimeQuest timing analyzer for timing. Timing simulation is not supported for Arria V, Cyclone V, Stratix V, and newer families.

И что вы делать будете, я вас внимательно спрашиваю?

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


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

3 минуты назад, andrew_b сказал:

заранее делаете код непереносимым,

Странная у Вас логика.

9 минут назад, andrew_b сказал:

Я уже давно всё почувствовал. А вы поймите, о чём вам говорят.

А Вы поймите, что в 4 разрядах не может быть числа 16, а может быть только 0 - 15. И если железо это понимает, а симулятор нет, то грош цена такому симулятору.

16 минут назад, andrew_b сказал:

Кстати, вы в курсе, например, что

Цитата

Post-synthesis and post-fit gate-level simulations run significantly slower than RTL simulation. Altera recommends that you verify your design using RTL simulation for functionality and use the TimeQuest timing analyzer for timing. Timing simulation is not supported for Arria V, Cyclone V, Stratix V, and newer families.

Встречный вопрос: а Вы в курсе, что не все семейства поддерживаются TimeQuest timing analyzer ? И при чём здесь вообще временной анализ? Не валите всё в кучу. Разговор был о функционировании счётчика в принципе, а не о временных задержках.

 

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


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

Вы не понимаете, что не понимаете фундаментальных вещей. Ну пройдётесь по самолично разложенным граблям, поймёте.

 

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


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

Выкладываю для тех, для кого VHDL - только язык программирования. Как ещё наглядно объяснить - не знаю...

 

Счётчик на 16 с искусственно введённой схемой принудительного сброса по переполнению (1111=сброс в 0):

1459348396_16.thumb.png.d7578c3ad13c72d0e3a741417c3f1a0e.png

 

То же самое, только без лишних наворотов:

1135439212_16-2.thumb.png.f89f0ed84bae206a2f88def52396d9aa.png

 

Результат моделирования одинаковый.

366582178_16-1.thumb.png.3fc26354b649d0f7b78606cccee0d707.png

 

Сомневающиеся, вместо рассуждений о граблях, могут спаять схему № 2 на каких-нибудь ТМ2 любой серии и посмотреть осциллографом. Счётчику всё-равно, что кто думает, он себе считает и считает по циклу.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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