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

Здравствуйте!

Для своего интернет проекта я подготовил статью "Введение в Verilog".

В ней 5 кратких уроков языка Verilog на 32 страницах.

Статья сделана по мотивам уроков Tim Miller с http:\\opengraphics.org

Я сделал не совсем перевод - кое что я изменил, дополнил, исправил, добавил иллюстрации.

Хотелось бы услышать замечания по статье: VerilogLessons.pdf

По вашим замечаниям буду исправлять и улучшать статью.

Надеюсь она кому нибудь будет интересна.

Спасибо!

 

 

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


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

Хотелось бы услышать замечания по статье:

Прежде чем начать хочу заметить, вы первый об этом попросили %)

 

стр2 Причина написания статьи D информации на русском языке о Verilog очень мало. Основные источники информации о языке Verilog – англоязычные.

Глянул свои запасники, которые не обновлял уже пару лет. Сходу нашлось.

Стиль Программирования на Языке Verilog и Руководящие Указания по Программированию (Дайкема,Моншке,Нельсен-1992).doc
Заметки по Программированию на Языке Verilog для Системы Synopsys (Паркин-1992).doc
Проектирование Цифровых Схем на Языке Описания Аппаратуры Verilog (Стерхейм,Сингх,Триведи-1992).doc
Verilog-Инструмент Разработки Цифровых Электронных Схем.Статья.doc
Языки VHDL и Verilog в Проектировании Цифровой Аппаратуры (Поляков-2003).pdf"

 

стр3. Базовый тип источника сигнала в языке Verilog – это провод, wire.

Не согласен в корне, wire это один из основных типов верилога.

стр4. Еще существует другой тип источника сигнала называемый регистр: reg. Его используют при поведенческом (behavioral) описании схемы.

Да его используют при behavioral описании, но куда делось RTL описание, которое вы приводите в своих уроках?

стр.7 Прежде всего, нужно заметить, что в проекте всегда есть один модуль самого верхнего уровня (top level)

Справедливо только для синтеза

стр.7 Довольно удобно и наглядно иметь модуль самого верхнего уровня выполненным в виде схемы, состоящей из модулей более низкого уровня

Quartus и кое какие другие CADы (не бесплатные) only и очень субъективно. Холивар по этому поводу есть на этом форуме.

 

Урок 2 оставил сильно смутное впечатление. Не понимаю зачем начинающих грузить структурным описанием на уровне гейтов. Ну да ладно, вам виднее.

 

стр. 16 Вы можете заметить, что некоторые операторы совсем не описаны. Это такие

операторы, как умножение (*) ..... Мне кажется такие вещи обычно лучше избегать для синтеза. ..... Тем не менее, лучше делать такую работу вручную – так больше возможностей контролировать возможности конкретного чипа

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

 

Урок 17. Поведенческие блоки. Вы даете основы RTL описания, а не поведенческого описания.

стр.20 Чтобы синтез прошел успешно, циклы должны иметь заданное фиксированное число итераций – иначе синтезатор просто не сможет ничего сделать

я бы написал так цикл должен иметь ограниченное кол-во итераций, которое можно однозначно определить на этапе синтеза.

стр.20 Когда будет найден ненулевой бит, то его порядковый номер запоминается в регистре high_bit.

Что здесь вы понимаете под регистром? аппаратный регистр или тип языка reg ? Не вводите начинающих в стандартное заблуждение.

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

altera only для аппаратного сигнала sload или sclr на LUT, аппаратно на альтерах для sclr используется AND по входу триггера, а для семейств других производителей плис все может быть совершенно по другому.

 

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

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


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

Да его используют при behavioral описании, но куда делось RTL описание, которое вы приводите в своих уроках?

думаю человек смешивает поведенческое(behavioral) и процедурное(procedural) описания. RTL - это вообще абстракция представляющая дизайн как элементы памяти и "облака" логики между ними.

правильно будет сказать, что reg для процедурного описания, т.к. концепция RTL может реализовываться как с использованием процедурного стиля(для которого характерен reg), так и структурного стиля(для которого характерен wire)

З.Ы.: на мой взгляд ноги у путаницы понятий "поведенческий" и "процедурный" растут из книжек по VHDL, частенько эту сумятицу у методистов ВХДЛ замечал

 

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


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

для des00: огромное спасибо за развернутый комментарий - постараюсь переработать и сделать вторую редакцию

Изменено пользователем nckkm

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


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

думаю человек смешивает поведенческое(behavioral) и процедурное(procedural) описания. RTL - это вообще абстракция представляющая дизайн как элементы памяти и "облака" логики между ними.

правильно будет сказать, что reg для процедурного описания, т.к. концепция RTL может реализовываться как с использованием процедурного стиля(для которого характерен reg), так и структурного стиля(для которого характерен wire)

я под поведенческим описанием понимаю что то вроде

initial begin 
  forever begin 
     @(posedge iclk iff ival); 
     bla-bla-bla, со сложной математикой, классами, задержками в тактах и т.д. и т.п. 
  end 
end

т.е. идеальные модели. А разложение по процессам, сигналам и прочее считаю RTL описанием %) Но это мое ИМХО

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


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

Здравствуйте!

Для своего интернет проекта я подготовил статью "Введение в Verilog"

....

Надеюсь она кому нибудь будет интересна.

....

Не сочтите за труд, посмотрите на моем сайте статьи - "Краткий Курс HDL"...

Я тоже надеюсь, что Вам это будет интересно...

Удачи!

 

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


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

