МАРСОХОД

Open Source Hardware Project

Введение в Verilog, Первый урок.

Verilog

Verilog - язык описания цифровых схем. На первом уроке познакомимся с базовыми типами источников сигнала используемыми в языке.

Пожалуй было бы не плохо начать наше обсуждение с понятия сигнал (signal). Сигналы – это электрические импульсы, которые передаются по проводам (wire) между логическими элементами схемы. Провода переносят информацию не производя над ней никаких вычислений. В цифровой схеме сигналы важны для передачи двоичных данных.

Базовый тип источника сигнала в языке Verilog – это провод, wire. Таким образом, если у вас есть арифметическое или логическое выражение, вы можете ассоциировать результат выражения с именованным проводом и позже использовать его в других выражениях. Это немного похоже на переменные, только их (как провода в схеме) нельзя пересоединить на лету, нельзя поменять назначение. Значение провода (wire) – это функция того, что присоединено к нему.

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


wire a;

Вы можете ему назначить другой сигнал, скажем сигнал “b”, вот так:

wire b;
assign a = b;


Или вы можете определить сигнал и сделать назначение ему одновременно в одном выражении:

wire a = b;

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

wire [3:0] c; //это четыре провода

Провода передающие несколько бит информации называются “шина”, иногда “вектор”.  Назначания к ним делаются так же:

wire [3:0] d;
assign c = d; //“подключение” одной шины к другой


Количество проводов в шине определяется любыми двумя целыми числами разделенными двоеточием внутри квадратных скобок.

wire [11:4] e; //восьмибитная шина
wire [0:255] f; //256-ти битная шина


Из шины можно выбрать некоторые нужные биты и назначить другому проводу:

wire g;
assign g = f[2];  //назначить сигналу “g” второй бит шины “f”


Кроме того, выбираемый из шины бит может определяться переменной:

wire [7:0] h;
wire i = f[h];  //назначить сигналу “i” бит номер “h” из шины “f”


Вы можете выбрать из сигнальной шины некоторый диапазон бит и назначить другой шине с тем же количеством бит:

wire [3:0] j = e[7:4];

Так же, в большинстве диалектов Verilog,  вы можете определить массивы сигнальных шин:

wire [7:0] k [0:19];  //массив из двадцати 8-ми битных шин

Еще существует другой тип источника сигнала называемый регистр: reg. Его используют при поведенческом (behavioral) описании схемы. Если регистру постоянно присваивается значение комбинаторной (логической) функции, то он ведет себя точно как провод (wire).  Если же регистру присваивается значение в синхронной логике, например по фронту сигнала тактовой частоты, то ему, в конечном счете, будет соответствовать физический D-триггер или группа D-триггеров. D-триггер – это логический элемент способный запоминать один бит информации. В англоязычных статьях D-триггер называют flipflop.

Регистры описываются так же как и провода:

reg [3:0] m;
reg [0:100] n;


Они могут использоваться так же, как и провода в правой части выражений, как операнды:

wire [1:0] p = m[2:1];

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

reg [7:0] q [0:15];  //память из 16 слов, каждое по 8 бит

Еще один тип источника сигнала – это integer. Он похож на регистр reg, но всегда является 32х битным знаковым типом данных. Например, объявим:

integer loop_count;

Verilog позволяет группировать логику в блоки. Каждый блок логики называется “модулем” (module). Модули имеют входы и выходы, которые ведут себя как сигналы wire.

При описании модуля сперва перечисляют его порты (входы и выходы):


module my_module_name (port_a, port_b, w, y, z);

А затем описывают направление сигналов:

input port_a;
output [6:0] port_b;
input [0:4] w;
inout y; //двунаправленный сигнал, обычно используется

         //только для внешних контактов микросхем


Позже мы увидим, что выход модуля может быть сразу декларирован как регистр reg, а не как провод wire:

output [3:0] z;
reg [3:0] z;


Еще проще можно сразу в описании модуля указать тип и направление сигналов:

