Организация асинхронного двухстороннего обмена данными между функциональными узлами и блоками цифровой аппаратуры

№ 8’2018
PDF версия
В статье рассмотрен вариант организации асинхронного двухстороннего взаимодействия между функциональными узлами и блоками сложных цифровых устройств. Предметная область исследования включает как внутренние стыки в объеме кристалла СБИС или ПЛИС, так и межкристальные каналы обмена, не требующие высокой пропускной способности и использующие для передачи или приема данных двоичные посылки фиксированной разрядности. Предложен унифицированный набор сигнальных линий и описан протокол асинхронного взаимодействия, основанный на принципе рукопожатия.

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

Первый случай асинхронного обмена данными в объеме одного кристалла иллюстрирует рис. 1. В кристалле СБИС или в ПЛИС в большинстве случаев реализуются функциональные блоки и узлы, тактируемые независимыми или некратными синхросигналами. Подмножество триггеров кристалла, использующих общий синхросигнал, принято называть доменом синхронизации (Clock Domain). Внутренние сигнальные цепи, соединяющие элементы, расположенные в различных доменах синхронизации, представляют набор сигналов CDC (Clock Domain Cross). Некоторые системы проектирования не имеют средств оптимизации цепей CDC и требуют явного определения разработчиком временных ограничений для этих сигналов. Существуют программные средства анализа и оптимизации цепей CDC, например продукт Meridian CDC американской фирмы Real Intent [1].

Асинхронные сигналы в объеме кристалла СБИС или ПЛИС

Рис. 1. Асинхронные сигналы в объеме кристалла СБИС или ПЛИС

Второй случай асинхронного обмена данными представляет взаимодействие функциональных блоков и узлов, расположенных в двух различных кристаллах СБИС или ПЛИС, работающих от разных синхросигналов. Для организации такого взаимодействия в большинстве современных интерфейсов используются высокоскоростные дифференциальные приемопередатчики типа SERDES. Синхросигнал может передаваться от источника данных и поступать на приемник синхронно с порциями информации — так называемый механизм синхронизации от передатчика (Source Synchronous). Синхронизация от передатчика, в частности, предусмотрена в интерфейсах памяти DDR SDRAM. При отсутствии выделенной линии для синхросигнала обращаются к методам кодирования данных, позволяющим восстановить синхросигнал при приеме, — например, манчестерскому кодированию. Тем не менее оба механизма требуют специальных аппаратных ресурсов и рассчитаны на высокоскоростные каналы обмена. Для организации асинхронного взаимодействия с невысокой пропускной способностью допустимо применение механизма рукопожатия — handshake. При рукопожатии используются два управляющих логических сигнала, соединяющих взаимодействующие агенты в противоположных направлениях, как показано на рис. 2.

Топология межкристального соединения с рукопожатием

Рис. 2. Топология межкристального соединения с рукопожатием

Заливкой на рис. 2 выделены входные и выходные регистровые элементы, реализуемые в составе блока ввода/вывода кристалла (IO-block). Остальные функциональные элементы располагаются в ядре СБИС (Core) или в матрице ПЛИС FPGA. Регистры, размещенные в блоке ввода/вывода кристалла, обеспечивают минимальные задержки предустановки по входу и выдачи выходного сигнала относительно рабочего фронта синхросигнала.

В большинстве интерфейсов современных цифровых устройств используются протоколы обмена данными, основанные на минимальных неделимых порциях информации, состоящих из фиксированного числа битов. Примеры таких интерфейсов были рассмотрены в статье [4].

Из представленных примеров видно, что взаимодействие по всем перечисленным интерфейсам основано на обмене неделимыми посылками фиксированной разрядности.

Рассмотрим варианты асинхронного взаимодействия двух функциональных блоков в объеме одного кристалла или межкристального взаимодействия СБИС или ПЛИС, основанного на передаче, приеме или обмене посылками фиксированной разрядности, без привязки к вышестоящему протоколу и функциональному назначению битов в объеме посылок. Описанный ниже протокол назовем асинхронным портом обмена данными — Asynchronous Data Exchange Port (далее — порты ADEP).

