<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.simhard.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.simhard.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yura</id>
		<title>Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://www.simhard.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yura"/>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Yura"/>
		<updated>2026-04-06T00:54:07Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_4</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 4</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_4"/>
				<updated>2021-01-06T15:30:28Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Оператор присваивания значения переменной */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Основы языка VHDL. часть 3. Последовательные операторы.&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Последовательные операторы ==&lt;br /&gt;
{| align=center width=1800px&lt;br /&gt;
| &lt;br /&gt;
Последовательные операторы в VHDL подобны операторам языков высокого уровня.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
На рисунке приведена общая структура VHDL-описания, из которой следует, что последовательные операторы (sequential statement) могут появляться внутри операторов процесса или внутри тел подпрограмм (функций, процедур).&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Перечислим последовательные операторы:'''&lt;br /&gt;
# оператор присвоения значения переменной;&lt;br /&gt;
# оператор назначения сигнала, т.е. присвоения значения сигналу;&lt;br /&gt;
# оператор if (если);&lt;br /&gt;
# оператор case (случай);&lt;br /&gt;
# оператор loop (цикл);&lt;br /&gt;
# оператор next (следующий);&lt;br /&gt;
# оператор exit (выход);&lt;br /&gt;
# оператор null (нуль, пустой);&lt;br /&gt;
# оператор вызова процедуры;&lt;br /&gt;
# оператор return (возврат);&lt;br /&gt;
# оператор assert (сообщение);&lt;br /&gt;
# оператор wait (ожидать).&lt;br /&gt;
| &amp;lt;center&amp;gt;[[File:Structure of VHDL description.png|800x800px|безрамки|Структура VHDL описания]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор присваивания значения переменной ===&lt;br /&gt;
'''Определение'''&lt;br /&gt;
 variable_assignment_statement::=[label] target := expression ;&lt;br /&gt;
Данный оператор заменяет текущее значение (target) переменной новым значением, которое определяется выражением (expression).&lt;br /&gt;
Переменная и выражение должны быть того же базового типа. Еще раз напомним, что присваивание значения переменным не есть то же самое, что сигналам.&lt;br /&gt;
Присваивание значений сигналам мы обсудим в следующем разделе. В VHDL локальные переменные могут быть только декларированы в области операторов процессов и подпрограмм (функций или процедур).&lt;br /&gt;
В следующем VHDL-коде приведены примеры присваивания значений переменным. Слева указаны номера строк, не относящиеся к тексту на языке VHDL.&lt;br /&gt;
{| align=center width=1600px&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt; 1  entity VAR is&lt;br /&gt;
 2  end VAR;&lt;br /&gt;
 3&lt;br /&gt;
 4  architecture functional of VAR is&lt;br /&gt;
 5      signal A, B, J : bit_vector(1 downto 0);&lt;br /&gt;
 6      signal E, F, G : bit;&lt;br /&gt;
 7      begin&lt;br /&gt;
 8          p0 : process (A, B, E, F, G, J)&lt;br /&gt;
 9          variable C, D, H, Y : bit_vector(1 downto 0);&lt;br /&gt;
 10         variable W, Q : bit_vector(3 downto 0);&lt;br /&gt;
 11         variable Z : bit_vector(0 to 7);&lt;br /&gt;
 12         variable X : bit;&lt;br /&gt;
 13         variable DATA : bit_vector(31 downto 0);&lt;br /&gt;
 14         begin&lt;br /&gt;
 15             C := &amp;quot;11&amp;quot;;&lt;br /&gt;
 16             X := E and F;&lt;br /&gt;
 17             Y := H nand J;&lt;br /&gt;
 18             Z(0 to 3) := C &amp;amp; D; -- конкатенация&lt;br /&gt;
 19             Z(4 to 7) := (not A) &amp;amp; (A nor B); -- конкатенация&lt;br /&gt;
 20             D := ('0', '0'); -- агрегат&lt;br /&gt;
 21             W := (2 downto 1 =&amp;gt; G, 3 =&amp;gt; '1', others =&amp;gt; '0');&lt;br /&gt;
 22             DATA := (others =&amp;gt; '1'); -- агрегат&lt;br /&gt;
 23         end process;&lt;br /&gt;
 24     end functional; &amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
В строке 15 переменная C получает константное значение. Выражения в строке 16, 17 используют логические операторы.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 18 в выражении употребляется оператор &amp;amp; конкатенации, чтобы присвоить значения первым четырем битам переменной Z.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 19 употреблена комбинация логических операторов и конкатенация.&amp;lt;br/&amp;gt;&lt;br /&gt;
Строка 20 показывает агрегат, в котором употребляется позиционное отображение (соответствие). Запись ('0', '0') называется агрегатом.&lt;br /&gt;
Агрегат заключается в круглые скобки, входящие в агрегат элементы разделяются запятой.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 21 употребляется позиционное отображение и ключевое слово '''others'''.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 22 всем компонентам битового вектора – переменной DATA – присваивается значение единица.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заметим, что локальные переменные &amp;quot;видны&amp;quot; только внутри процессов или подпрограмм, которые декларированы.&lt;br /&gt;
VHDL‘93 определяет другой класс переменных, называемых shared (совместно используемые, общие), которые могут совместно использоваться (видны) с процессами и подпрограммами.&lt;br /&gt;
&amp;lt;!--Понятие &amp;quot;видимости&amp;quot; будет рассмотрено далее.--&amp;gt; Подробнее об области видимости смотрите в книге А. Полякова &amp;quot;Языки VHDL и VERILOG в проектировании цифровой аппаратуры&amp;quot; (раздел 1.2.6)&amp;lt;br/&amp;gt; &lt;br /&gt;
Агрегаты и конкатенация могут использоваться не только при присвоении значений переменным, но и при назначении сигналов для таких типов данных, как массивы.&lt;br /&gt;
|}&lt;br /&gt;
Рассмотрим пример агрегата.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Variable z_bus : bit_vector (3 downto 0 );&lt;br /&gt;
 Variable A,B,C,D : bit;&lt;br /&gt;
 z_bus := (A,B,C,D); -- агрегат&amp;lt;/source&amp;gt;&lt;br /&gt;
Запись (A,B,C,D) является агрегатом.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Инцерционная и транспортная задержка ===&lt;br /&gt;
В языке VHDL в операторах назначения сигналов, т. е. в операторах присваивания значений сигналам используются два вида задержек:&lt;br /&gt;
* инерционная задержка;&lt;br /&gt;
* транспортная задержка;&lt;br /&gt;
Ключевое слово inertial определяет инерционную задержку, ключевое слово transport определяет транспортную задержку.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;X&amp;lt;= inertial Y after 3 ns; -- инерционная задержка&lt;br /&gt;
 X&amp;lt;= transport Y after 3 ns; -- транспортная задержка.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В случае инерционной задержки передача сигнала будет иметь место, если и только если входной сигнал будет сохранять соответствующий уровень в течение заданного отрезка времени.&lt;br /&gt;
В языке VHDL этот заданный отрезок времени и есть задержка, указываемая во фразе after. Таким образом, в первом примере изменение значения Y подействует на значение X только в случае,&lt;br /&gt;
если новый уровень Y будет сохраняться в течение 3ns и более. Во втором примере (транспортная задержка) все изменения Y будут передаваться в X независимо от того,&lt;br /&gt;
сколько времени будет сохраняться новое значение Y.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Если не используется ключевое слово transport, то подразумевается инерционная задержка.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;X&amp;lt;= Y after 3 ns; -- инерционная задержка&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Механизм инерционной задержки позволяет отфильтровывать входные сигналы, которые меняются слишком быстро, т. е. если длительность сигнала Y меньше 3 ns, то его значение не будет передано сигналу X.&lt;br /&gt;
Данный механизм по существу имитирует работу реальной схемы. Уровень напряжения определяет значение логического сигнала.&lt;br /&gt;
Ввиду наличия электрических емкостей напряжения узлов не могут изменяться мгновенно, необходимо, чтобы определенное количество энергии подавалось в течение определенного&lt;br /&gt;
отрезка времени, – только в этом случае напряжение узла изменится настолько, чтобы вызвать переключение схемы, управляемой этим напряжением.&lt;br /&gt;
Поэтому при моделировании реальных логических схем используется инерционная задержка. Транспортная задержка чаще используется на этапе алгоритмического проектирования.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Сигналы и переменные ===&lt;br /&gt;
Порты, декларируемые в entity, являются сигналами. Аргументы подпрограмм могут быть сигналами или переменными.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример. ( Различие между локальной переменной и сигналом).'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Данный VHDL-код&amp;lt;br/&amp;gt;&lt;br /&gt;
 Y&amp;lt;= A+(B*C+D*E*F+G);&lt;br /&gt;
 Z&amp;lt;= A-(B*C+D*E*F+G);&lt;br /&gt;
эквивалентен следующему VHDL-коду&lt;br /&gt;
 V := (B*C+D*E*F+G);&lt;br /&gt;
 Y &amp;lt;= A+V;&lt;br /&gt;
 Y &amp;lt;= A- V;&lt;br /&gt;
однако не эквивалентен приведенному ниже VHDL-коду&lt;br /&gt;
 V &amp;lt;= (B*C+D*E*F+G);&lt;br /&gt;
 Y &amp;lt;= A+V;&lt;br /&gt;
 Z &amp;lt;= A - V;&lt;br /&gt;
'''Замечание.''' Запись x &amp;lt;= y &amp;lt;= z понимается не как &amp;quot;конвейерное&amp;quot; назначение сигналов. Правильное понимание: сигналу x присваивается значение, равное значению выражения y&amp;lt;=z (у меньше либо равно z).&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Сигналы и переменные ===&lt;br /&gt;
Назначение сигналов в случае массивов, например битовых векторов, является позиционным.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример.'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Signal z_bus : bit_vector (3 downto 0);&lt;br /&gt;
 Signal c_bus : bit_vector (1 to 4);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| align=center cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;  width=800px border=&amp;quot;1&amp;quot; style=&amp;quot;border:1px solid #000; border-collapse: collapse&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 z_bus &amp;lt;= c_bus;&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
эквивалентно&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 z_bus(3) &amp;lt;=c_bus(1);&lt;br /&gt;
 z_bus(2) &amp;lt;=c_bus(2);&lt;br /&gt;
 z_bus(1) &amp;lt;=c_bus(3);&lt;br /&gt;
 z_bus(0) &amp;lt;=c_bus(4);&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
При назначении сигналов должно указываться то направление диапазона (возрастающий диапазон – to, убывающий диапазон – downto), которое было при декларации массива.&lt;br /&gt;
Для предыдущего примера &lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;z_bus (3 downto 2) &amp;lt;= ''00''; -- правильно&lt;br /&gt;
 c_bus (2 to 4) &amp;lt;= z_bus (3 downto 1); -- правильно&lt;br /&gt;
 z_bus (0 to 1) &amp;lt;= ''11''; -- неправильно, так как z_bus декларирован с убывающим диапазоном&amp;lt;/source&amp;gt;&lt;br /&gt;
Сигналы и переменные одного и того же типа могут быть присвоены один другому.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пример использования агрегатов при назначении сигналов.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Signal z_bus : bit_vector (3 downto 0 );&lt;br /&gt;
 Signal A,B,C,D : bit;&lt;br /&gt;
 z_bus &amp;lt;= (3 =&amp;gt; '1', 1 downto 0 =&amp;gt; '1', 2 =&amp;gt; B); -- агрегат&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор if (если) ===&lt;br /&gt;
Общий вид оператора if&lt;br /&gt;
 if условие then&lt;br /&gt;
     упорядоченное множество последовательных операторов&lt;br /&gt;
 {elsif условие then&lt;br /&gt;
     упорядоченное множество последовательных операторов}&lt;br /&gt;
 [else&lt;br /&gt;
     упорядоченное множество последовательных операторов]&lt;br /&gt;
 end if;&lt;br /&gt;
Оператор '''if''' языка VHDL подобен операторам '''if''' в других языках программирования.&lt;br /&gt;
Выражение, представляющее собой “условие” должно иметь тип BOOLEAN. В одном if операторе может быть одна (ни одной) либо более частей '''elsif'''.&lt;br /&gt;
Ключевое слово '''elsif''' следует отличать от слов '''else if'''. Часть '''else''' может быть только одна (или ни одной).&lt;br /&gt;
Должен быть разделитель между ключевыми словами в заключительной фразе '''end if''';&amp;lt;br&amp;gt;&lt;br /&gt;
Следующая модель 5-битового счетчика употребляет '''if''' операторы.&amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;entity IFSTMT is&lt;br /&gt;
     port ( RSTn, CLK, EN, PL : in bit;&lt;br /&gt;
            DATA              : in integer range 0 to 31;&lt;br /&gt;
            COUNT             : out integer range 0 to 31);&lt;br /&gt;
 end IFSTMT;&lt;br /&gt;
 architecture RTL of IFSTMT is&lt;br /&gt;
     signal COUNT_VALUE : integer range 0 to 31;&lt;br /&gt;
     begin&lt;br /&gt;
         p0 : process (RSTn, CLK)&lt;br /&gt;
         begin&lt;br /&gt;
             if (RSTn = '0') then&lt;br /&gt;
                 COUNT_VALUE &amp;lt;= 0;&lt;br /&gt;
             elsif (CLK'event and CLK = '1') then&lt;br /&gt;
                 if (PL = '1') then&lt;br /&gt;
                     COUNT_VALUE &amp;lt;= DATA;&lt;br /&gt;
                 elsif (EN = '1') then&lt;br /&gt;
                     if (COUNT_VALUE = 31) then&lt;br /&gt;
                         COUNT_VALUE &amp;lt;= 0;&lt;br /&gt;
                     else&lt;br /&gt;
                         COUNT_VALUE &amp;lt;= COUNT_VALUE + 1;&lt;br /&gt;
                     end if;&lt;br /&gt;
                 end if;&lt;br /&gt;
             end if;&lt;br /&gt;
         end process;&lt;br /&gt;
         COUNT &amp;lt;= COUNT_VALUE;&lt;br /&gt;
     end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
Как показано в разделе деклараций, 5-битовый счетчик имеет порты RSTn, CLK, EN, PL, DATA. Выходной порт COUNT получает значение счетчика, RSTn – асинхронная установка (в нуль),&lt;br /&gt;
CLK – входной сигнал синхронизации, PL – параллельное считывание, DATA – порт данных.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор case (случай) ===&lt;br /&gt;
'''Общий вид оператора case'''&lt;br /&gt;
 case выражение is&lt;br /&gt;
     when выбор =&amp;gt; упорядоченное множество&lt;br /&gt;
         последовательных операторов&lt;br /&gt;
     {when выбор =&amp;gt; упорядоченное множество &lt;br /&gt;
         последовательных операторов}&lt;br /&gt;
 end case;&lt;br /&gt;
Оператор case выбирает одну из альтернатив, избранная альтернатива (случай) определяется значением выражения.&lt;br /&gt;
Выражение должно быть дискретного типа или типа одноразмерного массива символов, значения которых могут быть представлены как строки или строка битов.&lt;br /&gt;
Выбор должен быть такого же типа, как выражение. Все возможные выборы (случаи) должны быть перебраны. Для случая &amp;quot;others&amp;quot; (другие) должно быть такое значение, которое не соответствует предыдущим альтернативам.&lt;br /&gt;
Оператор case является подходящим для моделирования конечных автоматов и программ микропроцессора. Используя оператор case, приведем пример VHDL-кода для вычисления числа дней в каждом месяце.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;package PACK is&lt;br /&gt;
     type month_type is (JAN, FEB, MAR, APR, MAY, JUN,&lt;br /&gt;
                         JUL, AUG, SEP, OCT, NOV, DEC);&lt;br /&gt;
 end PACK;&lt;br /&gt;
 use work.PACK.all;&lt;br /&gt;
 entity CASESTMT is&lt;br /&gt;
     port ( MONTH : in month_type;&lt;br /&gt;
            LEAP : in boolean;&lt;br /&gt;
            DAYS : out integer);&lt;br /&gt;
 end CASESTMT;&lt;br /&gt;
 architecture RTL of CASESTMT is&lt;br /&gt;
 begin&lt;br /&gt;
     p0 : process (LEAP, MONTH)&lt;br /&gt;
     begin&lt;br /&gt;
         case MONTH is&lt;br /&gt;
             when FEB =&amp;gt;&lt;br /&gt;
                 if LEAP then&lt;br /&gt;
                     DAYS &amp;lt;= 29;&lt;br /&gt;
                 else&lt;br /&gt;
                     DAYS &amp;lt;= 28;&lt;br /&gt;
                 end if;&lt;br /&gt;
             when APR | JUN | SEP | NOV =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 30;&lt;br /&gt;
             when JUL to AUG =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 31;&lt;br /&gt;
             when others =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 31;&lt;br /&gt;
         end case;&lt;br /&gt;
     end process;&lt;br /&gt;
 end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Слайд:Оператор loop (цикл) ===&lt;br /&gt;
'''Общий вид оператора loop'''&lt;br /&gt;
 [метка цикла:][while условие | for идентификатор in диапазон дискретного типа] loop&lt;br /&gt;
     упорядоченное множество последовательных операторов&lt;br /&gt;
 end loop [метка цикла];&lt;br /&gt;
Когда в записи цикла используется ключевое слово while, то сначала вычисляется условие (condition).&lt;br /&gt;
Если условие есть TRUE, выполняется последовательность последовательных операторов, иначе оператор цикла завершается.&lt;br /&gt;
Когда в записи цикла используется ключевое слово for, то идентификатор определяет цикловой параметр с базовым дискретным типом.&lt;br /&gt;
Параметр цикла употребляется как константа внутри действия оператора цикла и он не может быть целью оператора присваивания.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Общая ошибка: употребление параметра цикла снаружи оператора цикла.'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;loop1: for i in 0 to 9 loop&lt;br /&gt;
     exit loop1 when A(i)&amp;gt;20;&lt;br /&gt;
     next when A(i)&amp;gt;10;&lt;br /&gt;
     sum:=sum +A(i);&lt;br /&gt;
 end loop loop1;&lt;br /&gt;
 if i=20 then -- ошибка! Параметр цикла снаружи цикла.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оператор next (следующий) ===&lt;br /&gt;
'''Общий вид оператора next'''&lt;br /&gt;
 next [метка цикла ][when условие];&lt;br /&gt;
Пример дан выше. Оператор next употребляется для завершения итераций цикла.&lt;br /&gt;
=== Оператор exit (выход) ===&lt;br /&gt;
Общий вид оператора exit&lt;br /&gt;
 exit [метка цикла ] [when условие];&lt;br /&gt;
Оператор EXIT употребляется, чтобы завершить выполнение и закрыть оператор цикла. Если условие (condition) есть TRUE, то осуществляется выход из цикла.&lt;br /&gt;
=== Оператор null (пустой) ===&lt;br /&gt;
Общий вид оператора null (нуль, пустой)&lt;br /&gt;
 null;&lt;br /&gt;
Оператор null не представляет действий. Он употребляется, чтобы точно специфицировать, что нет действий. Типичное применение – в операторе case, чтобы определить действия во всех случаях.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор вызова процедуры ===&lt;br /&gt;
Оператор вызова процедуры состоит из имени процедуры с аргументами (если они есть) в скобках.&lt;br /&gt;
Приведем пример определения и вызова функции и процедуры.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;entity CALL_PRO is&lt;br /&gt;
 end CALL_PRO;&lt;br /&gt;
 architecture RTL of CALL_PRO is&lt;br /&gt;
     function bit_bool (inp_bit : in bit) return boolean is&lt;br /&gt;
     begin&lt;br /&gt;
         if (inp_bit = '1') then&lt;br /&gt;
             return true;&lt;br /&gt;
         else&lt;br /&gt;
             return false;&lt;br /&gt;
         end if;&lt;br /&gt;
     end bit_bool;&lt;br /&gt;
     procedure left_one ( signal DATA  : in bit_vector (1 to 8);&lt;br /&gt;
                          signal l_bit : out integer) is&lt;br /&gt;
     variable temp : integer;&lt;br /&gt;
     begin&lt;br /&gt;
         temp := 0;&lt;br /&gt;
         for i in 1 to 8 loop&lt;br /&gt;
             if (DATA(i) = '1') then&lt;br /&gt;
                 temp := i;&lt;br /&gt;
             end if;&lt;br /&gt;
             if (temp /= 0) then exit;&lt;br /&gt;
             end if;&lt;br /&gt;
         end loop;&lt;br /&gt;
         l_bit &amp;lt;= temp;&lt;br /&gt;
     end left_one;&lt;br /&gt;
     signal DIN    : bit_vector (1 to 8);&lt;br /&gt;
     signal bit_1  : bit;&lt;br /&gt;
     signal bool_1 : boolean;&lt;br /&gt;
     signal DOUT   : integer;&lt;br /&gt;
     begin&lt;br /&gt;
         p0: process (bit_1,DIN)&lt;br /&gt;
         begin&lt;br /&gt;
             bool_1 &amp;lt;= bit_bool(bit_1); -- вызов функции&lt;br /&gt;
             LEFT_ONE(DIN, DOUT); -- вызов процедуры&lt;br /&gt;
         end process;&lt;br /&gt;
         p1: process&lt;br /&gt;
         begin&lt;br /&gt;
             bit_1 &amp;lt;= '1' after 20 ns, '0' after 40 ns;&lt;br /&gt;
             DIN &amp;lt;= &amp;quot;01010000&amp;quot; after 20 ns,&lt;br /&gt;
                    &amp;quot;00000000&amp;quot; after 40 ns,&lt;br /&gt;
                    &amp;quot;00001100&amp;quot; after 60 ns,&lt;br /&gt;
                    &amp;quot;00000001&amp;quot; after 80 ns;&lt;br /&gt;
             wait for 100 ns;&lt;br /&gt;
         end process;&lt;br /&gt;
     end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
Функция bit_bool преобразует тип BIT в тип BOOLEAN. Предлагаем читателю провести моделирование, проанализировать временную диаграмму и определить функциональное назначение процедуры left_one.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор return (возврат) ===&lt;br /&gt;
Общий вид оператора return&lt;br /&gt;
 return [выражение];&lt;br /&gt;
Употребляется, чтобы завершить выполнение самой внутренней функции или процедуры. Он используется только внутри тела функции или процедуры.&lt;br /&gt;
Оператор return не требуется в теле процедуры, поэтому в архитектурном теле RTL (entity RETURNSTMT) соответствующая строка может быть удалена.&lt;br /&gt;
Оператор return может быть употреблен с другими последовательными операторами, такими как if, case для управления возвратом функции или процедуры.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор assert (сообщение) ===&lt;br /&gt;
Общий вид оператора assert&lt;br /&gt;
 assert условие [report выражение ] [severity выражение ];&lt;br /&gt;
Операторы сообщений проверяют, является ли условие истинным (TRUE), и сообщают об ошибке, если условие является ложным.&lt;br /&gt;
По умолчанию сообщенное выражение есть &amp;quot;Assertion violation&amp;quot; (нарушение). Выражение с ключевым словом severity (severity – степень серьезности) имеет перечислимый тип: NOTE, WARNING, ERROR, FAILURE.&lt;br /&gt;
Примеры.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;assert (CLK'event and CLK='0') report &amp;quot;D hold error&amp;quot; severity WARNING;&lt;br /&gt;
 assert (CLK'last_event &amp;gt; HOLD) report &amp;quot;D hold error&amp;quot; severity ERROR;&amp;lt;/source&amp;gt;&lt;br /&gt;
В данных примерах атрибут CLK'last_event имеет тип TIME и возвращает время, пройденное с момента последнего изменения  сигнала CLK, HOLD – имеет тип TIME.&lt;br /&gt;
Условие CLK'last_event&amp;gt;HOLD может быть либо истинным, либо ложным.&lt;br /&gt;
Следующие два оператора (две строки) эквивалентны:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;report &amp;quot;NEW YEAR 3003&amp;quot; severity ERROR;&lt;br /&gt;
 assert FALSE report &amp;quot;NEW YEAR 3003&amp;quot; severity ERROR;&amp;lt;/source&amp;gt;&lt;br /&gt;
также, как и следующие:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;report &amp;quot;NEW YEAR 2002&amp;quot;;&lt;br /&gt;
 assert FALSE report &amp;quot;NEW YEAR 2002&amp;quot; severity NOTE;&amp;lt;/source&amp;gt;&lt;br /&gt;
Так как FALSE всегда является ложным, то данные сообщения всегда выдаются – это примеры безусловно выдаваемых сообщений.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор wait (ожидать) ===&lt;br /&gt;
Общий вид оператора wait&lt;br /&gt;
 wait on список чувствительности until условие for тайм-аут ;&lt;br /&gt;
Оператор wait является причиной временного прекращения оператора процесса или процедуры. Оператор ожидания wait приостанавливает процесс до момента,&lt;br /&gt;
пока не изменится некоторый сигнал в списке чувствительности процесса, в это время будет произведено вычисление условия. Фраза “условие” есть выражение типа BOOLEAN.&lt;br /&gt;
Если получается истинное значение, выполнение процесса возобновляется. Фраза “тайм-аут” устанавливает максимальное время ожидания, после которого процесс возобновит свое выполнение.&lt;br /&gt;
Пример.&lt;br /&gt;
 WAIT on A, B until (C=0) for 50 ns;&lt;br /&gt;
Этот оператор приостановит процесс до момента изменения A или B, после чего будет проверено выражение C=0 и, если результатом проверки будет истина, процесс возобновится. Но независимо от этих условий возобновление процесса произойдет через 50ns.&lt;br /&gt;
Допустимо записывать одно или более условий в операторе ожидания, например,&lt;br /&gt;
 Условие 1. WAIT on A, B;&lt;br /&gt;
 Условие 2. WAIT until (C=0);&lt;br /&gt;
 Условие 3. WAIT for 50 ns;&lt;br /&gt;
В условии 1 процесс будет возобновляться, когда изменится A или B. В условии 2 нет списка сигналов запуска, поэтому процесс возобновится, когда C изменит свое значение из 1 в 0.&lt;br /&gt;
В условии 3 процесс возобновится через 50ns независимо от любых других условий.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Для оператора процесса мы можем иметь либо список чувствительности после ключевого слова процесс, либо оператор wait, но не оба вместе.'''&lt;br /&gt;
Может быть более одного оператора wait внутри оператора процесса.&lt;br /&gt;
=== Слайд:Оператор wait (ожидать)/ Примеры ===&lt;br /&gt;
'''Примеры оператора wait'''&amp;lt;br/&amp;gt;&lt;br /&gt;
1. Оператор wait типа for&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait for 10ns;&lt;br /&gt;
 wait for CLK_Period/2;&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Оператор wait типа until&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait until CLK='1';&lt;br /&gt;
 wait until CE and (not RST);&lt;br /&gt;
 wait until IntData&amp;gt;16;&amp;lt;/source&amp;gt;&lt;br /&gt;
3. Оператор wait типа on&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait on CLK;&lt;br /&gt;
 wait on Enable, Data;&amp;lt;/source&amp;gt;&lt;br /&gt;
{| align=center cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;  width=800px border=&amp;quot;1&amp;quot; style=&amp;quot;border:1px solid #000; border-collapse: collapse&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 Wait until&lt;br /&gt;
 Enable ='1';&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
эквивалентно&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 loop&lt;br /&gt;
 wait on Enable;&lt;br /&gt;
 exit when Enable = '1';&lt;br /&gt;
 end loop;&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
4. Комбинированный оператор wait (комбинация двух или трех предыдущих)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait on Data until CLK='1';&lt;br /&gt;
 wait until CLK='1' for 10ns;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_4</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 4</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_4"/>
				<updated>2021-01-06T13:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Оператор присваивания значения переменной */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Основы языка VHDL. часть 3. Последовательные операторы.&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Последовательные операторы ==&lt;br /&gt;
{| align=center width=1800px&lt;br /&gt;
| &lt;br /&gt;
Последовательные операторы в VHDL подобны операторам языков высокого уровня.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
На рисунке приведена общая структура VHDL-описания, из которой следует, что последовательные операторы (sequential statement) могут появляться внутри операторов процесса или внутри тел подпрограмм (функций, процедур).&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Перечислим последовательные операторы:'''&lt;br /&gt;
# оператор присвоения значения переменной;&lt;br /&gt;
# оператор назначения сигнала, т.е. присвоения значения сигналу;&lt;br /&gt;
# оператор if (если);&lt;br /&gt;
# оператор case (случай);&lt;br /&gt;
# оператор loop (цикл);&lt;br /&gt;
# оператор next (следующий);&lt;br /&gt;
# оператор exit (выход);&lt;br /&gt;
# оператор null (нуль, пустой);&lt;br /&gt;
# оператор вызова процедуры;&lt;br /&gt;
# оператор return (возврат);&lt;br /&gt;
# оператор assert (сообщение);&lt;br /&gt;
# оператор wait (ожидать).&lt;br /&gt;
| &amp;lt;center&amp;gt;[[File:Structure of VHDL description.png|800x800px|безрамки|Структура VHDL описания]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор присваивания значения переменной ===&lt;br /&gt;
'''Определение'''&lt;br /&gt;
 variable_assignment_statement::=[label] target := expression ;&lt;br /&gt;
Данный оператор заменяет текущее значение (target) переменной новым значением, которое определяется выражением (expression).&lt;br /&gt;
Переменная и выражение должны быть того же базового типа. Еще раз напомним, что присваивание значения переменным не есть то же самое, что сигналам.&lt;br /&gt;
Присваивание значений сигналам мы обсудим в следующем разделе. В VHDL локальные переменные могут быть только декларированы в области операторов процессов и подпрограмм (функций или процедур).&lt;br /&gt;
В следующем VHDL-коде приведены примеры присваивания значений переменным. Слева указаны номера строк, не относящиеся к тексту на языке VHDL.&lt;br /&gt;
{| align=center width=1600px&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt; 1  entity VAR is&lt;br /&gt;
 2  end VAR;&lt;br /&gt;
 3&lt;br /&gt;
 4  architecture functional of VAR is&lt;br /&gt;
 5      signal A, B, J : bit_vector(1 downto 0);&lt;br /&gt;
 6      signal E, F, G : bit;&lt;br /&gt;
 7      begin&lt;br /&gt;
 8          p0 : process (A, B, E, F, G, J)&lt;br /&gt;
 9          variable C, D, H, Y : bit_vector(1 downto 0);&lt;br /&gt;
 10         variable W, Q : bit_vector(3 downto 0);&lt;br /&gt;
 11         variable Z : bit_vector(0 to 7);&lt;br /&gt;
 12         variable X : bit;&lt;br /&gt;
 13         variable DATA : bit_vector(31 downto 0);&lt;br /&gt;
 14         begin&lt;br /&gt;
 15             C := &amp;quot;11&amp;quot;;&lt;br /&gt;
 16             X := E and F;&lt;br /&gt;
 17             Y := H nand J;&lt;br /&gt;
 18             Z(0 to 3) := C &amp;amp; D; -- конкатенация&lt;br /&gt;
 19             Z(4 to 7) := (not A) &amp;amp; (A nor B); -- конкатенация&lt;br /&gt;
 20             D := ('0', '0'); -- агрегат&lt;br /&gt;
 21             W := (2 downto 1 =&amp;gt; G, 3 =&amp;gt; '1', others =&amp;gt; '0');&lt;br /&gt;
 22             DATA := (others =&amp;gt; '1'); -- агрегат&lt;br /&gt;
 23         end process;&lt;br /&gt;
 24     end functional; &amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
В строке 15 переменная C получает константное значение. Выражения в строке 16, 17 используют логические операторы.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 18 в выражении употребляется оператор &amp;amp; конкатенации, чтобы присвоить значения первым четырем битам переменной Z.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 19 употреблена комбинация логических операторов и конкатенация.&amp;lt;br/&amp;gt;&lt;br /&gt;
Строка 20 показывает агрегат, в котором употребляется позиционное отображение (соответствие). Запись ('0', '0') называется агрегатом.&lt;br /&gt;
Агрегат заключается в круглые скобки, входящие в агрегат элементы разделяются запятой.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 21 употребляется позиционное отображение и ключевое слово '''others'''.&amp;lt;br/&amp;gt;&lt;br /&gt;
В строке 22 всем компонентам битового вектора – переменной DATA – присваивается значение единица.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заметим, что локальные переменные &amp;quot;видны&amp;quot; только внутри процессов или подпрограмм, которые декларированы.&lt;br /&gt;
VHDL‘93 определяет другой класс переменных, называемых shared (совместно используемые, общие), которые могут совместно использоваться (видны) с процессами и подпрограммами.&lt;br /&gt;
&amp;lt;!--Понятие &amp;quot;видимости&amp;quot; будет рассмотрено далее.&amp;lt;br/&amp;gt; --&amp;gt;&lt;br /&gt;
Агрегаты и конкатенация могут использоваться не только при присвоении значений переменным, но и при назначении сигналов для таких типов данных, как массивы.&lt;br /&gt;
|}&lt;br /&gt;
Рассмотрим пример агрегата.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Variable z_bus : bit_vector (3 downto 0 );&lt;br /&gt;
 Variable A,B,C,D : bit;&lt;br /&gt;
 z_bus := (A,B,C,D); -- агрегат&amp;lt;/source&amp;gt;&lt;br /&gt;
Запись (A,B,C,D) является агрегатом.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Инцерционная и транспортная задержка ===&lt;br /&gt;
В языке VHDL в операторах назначения сигналов, т. е. в операторах присваивания значений сигналам используются два вида задержек:&lt;br /&gt;
* инерционная задержка;&lt;br /&gt;
* транспортная задержка;&lt;br /&gt;
Ключевое слово inertial определяет инерционную задержку, ключевое слово transport определяет транспортную задержку.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;X&amp;lt;= inertial Y after 3 ns; -- инерционная задержка&lt;br /&gt;
 X&amp;lt;= transport Y after 3 ns; -- транспортная задержка.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В случае инерционной задержки передача сигнала будет иметь место, если и только если входной сигнал будет сохранять соответствующий уровень в течение заданного отрезка времени.&lt;br /&gt;
В языке VHDL этот заданный отрезок времени и есть задержка, указываемая во фразе after. Таким образом, в первом примере изменение значения Y подействует на значение X только в случае,&lt;br /&gt;
если новый уровень Y будет сохраняться в течение 3ns и более. Во втором примере (транспортная задержка) все изменения Y будут передаваться в X независимо от того,&lt;br /&gt;
сколько времени будет сохраняться новое значение Y.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Если не используется ключевое слово transport, то подразумевается инерционная задержка.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;X&amp;lt;= Y after 3 ns; -- инерционная задержка&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Механизм инерционной задержки позволяет отфильтровывать входные сигналы, которые меняются слишком быстро, т. е. если длительность сигнала Y меньше 3 ns, то его значение не будет передано сигналу X.&lt;br /&gt;
Данный механизм по существу имитирует работу реальной схемы. Уровень напряжения определяет значение логического сигнала.&lt;br /&gt;
Ввиду наличия электрических емкостей напряжения узлов не могут изменяться мгновенно, необходимо, чтобы определенное количество энергии подавалось в течение определенного&lt;br /&gt;
отрезка времени, – только в этом случае напряжение узла изменится настолько, чтобы вызвать переключение схемы, управляемой этим напряжением.&lt;br /&gt;
Поэтому при моделировании реальных логических схем используется инерционная задержка. Транспортная задержка чаще используется на этапе алгоритмического проектирования.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Сигналы и переменные ===&lt;br /&gt;
Порты, декларируемые в entity, являются сигналами. Аргументы подпрограмм могут быть сигналами или переменными.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример. ( Различие между локальной переменной и сигналом).'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Данный VHDL-код&amp;lt;br/&amp;gt;&lt;br /&gt;
 Y&amp;lt;= A+(B*C+D*E*F+G);&lt;br /&gt;
 Z&amp;lt;= A-(B*C+D*E*F+G);&lt;br /&gt;
эквивалентен следующему VHDL-коду&lt;br /&gt;
 V := (B*C+D*E*F+G);&lt;br /&gt;
 Y &amp;lt;= A+V;&lt;br /&gt;
 Y &amp;lt;= A- V;&lt;br /&gt;
однако не эквивалентен приведенному ниже VHDL-коду&lt;br /&gt;
 V &amp;lt;= (B*C+D*E*F+G);&lt;br /&gt;
 Y &amp;lt;= A+V;&lt;br /&gt;
 Z &amp;lt;= A - V;&lt;br /&gt;
'''Замечание.''' Запись x &amp;lt;= y &amp;lt;= z понимается не как &amp;quot;конвейерное&amp;quot; назначение сигналов. Правильное понимание: сигналу x присваивается значение, равное значению выражения y&amp;lt;=z (у меньше либо равно z).&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Присваивание значений сигналам (назначение сигналов)/ Сигналы и переменные ===&lt;br /&gt;
Назначение сигналов в случае массивов, например битовых векторов, является позиционным.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Пример.'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Signal z_bus : bit_vector (3 downto 0);&lt;br /&gt;
 Signal c_bus : bit_vector (1 to 4);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| align=center cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;  width=800px border=&amp;quot;1&amp;quot; style=&amp;quot;border:1px solid #000; border-collapse: collapse&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 z_bus &amp;lt;= c_bus;&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
эквивалентно&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 z_bus(3) &amp;lt;=c_bus(1);&lt;br /&gt;
 z_bus(2) &amp;lt;=c_bus(2);&lt;br /&gt;
 z_bus(1) &amp;lt;=c_bus(3);&lt;br /&gt;
 z_bus(0) &amp;lt;=c_bus(4);&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
При назначении сигналов должно указываться то направление диапазона (возрастающий диапазон – to, убывающий диапазон – downto), которое было при декларации массива.&lt;br /&gt;
Для предыдущего примера &lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;z_bus (3 downto 2) &amp;lt;= ''00''; -- правильно&lt;br /&gt;
 c_bus (2 to 4) &amp;lt;= z_bus (3 downto 1); -- правильно&lt;br /&gt;
 z_bus (0 to 1) &amp;lt;= ''11''; -- неправильно, так как z_bus декларирован с убывающим диапазоном&amp;lt;/source&amp;gt;&lt;br /&gt;
Сигналы и переменные одного и того же типа могут быть присвоены один другому.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пример использования агрегатов при назначении сигналов.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;Signal z_bus : bit_vector (3 downto 0 );&lt;br /&gt;
 Signal A,B,C,D : bit;&lt;br /&gt;
 z_bus &amp;lt;= (3 =&amp;gt; '1', 1 downto 0 =&amp;gt; '1', 2 =&amp;gt; B); -- агрегат&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор if (если) ===&lt;br /&gt;
Общий вид оператора if&lt;br /&gt;
 if условие then&lt;br /&gt;
     упорядоченное множество последовательных операторов&lt;br /&gt;
 {elsif условие then&lt;br /&gt;
     упорядоченное множество последовательных операторов}&lt;br /&gt;
 [else&lt;br /&gt;
     упорядоченное множество последовательных операторов]&lt;br /&gt;
 end if;&lt;br /&gt;
Оператор '''if''' языка VHDL подобен операторам '''if''' в других языках программирования.&lt;br /&gt;
Выражение, представляющее собой “условие” должно иметь тип BOOLEAN. В одном if операторе может быть одна (ни одной) либо более частей '''elsif'''.&lt;br /&gt;
Ключевое слово '''elsif''' следует отличать от слов '''else if'''. Часть '''else''' может быть только одна (или ни одной).&lt;br /&gt;
Должен быть разделитель между ключевыми словами в заключительной фразе '''end if''';&amp;lt;br&amp;gt;&lt;br /&gt;
Следующая модель 5-битового счетчика употребляет '''if''' операторы.&amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;entity IFSTMT is&lt;br /&gt;
     port ( RSTn, CLK, EN, PL : in bit;&lt;br /&gt;
            DATA              : in integer range 0 to 31;&lt;br /&gt;
            COUNT             : out integer range 0 to 31);&lt;br /&gt;
 end IFSTMT;&lt;br /&gt;
 architecture RTL of IFSTMT is&lt;br /&gt;
     signal COUNT_VALUE : integer range 0 to 31;&lt;br /&gt;
     begin&lt;br /&gt;
         p0 : process (RSTn, CLK)&lt;br /&gt;
         begin&lt;br /&gt;
             if (RSTn = '0') then&lt;br /&gt;
                 COUNT_VALUE &amp;lt;= 0;&lt;br /&gt;
             elsif (CLK'event and CLK = '1') then&lt;br /&gt;
                 if (PL = '1') then&lt;br /&gt;
                     COUNT_VALUE &amp;lt;= DATA;&lt;br /&gt;
                 elsif (EN = '1') then&lt;br /&gt;
                     if (COUNT_VALUE = 31) then&lt;br /&gt;
                         COUNT_VALUE &amp;lt;= 0;&lt;br /&gt;
                     else&lt;br /&gt;
                         COUNT_VALUE &amp;lt;= COUNT_VALUE + 1;&lt;br /&gt;
                     end if;&lt;br /&gt;
                 end if;&lt;br /&gt;
             end if;&lt;br /&gt;
         end process;&lt;br /&gt;
         COUNT &amp;lt;= COUNT_VALUE;&lt;br /&gt;
     end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
Как показано в разделе деклараций, 5-битовый счетчик имеет порты RSTn, CLK, EN, PL, DATA. Выходной порт COUNT получает значение счетчика, RSTn – асинхронная установка (в нуль),&lt;br /&gt;
CLK – входной сигнал синхронизации, PL – параллельное считывание, DATA – порт данных.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор case (случай) ===&lt;br /&gt;
'''Общий вид оператора case'''&lt;br /&gt;
 case выражение is&lt;br /&gt;
     when выбор =&amp;gt; упорядоченное множество&lt;br /&gt;
         последовательных операторов&lt;br /&gt;
     {when выбор =&amp;gt; упорядоченное множество &lt;br /&gt;
         последовательных операторов}&lt;br /&gt;
 end case;&lt;br /&gt;
Оператор case выбирает одну из альтернатив, избранная альтернатива (случай) определяется значением выражения.&lt;br /&gt;
Выражение должно быть дискретного типа или типа одноразмерного массива символов, значения которых могут быть представлены как строки или строка битов.&lt;br /&gt;
Выбор должен быть такого же типа, как выражение. Все возможные выборы (случаи) должны быть перебраны. Для случая &amp;quot;others&amp;quot; (другие) должно быть такое значение, которое не соответствует предыдущим альтернативам.&lt;br /&gt;
Оператор case является подходящим для моделирования конечных автоматов и программ микропроцессора. Используя оператор case, приведем пример VHDL-кода для вычисления числа дней в каждом месяце.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;package PACK is&lt;br /&gt;
     type month_type is (JAN, FEB, MAR, APR, MAY, JUN,&lt;br /&gt;
                         JUL, AUG, SEP, OCT, NOV, DEC);&lt;br /&gt;
 end PACK;&lt;br /&gt;
 use work.PACK.all;&lt;br /&gt;
 entity CASESTMT is&lt;br /&gt;
     port ( MONTH : in month_type;&lt;br /&gt;
            LEAP : in boolean;&lt;br /&gt;
            DAYS : out integer);&lt;br /&gt;
 end CASESTMT;&lt;br /&gt;
 architecture RTL of CASESTMT is&lt;br /&gt;
 begin&lt;br /&gt;
     p0 : process (LEAP, MONTH)&lt;br /&gt;
     begin&lt;br /&gt;
         case MONTH is&lt;br /&gt;
             when FEB =&amp;gt;&lt;br /&gt;
                 if LEAP then&lt;br /&gt;
                     DAYS &amp;lt;= 29;&lt;br /&gt;
                 else&lt;br /&gt;
                     DAYS &amp;lt;= 28;&lt;br /&gt;
                 end if;&lt;br /&gt;
             when APR | JUN | SEP | NOV =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 30;&lt;br /&gt;
             when JUL to AUG =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 31;&lt;br /&gt;
             when others =&amp;gt;&lt;br /&gt;
                 DAYS &amp;lt;= 31;&lt;br /&gt;
         end case;&lt;br /&gt;
     end process;&lt;br /&gt;
 end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Слайд:Оператор loop (цикл) ===&lt;br /&gt;
'''Общий вид оператора loop'''&lt;br /&gt;
 [метка цикла:][while условие | for идентификатор in диапазон дискретного типа] loop&lt;br /&gt;
     упорядоченное множество последовательных операторов&lt;br /&gt;
 end loop [метка цикла];&lt;br /&gt;
Когда в записи цикла используется ключевое слово while, то сначала вычисляется условие (condition).&lt;br /&gt;
Если условие есть TRUE, выполняется последовательность последовательных операторов, иначе оператор цикла завершается.&lt;br /&gt;
Когда в записи цикла используется ключевое слово for, то идентификатор определяет цикловой параметр с базовым дискретным типом.&lt;br /&gt;
Параметр цикла употребляется как константа внутри действия оператора цикла и он не может быть целью оператора присваивания.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Общая ошибка: употребление параметра цикла снаружи оператора цикла.'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Пример'''&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;loop1: for i in 0 to 9 loop&lt;br /&gt;
     exit loop1 when A(i)&amp;gt;20;&lt;br /&gt;
     next when A(i)&amp;gt;10;&lt;br /&gt;
     sum:=sum +A(i);&lt;br /&gt;
 end loop loop1;&lt;br /&gt;
 if i=20 then -- ошибка! Параметр цикла снаружи цикла.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оператор next (следующий) ===&lt;br /&gt;
'''Общий вид оператора next'''&lt;br /&gt;
 next [метка цикла ][when условие];&lt;br /&gt;
Пример дан выше. Оператор next употребляется для завершения итераций цикла.&lt;br /&gt;
=== Оператор exit (выход) ===&lt;br /&gt;
Общий вид оператора exit&lt;br /&gt;
 exit [метка цикла ] [when условие];&lt;br /&gt;
Оператор EXIT употребляется, чтобы завершить выполнение и закрыть оператор цикла. Если условие (condition) есть TRUE, то осуществляется выход из цикла.&lt;br /&gt;
=== Оператор null (пустой) ===&lt;br /&gt;
Общий вид оператора null (нуль, пустой)&lt;br /&gt;
 null;&lt;br /&gt;
Оператор null не представляет действий. Он употребляется, чтобы точно специфицировать, что нет действий. Типичное применение – в операторе case, чтобы определить действия во всех случаях.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор вызова процедуры ===&lt;br /&gt;
Оператор вызова процедуры состоит из имени процедуры с аргументами (если они есть) в скобках.&lt;br /&gt;
Приведем пример определения и вызова функции и процедуры.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;entity CALL_PRO is&lt;br /&gt;
 end CALL_PRO;&lt;br /&gt;
 architecture RTL of CALL_PRO is&lt;br /&gt;
     function bit_bool (inp_bit : in bit) return boolean is&lt;br /&gt;
     begin&lt;br /&gt;
         if (inp_bit = '1') then&lt;br /&gt;
             return true;&lt;br /&gt;
         else&lt;br /&gt;
             return false;&lt;br /&gt;
         end if;&lt;br /&gt;
     end bit_bool;&lt;br /&gt;
     procedure left_one ( signal DATA  : in bit_vector (1 to 8);&lt;br /&gt;
                          signal l_bit : out integer) is&lt;br /&gt;
     variable temp : integer;&lt;br /&gt;
     begin&lt;br /&gt;
         temp := 0;&lt;br /&gt;
         for i in 1 to 8 loop&lt;br /&gt;
             if (DATA(i) = '1') then&lt;br /&gt;
                 temp := i;&lt;br /&gt;
             end if;&lt;br /&gt;
             if (temp /= 0) then exit;&lt;br /&gt;
             end if;&lt;br /&gt;
         end loop;&lt;br /&gt;
         l_bit &amp;lt;= temp;&lt;br /&gt;
     end left_one;&lt;br /&gt;
     signal DIN    : bit_vector (1 to 8);&lt;br /&gt;
     signal bit_1  : bit;&lt;br /&gt;
     signal bool_1 : boolean;&lt;br /&gt;
     signal DOUT   : integer;&lt;br /&gt;
     begin&lt;br /&gt;
         p0: process (bit_1,DIN)&lt;br /&gt;
         begin&lt;br /&gt;
             bool_1 &amp;lt;= bit_bool(bit_1); -- вызов функции&lt;br /&gt;
             LEFT_ONE(DIN, DOUT); -- вызов процедуры&lt;br /&gt;
         end process;&lt;br /&gt;
         p1: process&lt;br /&gt;
         begin&lt;br /&gt;
             bit_1 &amp;lt;= '1' after 20 ns, '0' after 40 ns;&lt;br /&gt;
             DIN &amp;lt;= &amp;quot;01010000&amp;quot; after 20 ns,&lt;br /&gt;
                    &amp;quot;00000000&amp;quot; after 40 ns,&lt;br /&gt;
                    &amp;quot;00001100&amp;quot; after 60 ns,&lt;br /&gt;
                    &amp;quot;00000001&amp;quot; after 80 ns;&lt;br /&gt;
             wait for 100 ns;&lt;br /&gt;
         end process;&lt;br /&gt;
     end RTL;&amp;lt;/source&amp;gt;&lt;br /&gt;
Функция bit_bool преобразует тип BIT в тип BOOLEAN. Предлагаем читателю провести моделирование, проанализировать временную диаграмму и определить функциональное назначение процедуры left_one.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор return (возврат) ===&lt;br /&gt;
Общий вид оператора return&lt;br /&gt;
 return [выражение];&lt;br /&gt;
Употребляется, чтобы завершить выполнение самой внутренней функции или процедуры. Он используется только внутри тела функции или процедуры.&lt;br /&gt;
Оператор return не требуется в теле процедуры, поэтому в архитектурном теле RTL (entity RETURNSTMT) соответствующая строка может быть удалена.&lt;br /&gt;
Оператор return может быть употреблен с другими последовательными операторами, такими как if, case для управления возвратом функции или процедуры.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор assert (сообщение) ===&lt;br /&gt;
Общий вид оператора assert&lt;br /&gt;
 assert условие [report выражение ] [severity выражение ];&lt;br /&gt;
Операторы сообщений проверяют, является ли условие истинным (TRUE), и сообщают об ошибке, если условие является ложным.&lt;br /&gt;
По умолчанию сообщенное выражение есть &amp;quot;Assertion violation&amp;quot; (нарушение). Выражение с ключевым словом severity (severity – степень серьезности) имеет перечислимый тип: NOTE, WARNING, ERROR, FAILURE.&lt;br /&gt;
Примеры.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;assert (CLK'event and CLK='0') report &amp;quot;D hold error&amp;quot; severity WARNING;&lt;br /&gt;
 assert (CLK'last_event &amp;gt; HOLD) report &amp;quot;D hold error&amp;quot; severity ERROR;&amp;lt;/source&amp;gt;&lt;br /&gt;
В данных примерах атрибут CLK'last_event имеет тип TIME и возвращает время, пройденное с момента последнего изменения  сигнала CLK, HOLD – имеет тип TIME.&lt;br /&gt;
Условие CLK'last_event&amp;gt;HOLD может быть либо истинным, либо ложным.&lt;br /&gt;
Следующие два оператора (две строки) эквивалентны:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;report &amp;quot;NEW YEAR 3003&amp;quot; severity ERROR;&lt;br /&gt;
 assert FALSE report &amp;quot;NEW YEAR 3003&amp;quot; severity ERROR;&amp;lt;/source&amp;gt;&lt;br /&gt;
также, как и следующие:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;report &amp;quot;NEW YEAR 2002&amp;quot;;&lt;br /&gt;
 assert FALSE report &amp;quot;NEW YEAR 2002&amp;quot; severity NOTE;&amp;lt;/source&amp;gt;&lt;br /&gt;
Так как FALSE всегда является ложным, то данные сообщения всегда выдаются – это примеры безусловно выдаваемых сообщений.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Оператор wait (ожидать) ===&lt;br /&gt;
Общий вид оператора wait&lt;br /&gt;
 wait on список чувствительности until условие for тайм-аут ;&lt;br /&gt;
Оператор wait является причиной временного прекращения оператора процесса или процедуры. Оператор ожидания wait приостанавливает процесс до момента,&lt;br /&gt;
пока не изменится некоторый сигнал в списке чувствительности процесса, в это время будет произведено вычисление условия. Фраза “условие” есть выражение типа BOOLEAN.&lt;br /&gt;
Если получается истинное значение, выполнение процесса возобновляется. Фраза “тайм-аут” устанавливает максимальное время ожидания, после которого процесс возобновит свое выполнение.&lt;br /&gt;
Пример.&lt;br /&gt;
 WAIT on A, B until (C=0) for 50 ns;&lt;br /&gt;
Этот оператор приостановит процесс до момента изменения A или B, после чего будет проверено выражение C=0 и, если результатом проверки будет истина, процесс возобновится. Но независимо от этих условий возобновление процесса произойдет через 50ns.&lt;br /&gt;
Допустимо записывать одно или более условий в операторе ожидания, например,&lt;br /&gt;
 Условие 1. WAIT on A, B;&lt;br /&gt;
 Условие 2. WAIT until (C=0);&lt;br /&gt;
 Условие 3. WAIT for 50 ns;&lt;br /&gt;
В условии 1 процесс будет возобновляться, когда изменится A или B. В условии 2 нет списка сигналов запуска, поэтому процесс возобновится, когда C изменит свое значение из 1 в 0.&lt;br /&gt;
В условии 3 процесс возобновится через 50ns независимо от любых других условий.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''! Для оператора процесса мы можем иметь либо список чувствительности после ключевого слова процесс, либо оператор wait, но не оба вместе.'''&lt;br /&gt;
Может быть более одного оператора wait внутри оператора процесса.&lt;br /&gt;
=== Слайд:Оператор wait (ожидать)/ Примеры ===&lt;br /&gt;
'''Примеры оператора wait'''&amp;lt;br/&amp;gt;&lt;br /&gt;
1. Оператор wait типа for&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait for 10ns;&lt;br /&gt;
 wait for CLK_Period/2;&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Оператор wait типа until&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait until CLK='1';&lt;br /&gt;
 wait until CE and (not RST);&lt;br /&gt;
 wait until IntData&amp;gt;16;&amp;lt;/source&amp;gt;&lt;br /&gt;
3. Оператор wait типа on&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait on CLK;&lt;br /&gt;
 wait on Enable, Data;&amp;lt;/source&amp;gt;&lt;br /&gt;
{| align=center cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;  width=800px border=&amp;quot;1&amp;quot; style=&amp;quot;border:1px solid #000; border-collapse: collapse&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 Wait until&lt;br /&gt;
 Enable ='1';&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
эквивалентно&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 loop&lt;br /&gt;
 wait on Enable;&lt;br /&gt;
 exit when Enable = '1';&lt;br /&gt;
 end loop;&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
4. Комбинированный оператор wait (комбинация двух или трех предыдущих)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
 wait on Data until CLK='1';&lt;br /&gt;
 wait until CLK='1' for 10ns;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-12-23T23:38:20Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Блоки ввода вывода в FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
Блоки ввода-вывода связвывают FPGA с внешними устройствами.&lt;br /&gt;
Они представляют собой двунаправленные цифровые выводы, которые могут программироваться как по направлению (вход, выход, выход с третьим состоянием, двунаправленный вывод),&lt;br /&gt;
так и по типу электрического интерфейса (ТТЛ, КМОП, LVDS и т.д., всего более 40 типов интерфейсов, включая дифференциальные).&lt;br /&gt;
Блоки могут попарно объединяться для реализации дифференциальных интерфейсов (например, LVDS). Необходимо учитывать, что выводы не могут образовывать пары в произвольном порядке – каждая пара строго фиксирована в корпусе ПЛИС.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
На рисунке выше символы P и N обозначают непосредственно контактные площадки, подключенные к выводам корпуса ПЛИС.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:RAMB16WER.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Память в серии 7 ... --&amp;gt;&lt;br /&gt;
Память BRAM может быть автоматически сгенерирована синтезатором на основе анализа исходных текстов проекта. Разработчик может принудительно задать использование такой памяти в проекте, установив подключение сигналов (component instantiation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Контроллер FIFO не может быть сгенерирован автоматически ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При одновременном доступе к ячейке памяти по двум портам, когда один из портов производит запись, а другой – чтение, возможны следующие режимы работы:&lt;br /&gt;
* чтение перед записью (read before write) – порт, выполняющий чтение, выдаёт старое значение ячейки памяти, в которую производится запись по другому порту;&lt;br /&gt;
* чтение после записи (read after write) – порт, выполняющий чтение, выдаёт значение, которое записывается по другому порту;&lt;br /&gt;
* нет чтения при записи (no read on write), состояние порта не изменяется.&lt;br /&gt;
В последнем случае речь идёт не об отстуствии записи в ячейку, а о сохранении состояния выходного регистра модуля памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В семействах UltaScale Plus --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секции DSP48 в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
Для повышения надежности работы проектов на базе FPGA применяемвые схемы должны быть синхронными, поскольку большинство приёмов, основанных на ассинхронной схемотехнике хотя и реализуемы технически для FPGA, однако часто приводят к нестабильной работе.&lt;br /&gt;
Это связано с тем, что уменьшение технологических норм и повышение тактовых частот делают цифровые схемы крайне чувствительными к особенностям трассировки, технологическому разбросу параметров, температуре и колебаниям напряжения питания.&lt;br /&gt;
&lt;br /&gt;
Основные параметры тактового сигнала:&lt;br /&gt;
* период;&lt;br /&gt;
* jitter (&amp;quot;дрожание&amp;quot;);&lt;br /&gt;
* skew (время нарастания фронта).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Время нарастания фронта обычно измеряется от уровня 10% максимального напряжения до 90% (в некоторых случаях – 20% ... 80%).&lt;br /&gt;
Это связано с тем, что непосредственно вблизи нуля и максимального напряжения форма сигнала обычна искажена и на практике точного нуля и максимума фронт может и не достигать.&lt;br /&gt;
В то же время параметр skew важен тем, что срабатывание может произойти при различных уровнях напряжения по мере прихода фронта.&lt;br /&gt;
Возможна ситуация, когда один триггер воспримет фронт в положении ближе к максимуму, а следующий за ним – на начальном участке.&lt;br /&gt;
В этом случае вместо номинального значения периода интервал между срабатываниями последовательно включенных триггеров будет меньше на величину времени нарастания сигнала.&lt;br /&gt;
&lt;br /&gt;
Понятие jitter соответствует эффекту &amp;quot;дрожания&amp;quot; фронта относительно его номинального положения на временной оси.&lt;br /&gt;
Это связано с нестабильностью частоты тактового генератора.&lt;br /&gt;
Так же, как и для параметра skew, возможно ситуация, когда первый триггер сработает по положению фронта, пришедшего с максимальной задержкой, а следующий фронт придёт с минимальной задержкой.&lt;br /&gt;
В этом случае интервал времени для распространения сигнала по линии данных должен быть уменьшен ещё и на величину jitter.&lt;br /&gt;
&lt;br /&gt;
Из-за наличия упомянутых эффектов тактовый сигнал желательно иметь с минимально возможными значениями параметров skew и jitter.&lt;br /&gt;
Поэтому необходимо применять специальные формирователи (буферные элементы), обеспечивающие минимальное значение skew, и генераторы, минимизирующие jitter.&lt;br /&gt;
Такие компоненты имеются на кристаллах современных ПЛИС.&lt;br /&gt;
&lt;br /&gt;
Все синхронные компоненты (триггеры, блочная память, блоки DSP) получают тактовый сигнал по выделенным линиям, который проложены по кристаллу так, чтобы минимизировать неравномерность распространения сигнала.&lt;br /&gt;
Если использовать именно эти ресурсы, то можно считать, что все синхронные компоненты работают одновременно.&lt;br /&gt;
В противном случае возможно возникновение так называемых &amp;quot;гонок фронтов&amp;quot;, когда фронт тактового сигнала приходит на отдельные компоненты в разные моменты времени и в кристалле будут одновременно существовать данные, относящиеся к разным отсчётам тактового сигнала.&lt;br /&gt;
Комбинация сигналов, относящихся к разным тактам, скорее всего приведёт к неправильному поведению схемы.&lt;br /&gt;
Нельзя сказать, что такие ситуация происходят всегда, однако следует уделить внимание этому вопросы при проектировании.&lt;br /&gt;
&lt;br /&gt;
В ПЛИС Spartan-6 предусмотрены специальные буферы для распространения тактового сигнала, однако они расположены только в определённых блоках ввода/вывода, которые помечены в документации.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Структура CPLD фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-12-01T21:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Тактовые ресурсы FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:RAMB16WER.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Память в серии 7 ... --&amp;gt;&lt;br /&gt;
Память BRAM может быть автоматически сгенерирована синтезатором на основе анализа исходных текстов проекта. Разработчик может принудительно задать использование такой памяти в проекте, установив подключение сигналов (component instantiation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Контроллер FIFO не может быть сгенерирован автоматически ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При одновременном доступе к ячейке памяти по двум портам, когда один из портов производит запись, а другой – чтение, возможны следующие режимы работы:&lt;br /&gt;
* чтение перед записью (read before write) – порт, выполняющий чтение, выдаёт старое значение ячейки памяти, в которую производится запись по другому порту;&lt;br /&gt;
* чтение после записи (read after write) – порт, выполняющий чтение, выдаёт значение, которое записывается по другому порту;&lt;br /&gt;
* нет чтения при записи (no read on write), состояние порта не изменяется.&lt;br /&gt;
В последнем случае речь идёт не об отстуствии записи в ячейку, а о сохранении состояния выходного регистра модуля памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В семействах UltaScale Plus --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секции DSP48 в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
Для повышения надежности работы проектов на базе FPGA применяемвые схемы должны быть синхронными, поскольку большинство приёмов, основанных на ассинхронной схемотехнике хотя и реализуемы технически для FPGA, однако часто приводят к нестабильной работе.&lt;br /&gt;
Это связано с тем, что уменьшение технологических норм и повышение тактовых частот делают цифровые схемы крайне чувствительными к особенностям трассировки, технологическому разбросу параметров, температуре и колебаниям напряжения питания.&lt;br /&gt;
&lt;br /&gt;
Основные параметры тактового сигнала:&lt;br /&gt;
* период;&lt;br /&gt;
* jitter (&amp;quot;дрожание&amp;quot;);&lt;br /&gt;
* skew (время нарастания фронта).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Время нарастания фронта обычно измеряется от уровня 10% максимального напряжения до 90% (в некоторых случаях – 20% ... 80%).&lt;br /&gt;
Это связано с тем, что непосредственно вблизи нуля и максимального напряжения форма сигнала обычна искажена и на практике точного нуля и максимума фронт может и не достигать.&lt;br /&gt;
В то же время параметр skew важен тем, что срабатывание может произойти при различных уровнях напряжения по мере прихода фронта.&lt;br /&gt;
Возможна ситуация, когда один триггер воспримет фронт в положении ближе к максимуму, а следующий за ним – на начальном участке.&lt;br /&gt;
В этом случае вместо номинального значения периода интервал между срабатываниями последовательно включенных триггеров будет меньше на величину времени нарастания сигнала.&lt;br /&gt;
&lt;br /&gt;
Понятие jitter соответствует эффекту &amp;quot;дрожания&amp;quot; фронта относительно его номинального положения на временной оси.&lt;br /&gt;
Это связано с нестабильностью частоты тактового генератора.&lt;br /&gt;
Так же, как и для параметра skew, возможно ситуация, когда первый триггер сработает по положению фронта, пришедшего с максимальной задержкой, а следующий фронт придёт с минимальной задержкой.&lt;br /&gt;
В этом случае интервал времени для распространения сигнала по линии данных должен быть уменьшен ещё и на величину jitter.&lt;br /&gt;
&lt;br /&gt;
Из-за наличия упомянутых эффектов тактовый сигнал желательно иметь с минимально возможными значениями параметров skew и jitter.&lt;br /&gt;
Поэтому необходимо применять специальные формирователи (буферные элементы), обеспечивающие минимальное значение skew, и генераторы, минимизирующие jitter.&lt;br /&gt;
Такие компоненты имеются на кристаллах современных ПЛИС.&lt;br /&gt;
&lt;br /&gt;
Все синхронные компоненты (триггеры, блочная память, блоки DSP) получают тактовый сигнал по выделенным линиям, который проложены по кристаллу так, чтобы минимизировать неравномерность распространения сигнала.&lt;br /&gt;
Если использовать именно эти ресурсы, то можно считать, что все синхронные компоненты работают одновременно.&lt;br /&gt;
В противном случае возможно возникновение так называемых &amp;quot;гонок фронтов&amp;quot;, когда фронт тактового сигнала приходит на отдельные компоненты в разные моменты времени и в кристалле будут одновременно существовать данные, относящиеся к разным отсчётам тактового сигнала.&lt;br /&gt;
Комбинация сигналов, относящихся к разным тактам, скорее всего приведёт к неправильному поведению схемы.&lt;br /&gt;
Нельзя сказать, что такие ситуация происходят всегда, однако следует уделить внимание этому вопросы при проектировании.&lt;br /&gt;
&lt;br /&gt;
В ПЛИС Spartan-6 предусмотрены специальные буферы для распространения тактового сигнала, однако они расположены только в определённых блоках ввода/вывода, которые помечены в документации.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Структура CPLD фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 17</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17"/>
				<updated>2020-11-29T22:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Описание сипользуемой отладочной платы и модулей расширений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Примеры описаний схем для FPGA на отладочной плате с FPGA фирмы Xilinx&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Описание сипользуемой отладочной платы и модулей расширений ==&lt;br /&gt;
На отладочной плате имеются следующие коспоненты:&lt;br /&gt;
* ПЛИС FPGA Xilinx xc6slx9-2ftg256&lt;br /&gt;
* USB interface&lt;br /&gt;
* USB to UART&lt;br /&gt;
* 50M Crystal oscillator&lt;br /&gt;
* 256 Mbit SDRAM&lt;br /&gt;
* Real Time Clock(RTC) I2C&lt;br /&gt;
* 2x 40-pin extension ports&lt;br /&gt;
* 6 digit digital tube (6 семисегментных индикаторов)&lt;br /&gt;
* 4 LED&lt;br /&gt;
* 65536 color VGA interface&lt;br /&gt;
* Buzzer&lt;br /&gt;
* SD card socket&lt;br /&gt;
* Camera interface&lt;br /&gt;
* EEPROM&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Development board spartan6.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ресурсы FPGA:&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
! Характеристика !! XC6SLX9&lt;br /&gt;
|-&lt;br /&gt;
|Slices || 1430&lt;br /&gt;
|-&lt;br /&gt;
|BRAM ||32&lt;br /&gt;
|-&lt;br /&gt;
|DSP ||16&lt;br /&gt;
|-&lt;br /&gt;
|IO, max||200&lt;br /&gt;
|-&lt;br /&gt;
|CMT||2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. ТЗ==&lt;br /&gt;
&lt;br /&gt;
Входной интерфейс: UART приемник.&lt;br /&gt;
Выходной интерфейс UART передатчик.&lt;br /&gt;
&lt;br /&gt;
Модуль должен уметь принимать и интерпретировать комманды с компьютера и отправлять данные обратно.&lt;br /&gt;
Модуль должен быть расширяемым, чтобы была возможность работать с пользовательским интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
# В каком формате приходят команды по UART (В виде некоторого кода, либо в виде текста (ASCII), который надо интерпретировать?&lt;br /&gt;
# Как должен выглядеть пользовательский интерфейс?&lt;br /&gt;
# UART передаёт сырые данные, без предобработки&lt;br /&gt;
# Какие дополнительные функции могли бы быть полезными&amp;lt;br/&amp;gt; a) Должен уметь отправлять хосту системные сообщения: занят/не готов принимать комманды и данные, не занят/готов, начало передачи данных, конец передачи данных&amp;lt;br/&amp;gt;b) Во время передачи данных все команды игнорируются&amp;lt;br/&amp;gt;c) загрузка начальных данных в память?&amp;lt;br/&amp;gt;d) ??&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Спецификация==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. VHDL описание==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Синтез==&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* ISE Core generator&lt;br /&gt;
* ISE Language tamplates&lt;br /&gt;
* Plan Ahead&lt;br /&gt;
** Pins mapping&lt;br /&gt;
* Timing constraints&lt;br /&gt;
* FPGA programming via JTAG&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Development_board_spartan6.png</id>
		<title>Файл:Development board spartan6.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Development_board_spartan6.png"/>
				<updated>2020-11-29T22:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 17</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17"/>
				<updated>2020-11-29T22:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Примеры описаний схем для FPGA на отладочной плате с FPGA фирмы Xilinx&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Описание сипользуемой отладочной платы и модулей расширений ==&lt;br /&gt;
На отладочной плате имеются следующие коспоненты:&lt;br /&gt;
* ПЛИС FPGA Xilinx xc6slx9-2ftg256&lt;br /&gt;
* USB interface&lt;br /&gt;
* USB to UART&lt;br /&gt;
* 50M Crystal oscillator&lt;br /&gt;
* 256 Mbit SDRAM&lt;br /&gt;
* Real Time Clock(RTC) I2C&lt;br /&gt;
* 2x 40-pin extension ports&lt;br /&gt;
* 6 digit digital tube (6 семисегментных индикаторов)&lt;br /&gt;
* 4 LED&lt;br /&gt;
* 65536 color VGA interface&lt;br /&gt;
* Buzzer&lt;br /&gt;
* SD card socket&lt;br /&gt;
* Camera interface&lt;br /&gt;
* EEPROM&lt;br /&gt;
&lt;br /&gt;
Ресурсы FPGA:&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
! Характеристика !! XC6SLX9&lt;br /&gt;
|-&lt;br /&gt;
|Slices || 1430&lt;br /&gt;
|-&lt;br /&gt;
|BRAM ||32&lt;br /&gt;
|-&lt;br /&gt;
|DSP ||16&lt;br /&gt;
|-&lt;br /&gt;
|IO, max||200&lt;br /&gt;
|-&lt;br /&gt;
|CMT||2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. ТЗ==&lt;br /&gt;
&lt;br /&gt;
Входной интерфейс: UART приемник.&lt;br /&gt;
Выходной интерфейс UART передатчик.&lt;br /&gt;
&lt;br /&gt;
Модуль должен уметь принимать и интерпретировать комманды с компьютера и отправлять данные обратно.&lt;br /&gt;
Модуль должен быть расширяемым, чтобы была возможность работать с пользовательским интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
# В каком формате приходят команды по UART (В виде некоторого кода, либо в виде текста (ASCII), который надо интерпретировать?&lt;br /&gt;
# Как должен выглядеть пользовательский интерфейс?&lt;br /&gt;
# UART передаёт сырые данные, без предобработки&lt;br /&gt;
# Какие дополнительные функции могли бы быть полезными&amp;lt;br/&amp;gt; a) Должен уметь отправлять хосту системные сообщения: занят/не готов принимать комманды и данные, не занят/готов, начало передачи данных, конец передачи данных&amp;lt;br/&amp;gt;b) Во время передачи данных все команды игнорируются&amp;lt;br/&amp;gt;c) загрузка начальных данных в память?&amp;lt;br/&amp;gt;d) ??&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Спецификация==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. VHDL описание==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Синтез==&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* ISE Core generator&lt;br /&gt;
* ISE Language tamplates&lt;br /&gt;
* Plan Ahead&lt;br /&gt;
** Pins mapping&lt;br /&gt;
* Timing constraints&lt;br /&gt;
* FPGA programming via JTAG&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 17</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17"/>
				<updated>2020-11-29T21:57:30Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Пример 1. Синтез */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Примеры описаний схем для FPGA на отладочной плате с FPGA фирмы Xilinx&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Описание сипользуемой отладочной платы и модулей расширений ==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. ТЗ==&lt;br /&gt;
&lt;br /&gt;
Входной интерфейс: UART приемник.&lt;br /&gt;
Выходной интерфейс UART передатчик.&lt;br /&gt;
&lt;br /&gt;
Модуль должен уметь принимать и интерпретировать комманды с компьютера и отправлять данные обратно.&lt;br /&gt;
Модуль должен быть расширяемым, чтобы была возможность работать с пользовательским интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
# В каком формате приходят команды по UART (В виде некоторого кода, либо в виде текста (ASCII), который надо интерпретировать?&lt;br /&gt;
# Как должен выглядеть пользовательский интерфейс?&lt;br /&gt;
# UART передаёт сырые данные, без предобработки&lt;br /&gt;
# Какие дополнительные функции могли бы быть полезными&amp;lt;br/&amp;gt; a) Должен уметь отправлять хосту системные сообщения: занят/не готов принимать комманды и данные, не занят/готов, начало передачи данных, конец передачи данных&amp;lt;br/&amp;gt;b) Во время передачи данных все команды игнорируются&amp;lt;br/&amp;gt;c) загрузка начальных данных в память?&amp;lt;br/&amp;gt;d) ??&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Спецификация==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. VHDL описание==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Синтез==&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* ISE Core generator&lt;br /&gt;
* ISE Language tamplates&lt;br /&gt;
* Plan Ahead&lt;br /&gt;
** Pins mapping&lt;br /&gt;
* Timing constraints&lt;br /&gt;
* FPGA programming via JTAG&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T21:53:18Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Блочная память в FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:RAMB16WER.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Память в серии 7 ... --&amp;gt;&lt;br /&gt;
Память BRAM может быть автоматически сгенерирована синтезатором на основе анализа исходных текстов проекта. Разработчик может принудительно задать использование такой памяти в проекте, установив подключение сигналов (component instantiation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Контроллер FIFO не может быть сгенерирован автоматически ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При одновременном доступе к ячейке памяти по двум портам, когда один из портов производит запись, а другой – чтение, возможны следующие режимы работы:&lt;br /&gt;
* чтение перед записью (read before write) – порт, выполняющий чтение, выдаёт старое значение ячейки памяти, в которую производится запись по другому порту;&lt;br /&gt;
* чтение после записи (read after write) – порт, выполняющий чтение, выдаёт значение, которое записывается по другому порту;&lt;br /&gt;
* нет чтения при записи (no read on write), состояние порта не изменяется.&lt;br /&gt;
В последнем случае речь идёт не об отстуствии записи в ячейку, а о сохранении состояния выходного регистра модуля памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В семействах UltaScale Plus --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секции DSP48 в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Структура CPLD фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T21:40:33Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:RAMB16WER.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Память в серии 7 ... --&amp;gt;&lt;br /&gt;
Память BRAM может быть автоматически сгенерирована синтезатором на основе анализа исходных текстов проекта. Разработчик может принудительно задать использование такой памяти в проекте, установив подключение сигналов (component instantiation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Контроллер FIFO не может быть сгенерирован автоматически ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При одновременном доступе к ячейке памяти по двум портам, когда один из портов производит запись, а другой – чтение, возможны следующие режимы работы:&lt;br /&gt;
* чтение перед записью (read before write) – порт, выполняющий чтение, выдаёт старое значение ячейки памяти, в которую производится запись по другому порту;&lt;br /&gt;
* чтение после записи (read after write) – порт, выполняющий чтение, выдаёт значение, которое записывается по другому порту;&lt;br /&gt;
* нет чтения при записи (no read on write), состояние порта не изменяется.&lt;br /&gt;
В последнем случае речь идёт не об отстуствии записи в ячейку, а о сохранении состояния выходного регистра модуля памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В семействах UltaScale Plus --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
&lt;br /&gt;
==TODO:==&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Структура CPLD фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T21:39:26Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Блочная память в FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:RAMB16WER.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Память в серии 7 ... --&amp;gt;&lt;br /&gt;
Память BRAM может быть автоматически сгенерирована синтезатором на основе анализа исходных текстов проекта. Разработчик может принудительно задать использование такой памяти в проекте, установив подключение сигналов (component instantiation).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Контроллер FIFO не может быть сгенерирован автоматически ... --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При одновременном доступе к ячейке памяти по двум портам, когда один из портов производит запись, а другой – чтение, возможны следующие режимы работы:&lt;br /&gt;
* чтение перед записью (read before write) – порт, выполняющий чтение, выдаёт старое значение ячейки памяти, в которую производится запись по другому порту;&lt;br /&gt;
* чтение после записи (read after write) – порт, выполняющий чтение, выдаёт значение, которое записывается по другому порту;&lt;br /&gt;
* нет чтения при записи (no read on write), состояние порта не изменяется.&lt;br /&gt;
В последнем случае речь идёт не об отстуствии записи в ячейку, а о сохранении состояния выходного регистра модуля памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В семействах UltaScale Plus --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:RAMB16WER.png</id>
		<title>Файл:RAMB16WER.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:RAMB16WER.png"/>
				<updated>2020-11-29T21:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T17:23:32Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Блочная память в FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
Блочная память является показательным примером встроенного аппаратного ресурса, повышающего эффективность ПЛИС при решении типовых задач схемотехники.&lt;br /&gt;
Блок памяти занимает гораздо меньше места, чем аналогичный по ёмкости блок, выполненный на распределённой памяти логических ячеек, и к тому же обладает высокими характеристиками производительности.&lt;br /&gt;
Память является &amp;quot;истинно двухпортовой&amp;quot; (true dual port).&lt;br /&gt;
Это означает, что она имеет два независимых набора сигналов, допускающих проведение операций чтения или записи одновременно.&lt;br /&gt;
Альтернативой является разновидность ''simple dual-port'', когда только один порт допускает и чтение, и запись, а второй работает в режиме &amp;quot;только чтение&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Память в Spartan-6 размещается блоками по 18 кбит. Графическое представление компонента блочной памяти показано ниже, где сигналы имеют следующие обозначения (сигналы с именами заканчивающимися на A и B соответсвуют портам A и B):&lt;br /&gt;
* ADDRA, ADDRB – входы адреса;&lt;br /&gt;
* DIA, DIB – входы данных для записи;&lt;br /&gt;
* DIPA, DIPB – дополнительные разряды двходов данных;&lt;br /&gt;
* WEA, WEB – входы разрешения записи;&lt;br /&gt;
* CLKA, CLKB – тактовые сигналы;&lt;br /&gt;
* ENA, ENB – сигналы разрешения работы;&lt;br /&gt;
* REGCA, REGCB – разрешение записи во внутренний конвейеризирующий регистр данных;&lt;br /&gt;
* RSTA, RSTB – входы сброса внутренних регистров данных (сброс массива ячеек памяти с помощью этих сигналов невозможен);&lt;br /&gt;
* DOA, DOB – выходы данных;&lt;br /&gt;
* DOPA, DOPB – дополнительные разряды выходов данных.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Память, несмотря на физическую организацию в виде массива 1024 X 18 бит, может выступать в различных конфигурациях: 16k X 1, 8k x 2, 4k x 4, 2k x 9, 1k x 18, 512 x 36.&lt;br /&gt;
Разработчик сожет самостоятельно контролировать используемый режим или использовать результаты синтеза.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T17:03:44Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций switch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T16:59:09Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Комбинационная логика на базе LUT====&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Слайд:LUT в режиме распределенной памяти (distributed memory)====&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Сдвиговый регистр на базе LUT====&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
==== Слайд:Триггер в логической ячейке====&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Секция (slice) в FPGA===&lt;br /&gt;
Логические ячейки входят в состав ''секции'' (slice), которая объединяет 4 логические ячейки. Понятие секции введено потому, что кроме LUT и триггеров она имеет дополнительные компоненты.&lt;br /&gt;
&lt;br /&gt;
Дополнительные компоненты секции – это цепи '''ускоренного переноса''' и '''мультиплексоры'''. Цепи ускоренного переноса служат для построения сумматоров и вычитателей.&lt;br /&gt;
Поскольку операции сложения и вычитания широко используются в цифровой схемотехнике, для них в ячейку были добавлены специальные компоненты, которые вычисляют сумму и передают бит переноса на следующий аналогичный компонент соседней секции.&lt;br /&gt;
'''Синтезаторы автоматически поддерживают такие конструкции, поэтому выражения вида a + b  будут реализованы с использованием цепей ускорения переноса.'''&lt;br /&gt;
Не следует пытаться описывать сумматоры с помощью эквивалентных логических выражений, поскольку в этом случае они будут реализованы в виде таблиц истинности в LUT, а не на базе специализированных цепей.&lt;br /&gt;
&lt;br /&gt;
Дополнительные мультиплексоры F7MUX объединяют выходы двух LUT. Эти блоки могут быть полезны в ряде случаев, уменьшая число LUT, требуемых для построения логического узла. Например, схема с 7 входами может быть реализована не на двух LUT, а на связке LUT + F7MUX.&lt;br /&gt;
'''Такие преобразования автоматически выполняются синтезатором''' и обычно не требуют мпециального внимания разработчика.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Конфигурируемый логический блок (Configurable Logic Block) в FPGA===&lt;br /&gt;
Две секции образуют конфигурируемы логический блок (КЛБ, CLB – Configurable Logic Block).&lt;br /&gt;
Рассматривать КЛБ можно начать с семейства Spartan-6, поскольку в нём появилось заметное нововведение в виде трёх разновидностей логической ячейки.&lt;br /&gt;
Полезной осбенностью FPGA Xilinx традиционно являлась возсожность использования LUT в режимах распределённой памяти 1x16 или свдигового регистра.&lt;br /&gt;
Впоследствии число таких универсальных ячеек было сокращено, и появились секции SliceM и SliceL (символы M и L обозначают Memory и Logic соответсвенно, т.е. ряд ячеек мог реализовывать функцию памяти, а остальные – только логику).&lt;br /&gt;
Вместе с тем оба типа секций располагались в рамках каждого КЛБ, т.е. оба типа секций распределялись равномерно по всей матрице КЛБ.&lt;br /&gt;
В Spartan-6 появился третий тип – SliceX. Это менее мощная разновидность секции, поскольку в ней отсутствует цепь ускоренного переноса, т.е. такая секция не может служить для организации сложения или вычитания.&lt;br /&gt;
&lt;br /&gt;
В итоге в КЛБ Spartan-6 оказываются следующие секции:&lt;br /&gt;
* SliceM – универсальная секция с LUT, конфигурируемым во всех режимах, а также с линиями ускоренного переноса;&lt;br /&gt;
* SliceL – LUT конфигурируется только как логический генератор, есть цепи ускоренного переноса;&lt;br /&gt;
* SliceX – LUT конфигурируется только как логический генератор, нет цепей ускоренного переноса.&lt;br /&gt;
Их двух КЛБ один содержит пару секций SliceL+SliceX,  а другой – SliceM+SliceX.&lt;br /&gt;
Такие КЛБ называются CLB_LX и CLB_MX соответсвенн.&lt;br /&gt;
&lt;br /&gt;
Для эффективного использования ресурсов логических ячеек и секций следует обращать внимание на возможность реализации сложения/вычитания с помощью цепей ускоренного переноса, а мультплексоров – с применением дополнительных мультиплексоров секций.&lt;br /&gt;
Для этого '''операции сложения/вычитания и мультиплексирование  (например, с помощью конструкций sitch или case в VHDL) рекомендуется использовать по мере возможностей'''.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Отличия секций серии 7 и UltaScale от секций Spartan-6 ===&lt;br /&gt;
В серии 7 используется комбинация из одной секции SliceM и трёх секций SliceL. Секции SliceX Не используются, таким образом, все секции имеют цепи ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
Кроме мультиплексоров F7MUX, объединяющих выходы двух LUT,  в секциях серии 7 есть мультиплексоры F8MUX, объединяющие выходы двух F7MUX.&lt;br /&gt;
Таким образом, некоторые варианты схем могут быть реализованы с использованием меньшего числа секций в ПЛИС серии 7 по сравнению с Spartan-6.&lt;br /&gt;
&lt;br /&gt;
В семействе UltaScale, следующим за серией 7, выходы мультиплексоров F8MUX объединяются мультиплексором F9MUX. Все мультиплексоры применяются синтезатором автоматически, без явного участия разработчика.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Структурная схема секции FPGA (показана серия 7) приведена ниже. --&amp;gt;&lt;br /&gt;
Можно выделить основные компоненты секции:&lt;br /&gt;
* таблицы истинности (4 шт.);&lt;br /&gt;
* триггеры (8 шт.);&lt;br /&gt;
* мультиплексоры F7MUX и F8MUX;&lt;br /&gt;
* цепь ускоренного переноса.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T15:48:51Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распределённая память удобна для организации небольших блоков данных – буферов, линий задержки, небольших таблиц. Реализация больших блоков на распределённой памяти в общем случае нецелесообразна из-за сильной фрагментации такого блока.&lt;br /&gt;
Для объёмов в 512 слов и больше удобнее использовать блочную память.&lt;br /&gt;
&lt;br /&gt;
Тем не менее распределённая память обладает важным свойством, отсутсвующим у блочной памяти, – она допускает асинхронное чтение.&lt;br /&gt;
&lt;br /&gt;
Другой вариант использования логического генератога – реализация на его базе сдвигового регистра.&lt;br /&gt;
Ниже представленно графическое обозначение такого компонента, который имеет следующие сигналы:&lt;br /&gt;
* D – данные для записи в сдвиговый регистр;&lt;br /&gt;
* CLK – тактовый сигнал;&lt;br /&gt;
* A – адресный вход;&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Shift register based on LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В простейшем варианте сдвиговый регистр может представлять собой модуль, задерживающий входной сигнал на N тактов.&lt;br /&gt;
&lt;br /&gt;
LUT в режиме сдвигового регистра может использоваться совместно с триггером той же логической ячейки, увеличивая глубину сдвигового регистра на 1.&lt;br /&gt;
&lt;br /&gt;
Один из вариантов графического изображения триггера представленно ниже:&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell trigger.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где триггер может иметь следующие сигналы:&lt;br /&gt;
* C – вход тактового сигнала;&lt;br /&gt;
* D – вход данных;&lt;br /&gt;
* CE – вход разрешения записи (clocl enable);&lt;br /&gt;
* CLR – вход ассинхронного сброса (clear);&lt;br /&gt;
* PRE – вход ассинхронной установки в логическую единицу (pre-set);&lt;br /&gt;
* R – вход синхронного сброса (reset);&lt;br /&gt;
* S – вход синхронной установки в логическую единицу (set);&lt;br /&gt;
* Q – выход данных.&lt;br /&gt;
&lt;br /&gt;
Физически существует только по одному сигналу сброса/установки S/R.&lt;br /&gt;
Сброс, установка (синхронные или ассинхронные) реализуются путём комбинирования триггера с другими ресурсами ячейки.&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Logic_cell_trigger.png</id>
		<title>Файл:Logic cell trigger.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Logic_cell_trigger.png"/>
				<updated>2020-11-29T15:41:24Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Shift_register_based_on_LUT.png</id>
		<title>Файл:Shift register based on LUT.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Shift_register_based_on_LUT.png"/>
				<updated>2020-11-29T15:28:52Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T08:16:16Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
Распределённая память может работать в однопортовом или простом двухпортовом (Simple dual-port) режимах. Простой двухпортовый режим имеет ограничение, что только один порт может использоваться для чтения и записи, а второй предназначен только для чтения.&lt;br /&gt;
На рисунке ниже элемент распределённой памяти, который имеет следующие сигналы:&lt;br /&gt;
* we – сигнал разрешения записи;&lt;br /&gt;
* d – данные для записи&lt;br /&gt;
* wclk – вход тактового сигнала;&lt;br /&gt;
* a – адрес для чтения/записи;&lt;br /&gt;
* dpra – адрес для чтения, второй порт (dual port read address);&lt;br /&gt;
* spo – выход первого порта (single port output);&lt;br /&gt;
* dpo – выход второго порта (dual port output).&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-29T08:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Distributed mem RAM16X1D.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Distributed_mem_RAM16X1D.png</id>
		<title>Файл:Distributed mem RAM16X1D.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Distributed_mem_RAM16X1D.png"/>
				<updated>2020-11-29T08:00:28Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:6-LUT.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:6-LUT.png</id>
		<title>Файл:6-LUT.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:6-LUT.png"/>
				<updated>2020-11-28T23:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|1100x1100px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:40:31Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|1200x1200px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:40:13Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|900x900px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:39:52Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell virtex.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of logic cell Spartan.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_logic_cell_Spartan.png</id>
		<title>Файл:Evolution of logic cell Spartan.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_logic_cell_Spartan.png"/>
				<updated>2020-11-28T23:39:09Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_logic_cell_virtex.png</id>
		<title>Файл:Evolution of logic cell virtex.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_logic_cell_virtex.png"/>
				<updated>2020-11-28T23:38:57Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-28T23:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Logic cell.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Logic_cell.png</id>
		<title>Файл:Logic cell.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Logic_cell.png"/>
				<updated>2020-11-28T23:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T23:31:16Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Логические ячейки FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
Логические ячейки являются основным программируемым ресурсом FPGA, определяющим её архитектуру как таковую и наиболее универсальным с точки зрения функциональных возможностей.&lt;br /&gt;
&lt;br /&gt;
В современных семействах, включая Spartan-6, серию 7 и последующие, ячейка состоит из 6-входовой таблицы истинности (LUT, Look-Up Table) и двух триггеров.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Комбинационная логика реализуется в таких ячейках путём заполнения таблиц истинности, представляющих собой модули памяти. Комбинация состояний на входах для такого модуля является адресом ячейки, хранящей ребуемое значение выхода.&lt;br /&gt;
Такой подход позволяет реализовать произвольную логическую функцию, поскольку независимо от сложности схемы все возможные состояния выхода записываются в память.&lt;br /&gt;
Эта память представляет собой ОЗУ, и её содержимое записывается в процессе загрузки конфигурации FPGA.&lt;br /&gt;
&lt;br /&gt;
На протяжении развития FPGA архитектура логической ячейки претерпевала изменения, которые схематично можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что от 4-х входовой LUT ячейки перешли 6-и входовой и от одного триггера в ячейке к двум.&lt;br /&gt;
&lt;br /&gt;
LUT реализует любую функцию с не более чем 6 операндами. Кроме того, возможно использование LUT  в режимес частично совмещёнными входами, когда память разбивается на два фрагмента по 21 бита, давая возможность сформировать две логические функции с не более чем 5 операндами каждая.&lt;br /&gt;
При этом, поскольку в самой LUT всехо 6 входов, часть входов должна быть обобщена. Такой режим используется САПР по мере возможности.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
LUT могут также использоваться в режимах распределенной памяти (distributed memory) и сдвиговых регистров.&lt;br /&gt;
Поскольку логический генератор представляет собой элемент статической памяти, который хранит таблицу истинности в явном виде, его можно использовать по прямому назначению – в качестве обычного компонента памяти.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T22:33:07Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Аппаратный состав FPGA фирмы Xilinx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400||500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T22:32:42Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Аппаратный состав FPGA фирмы Xilinx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gigabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
Стоит отметить, что характеристики и сферы применения FPGA всё больше ориентируются на аппаратные ядра в этих микросхемах.&lt;br /&gt;
Для семейств Spartan это блочная память и секции DSP. Они способны работать на высокой тактовой частоте (275...325 МГц в зависимости от класса скорости ПЛИС) и потребляют не больше энергии, чем аналогичные устройства в микроконтроллерах.&lt;br /&gt;
&lt;br /&gt;
Важным преимуществом ПЛИС является возможность организовывать специальные вычислительные блоки построенные на базе секций DSP. Такие блоки могут работать полностью параллельно и обеспечивать суммарную производительность, превосходящую производительность не только микроконтроллеров, но и сигнальных процессоров.&lt;br /&gt;
Например, 16 секци DSP, работающие на частоте 200 МГц (это вполне достижимо для многих модулей ЦОС), дают суммарную производительность, эквивалентную гипотетическому процессору с тактовой частотой 3,2 ГГц.&lt;br /&gt;
&lt;br /&gt;
ПЛИС обладает  существенно  меньшим разнообразием накристалльных периферийных устройств. Такие компоненты, как флеш-память или EEPROM, АЦП, ЦАП, USB, должны быть реализованы во внешних микросхемах.&lt;br /&gt;
&lt;br /&gt;
В таблице ниже показаны сравнительные характеристики семейств начального уровня.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Характеристика !! Spartan-6 !! Spartan-7!! Artix-7 !! Zynq-7000&lt;br /&gt;
|-&lt;br /&gt;
|Логические ячейки, тыс.||4-150||6-100||12-215||23-85&lt;br /&gt;
|-&lt;br /&gt;
|Блочная память, Мбит||0,2-4,8||0,18-4,3||0,72-13,1||1,8-4,9&lt;br /&gt;
|-&lt;br /&gt;
|Секции DSP||8-180||10-160||40-740||60-220&lt;br /&gt;
|-&lt;br /&gt;
|Приемопередатчики||0-8||-||2-16||0-16&lt;br /&gt;
|-&lt;br /&gt;
|Максимальная скорость приемопередатчиков, Гбит/с||3,2||-||6,6||6,6&lt;br /&gt;
|-&lt;br /&gt;
|Число программируемых внешних выводов, максимум||576||400|500||328&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Логические ячейки FPGA===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блоки ввода вывода в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Блочная память в FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Тактовые ресурсы FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Высокоскоростные последовательные приемопередатчики FPGA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратные контроллеры PCI Express===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль DeviceDNA===&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Модуль AMS (Agile Mixed Signal, только для серии 7)===&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T21:48:39Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Архитектура FPGA фирмы Xilinx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA generations.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:FPGA_generations.png</id>
		<title>Файл:FPGA generations.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:FPGA_generations.png"/>
				<updated>2020-11-25T21:48:14Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T21:36:05Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Архитектура FPGA фирмы Xilinx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Evolution of system architecture of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_system_architecture_of_FPGA.png</id>
		<title>Файл:Evolution of system architecture of FPGA.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Evolution_of_system_architecture_of_FPGA.png"/>
				<updated>2020-11-25T21:33:35Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T21:04:00Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:FPGA architecture fragment.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:FPGA_architecture_fragment.png</id>
		<title>Файл:FPGA architecture fragment.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:FPGA_architecture_fragment.png"/>
				<updated>2020-11-25T21:03:36Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T20:36:02Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соединение КЛБ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-25T20:35:06Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:Programmable resources of FPGA.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
Соединение КЛЮ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Programmable_resources_of_FPGA.png</id>
		<title>Файл:Programmable resources of FPGA.png</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Programmable_resources_of_FPGA.png"/>
				<updated>2020-11-25T20:34:29Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-24T23:08:31Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
Соединение КЛЮ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
== Слайд: FPGA фирмы Xilinx==&lt;br /&gt;
Одним из основных производителей ПЛИС является фирма Xilinx.&lt;br /&gt;
В конце 90х годов основной линейкой FPGA среди продукции Xilinx была серия XC4000 (семейства XC4000E, XC4000XL и XC4000XLA).&lt;br /&gt;
Архитектура этой линейки оказалась довольно удачной, однако выяснилось, что в целом ряде проектов возможности стандартной ячейки ПЛИС используются далеко не полностью.&lt;br /&gt;
Возникла естественная альтернатива – использовать дорогие устройства с максимальной производительностью и полным набором функциональных возможностей или, напротив, дешевые ПЛИС, обеспечивающие базовые функции, требующиеся для большинства типовых проектов.&lt;br /&gt;
В результате фирма Xilinx начала выпускать различные серии FPGA, отвечающие упомянутым альтернативам.&lt;br /&gt;
&lt;br /&gt;
Стандартное недорогое решение представляла серия Spartan, на смену которой пришли серии Artix (минимальная стоимость) и Kintex (умеренная стоимость при высокой производительности в задачах цифровой обработки сигналов), наилучшие технические характеристики достигаются в серии Virtex.&lt;br /&gt;
На данный момент активными являются семейства серии 7 – Artix-7, Spartan-7, Kintex-7, Virtex-7. Микросхемы UltraScale и UltraScale+ относятся к верхнему ценовому диапазону и предназначены для построения сложных систем с максимальной степенью интеграции компонентов на кристалле.&lt;br /&gt;
Ячейки серии Kintex ничем не отличаюися от ячеек более дорогой серии Virtex.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Архитектура FPGA фирмы Xilinx ==&lt;br /&gt;
Архитектура ранних семейств (например, XC4000) представляла собой прямоугольную сатрицу однотипных логических ячеек, окруженных блоками ввода-вывода. Такая архитектура выглядит однородно и в целом удобна для реализации самых разных цифровых схем. Однако с учётом сниженной тактовой частоты программируемой схемы и необходимостью тратить существенную часть площади кристалла на коммутационные линии и неиспользуемые ресурсы ячеек, выяснилось, что целый ряд широко используемых компонентов реализуется в FPGA крайне неэффективно.&lt;br /&gt;
&lt;br /&gt;
Поэтому в начале 2000-х годов FPGA Xilinx кроме собственно логических ячеек содержали уже аппаратные блоки. В первую очередь были добавлены:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти (Block RAM, BRAM). В более современных семействах были добавлены также и более крупные блоки памяти UltaRAM;&lt;br /&gt;
* умножители независимых целочисленных операндов, позже превратившиеся в &amp;quot;блоки цифровой обработки сигналов&amp;quot;, реализующие операцию &amp;quot;умножение с накоплением&amp;quot;, обозначаемые как XtreameDSP или DSP48;&lt;br /&gt;
* высокоскоростные последовательные приемопередатчики (MultiGigabit Transceivers, MGT).&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
Отдельным направлением ПЛИС, анонс которого состоялся в 2011 году, являются микросхемы класса All Programmable SoC (ППСНК, полностью программируемые системы на кристалле). Первыми из микросхем такого типа являются AP SoC семейства Zynq-7000.&lt;br /&gt;
Они включают в себя процессорное ядро ARM и матрицу программируемых логических ячеек, аналогичных применяемым в Artix или Kintex. Zynq-7000 имеют также разновидность Zynq-7000S, отличающуюся одноядерной, ане двухядерной подсистемой ARM.&lt;br /&gt;
&lt;br /&gt;
Семейство UltaScale+ также включают микросхемы Zynq. ОНи обозначаются Zynq UltraScale+ и имеют несколько разновидностей.&lt;br /&gt;
&lt;br /&gt;
Новым направлением архитектуры ПЛИС является анонсированная в 2018 году Adaptive Compute Acceleration Platform (ACAP), или адаптивная платформа ускорения вычислений.&lt;br /&gt;
В настоящее время она представлена серией Versal, первые образцы которой выпускаются по технологическому процессу с нормами 7 нм.&lt;br /&gt;
ПЛИС Versal объединяют  матрицу программируемых ячеек, аппаратные процессоры ARM и сеть аппаратно реализованных 32-разрядных RISC-процессоров.&lt;br /&gt;
&lt;br /&gt;
В настоящее время сохраняют некоторую актуальность недорогие ПЛИС Spartan-6, однако основной интерес представляет серия 7, представленная наибольшим числом разновидностей семейств.&lt;br /&gt;
&lt;br /&gt;
Ниже диаграмма соответствия поколений ПЛИС Xilinx технолгическим процессам.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
=== Слайд:Аппаратный состав FPGA фирмы Xilinx ===&lt;br /&gt;
Итак, кроме логических ячеек и блоков вводв-выводв современные FPGA содержат большое число аппаратных блоков, реализующих часто используемые в цифровой схемотехнике функции.&lt;br /&gt;
Смысл размещения на кристалле таких блоков состоит в том, что те же узлы, выполняемые с помощью логических ячеек, будут именть больший размер и пониженное быстродействие.&lt;br /&gt;
В то же время аппаратная реализация часто используемых блоков несущественно увеличивает площадь кристалла и стоимость.&lt;br /&gt;
&lt;br /&gt;
К аппаратным блокам размещённым в FPGA относятся:&lt;br /&gt;
* блоки синхронной статической двухпортовой памяти BRAM;&lt;br /&gt;
* блоки цифровой обработки сигналов &amp;quot;умножение с накоплением&amp;quot; Xtreme DSP;&lt;br /&gt;
* формирователи тактовых сигналов MMCM (Multi-Mode Clock Managers) и PLL (Phase-Locked Loop);&lt;br /&gt;
* скоростные последовательные приемопередатчики (MGT, Multi-Gifabit Transceivers);&lt;br /&gt;
* контроллеры PCI Express endpoint и root;&lt;br /&gt;
* процессорные ядра ARM (Zynq-700, Zynq-7000S, Zynq-US+).&lt;br /&gt;
&lt;br /&gt;
Семейство Spartan-6 выполнено по нормам 45-нм. В состав семейства входят несколько микросхем в диапазоне логической ёмкости от 4 до 150 тысяч эквивалентных логических ячеек.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-24T21:02:10Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
Соединение КЛЮ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий. Настройки компонентов и информация о включенных/выключенных коммутаторах хранится в специальной памяти внутри FPGA. Поскольку эта память выполнена по технологии SRAM, она имеет неограниченное число циклов перезаписи, однако теряет информации при пропадании питания. Поэтому интерфейс программирования и внешняя энергозависимая микросхема являются обязательными для работы с FPGA.&lt;br /&gt;
&lt;br /&gt;
На практике программирование ячеек и формирование трассировочных линий выполняется автоматически с помощью системы автоматизированного проектирования. Структура файла конфигурации является строго конфиденциальной информацией, и формирование такого файла может быть выполнено только с помощью САПР конкретного производителя FPGA.&lt;br /&gt;
&lt;br /&gt;
Основные особенности подхода, реализованного в FPGA:&lt;br /&gt;
# FPGA подразумевают ''гранулярность'' схемы, это значит, что сложные с не равномерным использованием компонентов всё равно необходимо приводить к базовым возможностям логических ячеек, причём вероятнее всего какие-то возможности ячеек будут незадействованы;&lt;br /&gt;
# программируемые трассировачные линии имеют большую задержку распространения сигнала по сравнению с металлическими соединителями интегральных схем, поэтому рабочие частоты ПЛИС оказываются меньше, чем частоты заказных/полузаказных СБИС.&lt;br /&gt;
&lt;br /&gt;
Таким образом, проекты на базе ПЛИС оказываются медленнее и дороже решения на базе стандартных (Standart Product) или специализированных микросхем (ASIC, ASSP – Application-Specific Integrated Circuit, Application-Specific Standart Product).&lt;br /&gt;
Но поскольку стоимость подготовки производства интегральных схем постоянно растёт и, например, для технологического процесса с нормой 32 нм достигала 200 млн. долларов США (по данным на 2012г), то разработка специализированной микросхемы оказывается экономически целесообразной только для массового производства.&lt;br /&gt;
А для устройств, выпускаемых небольшими тиражами ПЛИС являются подходящей элементной базой.&lt;br /&gt;
&lt;br /&gt;
* Что такое FPGA?&lt;br /&gt;
* Когда используется?&lt;br /&gt;
* В чем отличие от CPLD?&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-24T19:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд: общие сведения об FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
Соединение КЛЮ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
В логические ячейки КЛБ заносятся требуемые таблицы истинности, при необходимости подключаются триггеры логических ячеек. Соединения с другими ячейками выполняются с помощью замыкания соответствующих коммутационных транзисторов в трассировочных линиях.&lt;br /&gt;
&lt;br /&gt;
На рисунке видно, что две ячейки из всего массива оказались запрограммированы на реализацию определённой логической функции. Поскольку для реализации схемы одной ячейки оказалось недостаточно, её выход был подключён к входу другой ячейки, для чего задействованы трассировочные линии FPGA. Чтобы реализовать такую схему, необходимо задать режимы работы отдельных компонентов внутри ячеек, а также активировать цифровые ключи, соединяющие отдельные сегменты трассировочных линий.&lt;br /&gt;
&lt;br /&gt;
* Что такое FPGA?&lt;br /&gt;
* Когда используется?&lt;br /&gt;
* В чем отличие от CPLD?&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 16</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_16"/>
				<updated>2020-11-24T18:58:06Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Введение в проектирование схем на FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Проектирование схем на FPGA&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в проектирование схем на ПЛИС ==&lt;br /&gt;
Основные современные типы ПЛИС:&lt;br /&gt;
* CPLD – Complex Programmable Logic Devices – сложные программируемые логические устройства;&lt;br /&gt;
* FPGA – Field Programmable Array – программируемые пользователем вентильные матрицы.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения о CPLD ==&lt;br /&gt;
Идеей CPLD является реализация нескольких узлов на одном кристалле, добавляя к ним возможности передачи сигналов между узлами. Современные микросхемы CPLD имеют программируемые узлы на основе флеш памяти, т.е. являются многократно программируемыми, и содержат блоки из 18 или 16 триггеров вместе с соответсвующей матрицей вентилей И-ИЛИ. Такие ПЛИС обладают предсказуемыми задержками распространения сигнала (входные сигналы проходят через несложную схему вентелей и коммутационных узлов), пркатически не требуют внешних компонентов и удобны для работы в качестве &amp;quot;''glue logic''&amp;quot;, т.е. микросхем, выполняющих в устройстве сопряжение более сложных устройств и заменяющих на печатной плате множество более простых микросхем, состоящих из нескольких вентелей.&lt;br /&gt;
&lt;br /&gt;
Недостатком архитектуры CPLD является сложность построения более ёмких микросхем. Существующие в настоящее время CPLD состоят из десятков-сотен триггеров и практически не получают преимуществ от перехода к новым технологическим процессам.&lt;br /&gt;
&lt;br /&gt;
Микросхемы с архитектурой CPLD в настоящее время всё ещё выпускаются компанией Xilinx. Это серия CoolRunner-II, которую рассмотрим далее.&lt;br /&gt;
&lt;br /&gt;
== Слайд: общие сведения об FPGA ==&lt;br /&gt;
Программируемые микросхемы с архитектурой FPGA имеют в основе набор конфигурируемых блоков (логических ячеек), содержащих базовые компоненты цифровой логики – логические элементы и триггеры. Отдельные ячейки соединяются друг с другом с помощью программируемых трассировачных линий, как показано на рисунке ниже.&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Идеей, реализованной в FPGA, является прямое задание логических функций в виде таблицы истинности (LUT, Look-Up Table). Вместо коммутации вентилей ИЛИ и И таблица истинности представляет собой просто блок памяти, на адресные входы которого подаются входные логические сигналы. Их комбинация естественным образом выбирает одну из ячеек таблицы, в которой хранится требуемое состояние ячейки – 0 или 1. Таким образом, LUT в FPGA может реализовать любую логическую функцию, если число её входов не превышает число входов LUT. Долгое время LUT в FPGA имели 4 входа, т.е. содержали 16 однобитовых ячеек памяти. Комбинация &amp;quot;4-входовый логический генератор и триггер&amp;quot; получила название &amp;quot;эквивалентная логическая ячейка&amp;quot; (''equivalent logic cell'') и часто используется для определения сложности схемы, хотя современные FPGA используют уже 6-входовые LUT.&lt;br /&gt;
&lt;br /&gt;
Несколько логических ячеек объединяются в конфигурируемые логические блоки (КЛБ, Configurable Logic Block, CLB). Между блоками КЛБ, размещёнными на кристалле в виде прямоугольной матрицы, проложены программируемые трассировочные линии, а по периметру микросхемы располагаются программируемые блоки ввода-выводв (БВВ).&lt;br /&gt;
&lt;br /&gt;
Соединение КЛЮ трассировочными линиями также может регулироваться. На пересечении вертикальных и горизонтальных линий расположены программируемые трассировочные матрицы (Programmable Routing Matrix), которые так же, как LUT, управляются конфигурационной памятью FPGA. В современных FPGA присутствует достаточное число трассироваочных линий разных типов (от локальных, соединяющих соседние КЛБ, до глобальных, пересекающих весь кристалл или его крупный регион). Как правило, числа трассировочных линий достаточно для выполнения всех соединений проекта, однако при высокой степени использования КЛБ и слишком сложных соединениях число трассировочных линий может оказаться недостаточным. Поэтому от FPGA не стоит ожидать 100%-го использования программируемых ячеек.&lt;br /&gt;
&lt;br /&gt;
Реализацию цифровой схемы в FPGA можно проиллюстрировать следующим образом:&lt;br /&gt;
&lt;br /&gt;
ВСТАВИТЬ РИСУНОК&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Что такое FPGA?&lt;br /&gt;
* Когда используется?&lt;br /&gt;
* В чем отличие от CPLD?&lt;br /&gt;
* Какие основные поставщики?&lt;br /&gt;
* Какие особенности при проектировании схем с исопльзованием FPGA?&lt;br /&gt;
* Общая структура FPGA&lt;br /&gt;
* Структура FPGA фирмы XILINX&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 17</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17"/>
				<updated>2020-11-23T17:59:11Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Пример 1. ТЗ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Примеры описаний схем для FPGA на отладочной плате с FPGA фирмы Xilinx&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Описание сипользуемой отладочной платы и модулей расширений ==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. ТЗ==&lt;br /&gt;
&lt;br /&gt;
Входной интерфейс: UART приемник.&lt;br /&gt;
Выходной интерфейс UART передатчик.&lt;br /&gt;
&lt;br /&gt;
Модуль должен уметь принимать и интерпретировать комманды с компьютера и отправлять данные обратно.&lt;br /&gt;
Модуль должен быть расширяемым, чтобы была возможность работать с пользовательским интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
# В каком формате приходят команды по UART (В виде некоторого кода, либо в виде текста (ASCII), который надо интерпретировать?&lt;br /&gt;
# Как должен выглядеть пользовательский интерфейс?&lt;br /&gt;
# UART передаёт сырые данные, без предобработки&lt;br /&gt;
# Какие дополнительные функции могли бы быть полезными&amp;lt;br/&amp;gt; a) Должен уметь отправлять хосту системные сообщения: занят/не готов принимать комманды и данные, не занят/готов, начало передачи данных, конец передачи данных&amp;lt;br/&amp;gt;b) Во время передачи данных все команды игнорируются&amp;lt;br/&amp;gt;c) загрузка начальных данных в память?&amp;lt;br/&amp;gt;d) ??&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Спецификация==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. VHDL описание==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Синтез==&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 17</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_17"/>
				<updated>2020-11-23T17:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Пример 1. ТЗ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Примеры описаний схем для FPGA на отладочной плате с FPGA фирмы Xilinx&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Описание сипользуемой отладочной платы и модулей расширений ==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. ТЗ==&lt;br /&gt;
&lt;br /&gt;
Входной интерфейс: UART приемник.&lt;br /&gt;
Выходной интерфейс UART передатчик.&lt;br /&gt;
&lt;br /&gt;
Модуль должен уметь принимать и интерпретировать комманды с компьютера и отправлять данные обратно.&lt;br /&gt;
Модуль должен быть расширяемым, чтобы была возможность работать с пользовательским интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
# В каком формате приходят команды по UART (В виде некоторого кода, либо в виде текста (ASCII), который надо интерпретировать?&lt;br /&gt;
# Как должен выглядеть пользовательский интерфейс?&lt;br /&gt;
# UART передаёт сырые данные, без предобработки&lt;br /&gt;
# Какие дополнительные функции могли бы быть полезными&amp;lt;br/&amp;gt; a) загрузка начальных данных в память?&amp;lt;br/&amp;gt;b) ??&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Спецификация==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. VHDL описание==&lt;br /&gt;
&lt;br /&gt;
== Слайд:Пример 1. Синтез==&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_14</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 14</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_14"/>
				<updated>2020-11-23T14:40:39Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Микроархитектура является критичной */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Верификация с использованием библиотеки UVVM.&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в UVVM ==&lt;br /&gt;
В среднем половина времени разработки для ПЛИС тратится на верификацию.&lt;br /&gt;
Мы знаем, что разработка архитектуры важна и для качества проекта, и для времени разработки.&lt;br /&gt;
Таким образом очевидно, что то же применимо и к тестбенчу.&lt;br /&gt;
Кроме того интересен факт того, что половина времени верификации тратится на отладку.&lt;br /&gt;
Это значит, что потенциально можно улучшить верификацию в общем и отладку в частности, и уменьшить временные затраты.&lt;br /&gt;
Методология UVVM (the open source Universal VHDL Verification Methodology) была разработана чтобы решить эту проблему и значительно уменьшить время верификации, тем самым улучшая качество продукта.&lt;br /&gt;
UVVM предоставляет очень простую и мощную архитектуру, которая позволяет разработчкам строить их собственные тестбенчи и тестовые сценарии намного быстрее.&lt;br /&gt;
Полезные ссылки:&lt;br /&gt;
* https://uvvm.org/ - сайт разработчиков UVVM&lt;br /&gt;
* https://github.com/UVVM/UVVM - репозиторий с исходным кодом UVVM&lt;br /&gt;
Далее рассмотрим на сколько просто понять и начать исползовать предложенную методологию.&lt;br /&gt;
Также рассмотрим как UVVM поможет нам сделать лучше тестбенчи и в то же время уменьшить рабочую нагрузку.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Разработка эффективных тестбенчей на VHDL ==&lt;br /&gt;
Основные поставщики САПР говорят о пробеле в верификации и предоставляют решения чтобы решить эту проблему.&lt;br /&gt;
К сожалению, они предпочитают решение, которое является сложной методологией, называемой UVM (Universal Verification Meyhofology).&lt;br /&gt;
Эта методолгоия требует изучения дополнительного языка SystemVerilog и покупкт очень дорогих инструментов. &lt;br /&gt;
Подовляющее большенство FPGA разработчиков в Европе используют VHDL для разработки и верификации (60% и 50% соответвенно во всём мире) и нет причин менять это.&lt;br /&gt;
&lt;br /&gt;
UVVM на самом деле копирует некоторые принципы из UVM и таким образом можно рассматривать UVVM как упрощённую VHDL версию UVM.&lt;br /&gt;
VHDL является достаточно мощным языком для большенства FPGA проектов и позволяет разработчикам продолжать использовать известный им язык, а затем шаг за шагом просто добавлять функциональность по мере необходимости.&lt;br /&gt;
Другими словами, ваш тесбенч и язык мягко и эффективно эволюционирует, но возможностей и функциональности самих по себе не достаточно: структура и архитектура яывляются ключевыми для абсолютно всех аспектов хорошей FPGA разработки.&lt;br /&gt;
&lt;br /&gt;
Люди часто говорят об эффективном написании кода, но это не правильный фокус. Написание кода - это маленький фрагмент сложного модуля, либо FPGA разработки, отличие одного подхода от другого имеет относительно небольшой эффект на общую эффективность разработки.&lt;br /&gt;
Что на самом деле важно:&lt;br /&gt;
* Обзорность, читаемость: простое понимание тест harness и того, как работает тестбенч.&lt;br /&gt;
* Модифицируемость, поддерживаемость и расширяемость: простота модификации или расширения функциональности.&lt;br /&gt;
* Отлаживаемость: хорошая поддержка для поиска корневой причины проблемы.&lt;br /&gt;
* Переиспользуемость: эффективное переиспользование между различными модулями тестбенчей, из block level тестбенчей в top level тестбенче, из одного проекта в другом, и между различными модулями верификации (Verification Components).&lt;br /&gt;
&lt;br /&gt;
Если мы углубимся в деталли шаг за шагом, то мы увидим что некоторая функциональность всегда требуется для любого хорошего тестбенча:&lt;br /&gt;
* Обработка предупреждений: чтобы гарантировать, что любая потенциальная проблема помечается и выдаётся соответствующее предупреждение. Эти проблемы также должны быть посчитаны, суммированы и обработаны раличными спосабами.&lt;br /&gt;
* Логирование:чтобы позволить выдавать простые сообщения о конкретных действиях, а также и детализированные сообщения о прогрессе. Может уменьшить время отладки в разы, когда перед предупреждением выдаётся детальная информация о транзакции в структурированном виде.&lt;br /&gt;
* Проверка значений сигналов: наиболее общая часть во всех тестбенчах – проверка реакций проаеряемой системы.&lt;br /&gt;
* Проверка сигналов во времени: важно, например, для обеспечения того, чтобы не было неожиданных импульсов, либо чтобы сигнал был стабильным в течение некоторого периода времени.&lt;br /&gt;
* Ожидание значений, либо изменений: необходимо, например, чтобы ожидать прерывания, либо определенного значения. Необходимо иметь таймаут, чтобы избежать вечного ожидания (зависания).&lt;br /&gt;
&lt;br /&gt;
Это всё и многое другое поддерживается  в библиотеке &amp;quot;UVVM Utility&amp;quot;, которая входит в UVVM и это является базисом для более продвинутых возможностей.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Пример использования UVVM==&lt;br /&gt;
Ниже продемонстрированы примеры некоторых комманд. Логирование и проверка значений выбраны как пример, поскольку это две из наиболее важных функций.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- In test sequencer as a noraml progress msg&lt;br /&gt;
log(&amp;quot;Checking Registers in UART&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 BV:   160ns   uart_tb   Checking Registers in UART&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Префикс &amp;quot;BV&amp;quot; может быть изменён пользователем.&lt;br /&gt;
Доступны также и более продвинутые варианты процедуры логирования, например контроль количества выводимых сообщений.&lt;br /&gt;
&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- In test sequencer as a section header&lt;br /&gt;
log(ID_LOG_HDR, &amp;quot;Checking Registers in UART&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 BV:   60ns   uart_tb   Check defaults for all registers&lt;br /&gt;
 BV:----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Предоставляются многочисленные варианты комманды ''check_value()'' для различных типов сигналов, с возвращаемым значением, либо без него, и некоторые более продвинутые опции.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- E.g. inside the test sequencer&lt;br /&gt;
check_value(dout, x&amp;quot;00&amp;quot;, ERROR, &amp;quot;dout must be default inactive&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Подтверждение того, что всё хорошо:&lt;br /&gt;
 BV:   60ns   irqc_tb  check_value(slv x00)=&amp;gt; OK.&lt;br /&gt;
                       dout must be default incative&lt;br /&gt;
Сообщение об ошибке:&lt;br /&gt;
 BV:====================================================&lt;br /&gt;
 BV: ERROR:&lt;br /&gt;
 BV:     192 ns.  irqc_tb&lt;br /&gt;
 BV:              value was: 'xFF'. expected 'x00'.&lt;br /&gt;
 BV:              dout must be default inactive&lt;br /&gt;
 BV:====================================================&lt;br /&gt;
&lt;br /&gt;
Библиотека UVVM Utility предоставляет также множество других полезных комманд, которые можно найти в PDF документе &amp;quot;Quick Reference&amp;quot; (util_quick_ref.pdf), который постовляется вместе с UVVM.&lt;br /&gt;
В этом документе можно найти обзор всех доступных комманд и типов, а также каждую команду с подробным описанием для всех возможными перегрузок, примерами и комментариями.&lt;br /&gt;
&lt;br /&gt;
Пример использования комманды ''await_value()'':&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
await_value(irq, '1', 0 ns, 2* C_CLK_PERIOD,&lt;br /&gt;
            ERROR, &amp;quot;Interrupt expected immediately&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
В данном примере процесс (например тест секвенсер), вызывая эту комманду, будет ожидать чтобы сигнал ''irq'' перешёл в состояние '1', самоее раннее через 0 нс и самое позднее через два периода тактового сигнала.&lt;br /&gt;
Если в течение этого времени условие не выполнится, то будет выдано сообщение об ошибке, которое будет содержать переданную строку, описывающую причину ошибки.&lt;br /&gt;
&lt;br /&gt;
Пример описания из документа &amp;quot;Quick Reference&amp;quot; для комманды ''await_value()'':&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Name !!Parameters and examples !!Description&lt;br /&gt;
|-&lt;br /&gt;
|await_value()&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target(sl),   exp(sl),  [match_strictness],  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(slv),  exp(slv), [match_strictness],  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(bool), exp(bool), min_time, max_time, [alert_level], msg, [scope, (etc.)]]&lt;br /&gt;
target(u),    exp(u),    min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(s),    exp(s),    min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(int),  exp(int),  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(real), exp(real), min_time, max_time, [alert_level], msg, [scope, (etc.)]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Examples'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
await_value(bol, true, 10 ns, 20 ns, “Waiting for bol to become true”);&lt;br /&gt;
await_value(slv8, “10101010”, MATCH_STD, 3 ns, 7 ns, WARNING, “Waiting for slv8 value”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Waits until the target signal equals the exp signal, or times out after max_time.&lt;br /&gt;
&lt;br /&gt;
An alert is asserted if the signal does not equal the expected value between min_time and max_time.&lt;br /&gt;
Note that if the value changes to the expected value at exactly max_time, the timeout gets precedence.&lt;br /&gt;
&lt;br /&gt;
''- match_strictness:'' Specifies if match needs to be exact or std_match , e.g. ‘H’ = ‘1’. (MATCH_EXACT, MATCH_STD)&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Defaults:'''&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
| alert_level ||ERROR&lt;br /&gt;
|-&lt;br /&gt;
|scope ||C_TB_SCOPE_DEFAULT&lt;br /&gt;
|-&lt;br /&gt;
|match_strictness ||MATCH_EXACT&lt;br /&gt;
|-&lt;br /&gt;
|msg_id ||ID_POS_ACK&lt;br /&gt;
|-&lt;br /&gt;
|msg_id_panel ||shared_msg_id_panel&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В левой колонке (Parameters and examples) показаны параметры процедуры, каждая строка соответсует одной перегрузке. И затем слудует два примера использования.&lt;br /&gt;
В крайней правой колонке даны комментарии и объяснения.&lt;br /&gt;
&lt;br /&gt;
Важно то, что тесбенч будет всегда сообщать как минимум о падении или успешном прохождении, но также предпочтительно выводить итоговый отчёт обо всех предупреждениях:&lt;br /&gt;
 ============================================================&lt;br /&gt;
 BV:  ***  SUMMARY OF ALL ALERTS  ***&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
 BV:                    REGARDED  EXPECTED  IGNORED  Comment?&lt;br /&gt;
 BV:    NOTE        :       0        0         0     ok&lt;br /&gt;
 BV:    TB_NOTE     :       0        0         0     ok&lt;br /&gt;
 BV:    WARNING     :       0        0         0     ok&lt;br /&gt;
 BV:    TB_WARNING  :       0        0         0     ok&lt;br /&gt;
 BV:    MANUAL_CHECK:       0        0         0     ok&lt;br /&gt;
 BV:    ERROR       :       0        0         0     ok&lt;br /&gt;
 BV:    TB_ERROR    :       0        0         0     ok&lt;br /&gt;
 BV:    FAILURE     :       0        0         0     ok&lt;br /&gt;
 BV:    TB_FAILURE  :       0        0         0     ok&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
 BV:  No mismatch between counted and expected serious alerts&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
&lt;br /&gt;
==Слайд:Начало работы с UVVM Utility Library==&lt;br /&gt;
Библиотеку UVVM с различными примерами, документацией и дополнительной информацией можно скачать из репозитория github https://github.com/UVVM/UVVM .&lt;br /&gt;
Ниже приведём список шагов, которые необходимо выполнить чтобы начать работу с UVVM Utility library:&lt;br /&gt;
# Скачать репозиторий https://github.com/UVVM/UVVM&lt;br /&gt;
# Скомпилировать UVVM Utility library&amp;lt;br/&amp;gt; a) В консоли вашего симулятора перейти в 'uvvm_util/script';&amp;lt;br/&amp;gt; b) Выполнить: 'do ../script/compile_src.do'&lt;br /&gt;
# Добавить библиотеку в ваш тестбенч, добавив следующие строки до декларации ''entity'' тестбенча&amp;lt;br/&amp;gt;library uvvm_util;&amp;lt;br/&amp;gt;context uvvm_util.uvvm_util_context;&lt;br /&gt;
# Теперь вы можете включить любую команду из данной библиотеки в ваш тестбенч (процесс, либо подпрограмму); например:&amp;lt;br/&amp;gt;log(&amp;quot;Hello world&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Замечание:&amp;lt;br/&amp;gt;&lt;br /&gt;
Библиотеки UVVM были проверены на Modelsim, Rivera-PRO и GHDL, также должны работать на Questa и Active-HDL и на любых других симуляторах совместимых с VHDL-2008.&lt;br /&gt;
Упомянутые скрипты были проверены на Modelsim.&lt;br /&gt;
GHDL предоставляет свои скрипты для UVVM.&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что САПР Xilinx ISE не поддерживает VHDL-2008. VHDL-2008 поддерживается более новой САПР Xilinx Vivado.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Структура и архитектура VHDL дизайна==&lt;br /&gt;
Во время проектирования цифрогового устройства инженеры очень сильно заботятся о наиболее критичных факторах для структуры и архитектуры проекта перечисленных ранее:&lt;br /&gt;
* обзорность, читаемость;&lt;br /&gt;
* модифицируемость, поддерживаемость и расширяемость;&lt;br /&gt;
* отлаживаемость;&lt;br /&gt;
* переиспользуемость.&lt;br /&gt;
&lt;br /&gt;
По этим причинам проекты разбиваются на более-менее автономные модули в независимой функциональность, такие как, например, UART, SPI, DMA контроллер, ADC и т.д.&lt;br /&gt;
&lt;br /&gt;
Эти модули (или VHDL enities/components) получают комманды от программы (software) и затем выполняют требуемые задачи, пока программа продолжает выполнение и делает что-то параллельно и совершенно независимо.&lt;br /&gt;
Если что-то идёт не так, либо модуль нуждается во внимании, то он говорит об этом (обычно с помощью прерывания (interrupt)). В этом подходе хорошо то, что верхний уровень FPGA проекта в таком случае легко понять.&lt;br /&gt;
Мы видим модули и знаем, что они делают, интерфейсы модуля стандартизированы (например AXI4-lite или Avalon) и запущенная программа контролирует это всё с помощью команд высокого уровня.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Структура и архитектура верификации==&lt;br /&gt;
Очевидно, что структура проекта рассмотренная ранее является чрезвычайно эффективной и способствует хорошему качеству проекта.&lt;br /&gt;
Однако для VHDL тестбенчей не было такой системы, либо методологии.&lt;br /&gt;
Это основная причина того, что большинство тесбенчей довольно неструктурированы, и основная причина разработки UVVM.&lt;br /&gt;
&lt;br /&gt;
UVVM отражает структуру дизайна ЦС. В результате мы имеем архитектуру тестбенча, которую легко понять, при этом сохраняются преимущества хорошей можульной стркутуры:&lt;br /&gt;
* Верификационные модули с хорошо понимаемой функциональностью интерфейсом;&lt;br /&gt;
* Стандартизированная система шин от секвенсера к верификационному модулю;&lt;br /&gt;
* Стандартизированный интерфейс шин на для всех верификационных модулей.&lt;br /&gt;
&lt;br /&gt;
Верификационные модули в UVVM называются VVC (VHDL Verification Components). &lt;br /&gt;
На рисунке ниже 'SBI_VVC' – Simple Bus Interface, но также это мог бы быть интерфейс 'AXI4-lite' или 'Avalon'.&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:UVVM UART TB ex1.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Архитектура UVVM очень похожа на архитектуру FPGA дизайна с внешним программным секвенсером упомянутом ранее.&lt;br /&gt;
Тестовый секвсенсер раздаёт команды различным VVC, так же, как и программа раздаёт команды FPGA модулям.&lt;br /&gt;
Затем VVC делают то, что им говорят – так же, как и модули в FPGA. Обычно это означает обработку доступа к их физическому интерфейсу.&lt;br /&gt;
Например, FPGA модуль может передавать некоторые данные, и на самом деле VVC может делать то же самое.&lt;br /&gt;
Для нашего примера UART тестбенча, сиквенсер может послать команду на UART TX чтобы передать байт на вход UART RX.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Интерфейс тестового секвенсера==&lt;br /&gt;
В UVVM существует два пути для доступа к интерфейсу DUT (Device Under Test). Наиболее простой это использование базовых процедур BFM (Bus Functional Model - функциональная модель шины),&lt;br /&gt;
как показано в строке кода ниже, где последний параметр служит как комментарий к строке кода, и при необходимости записывается в лог.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- UART transmission command — as a BFM&lt;br /&gt;
uart_transmit(x&amp;quot;4C&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Эта процедура будет выполнена напрямую из процесса, где она была запущена, и применит данные x4C на шину UART RX, используя UART протокол.&lt;br /&gt;
Это значит, что если тестовый секвенсер вызывается данной процедурой, то он применит UART протокол бит за битом. Это займёт некоторое время, в течение которого тестовый секвенсер юудет занят и не сможет делать ничего другого.&lt;br /&gt;
&lt;br /&gt;
Более продвинутый вариант называется CDM (Command Distribution Method – метод распределённых комманд). В этом случае, когда секвенсер вызывает данную процедуру, команда немедленно отправляется в VVC,&lt;br /&gt;
который задан целевым адресом (помечен красным цветом), который определяется именем и номером экземпляра VVC, который должен выполнить эту команду.&lt;br /&gt;
 &amp;lt;i style=&amp;quot;color:grey;&amp;quot;&amp;gt;-- UART transmission command — using VVCs&amp;lt;/i&amp;gt;&lt;br /&gt;
 uart_transmit(&amp;lt;i style=&amp;quot;color:red;&amp;quot;&amp;gt;UART_TX_VVCT,1&amp;lt;/i&amp;gt;,x&amp;quot;4C&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Передача команды от тестового секвенсера в VVC не занимает времени, это значит что секвенсер освобождается немедленно и может делать что-то другое, например инициировать доступ по другому интерфейсу.&lt;br /&gt;
VVC позаботится о занимающем время протоколе UART.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совершенно маленький тест===&lt;br /&gt;
Код ниже показывает как можно написать очень маленький тест чтобы проверить одновременный доступ по всем интерфейсам.&lt;br /&gt;
Этот пример из немного другого тестбенча, здесь VVC для UART TX и RX объединены в общий VVC для более удобного использования.&lt;br /&gt;
Для этого случая было решено использовать дополнительный параметр для обозначения канала (RX или TX).&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
sbi_write(SBI_VVCT,1, C_ADDR_TX_DATA, x&amp;quot;A0&amp;quot;, &amp;quot;Send byte UART TX&amp;quot;);&lt;br /&gt;
uart_expect(UART_VVCT,1,RX, x&amp;quot;A0&amp;quot;, &amp;quot;Check byte from UART TX&amp;quot;);&lt;br /&gt;
uart_transmit(UART_VVCT,1,TX, x&amp;quot;A1&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
wait for C_FRAME_PERIOD;&lt;br /&gt;
sbi_check(SBI_VVCT,1, C_ADDR_RX_DATA, x&amp;quot;A1&amp;quot;, &amp;quot;Check UART RX byte&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Микроархитектура является критичной===&lt;br /&gt;
Во любом FPGA проекте важно иметь хорошую архитектуру верхнего уровня, однако этого недостаточно.&lt;br /&gt;
Не менее важно иметь хорошую микроархитектуру на всех уровнях.&lt;br /&gt;
Это применимо и для тестбенчей, и это значит, что архитектура VVC должна быть так же проста для понимания, модификации и переиспользования.&lt;br /&gt;
И опять же – стандартизация была бы замечательна.&lt;br /&gt;
Базовый компонент VVC состоит из блоков в желтом прямоугольнике, и это применимо абсолютно ко всем VVC.&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:UVVM Structured VVC architecture.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VVC будет смотреть на CDM выше и принимать только команды, которые являются целевыми для конкретно этого VVC.&lt;br /&gt;
Затем он поместит команду ''uart_transmit()'' в очередь и отпустит тестовый секвенсер.&lt;br /&gt;
''Executor'' будет выбирать команды из очереди, увидит что это команда ''uart_transmit()'', и затем выполнит эту команду с помощью BFM используя переданные параметры.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Стркутурированные расширения VVC==&lt;br /&gt;
Очень структурированная архитектура VVC даёт дополнительное преимущество.&lt;br /&gt;
Это преимущество в том, что легко добавлять более структурированную функциональность: неважно, либо для более сложных интерфейсов, либо чтобы просто включить более удобную функциональность (как, например, различные проверки).&lt;br /&gt;
Протокол с раздельными транзакциями, такой как ''Avalon MM'', часто приводит к хаотичным тестбенчам, поскольку там может быть несколько запросов на чтение до получения первого ответа на чтение.&lt;br /&gt;
Используя же VVC архитектуру рассмотренную ранее и это можно сделать достаточно просто и очень структурировано.&lt;br /&gt;
Базовый 'executor' выбирает команды из очереди и знает, что это доступ с разделёнными транзакциями. Таким образом он вызывает процедуру запроса BFM, и в то же время передаёт команду чтения в следующую очередь.&lt;br /&gt;
Ответный 'executor' заберёт эту команду и затем просто вызовет BFM проедуру для получения ответа на чтение и будет ждать ответа.&lt;br /&gt;
Таким образом, может быть любое число запросов на чтение между любыми ответами на чтение, и пр иэтом всё достаточно просто и наглядно.&lt;br /&gt;
&lt;br /&gt;
UVVM предоставляет скрипт для того чтобы сгенерировать VVC для новых интерфейсов. Сгенерированный код – это шаблон, в котором ясно отмечено, где пользователю необходимо добавить его собственные BFM и различные адаптации.&lt;br /&gt;
Учитывая процедуры BFM, которые в любом случае пользователь должен описать для любого тестбенча, создание VVC с нуля должно занять около 30 минут.&lt;br /&gt;
Если верить Doulis, то немного дольше в первый раз, но возможно 30 минут хватит в следующий раз.&lt;br /&gt;
&lt;br /&gt;
Подводя итог, наиболее важные части тестбенча следующие:&lt;br /&gt;
* основная инфраструктура тестбенча – с логированием, предупреждениями, проверками, ожиданиями и т.д., и возможно BFM для обработки доступа по интерфейсам;&lt;br /&gt;
* тестовый ''harness'' верхнего уровня – для того, чтобы получить полный обзор;&lt;br /&gt;
* верификационные модули (где необходимо) – понимание и создание;&lt;br /&gt;
* тесты – написание актуальных тестов и понимание полной последовательности событий.&lt;br /&gt;
Первый пункт лежит на библиотеке UVVM Utility.&lt;br /&gt;
Довольно структурированная архитектура (на верхнем уровне и внутри VVC) заботится о следующих двух пунктах.&lt;br /&gt;
В то время, как последний и вероятно самый важный пункт (поскольку здесь надо будет потратить большую часть времени) выполняется, позволяя высокоуровневым и легко понимаемым командам контролировать весь тестбенч, включая одновременную активность на многих интерфейсах.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Стандартизация==&lt;br /&gt;
Для FPGA дизайна, сандартизация в течение нескольких десятилетий, используя хорошую концепцию архитектуры с регистрами управления и состояния, системой шин, автономными модулями и высокоуровневыми программными командами, привела к эффективной методолгии проектирования устройст на FPGA, а также к эффективной разработке программного обеспечения, поскольку программистам не нужно разбираться в деталях модулей, которыми они управляют.&lt;br /&gt;
Это может казаться очевидным, что для тестбенчей проектов на FPGA мы имеем похожий сценарий, где секвенсер контроллирует множество интерфейсов.&lt;br /&gt;
Однако VHDL тестбенчи не были стандартизированы до UVVM.&lt;br /&gt;
Нже список того, что предоставляет UVVM , и даже стандартизирует наиболее важные аспекты:&lt;br /&gt;
* стандарт инфраструктуры тестбенча;&lt;br /&gt;
* стандарт установки и использования BFM;&lt;br /&gt;
* стандартный модуль управления (VVC) и интерфейс состояния;&lt;br /&gt;
* стандартный протокол от секвенсера к VVC;&lt;br /&gt;
* стандартные команды для секвенсера (для общих задач);&lt;br /&gt;
* стандарт внутренней архитектуры VVC;&lt;br /&gt;
* стандартная система очередей команд;&lt;br /&gt;
* стандартная обработка многопоточных интерфейсов (например с разделёнными транзакциями);&lt;br /&gt;
* стандартные методы синхронизации между VVC (или люыми другими процессами);&lt;br /&gt;
* стандартное ожидание и таймауты;&lt;br /&gt;
* стандарт сообщений (логирвания) и обработки предупреждений;&lt;br /&gt;
* стандарт многоадресных и широковещательных команд;&lt;br /&gt;
* стандартная поддержка отдладки;&lt;br /&gt;
* повторное использование стандартизированного тестбенча.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Работа с UVVM VVC Framework==&lt;br /&gt;
Ранее мы рассмотрели как начать работу с UVVM Utility library, рассмотрели общую концепцию работы с VVC и общую структуру тестбенча.&lt;br /&gt;
В UVVM  входит следующий набор библиотек.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Library !!Description !!Location&lt;br /&gt;
|-&lt;br /&gt;
|UVVM Utility Library&lt;br /&gt;
|UVVM Utility Library is an open source VHDL test bench (TB) infrastructure library for verification of FPGA and ASIC.&lt;br /&gt;
Used by VVC FRAMEWORK as a common testbench infrastructure.&lt;br /&gt;
&lt;br /&gt;
For more information on UVVM Utility Library and latest release please visit&lt;br /&gt;
http://www.bitvis.no/products/uvvm-utility-library/&lt;br /&gt;
For UVVM v0.2.0 the UVVM Utility Library is compatible with Bitvis Utility Library (for VHDL 2008), and hence the current documentation for Bitvis Utility Library still applies.&lt;br /&gt;
&lt;br /&gt;
New features of UVVM Utility Library will be described soon.&lt;br /&gt;
| &amp;lt;install_dir&amp;gt;/uvvm_util&lt;br /&gt;
|-&lt;br /&gt;
|UVVM VVC Framework || The library for the VVC Framework with the functionality described in this document. ||&amp;lt;install_dir&amp;gt;/uvvm_vvc_framework&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_sbi ||VIP including a BFM and VVC for a simple bus interface (SBI). This VVC is intended as a template for writing new VVCs and for understanding the VVC functionality.&lt;br /&gt;
&lt;br /&gt;
This library is also used in the provided testbench example.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_sbi&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_uart ||VIP including a BFM and VVC for a simple UART interface. This VVC may be used as a template for writing new VVCs for multi-channel interfaces.&lt;br /&gt;
&lt;br /&gt;
This library is also used in the provided testbench example.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_uart&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_uart ||This is a simple UART design that is being used as a DUT for the provided example testbench ||&amp;lt;install_dir&amp;gt;/bitvis_uart&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_axilite ||VIP including BFM and VVC. This simple AXI4-Lite BFM and VVC is provided as a kick start for users to make their own testbenches using VVC FRAMEWORK, as many designs today have an AXI4-lite interface.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_axilite&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_avalon_mm ||VIP including a BFM and VVC for an Avalon-MM interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_avalon_mm&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_axistream ||VIP including a BFM and VVC for a simple AXI-Stream interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_axistream&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_i2c ||VIP including a BFM and VVC for a simple I2C interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_i2c&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_spi ||VIP including a BFM and VVC for a simple SPI interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_spi&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_gpio ||VIP including a BFM and a VVC for a simple GPIO interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_gpio&lt;br /&gt;
|-&lt;br /&gt;
|uvvm_osvvm ||A UVVM compatible version of OSVVM ||&amp;lt;install_dir&amp;gt;/uvvm_osvvm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для работы с VVC нам понадобится UVVM VVC Framework, который является частью UVVM.&lt;br /&gt;
Установка и компиляция VVC Framework&lt;br /&gt;
# Скачать репозиторий https://github.com/UVVM/UVVM&lt;br /&gt;
# Если UVVM был скачен как ZIP файл, то следует распаковать его в директорию по вашему выбору, но при этом следует убедиться, что все части UVVM находятся на своих местах, как показано в таблице выше.&lt;br /&gt;
# Скомпилировать все библиотеки UVVM&amp;lt;br/&amp;gt; В консоли вашего симулятора выполнить: 'do &amp;lt;install_dir&amp;gt;/script/compile_all.do &amp;lt;install_dir&amp;gt;/script &amp;lt;compile_dir&amp;gt;' , где &amp;lt;install_dir&amp;gt; - выбранная в предыдущем пункте директория, где находятся файлы UVVM, &amp;lt;compile_dir&amp;gt; - директория, куда следуюет поместить файлы компиляции, может быть директорией проекта, можно и не указывать &amp;lt;compile_dir&amp;gt;, тогда по умолчанию файлы компиляции будут расположены рядом с исходными файлами.&lt;br /&gt;
&lt;br /&gt;
Если вы хотите запустить пример тестбенча, который идёт в комплекте с UVVM, то вам следует выполнить несколько дополнительных действий&lt;br /&gt;
# Скомпилировать DUT и тестбенч для UART&lt;br /&gt;
# Запустить пример тестбенча для UART&lt;br /&gt;
&lt;br /&gt;
==Слайд:Заинтересованность в UVVM==&lt;br /&gt;
Международные игроки с сильным интересом в VHDL и верификации сейчас принимают UVVM.&lt;br /&gt;
Два основных симулятора VHDL, Aldec и Mentor Graphics, оба показывают большой интерес, Aldec уже провёл несколько вебинаров по UVVM (https://www.aldec.com/en/downloads/private/920 и https://www.aldec.com/en/downloads/private/1158).&lt;br /&gt;
И Mentor включил презентации UVVM в их &amp;quot;FPGA verification day&amp;quot; (https://trias-mikro.de/en/dates/fpga-verification-day/).&lt;br /&gt;
Doulos, лучший международный постовщик тренингов для FPGA и ASIC методологий, рекомендует UVVM для FPGA тестбенчей.&lt;br /&gt;
Последним свидетельством того, что UVVM на самом деле набирает обороты, является то, что ESA (European Space Agency – Европейское космическое агенство) теперь UVVM  спомощью контракта на более чем 250 000 евро на расширение UVVM, и может рекомендовать своим постовщикам использовать UVVM для верификации FPGA проектов (https://indico.esa.int/event/232/contributions/2159/).&lt;br /&gt;
То, что UVVM набирает обороты – это сильное преуменьшение. Со второго квартала 2016 по второй квартал 2018 года (между двумя исследованиями Wilson Research Group https://www.mentor.com/products/fv/events/the-2018-wilson-research-group-asic-and-fpga-functional-verification-study) количество пользователей UVVM во всём мире резко вырасло – с долей процента в 2016 году до 10% от всех FPGA разработчиков во втором квартале 2018 года и продолжает расти.&lt;br /&gt;
&lt;br /&gt;
UVVM поддерживается любыми совместимыми с VHDL-2008 симуляторами. Для опенсорс сообщество будет хорошей новостью то, что GHDL был обновлён для работы с UVVM (https://github.com/ghdl/ghdl).&lt;br /&gt;
&lt;br /&gt;
Дополнительно был создан новый репозиторий для внешнего вклада в UVVM(https://github.com/UVVM/UVVM_Community_VIPs) и обмена верификационными компонентами.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Текущие и будущие расширения==&lt;br /&gt;
Проект европейского космического агенства предоставит несколько новых и важных функций для UVVM. Некоторые уже были предоставлены,&lt;br /&gt;
например, легко используемый, гибкий и конфигурируемый ''Scoreboard'', и некоторые всё ещё разрабатываются, такие как ''watchdogs'',&lt;br /&gt;
механизм инжекции ошибок, улучшенный контроль рандомизации и функционального покрытия, и более удобная система подключения DUT моделей к ''harness'' тестбенча.&lt;br /&gt;
&lt;br /&gt;
Наиболее важная функциональность, которая скоро появится – иерархические верификационные компоненты.&lt;br /&gt;
Это позволит решить проблему использования ''scoreboards'' для проверки данных, которые проходят через DUT,&lt;br /&gt;
когда слой коммуникации различный с двух сторон, например, когда ввод с одной стороны ориентирован на слова или байты,&lt;br /&gt;
как в AXI4-lite или Avalon, а выход с другой стороны ориентирован на пакеты, как например Ethernet.&lt;br /&gt;
Ирерархические верификационные компоненты позволят легко обрабатывать такие сценарии.&lt;br /&gt;
&lt;br /&gt;
Кроме того, UVVM постоянно обновляется, добовляя незначительную функциональность за пределами проекта ESA, и в настоящее время разрабатываются планы для дальнейших небольших и крупных расширений.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Выводы==&lt;br /&gt;
Структурированная верификация является очень важной  для эффективности, качества и повторного использования.&lt;br /&gt;
UVVM – открытый проект, который предоставляет очень струкртурированную методологию  и библиотеку.&lt;br /&gt;
UVVM даже предоставляет открытые VVC и BFM для UART, I2C, SPI, SBI, AXI4-Lite, AXI4-steam, GPIO и Avalon MM.&lt;br /&gt;
Это даёт возможность для отличного старта любого проекта, который использует эти (либо аналогичные) периферийные устройства.&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	<entry>
		<id>http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_14</id>
		<title>Проектирование цифровых систем на языках описания аппаратуры/Лекция 14</title>
		<link rel="alternate" type="text/html" href="http://www.simhard.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_14"/>
				<updated>2020-11-23T14:39:17Z</updated>
		
		<summary type="html">&lt;p&gt;Yura: /* Слайд:Работа с UVVM VVC Framework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ПЦСЯОА TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobook&amp;quot; headingmark=&amp;quot;Слайд:&amp;quot; incmark=&amp;quot;:step&amp;quot; scaled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
;title: Верификация с использованием библиотеки UVVM.&lt;br /&gt;
;author: Ланкевич Ю.Ю.&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд:Введение в UVVM ==&lt;br /&gt;
В среднем половина времени разработки для ПЛИС тратится на верификацию.&lt;br /&gt;
Мы знаем, что разработка архитектуры важна и для качества проекта, и для времени разработки.&lt;br /&gt;
Таким образом очевидно, что то же применимо и к тестбенчу.&lt;br /&gt;
Кроме того интересен факт того, что половина времени верификации тратится на отладку.&lt;br /&gt;
Это значит, что потенциально можно улучшить верификацию в общем и отладку в частности, и уменьшить временные затраты.&lt;br /&gt;
Методология UVVM (the open source Universal VHDL Verification Methodology) была разработана чтобы решить эту проблему и значительно уменьшить время верификации, тем самым улучшая качество продукта.&lt;br /&gt;
UVVM предоставляет очень простую и мощную архитектуру, которая позволяет разработчкам строить их собственные тестбенчи и тестовые сценарии намного быстрее.&lt;br /&gt;
Полезные ссылки:&lt;br /&gt;
* https://uvvm.org/ - сайт разработчиков UVVM&lt;br /&gt;
* https://github.com/UVVM/UVVM - репозиторий с исходным кодом UVVM&lt;br /&gt;
Далее рассмотрим на сколько просто понять и начать исползовать предложенную методологию.&lt;br /&gt;
Также рассмотрим как UVVM поможет нам сделать лучше тестбенчи и в то же время уменьшить рабочую нагрузку.&lt;br /&gt;
&lt;br /&gt;
== Слайд:Разработка эффективных тестбенчей на VHDL ==&lt;br /&gt;
Основные поставщики САПР говорят о пробеле в верификации и предоставляют решения чтобы решить эту проблему.&lt;br /&gt;
К сожалению, они предпочитают решение, которое является сложной методологией, называемой UVM (Universal Verification Meyhofology).&lt;br /&gt;
Эта методолгоия требует изучения дополнительного языка SystemVerilog и покупкт очень дорогих инструментов. &lt;br /&gt;
Подовляющее большенство FPGA разработчиков в Европе используют VHDL для разработки и верификации (60% и 50% соответвенно во всём мире) и нет причин менять это.&lt;br /&gt;
&lt;br /&gt;
UVVM на самом деле копирует некоторые принципы из UVM и таким образом можно рассматривать UVVM как упрощённую VHDL версию UVM.&lt;br /&gt;
VHDL является достаточно мощным языком для большенства FPGA проектов и позволяет разработчикам продолжать использовать известный им язык, а затем шаг за шагом просто добавлять функциональность по мере необходимости.&lt;br /&gt;
Другими словами, ваш тесбенч и язык мягко и эффективно эволюционирует, но возможностей и функциональности самих по себе не достаточно: структура и архитектура яывляются ключевыми для абсолютно всех аспектов хорошей FPGA разработки.&lt;br /&gt;
&lt;br /&gt;
Люди часто говорят об эффективном написании кода, но это не правильный фокус. Написание кода - это маленький фрагмент сложного модуля, либо FPGA разработки, отличие одного подхода от другого имеет относительно небольшой эффект на общую эффективность разработки.&lt;br /&gt;
Что на самом деле важно:&lt;br /&gt;
* Обзорность, читаемость: простое понимание тест harness и того, как работает тестбенч.&lt;br /&gt;
* Модифицируемость, поддерживаемость и расширяемость: простота модификации или расширения функциональности.&lt;br /&gt;
* Отлаживаемость: хорошая поддержка для поиска корневой причины проблемы.&lt;br /&gt;
* Переиспользуемость: эффективное переиспользование между различными модулями тестбенчей, из block level тестбенчей в top level тестбенче, из одного проекта в другом, и между различными модулями верификации (Verification Components).&lt;br /&gt;
&lt;br /&gt;
Если мы углубимся в деталли шаг за шагом, то мы увидим что некоторая функциональность всегда требуется для любого хорошего тестбенча:&lt;br /&gt;
* Обработка предупреждений: чтобы гарантировать, что любая потенциальная проблема помечается и выдаётся соответствующее предупреждение. Эти проблемы также должны быть посчитаны, суммированы и обработаны раличными спосабами.&lt;br /&gt;
* Логирование:чтобы позволить выдавать простые сообщения о конкретных действиях, а также и детализированные сообщения о прогрессе. Может уменьшить время отладки в разы, когда перед предупреждением выдаётся детальная информация о транзакции в структурированном виде.&lt;br /&gt;
* Проверка значений сигналов: наиболее общая часть во всех тестбенчах – проверка реакций проаеряемой системы.&lt;br /&gt;
* Проверка сигналов во времени: важно, например, для обеспечения того, чтобы не было неожиданных импульсов, либо чтобы сигнал был стабильным в течение некоторого периода времени.&lt;br /&gt;
* Ожидание значений, либо изменений: необходимо, например, чтобы ожидать прерывания, либо определенного значения. Необходимо иметь таймаут, чтобы избежать вечного ожидания (зависания).&lt;br /&gt;
&lt;br /&gt;
Это всё и многое другое поддерживается  в библиотеке &amp;quot;UVVM Utility&amp;quot;, которая входит в UVVM и это является базисом для более продвинутых возможностей.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Пример использования UVVM==&lt;br /&gt;
Ниже продемонстрированы примеры некоторых комманд. Логирование и проверка значений выбраны как пример, поскольку это две из наиболее важных функций.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- In test sequencer as a noraml progress msg&lt;br /&gt;
log(&amp;quot;Checking Registers in UART&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 BV:   160ns   uart_tb   Checking Registers in UART&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Префикс &amp;quot;BV&amp;quot; может быть изменён пользователем.&lt;br /&gt;
Доступны также и более продвинутые варианты процедуры логирования, например контроль количества выводимых сообщений.&lt;br /&gt;
&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- In test sequencer as a section header&lt;br /&gt;
log(ID_LOG_HDR, &amp;quot;Checking Registers in UART&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 BV:   60ns   uart_tb   Check defaults for all registers&lt;br /&gt;
 BV:----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Предоставляются многочисленные варианты комманды ''check_value()'' для различных типов сигналов, с возвращаемым значением, либо без него, и некоторые более продвинутые опции.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- E.g. inside the test sequencer&lt;br /&gt;
check_value(dout, x&amp;quot;00&amp;quot;, ERROR, &amp;quot;dout must be default inactive&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Подтверждение того, что всё хорошо:&lt;br /&gt;
 BV:   60ns   irqc_tb  check_value(slv x00)=&amp;gt; OK.&lt;br /&gt;
                       dout must be default incative&lt;br /&gt;
Сообщение об ошибке:&lt;br /&gt;
 BV:====================================================&lt;br /&gt;
 BV: ERROR:&lt;br /&gt;
 BV:     192 ns.  irqc_tb&lt;br /&gt;
 BV:              value was: 'xFF'. expected 'x00'.&lt;br /&gt;
 BV:              dout must be default inactive&lt;br /&gt;
 BV:====================================================&lt;br /&gt;
&lt;br /&gt;
Библиотека UVVM Utility предоставляет также множество других полезных комманд, которые можно найти в PDF документе &amp;quot;Quick Reference&amp;quot; (util_quick_ref.pdf), который постовляется вместе с UVVM.&lt;br /&gt;
В этом документе можно найти обзор всех доступных комманд и типов, а также каждую команду с подробным описанием для всех возможными перегрузок, примерами и комментариями.&lt;br /&gt;
&lt;br /&gt;
Пример использования комманды ''await_value()'':&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
await_value(irq, '1', 0 ns, 2* C_CLK_PERIOD,&lt;br /&gt;
            ERROR, &amp;quot;Interrupt expected immediately&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
В данном примере процесс (например тест секвенсер), вызывая эту комманду, будет ожидать чтобы сигнал ''irq'' перешёл в состояние '1', самоее раннее через 0 нс и самое позднее через два периода тактового сигнала.&lt;br /&gt;
Если в течение этого времени условие не выполнится, то будет выдано сообщение об ошибке, которое будет содержать переданную строку, описывающую причину ошибки.&lt;br /&gt;
&lt;br /&gt;
Пример описания из документа &amp;quot;Quick Reference&amp;quot; для комманды ''await_value()'':&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Name !!Parameters and examples !!Description&lt;br /&gt;
|-&lt;br /&gt;
|await_value()&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target(sl),   exp(sl),  [match_strictness],  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(slv),  exp(slv), [match_strictness],  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(bool), exp(bool), min_time, max_time, [alert_level], msg, [scope, (etc.)]]&lt;br /&gt;
target(u),    exp(u),    min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(s),    exp(s),    min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(int),  exp(int),  min_time, max_time, [alert_level], msg, [scope, (etc.)]&lt;br /&gt;
target(real), exp(real), min_time, max_time, [alert_level], msg, [scope, (etc.)]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Examples'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
await_value(bol, true, 10 ns, 20 ns, “Waiting for bol to become true”);&lt;br /&gt;
await_value(slv8, “10101010”, MATCH_STD, 3 ns, 7 ns, WARNING, “Waiting for slv8 value”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
Waits until the target signal equals the exp signal, or times out after max_time.&lt;br /&gt;
&lt;br /&gt;
An alert is asserted if the signal does not equal the expected value between min_time and max_time.&lt;br /&gt;
Note that if the value changes to the expected value at exactly max_time, the timeout gets precedence.&lt;br /&gt;
&lt;br /&gt;
''- match_strictness:'' Specifies if match needs to be exact or std_match , e.g. ‘H’ = ‘1’. (MATCH_EXACT, MATCH_STD)&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Defaults:'''&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
| alert_level ||ERROR&lt;br /&gt;
|-&lt;br /&gt;
|scope ||C_TB_SCOPE_DEFAULT&lt;br /&gt;
|-&lt;br /&gt;
|match_strictness ||MATCH_EXACT&lt;br /&gt;
|-&lt;br /&gt;
|msg_id ||ID_POS_ACK&lt;br /&gt;
|-&lt;br /&gt;
|msg_id_panel ||shared_msg_id_panel&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В левой колонке (Parameters and examples) показаны параметры процедуры, каждая строка соответсует одной перегрузке. И затем слудует два примера использования.&lt;br /&gt;
В крайней правой колонке даны комментарии и объяснения.&lt;br /&gt;
&lt;br /&gt;
Важно то, что тесбенч будет всегда сообщать как минимум о падении или успешном прохождении, но также предпочтительно выводить итоговый отчёт обо всех предупреждениях:&lt;br /&gt;
 ============================================================&lt;br /&gt;
 BV:  ***  SUMMARY OF ALL ALERTS  ***&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
 BV:                    REGARDED  EXPECTED  IGNORED  Comment?&lt;br /&gt;
 BV:    NOTE        :       0        0         0     ok&lt;br /&gt;
 BV:    TB_NOTE     :       0        0         0     ok&lt;br /&gt;
 BV:    WARNING     :       0        0         0     ok&lt;br /&gt;
 BV:    TB_WARNING  :       0        0         0     ok&lt;br /&gt;
 BV:    MANUAL_CHECK:       0        0         0     ok&lt;br /&gt;
 BV:    ERROR       :       0        0         0     ok&lt;br /&gt;
 BV:    TB_ERROR    :       0        0         0     ok&lt;br /&gt;
 BV:    FAILURE     :       0        0         0     ok&lt;br /&gt;
 BV:    TB_FAILURE  :       0        0         0     ok&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
 BV:  No mismatch between counted and expected serious alerts&lt;br /&gt;
 BV:  =======================================================&lt;br /&gt;
&lt;br /&gt;
==Слайд:Начало работы с UVVM Utility Library==&lt;br /&gt;
Библиотеку UVVM с различными примерами, документацией и дополнительной информацией можно скачать из репозитория github https://github.com/UVVM/UVVM .&lt;br /&gt;
Ниже приведём список шагов, которые необходимо выполнить чтобы начать работу с UVVM Utility library:&lt;br /&gt;
# Скачать репозиторий https://github.com/UVVM/UVVM&lt;br /&gt;
# Скомпилировать UVVM Utility library&amp;lt;br/&amp;gt; a) В консоли вашего симулятора перейти в 'uvvm_util/script';&amp;lt;br/&amp;gt; b) Выполнить: 'do ../script/compile_src.do'&lt;br /&gt;
# Добавить библиотеку в ваш тестбенч, добавив следующие строки до декларации ''entity'' тестбенча&amp;lt;br/&amp;gt;library uvvm_util;&amp;lt;br/&amp;gt;context uvvm_util.uvvm_util_context;&lt;br /&gt;
# Теперь вы можете включить любую команду из данной библиотеки в ваш тестбенч (процесс, либо подпрограмму); например:&amp;lt;br/&amp;gt;log(&amp;quot;Hello world&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Замечание:&amp;lt;br/&amp;gt;&lt;br /&gt;
Библиотеки UVVM были проверены на Modelsim, Rivera-PRO и GHDL, также должны работать на Questa и Active-HDL и на любых других симуляторах совместимых с VHDL-2008.&lt;br /&gt;
Упомянутые скрипты были проверены на Modelsim.&lt;br /&gt;
GHDL предоставляет свои скрипты для UVVM.&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что САПР Xilinx ISE не поддерживает VHDL-2008. VHDL-2008 поддерживается более новой САПР Xilinx Vivado.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Структура и архитектура VHDL дизайна==&lt;br /&gt;
Во время проектирования цифрогового устройства инженеры очень сильно заботятся о наиболее критичных факторах для структуры и архитектуры проекта перечисленных ранее:&lt;br /&gt;
* обзорность, читаемость;&lt;br /&gt;
* модифицируемость, поддерживаемость и расширяемость;&lt;br /&gt;
* отлаживаемость;&lt;br /&gt;
* переиспользуемость.&lt;br /&gt;
&lt;br /&gt;
По этим причинам проекты разбиваются на более-менее автономные модули в независимой функциональность, такие как, например, UART, SPI, DMA контроллер, ADC и т.д.&lt;br /&gt;
&lt;br /&gt;
Эти модули (или VHDL enities/components) получают комманды от программы (software) и затем выполняют требуемые задачи, пока программа продолжает выполнение и делает что-то параллельно и совершенно независимо.&lt;br /&gt;
Если что-то идёт не так, либо модуль нуждается во внимании, то он говорит об этом (обычно с помощью прерывания (interrupt)). В этом подходе хорошо то, что верхний уровень FPGA проекта в таком случае легко понять.&lt;br /&gt;
Мы видим модули и знаем, что они делают, интерфейсы модуля стандартизированы (например AXI4-lite или Avalon) и запущенная программа контролирует это всё с помощью команд высокого уровня.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Структура и архитектура верификации==&lt;br /&gt;
Очевидно, что структура проекта рассмотренная ранее является чрезвычайно эффективной и способствует хорошему качеству проекта.&lt;br /&gt;
Однако для VHDL тестбенчей не было такой системы, либо методологии.&lt;br /&gt;
Это основная причина того, что большинство тесбенчей довольно неструктурированы, и основная причина разработки UVVM.&lt;br /&gt;
&lt;br /&gt;
UVVM отражает структуру дизайна ЦС. В результате мы имеем архитектуру тестбенча, которую легко понять, при этом сохраняются преимущества хорошей можульной стркутуры:&lt;br /&gt;
* Верификационные модули с хорошо понимаемой функциональностью интерфейсом;&lt;br /&gt;
* Стандартизированная система шин от секвенсера к верификационному модулю;&lt;br /&gt;
* Стандартизированный интерфейс шин на для всех верификационных модулей.&lt;br /&gt;
&lt;br /&gt;
Верификационные модули в UVVM называются VVC (VHDL Verification Components). &lt;br /&gt;
На рисунке ниже 'SBI_VVC' – Simple Bus Interface, но также это мог бы быть интерфейс 'AXI4-lite' или 'Avalon'.&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:UVVM UART TB ex1.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Архитектура UVVM очень похожа на архитектуру FPGA дизайна с внешним программным секвенсером упомянутом ранее.&lt;br /&gt;
Тестовый секвсенсер раздаёт команды различным VVC, так же, как и программа раздаёт команды FPGA модулям.&lt;br /&gt;
Затем VVC делают то, что им говорят – так же, как и модули в FPGA. Обычно это означает обработку доступа к их физическому интерфейсу.&lt;br /&gt;
Например, FPGA модуль может передавать некоторые данные, и на самом деле VVC может делать то же самое.&lt;br /&gt;
Для нашего примера UART тестбенча, сиквенсер может послать команду на UART TX чтобы передать байт на вход UART RX.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Интерфейс тестового секвенсера==&lt;br /&gt;
В UVVM существует два пути для доступа к интерфейсу DUT (Device Under Test). Наиболее простой это использование базовых процедур BFM (Bus Functional Model - функциональная модель шины),&lt;br /&gt;
как показано в строке кода ниже, где последний параметр служит как комментарий к строке кода, и при необходимости записывается в лог.&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
-- UART transmission command — as a BFM&lt;br /&gt;
uart_transmit(x&amp;quot;4C&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Эта процедура будет выполнена напрямую из процесса, где она была запущена, и применит данные x4C на шину UART RX, используя UART протокол.&lt;br /&gt;
Это значит, что если тестовый секвенсер вызывается данной процедурой, то он применит UART протокол бит за битом. Это займёт некоторое время, в течение которого тестовый секвенсер юудет занят и не сможет делать ничего другого.&lt;br /&gt;
&lt;br /&gt;
Более продвинутый вариант называется CDM (Command Distribution Method – метод распределённых комманд). В этом случае, когда секвенсер вызывает данную процедуру, команда немедленно отправляется в VVC,&lt;br /&gt;
который задан целевым адресом (помечен красным цветом), который определяется именем и номером экземпляра VVC, который должен выполнить эту команду.&lt;br /&gt;
 &amp;lt;i style=&amp;quot;color:grey;&amp;quot;&amp;gt;-- UART transmission command — using VVCs&amp;lt;/i&amp;gt;&lt;br /&gt;
 uart_transmit(&amp;lt;i style=&amp;quot;color:red;&amp;quot;&amp;gt;UART_TX_VVCT,1&amp;lt;/i&amp;gt;,x&amp;quot;4C&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Передача команды от тестового секвенсера в VVC не занимает времени, это значит что секвенсер освобождается немедленно и может делать что-то другое, например инициировать доступ по другому интерфейсу.&lt;br /&gt;
VVC позаботится о занимающем время протоколе UART.&lt;br /&gt;
&lt;br /&gt;
===Слайд:Совершенно маленький тест===&lt;br /&gt;
Код ниже показывает как можно написать очень маленький тест чтобы проверить одновременный доступ по всем интерфейсам.&lt;br /&gt;
Этот пример из немного другого тестбенча, здесь VVC для UART TX и RX объединены в общий VVC для более удобного использования.&lt;br /&gt;
Для этого случая было решено использовать дополнительный параметр для обозначения канала (RX или TX).&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;vhdl&amp;quot;&amp;gt;&lt;br /&gt;
sbi_write(SBI_VVCT,1, C_ADDR_TX_DATA, x&amp;quot;A0&amp;quot;, &amp;quot;Send byte UART TX&amp;quot;);&lt;br /&gt;
uart_expect(UART_VVCT,1,RX, x&amp;quot;A0&amp;quot;, &amp;quot;Check byte from UART TX&amp;quot;);&lt;br /&gt;
uart_transmit(UART_VVCT,1,TX, x&amp;quot;A1&amp;quot;, &amp;quot;Apply byte on UART RX&amp;quot;);&lt;br /&gt;
wait for C_FRAME_PERIOD;&lt;br /&gt;
sbi_check(SBI_VVCT,1, C_ADDR_RX_DATA, x&amp;quot;A1&amp;quot;, &amp;quot;Check UART RX byte&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Слайд:Микроархитектура является критичной===&lt;br /&gt;
Во любом FPGA проекте важно иметь хорошую архитектуру верхнего уровня, однако этого недостаточно.&lt;br /&gt;
Не менее важно иметь хорошую микроархитектуру на всех уровнях.&lt;br /&gt;
Это применимо и для тестбенчей, и это значит, что архитектура VVC должна быть так же проста для понимания, модификации и переиспользования.&lt;br /&gt;
И опять же – стандартизация была бы замечательна.&lt;br /&gt;
Базовый компонент VVC состоит из блоков в желтом прямоугольнике, и это применимо абсолютно ко всем VVC.&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:UVVM Structured VVC architecture.png|700x700px|безрамки]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VVC будет смотреть на CDM выше и принимать только комнады, которые являются целевыми для конкретно этого VVC.&lt;br /&gt;
Затем он поместит команду ''uart_transmit()'' в очередь и отпустит тестовый секвенсер.&lt;br /&gt;
''Executor'' будет выбирать команды из очереди, увидит что это команда ''uart_transmit()'', и затем выполнит эту команду с помощью BFM используя переданные параметры.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Стркутурированные расширения VVC==&lt;br /&gt;
Очень структурированная архитектура VVC даёт дополнительное преимущество.&lt;br /&gt;
Это преимущество в том, что легко добавлять более структурированную функциональность: неважно, либо для более сложных интерфейсов, либо чтобы просто включить более удобную функциональность (как, например, различные проверки).&lt;br /&gt;
Протокол с раздельными транзакциями, такой как ''Avalon MM'', часто приводит к хаотичным тестбенчам, поскольку там может быть несколько запросов на чтение до получения первого ответа на чтение.&lt;br /&gt;
Используя же VVC архитектуру рассмотренную ранее и это можно сделать достаточно просто и очень структурировано.&lt;br /&gt;
Базовый 'executor' выбирает команды из очереди и знает, что это доступ с разделёнными транзакциями. Таким образом он вызывает процедуру запроса BFM, и в то же время передаёт команду чтения в следующую очередь.&lt;br /&gt;
Ответный 'executor' заберёт эту команду и затем просто вызовет BFM проедуру для получения ответа на чтение и будет ждать ответа.&lt;br /&gt;
Таким образом, может быть любое число запросов на чтение между любыми ответами на чтение, и пр иэтом всё достаточно просто и наглядно.&lt;br /&gt;
&lt;br /&gt;
UVVM предоставляет скрипт для того чтобы сгенерировать VVC для новых интерфейсов. Сгенерированный код – это шаблон, в котором ясно отмечено, где пользователю необходимо добавить его собственные BFM и различные адаптации.&lt;br /&gt;
Учитывая процедуры BFM, которые в любом случае пользователь должен описать для любого тестбенча, создание VVC с нуля должно занять около 30 минут.&lt;br /&gt;
Если верить Doulis, то немного дольше в первый раз, но возможно 30 минут хватит в следующий раз.&lt;br /&gt;
&lt;br /&gt;
Подводя итог, наиболее важные части тестбенча следующие:&lt;br /&gt;
* основная инфраструктура тестбенча – с логированием, предупреждениями, проверками, ожиданиями и т.д., и возможно BFM для обработки доступа по интерфейсам;&lt;br /&gt;
* тестовый ''harness'' верхнего уровня – для того, чтобы получить полный обзор;&lt;br /&gt;
* верификационные модули (где необходимо) – понимание и создание;&lt;br /&gt;
* тесты – написание актуальных тестов и понимание полной последовательности событий.&lt;br /&gt;
Первый пункт лежит на библиотеке UVVM Utility.&lt;br /&gt;
Довольно структурированная архитектура (на верхнем уровне и внутри VVC) заботится о следующих двух пунктах.&lt;br /&gt;
В то время, как последний и вероятно самый важный пункт (поскольку здесь надо будет потратить большую часть времени) выполняется, позволяя высокоуровневым и легко понимаемым командам контролировать весь тестбенч, включая одновременную активность на многих интерфейсах.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Стандартизация==&lt;br /&gt;
Для FPGA дизайна, сандартизация в течение нескольких десятилетий, используя хорошую концепцию архитектуры с регистрами управления и состояния, системой шин, автономными модулями и высокоуровневыми программными командами, привела к эффективной методолгии проектирования устройст на FPGA, а также к эффективной разработке программного обеспечения, поскольку программистам не нужно разбираться в деталях модулей, которыми они управляют.&lt;br /&gt;
Это может казаться очевидным, что для тестбенчей проектов на FPGA мы имеем похожий сценарий, где секвенсер контроллирует множество интерфейсов.&lt;br /&gt;
Однако VHDL тестбенчи не были стандартизированы до UVVM.&lt;br /&gt;
Нже список того, что предоставляет UVVM , и даже стандартизирует наиболее важные аспекты:&lt;br /&gt;
* стандарт инфраструктуры тестбенча;&lt;br /&gt;
* стандарт установки и использования BFM;&lt;br /&gt;
* стандартный модуль управления (VVC) и интерфейс состояния;&lt;br /&gt;
* стандартный протокол от секвенсера к VVC;&lt;br /&gt;
* стандартные команды для секвенсера (для общих задач);&lt;br /&gt;
* стандарт внутренней архитектуры VVC;&lt;br /&gt;
* стандартная система очередей команд;&lt;br /&gt;
* стандартная обработка многопоточных интерфейсов (например с разделёнными транзакциями);&lt;br /&gt;
* стандартные методы синхронизации между VVC (или люыми другими процессами);&lt;br /&gt;
* стандартное ожидание и таймауты;&lt;br /&gt;
* стандарт сообщений (логирвания) и обработки предупреждений;&lt;br /&gt;
* стандарт многоадресных и широковещательных команд;&lt;br /&gt;
* стандартная поддержка отдладки;&lt;br /&gt;
* повторное использование стандартизированного тестбенча.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Работа с UVVM VVC Framework==&lt;br /&gt;
Ранее мы рассмотрели как начать работу с UVVM Utility library, рассмотрели общую концепцию работы с VVC и общую структуру тестбенча.&lt;br /&gt;
В UVVM  входит следующий набор библиотек.&lt;br /&gt;
{| class=standard align=center&lt;br /&gt;
!Library !!Description !!Location&lt;br /&gt;
|-&lt;br /&gt;
|UVVM Utility Library&lt;br /&gt;
|UVVM Utility Library is an open source VHDL test bench (TB) infrastructure library for verification of FPGA and ASIC.&lt;br /&gt;
Used by VVC FRAMEWORK as a common testbench infrastructure.&lt;br /&gt;
&lt;br /&gt;
For more information on UVVM Utility Library and latest release please visit&lt;br /&gt;
http://www.bitvis.no/products/uvvm-utility-library/&lt;br /&gt;
For UVVM v0.2.0 the UVVM Utility Library is compatible with Bitvis Utility Library (for VHDL 2008), and hence the current documentation for Bitvis Utility Library still applies.&lt;br /&gt;
&lt;br /&gt;
New features of UVVM Utility Library will be described soon.&lt;br /&gt;
| &amp;lt;install_dir&amp;gt;/uvvm_util&lt;br /&gt;
|-&lt;br /&gt;
|UVVM VVC Framework || The library for the VVC Framework with the functionality described in this document. ||&amp;lt;install_dir&amp;gt;/uvvm_vvc_framework&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_sbi ||VIP including a BFM and VVC for a simple bus interface (SBI). This VVC is intended as a template for writing new VVCs and for understanding the VVC functionality.&lt;br /&gt;
&lt;br /&gt;
This library is also used in the provided testbench example.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_sbi&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_uart ||VIP including a BFM and VVC for a simple UART interface. This VVC may be used as a template for writing new VVCs for multi-channel interfaces.&lt;br /&gt;
&lt;br /&gt;
This library is also used in the provided testbench example.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_uart&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_uart ||This is a simple UART design that is being used as a DUT for the provided example testbench ||&amp;lt;install_dir&amp;gt;/bitvis_uart&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_axilite ||VIP including BFM and VVC. This simple AXI4-Lite BFM and VVC is provided as a kick start for users to make their own testbenches using VVC FRAMEWORK, as many designs today have an AXI4-lite interface.&lt;br /&gt;
|&amp;lt;install_dir&amp;gt;/bitvis_vip_axilite&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_avalon_mm ||VIP including a BFM and VVC for an Avalon-MM interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_avalon_mm&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_axistream ||VIP including a BFM and VVC for a simple AXI-Stream interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_axistream&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_i2c ||VIP including a BFM and VVC for a simple I2C interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_i2c&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_spi ||VIP including a BFM and VVC for a simple SPI interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_spi&lt;br /&gt;
|-&lt;br /&gt;
|bitvis_vip_gpio ||VIP including a BFM and a VVC for a simple GPIO interface. ||&amp;lt;install_dir&amp;gt;/bitvis_vip_gpio&lt;br /&gt;
|-&lt;br /&gt;
|uvvm_osvvm ||A UVVM compatible version of OSVVM ||&amp;lt;install_dir&amp;gt;/uvvm_osvvm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для работы с VVC нам понадобится UVVM VVC Framework, который является частью UVVM.&lt;br /&gt;
Установка и компиляция VVC Framework&lt;br /&gt;
# Скачать репозиторий https://github.com/UVVM/UVVM&lt;br /&gt;
# Если UVVM был скачен как ZIP файл, то следует распаковать его в директорию по вашему выбору, но при этом следует убедиться, что все части UVVM находятся на своих местах, как показано в таблице выше.&lt;br /&gt;
# Скомпилировать все библиотеки UVVM&amp;lt;br/&amp;gt; В консоли вашего симулятора выполнить: 'do &amp;lt;install_dir&amp;gt;/script/compile_all.do &amp;lt;install_dir&amp;gt;/script &amp;lt;compile_dir&amp;gt;' , где &amp;lt;install_dir&amp;gt; - выбранная в предыдущем пункте директория, где находятся файлы UVVM, &amp;lt;compile_dir&amp;gt; - директория, куда следуюет поместить файлы компиляции, может быть директорией проекта, можно и не указывать &amp;lt;compile_dir&amp;gt;, тогда по умолчанию файлы компиляции будут расположены рядом с исходными файлами.&lt;br /&gt;
&lt;br /&gt;
Если вы хотите запустить пример тестбенча, который идёт в комплекте с UVVM, то вам следует выполнить несколько дополнительных действий&lt;br /&gt;
# Скомпилировать DUT и тестбенч для UART&lt;br /&gt;
# Запустить пример тестбенча для UART&lt;br /&gt;
&lt;br /&gt;
==Слайд:Заинтересованность в UVVM==&lt;br /&gt;
Международные игроки с сильным интересом в VHDL и верификации сейчас принимают UVVM.&lt;br /&gt;
Два основных симулятора VHDL, Aldec и Mentor Graphics, оба показывают большой интерес, Aldec уже провёл несколько вебинаров по UVVM (https://www.aldec.com/en/downloads/private/920 и https://www.aldec.com/en/downloads/private/1158).&lt;br /&gt;
И Mentor включил презентации UVVM в их &amp;quot;FPGA verification day&amp;quot; (https://trias-mikro.de/en/dates/fpga-verification-day/).&lt;br /&gt;
Doulos, лучший международный постовщик тренингов для FPGA и ASIC методологий, рекомендует UVVM для FPGA тестбенчей.&lt;br /&gt;
Последним свидетельством того, что UVVM на самом деле набирает обороты, является то, что ESA (European Space Agency – Европейское космическое агенство) теперь UVVM  спомощью контракта на более чем 250 000 евро на расширение UVVM, и может рекомендовать своим постовщикам использовать UVVM для верификации FPGA проектов (https://indico.esa.int/event/232/contributions/2159/).&lt;br /&gt;
То, что UVVM набирает обороты – это сильное преуменьшение. Со второго квартала 2016 по второй квартал 2018 года (между двумя исследованиями Wilson Research Group https://www.mentor.com/products/fv/events/the-2018-wilson-research-group-asic-and-fpga-functional-verification-study) количество пользователей UVVM во всём мире резко вырасло – с долей процента в 2016 году до 10% от всех FPGA разработчиков во втором квартале 2018 года и продолжает расти.&lt;br /&gt;
&lt;br /&gt;
UVVM поддерживается любыми совместимыми с VHDL-2008 симуляторами. Для опенсорс сообщество будет хорошей новостью то, что GHDL был обновлён для работы с UVVM (https://github.com/ghdl/ghdl).&lt;br /&gt;
&lt;br /&gt;
Дополнительно был создан новый репозиторий для внешнего вклада в UVVM(https://github.com/UVVM/UVVM_Community_VIPs) и обмена верификационными компонентами.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Текущие и будущие расширения==&lt;br /&gt;
Проект европейского космического агенства предоставит несколько новых и важных функций для UVVM. Некоторые уже были предоставлены,&lt;br /&gt;
например, легко используемый, гибкий и конфигурируемый ''Scoreboard'', и некоторые всё ещё разрабатываются, такие как ''watchdogs'',&lt;br /&gt;
механизм инжекции ошибок, улучшенный контроль рандомизации и функционального покрытия, и более удобная система подключения DUT моделей к ''harness'' тестбенча.&lt;br /&gt;
&lt;br /&gt;
Наиболее важная функциональность, которая скоро появится – иерархические верификационные компоненты.&lt;br /&gt;
Это позволит решить проблему использования ''scoreboards'' для проверки данных, которые проходят через DUT,&lt;br /&gt;
когда слой коммуникации различный с двух сторон, например, когда ввод с одной стороны ориентирован на слова или байты,&lt;br /&gt;
как в AXI4-lite или Avalon, а выход с другой стороны ориентирован на пакеты, как например Ethernet.&lt;br /&gt;
Ирерархические верификационные компоненты позволят легко обрабатывать такие сценарии.&lt;br /&gt;
&lt;br /&gt;
Кроме того, UVVM постоянно обновляется, добовляя незначительную функциональность за пределами проекта ESA, и в настоящее время разрабатываются планы для дальнейших небольших и крупных расширений.&lt;br /&gt;
&lt;br /&gt;
==Слайд:Выводы==&lt;br /&gt;
Структурированная верификация является очень важной  для эффективности, качества и повторного использования.&lt;br /&gt;
UVVM – открытый проект, который предоставляет очень струкртурированную методологию  и библиотеку.&lt;br /&gt;
UVVM даже предоставляет открытые VVC и BFM для UART, I2C, SPI, SBI, AXI4-Lite, AXI4-steam, GPIO и Avalon MM.&lt;br /&gt;
Это даёт возможность для отличного старта любого проекта, который использует эти (либо аналогичные) периферийные устройства.&lt;/div&gt;</summary>
		<author><name>Yura</name></author>	</entry>

	</feed>