module my_module
(
    input wire port_a,
    output wire [6:0]port_b,
    input wire [0:4]w,
    inout wire y,
    output reg [3:0]z
);


Теперь можно использовать входные сигналы, как провода wire:

wire r = w[1];

Теперь можно делать постоянные назначения выходам, как функции от входов:

assign port_b = h[6:0];

В конце описания логики каждого модуля пишем слово endmodule.

module my_module_name (input wire a, input wire b, output wire c);
assign c = a & b;
endmodule


Последний тип источника сигнала, о котором мы поговорим на этом уроке – это постоянные сигналы или просто числа:

wire [12:0] s = 12; //32-х битное десятичное число, которое будет “обрезано” до 13 бит
wire [12:0] z = 13’d12; //13-ти битное десятичное число
wire [3:0] t  = 4'b0101; //4-х битное двоичное число
wire [3:0] q  = 8'hA5;   //8-ми битное шестнадцатеричное число A5
wire [63:0] u = 64'hdeadbeefcafebabe;  //64-х битное шестнадцатеричное число


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

Числа – это числа. Они могут использоваться во всяких арифметических и логических выражениях.  Например, можно прибавить 1 к вектору “aa”:

wire [3:0] aa;
wire [3:0] bb;
assign bb = aa + 1;


На следующих уроках будет рассказано про некоторые арифметические и логические функции.

Комментарии  

+3 #24 ali00ff 19.05.2015 02:14
1. Автору за труды спасибо !!!
И как GNUшнику еще одно спасибо за то что вы есть! ;)

2. Программаторы ........
Смотрю столько разговоров, ужасы про LPT...
А китайцы на что ? Тоже самое просто без фирм. сбора составляющего 99.5 от стоимости фирмы. 200руб Готовый USB-Blaster (5$)
www.aliexpress.com и вколачиваете по русски "Usb бластер" хоть комплект с проводами, хоть в ssopе, паяй прям в свой девайс при желании.
+5 #23 jurodivij 09.08.2013 07:11
цитата:
wire [7:0] h;
wire i = f[h]; //назначить сигналу “i” бит номер “h” из шины “f”
В этом примере h- это ведь тоже вектор. Номер его - это число входящих в него элементов?
0 #22 Ярослав 12.03.2013 05:49
Для чого вам схема? Є готові USB-програматор и на ebay.com всього ~10 уо
+1 #21 maxxir 25.07.2011 17:32
В опу этот VHDL - занудный и конструкции сложные.
А Verilog весьма смахивает на С синтаксисом, кто
программирует микроконтроллер ы на С - достаточно легко
разберется с Верилогом.
Уроки пусть Вам преподы читают :D
+5 #20 nckm_ 25.07.2011 12:23
Цитирую Alefx:
А будут уроки по VHDL или хотя бы описание проектов и статей не только на Verilog но и на VHDL ?

Это врядли.. Наша специализация - Verilog, наши заказчики просят нас писать на Verilog. VHDL - это не наше..
0 #19 Alefx 22.07.2011 05:08
А будут уроки по VHDL или хотя бы описание проектов и статей не только на Verilog но и на VHDL ?
-7 #18 Tynckneency 16.11.2010 07:32
Неплохой пост, но много лишнего.
0 #17 ЕLEKTRONIC 02.11.2010 19:29
NCKMA-Где Вы?
-1 #16 ЕLEKTRONIC 02.11.2010 19:21
Если там действительно сдвиговый регистр (реализвана сдвигвая цепчка) То почему устанвили такую крутую Плиску с большим Морем вентилей.
А непоставили Комбиционную лгику?

Мжно Плиску чем нибудб заменить менее дешёвым
и простым.
+1 #15 ЕLEKTRONIC 02.11.2010 19:08
Вроде на какомто форуме народ писал что внутри программаторов установлена плис фирмы Альтера
и применён USB чип FTDI
И якобы плис залочена от сдирания.
А в ней предположительн о реализован СДВИГОВЫЙ РЕГИСТР для сединителя JTAG.

