Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.
Внимание! Эта статья была написана 1-го апреля и я вляется не больше чем шуткой... Известно, что большинство современных вычислительных систем использует двоичную логику. Однако, так же известно, что основание двойки для представления чисел не является оптимальным при выполнении математических операций над этими числами. Существуют и другие, более эффективные способы представления информации использующие троичную систему счисления.
После некоторых исследований и экспериментов мы выпустили новую версию программатора MBFTDI2. Новый программатор немного отличается от предыдущего. Изменения есть и в схеме и разводке платы и в драйверах Altera Quartus II.
Внешний вид программатора, вид сверху:
Вид снизу:
Основное отличие нового программатора: добавлены линии управления для режимов работы Passive Serial и Active Serial.
Возможно немного странная тема, но думаю кому нибудь будет интересно. Недавно набрел в интернетах на статьи авторов – это Stuart Sutherland, Don Mills и Chris Spear. Сами статьи на английском можно взять вот тут:
Gotcha – это ошибка в программе, но не такая, которая выявляется компилятором. И не такая, которая появляется из-за неудачного дизайна проекта. Это ошибка в программе возникающая из-за несовершенства или особенностей языка программирования или даже компилятора, либо из-за неполного понимания программистом синтаксиса и смысла языковых конструкций. Такие ошибки очень трудно искать. Кажется вроде бы все правильно написано, компилятор успешно откомпилировал и синтезировал, но проект не работает, работает не правильно. Или еще хуже – результат симуляции проекта Verilog один, а в железе проект работает совсем не так.
Некоторые самые простые примеры я приведу прямо из упомянутых выше статей (хотя конечно, лучше почитать в оригинале).
Как на языке Verilog HDL реализовать сумматор или вычитатель с переносом ? Вопрос кажется очень простым для тех, кто давно использует язык Verilog, но почему-то оказывается абсолютно непонятным для новичков – это видно из писем, которые к нам приходят.
Все очень просто. Вот такой код Verilog описывает модуль сумматора с переносом:
Ключевая фраза здесь: assign {carry, out} = a + b;
Фигурные скобки описывают группу сигналов подключенных к выходу сумматора. В данном примере входные сигналы a и b восьмибитные. При суммировании восьмибитных чисел результат должен быть девятибитный. Так и в этом примере: выходной сигнал уже девятибитный и состоит из старшего бита carry, он слева внутри фигурных скобок, и восьмибитного результата out.
Подробнее...