Не сочтите за труд, посмотрите на моем сайте статьи - "Краткий Курс HDL"...

Я тоже надеюсь, что Вам это будет интересно...

Удачи!

 

дайте ссылку пожалуйста

 

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


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

дайте ссылку пожалуйста

Привыкайте делать так:

 

1. Поиск в гугле по моему нику...

 

Или

 

2. Ткните в ник, там слева от поста, где голова нарисована, открывается карточка участника форума...

 

Или

 

3. В гугле по названию курса... Находите имя и фамилию, ищете мой сайт...

 

Найдете мой сайт, дальше все просто... Запоминаете его в "закладках"... Читаете...

Удачи!

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


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

Урок 1.

Wire я перевел бы как цепь. Проводник? А провод - это что-то круглое, висящее в воздухе.

пример декларации однобитного провода в ”программе” Verilog:

Запутывает - то ли есть такая программа Verilog, то ли "программа" для Verilog. Написали бы как оно переводится, HDL, и использовали "описание устройства".

У вас могут быть провода передающие несколько бит

Запятую после "провода". Мне очень не нравится, когда говорят о битах, байтах как об объектах женского рода. Почти везде! Мне кажется, правильно говорить "битов", "байтов", "омов" (еще в "Искусстве схемотехники" 25 лет назад так писалось) и др.

Код заключен в "рамочку". Лучше бы делать без нее, просто, как во всех книжках, с отступом для абзаца кода (ну и шрифт моноширинный, как у вас и сделано). Фон у вас есть, будет заметно и без рамки. И внутри модулей про форматирование отступами не забывайте.

массив регистров, которые обычно называют ”память” (RAM)

Не обязательно RAM. А как же ROM, SDRAM, DDRAM, FIFO. Напишите просто "память" без RAM, если очень хотите.

wire [3:0] q = 8'hA5; // 8-ми битное шестнадцатеричное число A5

от которого останется только 4 младших бита

Урок 2.

буфферный элемент
По-русски пишется с одним "ф".

Пишем название модуля, экземпляр которого нам нужен
На языках программирования это называется тип.

Урок 4.

Поведенческие блоки
Нужно заменить на "Процедурные", как уже говорилось. В стандарте на SV называются параллельные и последовательные блоки операторов.

(даже если в конечном счете в аппаратуре это будет не так
Это - лишнее. Так, как написано, так и будет. :)

Если указать список чувствительности неверно, то это не должно повлиять на синтез проекта
И это лишнее...

Блокирующее присваивание блокирует выполнение следующих операторов, пока не выполнится само. Неплохо бы добавить для понимания термина. (дальше у вас нашел..., но лучше бы сразу описать)

Неблокирующее присваивание совсем не обязательно будет синтезировано триггерами. Это - большое распространенное заблуждение!

end else begin
Эту строку лучше разбить на две и правильно сформатировать отступами

не нулевой бит, не зависимо
пишется "ненулевой", "независимо"

Сперва пишите "if(reset)"... синтезатор пытается в нашем коде выделить знакомые ему

конструкции

Не потому..., а потому, что reset имеет приоритет, перед остальными сигналами. Согласно приоритетности сигналов и задается их порядок. Это нужно посмотреть в помощи по Quartus, например.

И немного не по теме. На картинке макетной платы (схему не смотрел) многие выводы ПЛИС соединены вместе. Это ограничивает ее возможности.

 

Спасибо! Скучно не было :)

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


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

По вашим замечаниям буду исправлять.

 

Лично мне программистом стать не удалось.

Поэтому фразы

Читатель должен быть подготовлен. Вы должны иметь хотя бы общее представление о

традиционных языках программирования типа C или Паскаль.

 

Поскольку у нас уроки Verilog, то будем все же рассматривать проект с точки зрения

программирования на этом языке.

 

меня достают. Получается, что если я сидел в графическом редакторе, верилог мне недоступен.

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

 

 

И в примере довольно оригинально

 else 
    if(cnt+1==MODULE) 
       cnt <= 4'b0000;

 

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

 

Может if(cnt==MODULE-1)

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


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

И в примере довольно оригинально

 else 
    if(cnt+1==MODULE) 
       cnt <= 4'b0000;

 

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

 

Может if(cnt==MODULE-1)

Такое, как раз, и получается, если подходить к написанию HDL-кода как к программированию.  :)

 

 

 

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


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

if(cnt+1==MODULE)

 

Еще добавлю, что Эквивалентная схема

такого модуля будет отличная от нарисованной.

Ибо при такой реализации разрядность плеч сумматора и компаратора будет на 1 больше разрядности счетчика.

Это наглядно видно при параметре 16 относительно разрядности входных данных. Хотя в этом нет необходимости (разрядности плеч сумматора, компаратора, счетчика могут и должны

быть одинаковыми) Посмотрите в RTL просмотрщике.

 

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


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

я под поведенческим описанием понимаю что то вроде

Денис, извини, я не достаточно чётко выразился, я имел ввиду топик стартера, а не тебя. попытался объяснить откуда часто идёт смешение понятий behavioral & procedural

 

ЗЫ сам я понимаю поведенческое как multicycle описание(cycle approximate), в противовес RTL которое детерминировано в любой момент времени(cycle accurate)

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


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

Огромное спасибо всем за развернутые комментарии!

Они позволили мне исправить многие ошибки и неточности.

Думаю почти все ваши замечания я учел.

Исправленная версия здесь VerilogLessons.pdf ну или на моем сайте.

 

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


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

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

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

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

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

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

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

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

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

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