Но интересно как простой СДВИГОВЫЙ РЕГИСТР выступает в роли ВЕДУЩЕГО устройства которое является инициатором забирания (предполжительн о) с всьми разрядной шины БАЙТА из FIFO usb-микросхемы FTDI.

Кто нибудь разгадал тайну ихонскй завдской прошивки?

И ещё из представленных ранее ссылок
встретил схему (FT245+ALTERA) - что это
Альтерасик(USB) или (USB-blaster) ?
+1 #14 ЕLEKTRONIC 02.11.2010 18:52
Люди !
Дайте срочно схемы у кого что есть,
программаторов для сравнения (что будет проще содрать)
Террасик от Альтера
и USB BLASTER - нужны обе схемы для программировани я плис через JTAG.
А то мне шеф приказал найти.
А их нет.
И как выглядят неизвестно.
Зар. 8) всех благодарю.
0 #13 NGB 29.10.2010 20:58
Подождём NCKMA
Вроде как бещал.
0 #12 NGB 29.10.2010 20:50
http://forum.ixbt.com/topic.cgi?id=48:3247-3
FT 2232 - оказывается страшный тормоз
по сравнению с FT245RL
0 #11 NGB 29.10.2010 20:46
http://forum.ixbt.com/topic.cgi?id=48:3247:56#56
0 #10 NGB 29.10.2010 20:41
http://njnmnp.narod.ru/usbblaster/usbblaster.html
Работаем как можем.
0 #9 NGB 29.10.2010 20:27
Кажись чегото нашёл интересное.
http://forum.ixbt.com/post.cgi?id=attach:48:3247:52:1
0 #8 NGB 29.10.2010 19:27
http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#Morph-IC-II
Непонял
Альтера в этом модуле для чего нужна?
Интересно чипа FT 2232H с JTAG и 245 тым буфером типа АП6 будет достаточно?
0 #7 Швея 29.10.2010 19:08
http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#Morph-IC-II
Во это будет работтать или нет?
Интересно а в Террасике тожесамое или другая схема?
0 #6 Швея 29.10.2010 16:58
Швея. :lol:
Интересно какой у программатора VID и PID ?
Программное обспечение может его проверять.
0 #5 nckma 29.10.2010 16:41
Цитирую Alex:

Схему на десерт в качестве начинки.
На радость людям-человекам.
В студию.
PLEEZ! :-|

все будет! чуть позже!
-1 #4 Alex 29.10.2010 16:36
Причём те люди которые его купили
наврятли захотят его разбирать
перерисовывать его схему
даже не потому что им лень,
а хотябы потому что им обидно делится
своим программатором с Вами бесплатно.
Они же деньги платили.
Вот и считают что раз они платили.
Значит и Вы ув.BOB тоже платите.
Лично Я противник данной политике ЖМОТОВСТВА!
Будем надеятся что Мир не без добрых людей.
Русские Люди.
Живите по принципу помогайте ближниму
Пусть даже нахаляву.
А вследующий раз нахаляву помогут в чёмто нужным и Вам.
Давайте небудем жадничать.
У кого что есть.
Ну например Фотки потрашков USB программатора.
Схему на десерт в качестве начинки.
На радость людям-человекам.
В студию.
PLEEZ! :-|
0 #3 Alex 29.10.2010 16:15
Цитирую Bob:
Не подскажите где взять схему USB-программатора для ПЛИСов Altera? А то с LPT портом большие проблемы - его тупо нет) Гугл находит исключительно LPT-программаторы.

Я тоже ищу эту схемку
Похоже что там Установлена USB микросхема FT :cry:
+2 #2 Bob 08.07.2010 20:59
Не подскажите где взять схему USB-программато ра для ПЛИСов Altera? А то с LPT портом большие проблемы - его тупо нет) Гугл находит исключительно LPT-программато ры.
+2 #1 Denis 01.07.2010 06:57
Спасибо за урок!
Приобрел плату марсоход, сейчас на подходе программатор и буду учиться на ваших уроках.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Статьи о разном Введение в Verilog, Первый урок.