Для внесения четкости в дальнейшем повествовании будет использована следующая терминология:

  1. Агент (Agent) — устройство, подключенное к интерфейсу и способное принимать из интерфейса и/или передавать в интерфейс данные или управлять процессом обмена данными.
  2. Инициатор (Initiator) — агент интерфейса, способный начинать обмен данными (циклы записи или чтения) или обрабатывать аппаратные прерывания.
  3. Исполнитель (Target) — агент интерфейса, способный принимать от инициатора данные в циклах записи, и/или передавать инициатору данные в циклах чтения, и/или генерировать запросы аппаратных прерываний.
  4. Данные (Data) — набор двоичных комбинаций, конкретизирующий передаваемую или принимаемую по интерфейсу информацию.
  5. Фаза данных (Data Phase, Transfer) — одновременный процесс однократной передачи и/или однократного приема фиксированного набора данных и/или управляющих комбинаций по интерфейсу в течение транзакции. Количество информации, передаваемой в одной фазе, ограничено максимальным объемом данных, посылаемым по интерфейсу одновременно. (Определяется технологическими возможностями интерфейса и/или протоколом обмена.)
  6. Транзакция (Transaction) — непрерывный процесс взаимодействия инициатора и исполнителя по интерфейсу с целью передачи данных (в любом направлении). Транзакция состоит из одной или более фаз данных.

Посылками, передаваемыми в каждой фазе данных через порты ADEP, являются слова, имеющие разрядность, соответствующую шинам тракта данных. Назначение битов в объеме слов данных здесь и далее не конкретизируется, его определяет протокол вышестоящего уровня, использующий модель обмена посылками фиксированной разрядности.

Во взаимодействии участвуют два агента:

  • порт ADEPI в роли инициатора;
  • порт ADEPT в роли исполнителя.

Данные в процессе взаимодействия передаются попеременно в одном из направлений: от инициатора к исполнителю и от исполнителя к инициатору.

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

Сигналы взаимодействия делятся на две группы:

  • тракт сигнализации (Control path);
  • тракт данных (Data path).

Тракт сигнализации содержит два сигнала:

  • строб инициатора STROBE_T;
  • строб исполнителя STROBE_R.

Тракт данных включает хотя бы одну шину данных (или обе):

  • ADATA_T — шина данных инициатора;
  • ADATA_R — шина данных исполнителя.

Топология соединения агентов при использовании асинхронного порта обмена данными показана на рис. 3.

Топология соединения асинхронных портов обмена данными

Рис. 3. Топология соединения асинхронных портов обмена данными

Информация передается в виде двоичных слов данных фиксированной разрядности, соответствующей ширине шин данных ADATA_T и ADATA_R. Функциональное назначение битов в объеме слова данных не регламентировано протоколом и может быть выбрано по усмотрению разработчика системы.

Обмен данными происходит после изменения состояния одного из стробов. Пример временной диаграммы, поясняющей взаимодействие агентов, представлен на рис. 4. После снятия сигнала асинхронного сброса RST (активный уровень «1») порт-инициатор ADEPI выдает действительные данные (VALID) на шину ADATA_T и устанавливает в «1» сигнал выходного строба STROBE_T (момент времени T0). Порт-исполнитель ADEPT фиксирует изменение строба STROBE_T и принимает данные на шине ADATA_T, после чего выдает действительные данные (VALID) на шину ADATA_R и изменяет значение своего выходного строба STROBE_R (момент времени T1). Данные на шине ADATA_T в момент Т1 считаются недействительными и находятся в переходном состоянии (Transition — TRANS). Далее порт-инициатор ADEPI фиксирует изменение строба STROBE_R и принимает данные на шине ADATA_R, после чего выдает действительные данные на шину ADATA_T и изменяет значение своего выходного строба STROBE_T (момент времени T2). Данные на шине ADATA_R в момент Т2 считаются недействительными и находятся в переходном состоянии (Transition — TRANS). Дальнейший обмен представляет собой циклическое чередование состояний T1 (данные передаются от инициатора к исполнителю) и T2 (данные передаются от исполнителя к инициатору).

Временная диаграмма асинхронного порта обмена данными

Рис. 4. Временная диаграмма асинхронного порта обмена данными

Задержки между сменой состояний сигналов не регламентированы данным протоколом и зависят от технической реализации.

Этот протокол накладывает ограничения на функционирование портов ADEP, регламентированные набором следующих правил:

  1. Агент должен выставить действительное слово данных на выходной шине ADATA_T или ADATA_R не позднее изменения выходного строба STROBE_T или STROBE_R.
  2. После изменения выходного строба STROBE_T или STROBE_R агент должен удерживать данные на выходной шине ADATA_T или ADATA_R до фиксации изменения входного строба.
  3. Агент должен принять входные данные после фиксации изменения входного строба, но не позже момента смены состояния выходного строба.
  4. После сброса инициатор начинает обмен первым: выдает действительные данные на выходе ADATA_T и изменяет сигнал на выходе STROBE_T из «0» в «1».
  5. После асинхронного сброса исходное состояние стробов STROBE_T и STROBE_R должно быть в «0», а данные на шинах ADATA_T и ADATA_R считаются недействительными.
  6. Фиксация исполнителем «1» на входе STROBE_T после сброса свидетельствует о наличии действительных данных на шине ADATA_T.

