Статья посвящена актуальной проблеме разделения тактовых частот, стоящей перед разработчиками широкого спектра цифровых устройств на базе ПЛИС.
Предложенные технические решения могут быть полезны при проектировании заказных и серийных схем СБИС.
Рассмотрены два примера технической реализации делителей частоты с дробными коэффициентами деления 3:2 и 5:2. Оба варианта делителей описаны в виде поведенческих моделей на языке Verilog, что позволяет реализовать эти функциональные блоки в объеме ПЛИС различных архитектур и производителей.
При разработке цифровых устройств часто возникает необходимость разделить функциональные блоки на группы, использующие тактовые сигналы с разными параметрами (так называемые домены синхронизации — Clock Domain).
Основными параметрами любого тактового сигнала являются тактовая частота и соответствующий период. Также для ряда элементов, узлов и блоков важна скважность тактового сигнала, определяющая длительность низкого и высокого уровней в течение периода, а также нестабильность периода - параметр «Джиттер».
Несмотря на наличие в устройстве тактовых сигналов с различными параметрами, в большинстве случаев для формирования этих сигналов используется один источник — внешний генератор, генерирующий опорную частоту.
В конкретных проектах можно использовать несколько генераторов, генерирующих несколько опорных частот, например, частоту 48 МГц для USB-контроллера, частоту 3,6864 МГц для каналов UART и частоту 100 МГц для ядер процессора, памяти SDRAM. и сетевой контроллер Ethernet. Тактовые сигналы, необходимые для нормального функционирования функциональных блоков СБИС или ПЛИС, формируются из опорных сигналов путем умножения и деления частот. Функция умножения частоты в архитектуре ПЛИС ПЛИС реализована узлами ФАПЧ (блоками DLL, PLL, DCM и CMT).
Использование этих кристаллических ресурсов подробно описано производителями в соответствующей документации [3,4].
В отличие от умножителей частоты делители частоты могут быть построены на логических средствах общего назначения, в основе которых лежат регистры и комбинационные схемы-генераторы.
Следует отметить, что использование логических ресурсов для формирования тактового сигнала допускается средствами САПР и архитектурой большинства ПЛИС, но крайне не рекомендуется производителями из-за вероятности ложных переходов и всплесков результирующего тактового сигнала, вызванных переключением.
комбинационные схемы.
Таким образом, в ПЛИС с архитектурой ПЛИС для формирования тактовых сигналов предпочтительно использовать существующую инфраструктуру, в том числе специализированные кристаллические ресурсы: блоки тактового входа, подключенные к определенным выводам корпуса; блоки DLL, PLL, DCM или CMT; сети глобальной синхронизации, передающие тактовый сигнал по всему объему кристалла с наименьшими искажениями.
Возможны два случая синхронизации функциональных блоков и узлов на пониженной частоте, полученной путем деления опорной частоты: 1. частота синхронизации кратна опорной частоте, 2. Частота синхронизации получается путем деления опорной частоты на дробный коэффициент. В первом случае крайне желательно использовать принцип разрешения синхронизации, заключающийся в использовании триггеров и регистров с входом CE (Clock-Enable).
Организация элементарного триггера с входом СЕ показана на рис.
1. В основе лежит триггер Д-типа с фронтальной синхронизацией и асинхронной установкой начального значения - RST. Вход CE реализует принцип включения синхронизации путем переключения через мультиплексор MX-2:1 внутреннего информационного входа триггера либо на внешний источник данных - в случае CE = «1», либо на выход Q, когда СЕ = «0».
Тактовый сигнал CLK постоянно подается на триггерный вход, но работа (запись внешних данных) происходит исключительно в тех тактах, в которых на вход CE подается лог.
«1».
Путем генерации сигнала CE, установленного для регистрации.
«1» в течение одного тактового сигнала и имея фиксированный период, представляющий собой натуральное число тактовых циклов, синхронизация осуществляется на пониженной частоте, кратной опорной частоте.
Триггер с CE-входом можно получить из базового D-триггера добавлением двух транзисторов, реализующих входной мультиплексор (рис.
1).
Большинство семейств FPGA содержат регистры, оснащенные входом CE, которые представляют собой технологические примитивы, оптимизированные на уровне топологии IC. Когда разрешение синхронизации не требуется, на вход CE подается постоянный сигнал разрешения.
Рис.
1. Организация элементарного триггера с входом СЕ Для второго случая, когда тактовый сигнал получается делением опорной частоты на дробный коэффициент, использование принципа разрешения синхронизации невозможно из-за необходимости запуска по нисходящему и возрастающему фронту опорного тактового сигнала в разных тактовые циклы.
В этом случае для построения делителя частоты придется игнорировать рекомендации и использовать логические ресурсы для формирования тактового сигнала.
Во избежание гонок в комбинационной логике необходимо обеспечить входные сигналы таким образом, чтобы за время работы выходной комбинационной схемы только один входной сигнал менял свое состояние.
Такой принцип построения делителя актуально использовать в двух случаях: • отсутствие свободных блоков формирования частоты в архитектуре ПЛИС; • использование ПЛИС архитектуры CPLD, не имеющих блоков формирования частоты.
В качестве примера можно рассмотреть сочетание FPGA с архитектурой CPLD, микроконтроллера Atmel AVR, работающего на частоте 16 МГц, и эталонного тактового генератора с частотой 40 МГц.
Очевидна необходимость построения делителя частоты с использованием ПЛИС, который формирует тактовый сигнал микроконтроллера путем деления опорной частоты на коэффициент 2,5. Ниже мы рассмотрим две модели делителей частоты, генерирующие тактовые сигналы различной формы: • тактовый сигнал, полученный путем деления опорной частоты на дробный коэффициент; • тактовый сигнал, полученный путем деления опорной частоты на естественный коэффициент, но имеющий равную длительность высокого и низкого уровней в течение периода; • сигналы, полученные путем деления опорной частоты на натуральный коэффициент, используемые для обеспечения синхронизации функциональных блоков и узлов, тактируемых опорным сигналом.
Рассмотрим примеры построения двух делителей частоты с дробными коэффициентами деления.
Рис.
2. Интерфейс делителя частоты с коэффициентами деления 1,5 и 3,0. Сначала вам нужно определить интерфейс делителя частоты.
На рис.
2 показан интерфейс делителя с коэффициентами деления 1,5 и 3,0. Входы делителя частоты ограничены двумя системными асинхронными сигналами инициализации RST (активный высокий уровень) и тактовым сигналом CLK, который устанавливает опорную тактовую частоту.
Далее мы рассмотрим синхронизацию по нарастающему фронту, при которой регистры срабатывают при изменении уровня сигнала на входе CLK с низкого на высокий уровень.
Выходы делителя разделены на две группы.
Первая группа выходов состоит из сигналов, предназначенных для непосредственного тактирования функциональных блоков, блоков и регистров.
Эти сигналы подаются на входы синхронизации триггера и имеют длительность высокого уровня, максимально приближенную к длительности низкого уровня.
Ко второй группе сигналов относятся сигналы включения тактовой частоты CEO (Clock Enable Output), полученные путем деления опорной частоты на натуральное число и имеющие длительность высокого уровня, равную одному тактовому циклу опорной частоты CLK. Сигналы со второй группы выходов характеризуются одной частотой и фиксированным временным сдвигом на определенное количество тактов опорной частоты.
Выходы CEO ориентированы на синхронизацию функциональных блоков и блоков на пониженной частоте путем управления схемами разрешения синхронизации CE (Clock Enable).
К сигналам первой группы предъявляются требования по устойчивости переходного процесса, обеспечивающие работу синхронизированных узлов и блоков строго в нужные моменты времени.
Требования стабильности обсуждались в статье [1].
Работу и внутреннюю организацию делителя частоты на коэффициенты 1,5 и 3,0 иллюстрирует временная диаграмма на рис.
3. Генерировать тактовые сигналы CLKDVxxx, показанные на схеме, можно только с помощью комбинационной логической схемы.
Как известно, переключение комбинационной логики может носить многоступенчатый характер, обусловленный одновременным прохождением сигналов через различные промежуточные этапы, что может привести к многократному переключению выходного сигнала за время, отведенное на реакцию комбинационной схемы.
для ввода воздействий.
Подобная ситуация недопустима на выходе делителя частоты, поскольку выходной сигнал должен изменить свое состояние ровно два раза за один период. Для устранения этого эффекта предлагается подавать сигналы от внутренних регистров в комбинационную схему таким образом, чтобы не происходило одновременного переключения двух и более входных сигналов.
Делитель основан на конечном автомате [2], непрерывно работающем в цикле 00-01-10, генерирующем сигналы CEO_DV3X и CEO_DV3X_1T со своими состояниями.
Промежуточный сигнал DL_STATE_1 получается путем фиксации сигнала CEO_DV3X_1T с помощью триггера, работающего по заднему фронту тактового сигнала CLK.
Высокий уровень на выходе CLKDV1X5 формируется, если значения промежуточных сигналов, заштрихованных серым цветом, совпадают.
Рис.
3. Схема работы делителя с коэффициентами деления 1,5 и 3,0. Выходной сигнал CLKDV3X0 генерируется путем логического сложения (в положительной логике) сигналов CEO_DV3X_1T (CNTR_STATE[1]) и DL_STATE_1. Нетрудно видеть, что данное техническое решение обеспечивает равенство длительности высокого и низкого логических уровней в течение одного периода.
Ниже представлена поведенческая модель HDL, описывающая рассматриваемый делитель частоты в Verilog:
Рассмотренный делитель частоты, в частности, может быть использован для формирования тактовых сигналов для шин PCI, работающих на частотах 33 и 66 МГц, используя опорную частоту 100 МГц.`timescale 1ns / 1ps ///////////////////////////////////////////////////////////// // Company: Argon // Engineer: FPGA-Mechanic // // Create Date: 16:27:50 03/16/2011 // Design Name: Clock Deviders // Module Name: MCLKDIV_3X_V10 // Target Devices: PLD, FPGA or ASIC // Tool versions: Xilinx ISE 10.1.03 // Description: Clock Frequency Divider by 1.5 and 3.0 // With Synchronous and Asynchronous Outputs // Revision: 1.0 // Revision 1.0 - File Created ///////////////////////////////////////////////////////////// module MCLKDIV_3X_V10( input CLK, // Sys. Clock input RST, // Asynch. Reset output CLKDV1X5, // Asynch. CL-Output Clock/1.5 // Divided Frequency (H:L=1:2) output CLKDV3X0, // Asynch. CL-Output Clock/3 // Divided Frequency (H:L=1:1) output CEO_DV3X, // Synch. FF-Output Clock Enable // Pulse (Clock/3 Frequency) output CEO_DV3X_1T // Synch. FF-Output Clock Enable // Pulse Delay 1T ); // Internal signals declaration: reg [1:0] CNTR_STATE; reg DL_STATE_1; //------------------------------------------ // Mod.3 Counter: always @ (posedge CLK, posedge RST) if(RST) CNTR_STATE <= 2'd0; else case(CNTR_STATE) 2'd0 : CNTR_STATE <= 2'd1; 2'd1 : CNTR_STATE <= 2'd2; default : // States 2 and 3: CNTR_STATE <= 2'd0; endcase //------------------------------------------ // Clock-Enable Outputs: assign CEO_DV3X = CNTR_STATE[0]; assign CEO_DV3X_1T = CNTR_STATE[1]; //------------------------------------------ // Delay for CNTR_STATE[1]: always @ (CLK, RST, CNTR_STATE[1]) if(RST) DL_STATE_1 <= 0; else if(!CLK) DL_STATE_1 <= CNTR_STATE[1]; //------------------------------------------ // Asynchronous Outputs: assign CLKDV1X5 = (~CLK & CNTR_STATE[0]) | (CLK & DL_STATE_1); assign CLKDV3X0 = CNTR_STATE[1] | DL_STATE_1; //------------------------------------------ endmodule
Делитель частоты с коэффициентами 2,0 и 4,0 в рамках данной статьи не рассматривается, поскольку не относится к делителям с дробными коэффициентами деления и реализуется достаточно просто.
Рис.
4. Интерфейс делителя частоты с коэффициентами деления 2,5 и 5,0.
На рис.4 показан интерфейс делителя с коэффициентами 2,5 и 5,0. Этот делитель построен по рассмотренным выше принципам, но в его основе лежит более сложный автомат, генерирующий внутренние сигналы и сигналы CEO. Работа делителя с коэффициентами 2,5 и 5,0 иллюстрируется схемой на рис.
5. Конечный автомат имеет четырехбитный внутренний регистр состояний и работает в цикле 0001-0100-0010-1000-1100. Сигналы CEO_DV5X и CEO_DV5X_2T получаются на основе младших битов состояния машины.
Сигнал DL_STATE_1 генерируется путем фиксации сигнала CEO_DV5X_2T на заднем фронте опорного тактового сигнала CLK.
Рис.
5. Схема работы делителя с коэффициентами деления 2,5 и 5,0.
Сигнал CLKDV2X5 получается логическим сложением (в положительной логике) сигналов CEO_DV5X (CNTR_STATE[0]) и DL_STATE_1.
Сигнал CLKDV5X0 получается логическим сложением (в положительной логике) сигналов CNTR_STATE[3] и DL_STATE_1.
Сигналы, генерируемые битами состояния машины CNTR_STATE[0] и CNTR_STATE[1], могут использоваться для синхронизации функциональных блоков и узлов с использованием механизма разрешения синхронизации Clock Enable. Эти биты состояния дублируются на интерфейсе сигналами CEO_DV5X и CEO_DV5X_2T.
Ниже представлена поведенческая модель HDL, описывающая делитель частоты с коэффициентами 2,5 и 5,0 в Verilog: `timescale 1ns / 1ps
/////////////////////////////////////////////////////////////
// Company: Argon
// Engineer: FPGA-Mechanic
//
// Create Date: 16:27:50 03/16/2011
// Design Name: Clock Deviders
// Module Name: MCLKDIV_5X_V10
// Target Devices: PLD, FPGA or ASIC
// Tool versions: Xilinx ISE 10.1.03
// Description: Clock Frequency Divider by 2.5 and 5.0
// With Synchronous and Asynchronous Outputs
// Revision: 1.0
// Revision 1.0 - File Created
/////////////////////////////////////////////////////////////
module MCLKDIV_5X_V10(
input CLK, // Sys. Clock
input RST, // Asynch. Reset
output CLKDV2X5, // Asynch. CL-Output Clock/2.5
// Divided Frequency (H:L=2:5)
output CLKDV5X0, // Asynch. CL-Output Clock/5
// Divided Frequency (H:L=1:1)
output CEO_DV5X, // Synch. FF-Output Clock Enable
// Pulse (Clock/5 Frequency)
output CEO_DV5X_2T // Synch. FF-Output Clock Enable
// Pulse Delay 2T
);
// Internal signals declaration:
reg [3:0] CNTR_STATE;
reg DL_STATE_1;
//------------------------------------------
// Mod.5 Counter:
always @ (posedge CLK, posedge RST)
if(RST)
CNTR_STATE <= 4'd1;
else
case(CNTR_STATE)
4'd1 :
CNTR_STATE <= 4'd4;
4'd4 :
CNTR_STATE <= 4'd2;
4'd2 :
CNTR_STATE <= 4'd8;
4'd8 :
CNTR_STATE <= 4'd12;
4'd12 :
CNTR_STATE <= 4'd1;
default : // Other States :
CNTR_STATE <= 4'd1;
endcase
//------------------------------------------
// Clock-Enable Outputs:
assign CEO_DV5X = CNTR_STATE[0];
assign CEO_DV5X_2T = CNTR_STATE[1];
//------------------------------------------
// Delay for CNTR_STATE[1]:
always @ (CLK, RST, CNTR_STATE[1])
if(RST)
DL_STATE_1 <= 0;
else if(!CLK)
DL_STATE_1 <= CNTR_STATE[1];
//------------------------------------------
// Asynchronous Outputs:
assign CLKDV2X5 = CNTR_STATE[0] | DL_STATE_1;
assign CLKDV5X0 = CNTR_STATE[3] | DL_STATE_1;
//------------------------------------------
endmodule
Цитируемая литература
1. Борисенко Н.В.
Технические аспекты построения управляющих машин при проектировании цифровых устройств на основе современных ПЛИС «Компоненты и технологии» № 12.2011. 2. Алгебраическая теория автоматов, языков и полугрупп.
Под редакцией М.
Арбиба.
Пер.
с англ.
М.
, «Статистика», 1975. 335 с.
; от ил.
3. Ресурсы синхронизации Spartan-6, www.xilinx.com/training/free-video-courses.htm#FPGA-ARC 4. Использование циклов блокировки по задержке в FPGA Spartan-II/IIE, примечания по применению Xilinx XAPP174
Теги: #FPGA #CPLD #ASIC #xilinx #xilinx #FPGA-
Онлайн Репетитор По Python
19 Oct, 24