- PVSM.RU - https://www.pvsm.ru -
Всем привет!
Иногда начинающие разработчики не очень хорошо представляют, какую литературу надо читать для серьезного изучения того или иного языка.
Разработка под FPGA — это не просто какой-то язык. Это очень объемная область, с огромным количеством подводных камней и нюансов.
В этой статье вы найдете:
Добро пожаловать под кат!
Необходимо:
Литература:
Тестовые вопросы:
Сюда входит:
В качестве HDL-языка я рекомендую сначала изучить самые базовые конструкции Verilog'a, а затем переключится на SystemVerilog.
Литература:
Тестовые вопросы:
// code 1:
assign a = b + c;
// code 2:
always @( b or c )
begin
a = b + c;
end
// code 3:
always @( * )
begin
a = b + c;
end
Тестовые задания:
1. Нарисуйте схему из базовых цифровых узлов для следующего кода:
module test(
input clk_i,
input a_i,
input [2:0] b_i,
output reg x_o
);
reg [7:0] cnt = 8'd0;
reg [7:0] cnt2;
wire c;
reg d;
always @( posedge clk_i )
cnt <= cnt + 1'd1;
always @(*)
begin
cnt2 = cnt + 1'd1;
end
assign c = ( cnt < 8'd5 ) && ( a_i == 1'b0 );
always @( posedge clk_i )
begin
d <= c;
x_o <= c ? ( d ) : ( cnt2[ b_i ] );
end
endmodule
2. Нарисуйте поведение схемы из п.1 (т.е. состояния всех «переменных») при следующих входных воздействиях:
3. Напишите модуль для управления светофором, который будет зажигать красный, желтый и зеленый фонари во всем известной последовательности: красный, красный и желтый, зеленый, зеленый моргает, желтый, красный. Параметры, задающие время горения фонарей светофора и период мигания зеленого фонаря являются параметрами модуля. Время задается в количестве тактов синхросигнала clk_i.
Интерфейс модуля:
module traffic_light(
// cинхроимпульс
input clk_i,
// асинхронный сброс
input rst_i,
// Если 1, то горит соответствующий цвет, если 0 — то он не горит
output red_o,
output yellow_o,
output green_o
);
Необходимо:
Литература:
Видеоуроки:
Тестовые вопросы:
Необходимо:
Я работаю с чипами Altera, поэтому здесь и дальше название семейств и утилит будет от этого вендора. Если вы знаете аналогичную литературу для Xilinx — напишите в личку или в комментариях — я обязательно добавлю её в статью.
Литература:
Видеоуроки:
Тестовые вопросы:
В вопросах, обозначенных (*) , разумеется, не надо помнить всё наизусть, а можно пользоваться даташитами.
Необходимо:
Литература:
Тестовые вопросы:
Необходимо:
Литература:
Видеоуроки:
Я два семестра читал курс «Разработка под FPGA» для студентов старших курсов университетов Санкт-Петербурга. В курс входили как лекции, так и набор лабораторных работ. Лекции основывались на литературе, которую была перечислена выше.
План курса:
Введение:
* Что такое ПЛИС? Области применения.
* Обзор САПР ( Quartus ).
Изучение языка Verilog:
* Отличительне черты языков описания аппаратуры ( HDL ).
* Синтезируемые/несинтезируемые конструкции языка.
* Изучение синтезируемых конструкций языка:
* Типы данных и способы их представления.
* Операции, блокирующие/неблокирующие операции присваивания
* Управляющие конструкции.
* Блоки описания узлов комбинационного типа.
* Блоки описания узлов последовательного типа.
* Структурное/поведенческое описание проекта.
* Параметризация.
* Реализация на Verilog базовых цифровых узлов.
* Изучение несинтезируемых конструкций языка ( +SystemVerilog ):
* Применение несинтезируемых конструкций языка. Верификация. Testbench.
Основные принципы создания testbench.
* Основные функциональные блоки testbench'ей.
* Типы данных. Блоки процедурного типа.
* Структуры данных для верификации ( массивы, очереди и т.д. ).
* Функции и tasks.
* Временная модель симуляции.
* Использование базовых принципов ООП для верификации.
* SystemVerilog Assertions.
* Создание testbench для базовых цифровых узлов.
* Обзор cуществующих методологий ( библиотек ) верификации.
Названия лекций (в 2015 году):
Слайды к лекциям [27]
Иногда будут видны картинки, которые никак не связаны с соседними (например, задания для тестов, которые давались на лекциях).
Лабораторные работы:
В этой части статьи я расскажу о типичных ошибках, которые допускают начинающие разработчики, и дам советы по их устранению.
Симптомы:
Лечение:
Если вы видите странности в SignalTap, то перепроверьте, синхронны ли те сигналы, которые вы снимаете с частотой «стробирования».
Продолжение первого пункта, но я решил его выделить отдельно.
Симптомы аналогичные с предыдущим пунктом.
Почему-то многие любят делать вот так:
...
input clk_i,
...
logic [7:0] sec_cnt;
logic [7:0] min_cnt;
logic last_sec_value;
assign last_sec_value = ( sec_cnt == 8'd59 );
always_ff @( posedge clk_i )
if( last_sec_value )
sec_cnt <= 'd0;
else
sec_cnt <= sec_cnt + 1'd1;
always_ff @( posedge last_sec_value )
min_cnt <= min_cnt + 1'd1;
Т.е. в качестве входного сигнала на триггере min_cnt используется другой сигнал, чем синхроимпульс clk_i. Он формируется комбинационной логикой (выходом компаратора).
Или вот так:
...
input clk_a_i,
input clk_b_i,
...
logic [7:0] cnt_a;
logic [7:0] cnt_b;
logic [7:0] sum;
always_ff @( posedge clk_a_i )
cnt_a <= cnt_a + 1'd1;
always_ff @( posedge clk_b_i )
cnt_b <= cnt_b + 1'd1;
always_ff @( posedge clk_b_i )
sum <= cnt_a + cnt_b;
На вход триггера sum приходит выход комбинационной логики, вход у которой питается от разных тактовых сигналов.
Оба примера ошибочны, никогда так не делайте! Эти примеры — явное нарушение правил синхронного дизайна.
Я догадываюсь, что это всё идет из 2000х, когда чипы были маленькими и разработчики выживали как могли.
Скорее всего на маленьких частотах (типа 1 МГц) это прокатывало, но если вы собираетесь попасть в команду, которая делает серьезные вещи на топовых чипах, то за такие трюки можно легко вылететь со стажировки.
Лечение:
Вы допускаете эту ошибку, если разработка выглядит так:
Почему это плохо:
Лечение:
Если что-то не заработает на железе, то:
Симптомы:
Лечение:
Надеюсь, что в этой статье я раскрыл, что надо читать и знать для вхождения в мир разработки под FPGA.
Уверен, что если Вы:
то без проблем сможете претендовать на позицию джуниора в серьезной компании.
Разумеется, этот путь нельзя освоить за одни выходные. Может потребоваться месяц и не один, но этот путь надо пройти, если вы хотите перейти из студенченской FPGA-разработки в профессиональную.
Спасибо за внимание!
Как всегда, буду рад вопросам и замечаниям в комментариях или в личной почте.
P.S.
Иногда мне в личке пишут:
Добрый день.
Я студент 3(4, 5) курса такого-то университета.
Мне нравится идея писать под FPGA (параллелизм, можешь делать что хочешь, бла-бла-бла) и нравится Java (делал простенькие приложения под Android). Хочу чем-то из этим заняться более-менее серьезно. Что советуете учить?
Чаще всего я им предлагаю глянуть две ссылочки (FPGA [39] и JAVA [40]) и самостоятельно сделать выводы.
Автор: ishevchuk
Источник [41]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sovety/118513
Ссылки в тексте:
[1] David Harris, Sarah Harris. «Digital Design and Computer Architecture»: http://www.amazon.com/Digital-Design-Computer-Architecture-Edition/dp/0123944244
[2] на русском языке: https://habrahabr.ru/post/259505/
[3] Угрюмов Е.П. «Цифровая схемотехника»: https://www.ozon.ru/context/detail/id/5217645/
[4] Pong P. Chu. «FPGA prototyping by Verilog examples»: http://www.amazon.com/FPGA-Prototyping-Verilog-Examples-Spartan-3/dp/0470185325
[5] Иосиф Каршенбойм. «Краткий курс HDL»: http://iosifk.narod.ru/hdl_coding/verilog.htm
[6] www.asic-world.com: http://www.asic-world.com/
[7] Stuart Sutherland. «SystemVerilog for Design» : http://www.amazon.com/SystemVerilog-Design-Second-Edition-Hardware/dp/0387333991
[8] WaveDrom: http://wavedrom.com/editor.html
[9] testbench.in: http://testbench.in/
[10] Chris Spear. «SystemVerilog for Verification»: http://www.amazon.com/SystemVerilog-Verification-Learning-Testbench-Language/dp/144194561X
[11] Altera. «Overview of Mentor Graphic's ModelSim Software»: http://wl.altera.com/education/training/courses/ODSW1120
[12] Andrew Moore. «FPGAs for Dummies»: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/misc/fpgas_for_dummies_ebook.pdf
[13] Altera Cyclone III Handbook: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/cyc3/cyclone3_handbook.pdf
[14] Steve Kilts. «Advanced FPGA Design»: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379
[15] Altera. «Basics of Programmable Logic: FPGA Architecture» : http://wl.altera.com/education/training/courses/ODSW1006
[16] David L. Jones (EEVblog). «What Is An FPGA?»: https://www.youtube.com/watch?v=gUsHwi4M4xE
[17] Altera. «Quartus Handbook»: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/qts_qii5v1.pdf
[18] Altera. «Understanding Metastability»: https://www.altera.com/en_US/pdfs/literature/wp/wp-01082-quartus-ii-metastability.pdf
[19] Altera. «Quartus Handbook»: https://www.altera.com/en_US/pdfs/literature/hb/qts/qts-qps-handbook.pdf
[20] Altera. «SignalTap II with Verilog Designs»: https://www.pvsm.ruftp://ftp.altera.com/up/pub/Altera_Material/12.1/Tutorials/Verilog/SignalTap.pdf
[21] Денис Шехалев. «Synopsys Design Constraint — язык задания временных ограничений на примере Altera TimeQuest»: http://www.kit-e.ru/articles/plis/2010_9_51.php
[22] TimeQuest для чайников: http://embedders.org/content/timequest-dlya-chainikov-chast-1-vvedenie
[23] Altera. «The Quartus Prime Software: Foundation».: http://wl.altera.com/education/training/courses/ODSW1110
[24] Altera. «Using the Quartus Prime Software: An Introduction». : http://wl.altera.com/education/training/courses/ODSW1100
[25] Altera. «The Quartus II Software Interactive Tutorial».: http://wl.altera.com/education/training/courses/ODSW1050
[26] Altera. «TimeQuest Timing Analyzer»: http://wl.altera.com/education/training/courses/ODSW1115
[27] Слайды к лекциям: https://docs.google.com/presentation/d/1pUk1kK9gGWy3QSpgtpRLsY_3wEI-_GFdtp7V3mZlBF0/edit#slide=id.p
[28] Лаба #1.: https://docs.google.com/document/d/1OWOetCGb0vYiaHr9PbsJuTxlZY02bhdQ2PeUwBnjK6Y/edit
[29] Лаба #2.: https://docs.google.com/document/d/1ktYGSyMlFkcoeSomaC9Ck82WGTXwHs3xknXZvMJ5eIk/edit
[30] Лаба #3.: https://docs.google.com/document/d/1XjU6yS5ckeTJ32rAAF_O6qVYrzR9LnUNIZktXXHkstQ/edit
[31] Лаба #4.: https://docs.google.com/document/d/1dTQWKiZppWN8Cnc8fbAibH_eZsnNVUyzme3oIPtUp7U/edit
[32] код с запашком: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D1%81_%D0%B7%D0%B0%D0%BF%D0%B0%D1%88%D0%BA%D0%BE%D0%BC
[33] Макконнелл. «Совершенный код»: https://www.ozon.ru/context/detail/id/3159814/
[34] NetFPGA: https://github.com/NetFPGA/netfpga/wiki/VerilogCodingGuidelines
[35] обсуждение на electronix #1: http://electronix.ru/forum/index.php?showtopic=128849&st=0
[36] обсуждение на electronix #2: http://electronix.ru/forum/index.php?showtopic=18207
[37] тот: https://github.com/johan92/verilog-coding-style/blob/master/coding-style.md
[38] electronix'a: http://electronix.ru/forum/index.php?showforum=75
[39] FPGA: https://spb.hh.ru/search/vacancy?text=fpga
[40] JAVA: https://spb.hh.ru/search/vacancy?text=java
[41] Источник: https://habrahabr.ru/post/281525/
Нажмите здесь для печати.