Author |
Message |
IgorR76
Senior
Joined: 27 Jul 2015 15:20 Posts: 102
|
|
22 Aug 2018 18:00 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вобще-то они там двигаются вручную, если надо. Я тоже разок был в шоке, когда то, что уже работало, вдруг перестало работать после повторной прошивки...
_________________ iLavr
|
22 Aug 2018 18:14 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22756 Location: Silicon Valley
|
Потому что всё надо делать СИНХРОННЫМ Задержки - счётчиками и т.д.
|
22 Aug 2018 18:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22756 Location: Silicon Valley
|
угу - примерно вот так работают
|
22 Aug 2018 19:01 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это он совсем не про то, а про то, что Квартус расставляет расставляет элементы по разному, что вполне поправимо вручную. А асинхронные схемы в FPGA вполне работают, хотя везде и пишут, что надо всё делать синхронно. Но вон тот же newold86 на нашем же форуме сделал приличное количество асинхронных схемы в FPGA и всё вполне работало! У элементов в FPGA просто очень высокое быстродействие, но и голова не плечах дана людям не только для того, чтобы в неё есть, и ею слушать, что сказали " на одном симпозиуме индустриальных железячников..."
_________________ iLavr
|
22 Aug 2018 19:12 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Учусь по статьям на марсоходе(надеюсь не входит в реестр запрещенных или бранных выражений) и до просветления мне далеко. Пока определился, что просто case достаточно, а casez/casex для гурманов. Сам процесс перехода с программирования процев и мк на программирование плисс - вот точно укурка.
|
22 Aug 2018 22:11 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да нет. Там нужно просто сразу понять, что это не программа в привычном смысле, а " это происходит одновременно". Но обычно об этом и во всех туториалах, и, вероятно, на Марсоходе, всегда предупреждают.
_________________ iLavr
|
22 Aug 2018 22:23 |
|
|
Sorgelig
Writer
Joined: 22 Aug 2018 14:37 Posts: 11
|
Вручную можно наверное расставить если схема простенькая. А чтобы не было "надо скомпилить несколько раз чтобы заработало" надо делать всё синхронным.
Именно VHDL придумали шизофреники, ибо как объяснить это:
if rising_edge(CLK) then if CLK'event and CLK = '1' then wait until rising_edge(CLK);
Суть - одно и то же. При этом записать так можно: mysig <= '1' if sig1 = '1' and sig2 = '0' else '0'; а вот то же самое для порта записать нельзя! Нужно заводить отдельный сигнал.
Про арифметику и пересылку значений из переменных разных типов - это вообще ужас ужас. Даже сложить два значения нельзя без подключения нужной библиотеки. При это часто определения внутри библиотек конфликуют типа unsigned уже определен в одной, а тебе непременно нужна еще одна библа где этот unsigned тоже определен.. При этом у VHDL нет таких эоементарных операций как сдвиг! Для этого нужна аж целая библа! Значения std_logic и boolean не совместимы из-за чего приходится писать кучу глупых выражений. if пухлый - обязательно нужно if then end if; писать даже если нужно всего одно присвоение по условию вставить. Я уже не говорю про отсуствие a = b ? c : d; конструкцию, отсутсвующую в VHDL для process блоков.
Ну и куча куча всего такого из-за чего код пухлым и малочитаемым получается.
|
23 Aug 2018 02:03 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
За лутил vga приблуду и накатал портянку с подглядками в чужие проекты. Вроде работает. Почти все понятно хоть и на обкуренном языке! module vga фото
Last edited by Icer on 27 Aug 2018 20:46, edited 1 time in total.
|
23 Aug 2018 06:43 |
|
|
Sorgelig
Writer
Joined: 22 Aug 2018 14:37 Posts: 11
|
Hаличие странных begin/end в verilog легко объяснимо. {} было отдано на bit concatenation. Всё таки HDL накладывает свои особенности, которые и пришлось внести сделав его несколько отличаемым от C/Java. Но в целом концепция C сохранилась. Еще в verilog можно локальные перменные вводить в always блоки и работать с ними как с глобальными сигналами, то есть делать неблокирующие присвоения. В VHDL локальные переменные не могут иметь неблокирующие присвоения <=. Только блокирующие := разрешены приучающие к плохому стилю HDL программирования. Есть у VHDL и хорошие фичи, которые либо хуже реализованы в Verilog либо не реализованы вообще. Но у Verilog есть развитие ввиде SystemVerilog в котором есть всё Могу писать и на VHDL и на Verilog, но на Verilog скорость написания кода в разы выше. Ну и более компактно получается. В смешанныз проектах в VHDL приходится писать объявление компонента если он в Verilog. А если наоборот то ничего не надо писать дополнительно.
|
23 Aug 2018 07:50 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Больше подробностей и кода товарищи! Так что же с ними не так? Вроде бы понял, но формулировка заставила долго гуглить. {} позволяет объединить сигналы в массив и работать как с единым целым. Почти во всех статьях встречаю, что ":=" зло, но если оно работает и присутствует в языке -> необходимое зло. Особого понимания как оно применяется пока нет и даже спросить не знаю о чем.
|
23 Aug 2018 19:47 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22756 Location: Silicon Valley
|
Ну то, что они как бы есть, но использовать их нежелательно... | | | | Quote: While wildcard case comparison can be useful, it also has its dangers. Imagine a potentially dangerous casez statement where the case expression is a vector and one bit resolves to a “Z”, perhaps due to a mistakenly unconnected input. That expression will match a case item with any value for the “Z” bit! To put in more concrete terms, if the LSB of irq in the above code snippet is unconnected such that the case expression evaluates to 3’b00Z, the third case item will still match and int0 will be set to 1, potentially masking a bug!
Even wilder: casex
Now that we understand the usage and dangers of casez, it is straight-forward to extend the discussion to casex. casex allows “Z”, “?”, and “X” to be treated as don’t care values in either the case expression and/or the case item when doing case comparison. That means, everything we discussed for casez also applies for casex, plus “X” is now also a wildcard. In my previous article on Verilog X Optimism I discussed how X’s can propagate around a design and mask design issues. These propagated X’s can easily cause problems when combined with casex statements. To avoid these problems, the recommendation from RTL Coding Styles That Yield Simulation and Synthesis Mismatches is not to use casex at all for synthesizable code.
| | | | |
|
23 Aug 2018 22:48 |
|
|
Sorgelig
Writer
Joined: 22 Aug 2018 14:37 Posts: 11
|
Ну тот, кто это писал явно сам укуренный был ибо смешал разные понятия. X в логическом присвоении и использовании - это одно. А вот X в casex - это совсем другое, совершенно не имееющее отнощение к первому. X в casex - это просто маска, означающая не сравнивать данный бит. Чувак, написавший данный опус, сам никогда не использовал это и не знает как это работает. Просто почитал, сидя на толчке, описание и сделал вывод. casex - очень полезная и мощная штука, позволяющая компактно записать матрицу соответсвий не прибегая к приоритетному селектору if else if else if else добавляющего нехилую задержку при длинной if цепочке. casex позволяет сильно сократить такие задержки при синтезе! Аналог casex есть и в VHDL когда в when в case имеет значения типа "01--".
|
24 Aug 2018 04:37 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
переписал свой быдлокод правда без casex Так лучше? module vga
Last edited by Icer on 27 Aug 2018 20:45, edited 1 time in total.
|
24 Aug 2018 05:26 |
|
|
Sorgelig
Writer
Joined: 22 Aug 2018 14:37 Posts: 11
|
3 if - не так много чтобы переписывать Я бы лучше отказался от сравнений <>. В данном контексте при гарантированном последовательном счете лучше юзать == и !=. С точки зрения железа - это намного проще синтезировать чем сравнение на больше/меньше. Для видео генератора есть еще два важных сигнала - это HBlank и VBlank - сигналы гашения. Они тут неявно присутствуют, но лучше их выделить отдельно на выход. Всякие скандаблеры и скалеры треюбуют эти сигналы для точного выделения полезного видео сигнала. А у вас уже будут эти сигналы. и т.д.. При это не придется писать if else if else.
|
24 Aug 2018 07:13 |
|
|