Алгоритм работы порта-инициатора ADEPI представлен на рис. 5.

Алгоритм работы порта ADEPI

Рис. 5. Алгоритм работы порта ADEPI

Алгоритм работы порта-исполнителя ADEPT представлен на рис. 6.

Алгоритм работы порта ADEPT

Рис. 6. Алгоритм работы порта ADEPT

Рекомендуется выровнять задержки распространения сигналов между агентами в объеме групп сигналов, имеющих одно направление, так, чтобы задержка распространения строба между агентами в любом из направлений была не меньше задержки данных в том же направлении. Это поможет избежать ситуации, когда из-за задержек изменение входного строба STROBE_x будет обработано раньше, чем на соответствующей шине ADATA_x установятся действительные данные.

Для сопряжения портов ADEP с синхронным интерфейсом ODPS, предназначенным для связи функциональных блоков внутри кристалла СБИС или проекта ПЛИС, описанным в [4], были разработаны две синтезируемые модели мостов. Первая модель моста передает транзакции с асинхронного порта ADEPT на синхронный порт IDEP. Вторая модель моста передает транзакции с синхронного порта TDEP на асинхронный порт ADEPI.

Модель первого моста называется FE_ADEPT_2_IDEP_V10, ее интерфейс представлен на рис. 7.

Интерфейс моста FE_ADEPT_2_IDEP_V10

Рис. 7. Интерфейс моста FE_ADEPT_2_IDEP_V10

На левой стороне изображены сигналы асинхронного порта ADEPT, на правой — сигналы синхронного порта IDEP.

Ширина входной шины ADATA_T и выходной шины DATA_T задается параметром DWIDTH_T (по умолчанию равен 8).

Ширина выходной шины ADATA_R и входной шины DATA_R задается параметром DWIDTH_R (по умолчанию равен 8).

Глубина (количество разрядов сдвигового регистра) синхронизатора асинхронного входа STROBE_T задается параметром SYNDEP (по умолчанию равен 2).

Параметр EN_FILTER_2T, равный 1 (по умолчанию равен 0), разрешает фильтрацию сигнала строба после синхронизации. Изменение входного строба фиксируется, если на выходе синхронизатора новое значение удерживается не менее двух тактов системной частоты.

Функциональная схема моста представлена на рис. 8. Триггеры и регистры, реализуемые в блоках ввода/вывода кристалла, выделены серым цветом.

Функциональная схема моста FE_ADEPT_2_IDEP_V10

Рис. 8. Функциональная схема моста FE_ADEPT_2_IDEP_V10

Входной сигнал строба STROBE_T поступает на синхронизатор SYN_STB_T. Синхронизированный сигнал строба поступает на триггер задержки DL_STB_T. Если параметр разрешения фильтрации входного строба EN_FILTER_2T не равен 1 (фильтрация не разрешена), то по несовпадению выхода синхронизатора со значением триггера DL_STB_T формируется признак изменения фронта входного строба FRONT_T. В случае, когда EN_FILTER_2T равен 1 (фильтрация разрешена), признак изменения фронта FRONT_T формируется по одновременному совпадению значений на выходе синхронизатора и триггера задержки (сигнал входного строба держится не менее двух тактов системной частоты) и несовпадению со значением триггера действительного уровня входного строба STB_T_ACTIVE. В этот момент происходит запись в триггер STB_T_ACTIVE нового действительного уровня входного строба.

При появлении признака FRONT_T и «0» на входе READY_T формируется сигнал CE_RDY_T, который устанавливает признак готовности передачи данных READY_T и разрешает запись данных с входной шины ADATA_T в регистр выходных данных DATA_T. Далее ожидается ответ исполнителя со стороны порта IDEP. При наличии готовности передачи данных READY_T в момент появления признака FRONT_T пришедший фронт строба нарушает протокол обмена и считается недействительным, а данные на входной шине ADATA_T теряются.

В момент передачи данных по порту IDEP (установленный в «1» сигнал готовности инициатора READY_T и «1» на входе сигнала готовности исполнителя READY_R) сигнал READY_T сбрасывается в «0», данные с входной шины DATA_R копируются в регистр выходных данных DATA_R, значение выходного строба STROBE_R меняется на противоположное. Дублирующий триггер STB_R обеспечивает перенос триггера STROBE_R в блок ввода/вывода в том случае, когда мост используется для асинхронной передачи данных между кристаллами.

Временная диаграмма работы моста представлена на рис. 9.

Временная диаграмма работы моста FE_ADEPT_2_IDEP_V10

Рис. 9. Временная диаграмма работы моста FE_ADEPT_2_IDEP_V10

