Главная

новости



16 сентября 2016 г.

Исходная установка в ПЛИС и СБИС. (http://www.edn.com/electronics-blogs/day-in-the-life-of-a-chip-designer/4442638/Resets-in-FPGA---ASIC-control-and-data-paths).

Современный взгляд на процесс первоначального установления аппаратных устройств предлагают М.А. Сейфи и Дж. Пейтел, опытные инженеры на фирме eInfochips.

Исходная установка (Reset) - это важный механизм приведения цифровой системы в нужное состояние. Хотя приведение в исходное состояние конвейера обработки данных часто не требуется, управляющий автомат должен быть приведен к своему исходному состоянию до начала работы. Далее рассматриваются особенности такого установления в ПЛИС и СБИС.

Введение
Если блок обработки данных запускается, то есть синхронизируется при наличии исходных данных, обрабатывает их и выдает результаты, относящиеся только к этим данным, то такому блоку первоначальная установка не требуется. Но если в таком блоке задействован управляющий автомат с определенными запрещенными состояниями, то первоначальное установление является обязательным.

Существуют другие случаи, где первоначальное установление (или проще - сброс) нужно в реальных проектах. Это например, следующие:
- Если источник тактовых импульсов перенастраивается, то в проекте выполняется сброс, который блокирует работу, пока схема PLL источника импульсов не выйдет в рабочее состояние.
- Канал связи должен быть в первоначальном состоянии пока он не попадет в синхронизацию с источником сигнала.
- У пользователя должна быть в распоряжении кнопка сброса.
- Сброс микропроцессора после какого-либо события, например, после переполнения защитного таймера (watchdog).
- Сброс сконфигурированного логического блока в ПЛИС после его частичной реконфигурации.
- Сброс модели вычислителя перед ее моделированием.

При организации исходной установки в ПЛИС или СБИС необходимо решить ряд вопросов: какие триггеры требуют сброса, а какие - нет; каким триггерам необходим асинхронный сброс, а каким - синхронный; как организовать сеть сигнала сброса и где установить буферы; как проконтролировать временные ограничения сети; как подготовить тестовые последовательности для верификации функционирования сброса; как ведет себя сброс в схеме со многими синхросигналами.

Использование исходной установки в СБИС. Есть общее мнение большинства разработчиков, что все триггеры в разработке должны иметь вход сброса. Но это не обязательно для блоков обработки данных. Даже регистры сдвига, буферизированная линия передачи данных легко обходятся без сброса.

Например, на Рис.1 показана схема какого конвейера с синхронным сбросом. Его эквивалентная схема без сети сброса показана на рис.2. Единственная особенность - это то, что сигнал сброса должен иметь продолжительность, которая является достаточной для очистки всего конвейера.

Рис.1.

Рис.2.

Для проектов, где наличие результирующих данных подтверждается стробирующих сигналом, можно удалить сигнал сброса во всей схеме кроме сброса собственно стробирующего сигнала, как показано на рис. 3. Как видно из рис.3, сигнал сброса не присутствует в тракте распространения данных и данные действительны тогда, когда есть стробирующий сигнал D_val.

Рис.3.

Такое уменьшение распространения сигнала сброса позволяет минимизировать число триггеров со входом сброса, что приводит к минимизации общих аппаратных затрат. Также это дает следующие преимущества:
- Уменьшенная сложность разведения линий связи,
- Как результат, уменьшенная продолжительность разведения кристалла,
- Лучше происходит разведение и увеличивается максимальная тактовая частота.

Есть золотое правило разработки с минимизацией сигналов сброса: все регистры можно не сбрасывать, кроме тех, на которые приходят сигналы с обратных связей. В основном, исходная установка необходима в следующих ситуациях:
- Триггер находится цикле с обратной связью,
- Триггер сохраняет состояние некоторого конечного автомата,
- Триггеры в фильтре с бесконечной импульсной характеристикой.

Программирование конвейерных триггеров

Разработчики не должны кодировать триггеры со сбросом и без него в одном и том же процедурном блоке Verilog или операторе процесса VHDL. Например, конвейерное соединение триггеров правильно кодируется двумя следующими блоками на Verilog, которые отражаются в схему, как на Рис.4.

 
module follower_FF (Clk,Rst,d,q1);
input Clk;
input Rst;
input d;
output q1;

reg q;
reg q1;

always @ (posedge Clk)
  begin 
    if(Rst)
      begin    
        q <= 1'b0;
      end
    else
      begin
        q <= d;
      end
  end
 
always @ (posedge Clk)
  begin
    q1 <= q;
  end
endmodule

Рис 4: Триггеры без сброса

Но если их кодировать в одном блоке, как ниже,

 
module follower_FF (Clk,Rst,d,q1);
input Clk;
input Rst;
input d;
output q1;
 
reg q;
reg q1;
 
always @ (posedge Clk)
  begin 
    if(Rst)
      begin    
        q <= 1'b0;
      end
    else
      begin
        q   <= d;
        q1 <= q;
      end
  end
endmodule

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

Рис.5.

Использование исходной установки в схемах обработки и управления в ПЛИС.
У разных производителей ПЛИС исходноя установка происходит по-разному. Поэтому при решении вопроса, как лучше это сделать, желательно ознакомиться с соответствующими инструкциями. Некоторые аппаратные блоки, такие как SRL16, DSP48, BRAM, SERDES, поддерживают ограниченные возможности сброса. Если закодировать сброс в описании такого блока, то он наверняка не будет реализован. Поэтому такие аспекты сброса, как синхронный или асинхронный сброс, его полярность должны быть решены после ознакомления с инструкциями в соответствующей ПЛИС. Далее рассматриваются общие аспекты использования сброса соответственно аппаратным блокам ПЛИС.

Высокий активный уровень сигнала сброса.
Триггеры ПЛИС Xilinx имеют входы SR исходной установки с активным высоким уровнем, как на рис. 6. Вход SR может быть закодирован как вход асинхронного / синхронного установления в 0 или 1 в зависимости от его RTL - описания.

Рис. 6

Если закодирован активный низкий уровень сигнала установления, то будет добавлен инвертор перед входом SR, который выполнен на базе отдельной таблицы LUT, что приведет к дополнительным временным задержкам и аппаратным затратам. Если активный низкий уровень неотвратим, например, сигнал приходит извне, то его инвертор следует установить на верхнем уровне иерархии проекта как общий инвертор для всех соответствующих входов SR. Тогда этот инвертор может быть реализован непосредственно на входе кристалла ПЛИС как буферный элемент и дополнительные расходы и задержки не нужны.

Синхронное установление в ноль.
В пределах одного сконфигурированного модуля (CLB slice) линия SR является общей для всех его триггеров. Поэтому если запрограммированы триггеры различных типов, то они не могут быть упакованы в один и тот же модуль. Как показано на Рис.7, три триггера с различным асинхронным управлением могут быть реализованы только в 3-х разных модулях. Но если сброс был запрограммирован как синхронный, то синхронное управление этими триггерами будет отражено в логические таблицы (LUT), а управляющие входы этих триггеров будут неиспользованны. Это позволяет реализовать такие триггеры в одном модуле. При этом число LUT может увеличиться, но число задействованных конфигурируемых модулей уменьшится. Поэтому для уменьшения аппаратных затрат желательно использовать синхронные исходные установки.

Рис.7.

Программирование компонента SRL16
В ПЛИС Xilinx такой ресурс, как SRL16, который реализует регистр сдвига на 16 разрядов с программируемыми отводами и использует ресурсы одной LUT. Но если в описании регистра сдвига используется синхронная или асинхронная установка в ноль, то такое описание отобразится не в SRL16, а в несколько триггеров. Поэтому, чтобы описание отобразилось в SRL16, то в нем не должен использоваться сброс триггеров. Ниже приведено Verilog-описание, которое отображается в цепочку триггеров, так как в нем закодирован сброс.

 
always @ (posedge Clk or posedge Rst)
  begin
    if(Rst)
      begin
        q <= 0;
      end
    else
      begin
        q <= {q[6:0],Din};
      end 
  end
 
assign q1 = q[7];

Но если из описания изъять сброс, то он отобразится в SRL16.

always @ (posedge Clk)
  begin
    q <= {q[6:0],Din};
  end
assign q1 = q[7];

ОЗУ
В ПЛИС Xilinx различаются блочные ОЗУ Block RAM и распределеные ОЗУ (distributed RAM), которые реализуются на основе LUT. При их описании не допускается добавление исходной установки. Тип ОЗУ зависит от кодирования чтения из него. Если такое чтение - синхронное, то описание отображается в BRAM, а если асинхронное - то в распределенное ОЗУ. Ниже приводится описание двухпортового ОЗУ на распределенной памяти.

//Dual-Port RAM With Asynchronous Read Verilog Coding Example
module rams_00 (clk, we, a, dpra, di, spo, dpo);
input clk;
input we; 
input [5:0] a;
input [5:0] dpra;
input [15:0] di;
output [15:0] spo;
output [15:0] dpo;
 
reg [15:0] ram [63:0];

always @(posedge clk)
  begin
    if(we)
      begin
        ram[a] <= di;
      end 
  end 
assign spo = ram[a]; 
assign dpo = ram[dpra];
endmodule

И описание двухпортового ОЗУ на Block RAM.

// Dual-Port RAM with Synchronous Read (Read Through)
module rams_01 (clk, we, a, dpra, di, spo, dpo)
input clk;
input we;
input [5:0] a;
input [5:0] dpra;
input [15:0] di;
output [15:0] spo;
output [15:0] dpo;
reg [15:0] ram [63:0]; 
reg [5:0] read_a;
reg [5:0] read_dpra;
 
always @(posedge clk)
  begin
    if(we)
      begin
        ram[a] <= di;
      end
    read_a <= a;
    read_dpra <= dpra;
  end
assign spo = ram[read_a];
assign dpo = ram[read_dpra];
endmodule
 

Кроме того ОЗУ на Xilinx BRAM имеет выходной регистр, который справедливо использовать при конвейерном чтении с ОЗУ. Чтобы его использовать следует задействовать синхронный сброс в BRAM, иначе синтезатор подставит вместо него регистр на триггерах.

Блоки DSP48
В блоках DSP48, которые в ПЛИС Xilinx стоят конвейерные регистры как в маршрутах прохождения данных, так и управляющих сигналов. Все эти внутренние регистры имеют синхронное установление в 0. Так что, когда в описании такого блока использовать асинхронный сброс, то синтезатор не упакует такие регистры внутрь блока DSP48, а реализует их в дополнительных конфигурируемых модулях.Результатом будет не только увеличение аппаратных затрат, но и уменьшение быстродействия и увеличение энергопотребления. Поэтому рекомендуется использовать синхронное установление в 0, чтобы конвейерные регистры реализовались внутри DSP48.

Рекомендуемая литература

[1] Smith, M.J., "Application Specific Integrated Circuits," Addison-Wesley, ISBN 0-201-50022-1.
[2] Smith, Douglas J., "HDL Chip Design," Doone, ISBN 0-9651934-3-8.
[3] Clifford E. Cummings, Don Mills and Steve Golson, "Asynchronous & Synchronous Reset Design Techniques - Part Deux", SNUG Boston Rev 1.3.
[4] Xilinx XST User Guide (v 10.1)
[5] Xilinx WP275 (v1.0.1) October 22, 2007, Get your Priorities Right - Make your Design Up to 50% Smaller [6] Xilinx XAPP465 (v1.1) May 20, 2005, Using Look-Up Tables as Shift Registers




новости

Главная