Синтезируемая модель моста FE_ADEPT_2_IDEP_V10, описанная на языке Verilog, представлена ниже:

`timescale 1ns / 1ps
///////////////////////////////////////////////////////////////////////////////////////
// Engineer:	Frolova Elizaveta
//
// Create Date:	16:56:30 06/04/2018
// Design Name:	General purpose module
// Module Name:	FE_ADEPT_2_IDEP_V10
// Project Name:	Any
// Target Devices:	Any FPGA or ASIC
// Tool versions:	Xilinx DS 14.7
// Description:	Bridge for transition
//	from an target port ADEPT 
//	to initiator port IDEP with parameterized:
//	* width of data buses from the port ADEPT
//	to the port IDEP (DWIDTH_T)
//	* width of data buses from the port IDEP
//	to the port ADEPT (DWIDTH_R)
//	* synchronization depth (SYNDEP)
//	* input strobe filtering enable
//	(EN_FILTER_2T == 1 filtering is allowed)
//
// Revision:	1.0 (10.07.2018)
// Revision 1.0 - File Created (10.07.2018)
///////////////////////////////////////////////////////////////////////////////////////
module FE_ADEPT_2_IDEP_V10 #(
  parameter DWIDTH_T = 8,	// ADATA_T width
  parameter DWIDTH_R = 8,	// ADATA_R width
  parameter SYNDEP = 2,	// synchronization depth
  parameter EN_FILTER_2T = 0	// input filtering enable
)
(
  input CLK,
  input RST,

  input STROBE_T,
  input [DWIDTH_T-1:0] ADATA_T,
  output reg STROBE_R,

  output [DWIDTH_R-1:0] ADATA_R,

  output READY_T,
  output reg [DWIDTH_T-1:0] DATA_T,
  input READY_R,
  input [DWIDTH_R-1:0] DATA_R
  );

  reg [SYNDEP - 1:0] SYN_STB_T;
  reg DL_STB_T;
  reg STB_T_ACTIVE; // active level STROBE_T (for filtration)
  reg READY_T_TR;
  reg [DWIDTH_R-1:0] DAT_R;
  reg STB_R /* synthesis syn_preserve = 1 */;
  reg FRONT_T;
  wire CE_RDY_T;

  //SYN_STB_T
  always@(posedge CLK, posedge RST)
  if(RST) SYN_STB_T <= {SYNDEP{1’b0}};
  else
    begin
    SYN_STB_T <= SYN_STB_T << 1; 
    SYN_STB_T[0] <= STROBE_T;
    end

  //DL_STB_T
  always@(posedge CLK, posedge RST)
  if(RST) DL_STB_T <= 1’b0;
  else DL_STB_T <= SYN_STB_T[SYNDEP - 1];

  //STB_T_ACTIVE
  always@(posedge CLK, posedge RST)
  if(RST) STB_T_ACTIVE <= 1’b0;
  else if((SYN_STB_T[SYNDEP - 1] ~^ DL_STB_T) & 
                (SYN_STB_T[SYNDEP - 1] ^ STB_T_ACTIVE))
                  STB_T_ACTIVE <= DL_STB_T;

  //READY_T_TR
  always@(posedge CLK, posedge RST)
  if(RST) READY_T_TR <= 1’b0;
  else if(CE_RDY_T) READY_T_TR <= 1’b1;
  else if(READY_T_TR & READY_R) READY_T_TR <= 1’b0;

  //DATA_T
  always@(posedge CLK, posedge RST)
  if(RST) DATA_T <= {DWIDTH_T{1’b0}};
  else if(CE_RDY_T)	DATA_T <= ADATA_T;

  //DAT_R
  always@(posedge CLK, posedge RST)
  if(RST) DAT_R <= {DWIDTH_R{1’b0}};
  else if(READY_T_TR & READY_R) DAT_R <= DATA_R;

  // STB_R
  always@(posedge CLK, posedge RST)
  if(RST)
    begin
    STB_R <= 1’b0;
    STROBE_R <= 1’b0;
    end
  else 
    begin
    STB_R <= STB_R ^ (READY_T_TR & READY_R);
    STROBE_R <= STB_R ^ (READY_T_TR & READY_R);
    end

  always@(*)

  if(EN_FILTER_2T == 1)
    FRONT_T <= (SYN_STB_T[SYNDEP - 1] ~^ DL_STB_T) & 
                      (SYN_STB_T[SYNDEP - 1] ^ STB_T_ACTIVE);
  else 
    FRONT_T <= SYN_STB_T[SYNDEP - 1] ^ DL_STB_T;

  assign CE_RDY_T = FRONT_T & ~READY_T_TR;
  assign READY_T = READY_T_TR;
  assign ADATA_R = DAT_R;

endmodule

Модель второго моста называется FE_TDEP_2_ADEPI_V10, ее интерфейс представлен на рис. 10.

Интерфейс порта FE_TDEP_2_ADEPI_V10

Рис. 10. Интерфейс порта FE_TDEP_2_ADEPI_V10

На правой стороне изображены сигналы синхронного порта TDEP, на левой — сигналы асинхронного порта ADEPI.

Ширина выходной шины ADATA_T и входной шины DATA_T задается параметром DWIDTH_T (по умолчанию равен 8).

Ширина входной шины ADATA_R и выходной шины DATA_R задается параметром DWIDTH_R (по умолчанию равен 8).

Глубина (количество разрядов сдвигового регистра) синхронизатора асинхронного входа STROBE_R задается параметром SYNDEP (по умолчанию равен 2).

Параметр EN_FILTER_2T, равный 1 (по умолчанию равен 0), разрешает фильтрацию сигнала строба после синхронизации. Изменение входного строба фиксируется, если на выходе синхронизатора новое значение удерживается не менее двух тактов системной частоты.

Функциональная схема моста представлена на рис. 11. Триггера и регистры, реализуемые в блоках ввода/вывода, выделены серым цветом.

Функциональная схема моста FE_TDEP_2_ADEPI_V10

Рис. 11. Функциональная схема моста FE_TDEP_2_ADEPI_V10

После асинхронного сброса триггер состояния внутреннего автомата FSM_STATE устанавливается в «1», что говорит о готовности принятия данных с порта TDEP и передачи их на порт ADEPI.

При поступлении входного сигнала READY_T триггер состояния внутреннего автомата FSM_STATE сбрасывается в «0» (что говорит о переходе в состояние ожидания ответа от асинхронного порта ADEPI), а значение выходного строба STROBE_T меняется на противоположное. Дублирующий триггер STB_T обеспечивает перенос триггера STROBE_T в блок ввода/вывода в том случае, когда мост используется для асинхронной передачи данных между кристаллами. Значение выходного регистра данных DATA_T обновляется каждый такт системной частоты.

Далее ожидается ответ исполнителя на порте ADEPI.

Входной сигнал строба STROBE_R поступает на синхронизатор SYN_STB_R. Синхронизированный сигнал строба подается на триггер задержки DL_STB_R. Если параметр разрешения фильтрации входного строба EN_FILTER_2T не равен 1 (фильтрация не разрешена), то по несовпадению выхода синхронизатора со значением триггера DL_STB_R формируется признак изменения фронта входного строба FRONT_R. В случае, когда EN_FILTER_2T равен 1 (фильтрация разрешена), признак изменения фронта FRONT_R формируется по одновременному совпадению значений на выходе синхронизатора и триггера задержки (сигнал входного строба держится не менее двух тактов системной частоты) и несовпадению со значением триггера действительного уровня входного строба STB_R_ACTIVE. В этот момент происходит запись в триггер STB_R_ACTIVE нового состояния входного строба.

Если в момент появления признака FRONT_R не происходит перехода триггера состояния внутреннего автомата FSM_STATE в «0», формируется сигнал CE_RDY_R, который устанавливает признак готовности передачи данных RDY_R_FF и разрешает запись данных с входной шины ADATA_R в регистр выходных данных DATA_R.

Временная диаграмма работы моста представлена на рис. 12.

Временная диаграмма работы моста FE_TDEP_2_ADEPI_V10

Рис. 12. Временная диаграмма работы моста FE_TDEP_2_ADEPI_V10

Синтезируемая модель моста FE_TDEP_2_ADEPI_V10, описанная на языке Verilog, представлена ниже:

///////////////////////////////////////////////////////////////////////////////////////
// Engineer:	Frolova Elizaveta
//
// Create Date:	13:57:10 06/04/2018
// Design Name:	General purpose module
// Module Name:	FE_TDEP_2_ADEPI_V10
// Project Name:	Any
// Target Devices:	Any FPGA or ASIC
// Tool versions:	Xilinx DS 14.7
// Description:	Bridge for transition from a target port TDEP
//	to an asynchronous initiator port ADEPI
//	with parameterized:
//	* width of data buses from the port ADEPT
//	   to the port IDEP (DWIDTH_T)
//	* width of data buses from the port IDEP
//	   to the port ADEPT (DWIDTH_R)
//	* synchronization depth (SYNDEP)
//	* input strobe filtering enable
//	   (EN_FILTER_2T == 1 filtering is allowed)
//
// Revision:	1.0 (10.07.2018)
// Revision 1.0 - File Created (10.07.2018)
///////////////////////////////////////////////////////////////////////////////////////
module FE_TDEP_2_ADEPI_V10 #(
  parameter DWIDTH_T = 8,	// ADATA_T width
  parameter DWIDTH_R = 8,	// ADATA_R width
  parameter SYNDEP = 2,	// synchronization depth

  parameter EN_FILTER_2T = 0	// input filtering enable
)
(
  input CLK,
  input RST,

  input READY_T,
  input [DWIDTH_T -1:0] DATA_T,
  output READY_R,
  output reg [DWIDTH_R -1:0] DATA_R,

  output reg STROBE_T,
  output [DWIDTH_T -1:0] ADATA_T,
  input STROBE_R,
  input [DWIDTH_R -1:0] ADATA_R
  );

  reg [SYNDEP - 1:0] SYN_STB_R;
  reg DL_STB_R;
  reg STB_R_ACTIVE; // active level STROBE_R (for filtration)
  reg FRONT_R; // change STROBE_R
  reg READY_R_FF;
  reg FSM_STATE;
  reg STB_T /* synthesis syn_preserve = 1 */;
  reg [DWIDTH_T -1:0] DAT_T; 
  wire CE_RDY_R;

  // SYN_STB_R
  always@(posedge RST, posedge CLK)
  if(RST) SYN_STB_R <= {SYNDEP{1’b0}};
  else 
    begin
    SYN_STB_R <= SYN_STB_R << 1;
    SYN_STB_R[0] <= STROBE_R;
    end

  // DL_STB_R
  always@(posedge RST, posedge CLK)
  if(RST) DL_STB_R <= 1’b0;
  else DL_STB_R <= SYN_STB_R[SYNDEP - 1];

  // STB_R_ACTIVE
  always@(posedge RST, posedge CLK)
  if(RST) STB_R_ACTIVE <= 1’b0;
  else if ((SYN_STB_R[SYNDEP - 1] ~^ DL_STB_R) &
             (SYN_STB_R[SYNDEP - 1] ^ STB_R_ACTIVE))
               STB_R_ACTIVE <= DL_STB_R;

  // DAT_T
  always@(posedge RST, posedge CLK)
  if(RST) DAT_T <= {DWIDTH_T{1’b0}};
  else DAT_T <= DATA_T;

  //DATA_R
  always@(posedge RST, posedge CLK)
  if(RST) DATA_R <= {DWIDTH_R{1’b0}};
  else if(CE_RDY_R) DATA_R <= ADATA_R;

  // READY_R_FF
  always@(posedge RST, posedge CLK)
  if(RST) READY_R_FF <= 1’b0;
  else READY_R_FF <= FRONT_R;

  // FSM_STATE
  always@(posedge RST, posedge CLK)
  if(RST) FSM_STATE <= 1’b1;
  else if(FSM_STATE & READY_T)FSM_STATE <= 1’b0;
  else if(~FSM_STATE & READY_R_FF) FSM_STATE <= 1’b1;

  // STB_T
  always@(posedge RST, posedge CLK)
  if(RST) 
  begin
  STB_T <= 1’b0;
  STROBE_T <= 1’b0;
  end
  else 
    begin
    STB_T <= (READY_T & FSM_STATE) ^ STB_T;
    STROBE_T <= (READY_T & FSM_STATE) ^ STB_T;
    end

  //FRONT_R
  always@(*)
  if(EN_FILTER_2T == 1)
  FRONT_R <= (SYN_STB_R[SYNDEP - 1] ~^ DL_STB_R) &
                          (SYN_STB_R[SYNDEP - 1] ^ STB_R_ACTIVE);
  else 
    FRONT_R <= SYN_STB_R[SYNDEP - 1] ^ DL_STB_R;

  assign ADATA_T = DAT_T;
  assign READY_R = READY_R_FF;
  assign CE_RDY_R = FRONT_R & ~FSM_STATE;

endmodule

Для проверки результатов реализации рассмотренных моделей мостов в базисе ПЛИС FPGA ранних серий был создан проект конфигурации микросхемы Xilinx XC3S50-4TQ144, функциональная схема которого представлена на рис. 13. В проекте два модуля сопряжения портов ADEPT с IDEP и TDEP с ADEPI соединены в верхнем по иерархии блоке проекта посредством синхронного интерфейса ODPS, а на выводы ПЛИС трассируются сигналы асинхронных портов.

Функциональная схема верхнего блока иерархии тестового проекта ПЛИС

Рис. 13. Функциональная схема верхнего блока иерархии тестового проекта ПЛИС

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

Проект реализован в ПЛИС с минимальным ограничением периода синхросигнала 5 нс (тактовая частота 200 МГц) при следующих параметрах моделей мостов:

  • DWIDTH_T = 8;
  • DWIDTH_R = 8;
  • SYNDEP = 2;
  • EN_FILTER_2T = 1.

В результате размещения и трассировки оказались задействованы следующие ресурсы кристалла:

Logic Utilization:
  Number of Slice Flip Flops:	12 out of 1,536	1%
  Number of 4 input LUTs:	10 out of 1,536	1%
Logic Distribution:
  Number of occupied Slices:	10 out of 768	1%
  Number of Slices containing only related logic:	10 out of 10	100%
  Number of Slices containing unrelated logic:	0 out of 10	0%

  Total Number of 4 input LUTs:	10 out of 1,536	1%
  Number of bonded IOBs:	38 out of 97	39%
  IOB Flip Flops:	36
  Number of BUFGMUXs:	1 out of 8	12%

Для логической верификации блоков мостов были написаны на языке Verilog тестовые модули. Ниже приводится тестовое окружение для моста FE_ADEPT_2_IDEP_V10:

`timescale 1ns / 1ps
module TB_FE_ADEPT_2_IDEP();

  localparam DWIDTH_T = 8;
  localparam DWIDTH_R = 12;

  reg CLK;
  reg RST;
  wire READY_T;
  wire [7:0] DATA_T;
  reg READY_R;
  reg [7:0] DATA_R;

  reg STROBE_T;
  reg [7:0] ADATA_T;
  wire	STROBE_R;
  wire [7:0] ADATA_R;

  FE_ADEPT_2_IDEP_V10 #(
  .DWIDTH_T(DWIDTH_T),	// ADATA_T width
  .DWIDTH_R(DWIDTH_R),	// ADATA_R width
  .SYNDEP(2),	// synchronization depth
  .EN_FILTER_2T(0)
  )
  uut (
  .CLK(CLK),
  .RST(RST),
  .READY_T(READY_T),
  .DATA_T(DATA_T),
  .READY_R(READY_R),
  .DATA_R(DATA_R),

  .STROBE_T(STROBE_T),
  .ADATA_T(ADATA_T),
  .STROBE_R(STROBE_R),
  .ADATA_R(ADATA_R)
  );

  //-----------------------------------------------------------------------
  // Master_Clock Generator 
  parameter PERIOD_CLK = 10; 

  initial
    forever
      begin
        CLK = 1’b0;
        #(PERIOD_CLK/2);
        CLK = 1’b1;
        #(PERIOD_CLK/2);
      end
  //-----------------------------------------------------------------------

  initial begin
  RST = 1;
STROBE_T = 0;
ADATA_T = 8’h00;
READY_R = 0;
DATA_R = 8’h00;

@(posedge CLK);
#(PERIOD_CLK*2.2);
  RST = 0;

@(posedge CLK);
#(PERIOD_CLK*2.2);

STROBE_T = ~STROBE_T;
ADATA_T = 8’h11;

@(posedge READY_T)
@(posedge CLK);
#(PERIOD_CLK*2.2);
READY_R = 1;
DATA_R = 8’h21;
@(posedge CLK);
#(PERIOD_CLK*0.2);
READY_R = 0;
DATA_R = 8’h00;

@(posedge CLK);
#(PERIOD_CLK*5.2);
STROBE_T = ~STROBE_T;
ADATA_T = 8’h12;

@(posedge READY_T)
@(posedge CLK);
#(PERIOD_CLK*2.2);
READY_R = 1;
DATA_R = 8’h22;
@(posedge CLK);
#(PERIOD_CLK*0.2);
READY_R = 0;
DATA_R = 8’h00;

@(posedge CLK);
#(PERIOD_CLK*2.2);

$stop;
  end

endmodule

Результаты верификации блока FE_ADEPT_2_IDEP_V10, полученные в виде временной диаграммы в симуляторе Xilinx ISim, приведены на рис. 14. Они совпадают с временной диаграммой работы моста на рис. 9.

Результаты верификации блока FE_ADEPT_2_IDEP_V10

Рис. 14. Результаты верификации блока FE_ADEPT_2_IDEP_V10

Для блока FE_TDEP_2_ADEPI_V10 описана на языке Verilog следующая тестовая модель:

`timescale 1ns / 1ps

module TB_TDEP_2_ADEPI_V10 ();

  localparam DWIDTH_T = 8;
  localparam DWIDTH_R = 12;

  reg CLK;
  
reg RST;
  reg READY_T;
  reg [DWIDTH_T-1:0] DATA_T;
  wire READY_R;
  wire [DWIDTH_R-1:0] DATA_R;

  wire STROBE_T;
  wire [DWIDTH_T-1:0] ADATA_T;
  reg STROBE_R;
  reg [DWIDTH_R - 1:0] ADATA_R;

  FE_TDEP_2_ADEPI_V10 #(
  .DWIDTH_T(DWIDTH_T),	// ADATA_T width
  .DWIDTH_R(DWIDTH_R),	// ADATA_R width
  .SYNDEP(2),	// synchronization depth
  .EN_FILTER_2T(0)
)
  uut1 (
  .CLK(CLK),
  .RST(RST),
  .READY_T(READY_T),
  .DATA_T(DATA_T),
  .READY_R(READY_R),
  .DATA_R(DATA_R),

  .STROBE_T(STROBE_T),
  .ADATA_T(ADATA_T),
  .STROBE_R(STROBE_R),
  .ADATA_R(ADATA_R)
  );

  //-----------------------------------------------------------------------
  // Master_Clock Generator 
  parameter PERIOD_CLK = 10; 

  initial
    forever
      begin
        CLK = 1’b0;
        #(PERIOD_CLK/2);
        CLK = 1’b1;
        #(PERIOD_CLK/2);
      end
  //-----------------------------------------------------------------------

  initial begin
  RST = 1;
READY_T = 0;
DATA_T = 8’h00;
STROBE_R = 0;
ADATA_R = 12’h000;

@(posedge CLK);
#(PERIOD_CLK*2.2);
  RST = 0;

@(posedge CLK);
#(PERIOD_CLK*2.2);


READY_T = 1;
DATA_T <= 8’h11;

@(STROBE_T)
@(posedge CLK);
#(PERIOD_CLK*4.2);
STROBE_R = ~STROBE_R;
ADATA_R = 12’h021;

@(posedge READY_R)
@(posedge CLK);
#(PERIOD_CLK*0.2);
DATA_T <= 8’h12;

@(STROBE_T)
@(posedge CLK);
#(PERIOD_CLK*4.2);
STROBE_R = ~STROBE_R;
ADATA_R = 12’h022;

@(posedge READY_R)
@(posedge CLK);
#(PERIOD_CLK*0.2);
READY_T = 0;

#(PERIOD_CLK*8.2);

$stop;
  end
endmodule

Результаты верификации блока FE_TDEP_2_ADEPI_V10, полученные в виде временной диаграммы в симуляторе Xilinx ISim, представлены на рис. 15. Они совпадают с временной диаграммой работы моста на рис. 12.

Результаты верификации блока FE_TDEP_2_ADEPI_V10

Рис. 15. Результаты верификации блока FE_TDEP_2_ADEPI_V10

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

  • простоту построения инициатора и исполнителя;
  • отсутствие особенных требований к блокам ввода/вывода кристалла;
  • способность работы как на стандартных логических сигналах, так и на дифференциальных линиях связи;
  • возможность поочередной передачи слов данных в двух направлениях.

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

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

В качестве примеров протоколов вышестоящего уровня, способных использовать описанный асинхронный интерфейс, можно привести синхронный системный стык STI, описанный в [5], и интерфейсы FIFO, предложенные в [6, 7, 8, 9].

Литература
  1. realintent.com/products/meridian-cdc/ссылка утрачена/
  2. Брей Б. Микропроцессоры Intel: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro, Pentium II, Pentium III, Pentium 4. Архитектура, программирование и интерфейсы. 6‑е издание. Пер. с англ. СПб, БХВ‑Петербург, 2005.
  3. Угрюмов Е. П. Цифровая схемотехника. 2‑е изд. СПб, ВХВ‑Петербург, 2004.
  4. Борисенко Н. В. Набор унифицированных протоколов для организации синхронного взаимодействия функциональных узлов и блоков цифровой аппаратуры. Часть 1 // Компоненты и технологии. 2018. № 8.
  5. Борисенко Н. В. Синхронный системный интерфейс взаимодействия вычислительных ядер с периферийными блоками кристалла СБИС // Компоненты и технологии. 2016. № 10.
  6. Борисенко Н. В. Подходы к организации унифицированного ряда синтезируемых моделей буферов FIFO, реализуемых в различных семействах программируемой логики. Часть 1 // Компоненты и технологии. 2012. № 12.
  7.  Борисенко Н. В. Схемы включения буферов FIFO с унифицированным интерфейсом в тракт данных между источником и приемником информации //
    Компоненты и технологии. 2013. № 2.
  8. Борисенко Н. В. Организация синхронных буферов FIFO с унифицированным интерфейсом, построенных на регистрах общего назначения в объеме микросхем программируемой логики // Компоненты и технологии. 2016. № 8.
  9. Борисенко Н. В. Организация масштабируемого блока управления синхронным буфером FIFO с унифицированным интерфейсом // Компоненты и технологии. 2017. № 1.

 

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *