Хабрахабр

Организация шинной инфраструктуры, соединяющей агенты системного интерфейса STI версии 1.0

В статье изложены принципы построения инфраструктуры локальной системной шины, соединяющей агенты одного сегмента стыка простого исполнителя STI версии 1.0 в объёме кристалла СБИС или ПЛИС. Рассмотрена организация дешифратора адреса, коммутаторов шин чтения данных и выборки исполнителя. Приведен пример описания шинной инфраструктуры сегмента STI на языке Verilog. Предложены варианты подключения исполнителей к сегментам шины с меньшей разрядностью данных.
Стык простого исполнителя – Simple Target Interface (далее – STI) представляет собой набор логических сигналов и протокол взаимодействия, обеспечивающий соединение нескольких функциональных блоков в объёме одного проекта конфигурации ПЛИС или кристалла СБИС (далее — проекта). Спецификация интерфейса STI версии 1.0 была опубликована в статье [1].
В спецификации была введена используемая далее терминология и определены базовые принципы подключения исполнителей STI к инициатору в рамках одного сегмента.

При этом два исполнителя имеют разрядность данных 32 и 8 бит. В качестве примера предлагается рассмотреть сегмент 64-р шины STI, объединяющий инициатор и четыре исполнителя. 1. Структурная схема такого сегмента STI представлена на рис.

1. image
Рис. Структурная схема сегмента STI

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

Распределение адресных диапазонов по исполнителям приведено в табл. Рассмотрим пример, в котором четыре исполнителя имеют ресурсы в пространстве адресов ввода-вывода и памяти. 1.

Таблица 1.

Исполнитель

Адресное пространство

ADDR[25]

ADDR[24]

ADDR[23]

ADDR[22]

ADDR[21]

ADDR[20]

ADDR[19]

ADDR[18]

ADDR[17]

ADDR[16]

Ёмкость, байт

DC_1

DC_2

DC_3

DC_4

Target_A

Память

1

0

0

X

X

X

X

X

X

X

1

0

0

0

Target_B

Память

0

0

0

0

X

X

X

X

X

X

0

1

0

0

Target_C

Память

1

0

1

1

X

X

X

X

X

X

0

0

1

0

Target_D

Память

1

0

1

0

0

0

1

0

1

1

64К

0

0

0

1

Target_D

В/В

1

0

0

X

X

X

X

X

X

X

0

0

0

1

Target_C

В/В

0

0

0

0

X

X

X

X

X

X

0

0

1

0

Target_B

В/В

1

0

1

1

X

X

X

X

X

X

0

1

0

0

Target_A

В/В

1

0

1

0

0

0

1

0

1

1

64К

1

0

0

0

Функциональная схема организации шинной инфраструктуры сегмента STI показана на рис. 2.
Выборку исполнителя согласно текущему адресу и коду команды (команда определяет адресное пространство) выполняет дешифратор адреса – address decoder. Единица на первом выходе дешифратора адреса сигнализирует обращение к исполнителю-A, единица на втором выходе – к исполнителю-B, и т.д. Двоичный код на выходе дешифратора показан в табл.1.

Каждый из этих сигналов подаётся на логический вентиль-И, разрешающий проход сигнала запроса S_EX_REQ на выбранный исполнитель, а также подаётся на коммутирующий узел – мультиплексор (MUX).
Мультиплексор коммутирует выходные сигналы исполнителей (S_EX_ACK и S_D_RD) на входы инициатора. Выходы дешифратора адреса управляют сигналами выборки исполнителей: FB1_EN, FB2_EN, FB3_EN и FB4_EN для Target-A, Target-B, Target-C и Target-D, соответственно. Последнее требование обусловлено тем, что обращение инициатора по адресу, не принадлежащему ни одному исполнителю, не должно приводить к «зависанию» системы из-за наличия нуля на входе S_EX_ACK. При этом в каждый момент времени на инициатор должны поступать сигналы только от одного исполнителя (выбранного дешифратором), либо подаваться все единицы. Чтение данных из несуществующего ресурса в большинстве систем возвращает комбинацию из всех единиц.

Дешифратор и мультиплексор являются комбинационными логическими схемами, срабатывающими в пределах одного такта синхросигнала (между соседними восходящими фронтами).

2. image
Рис. Функциональная схема организации шинной инфраструктуры сегмента STI

Вследствие этого выборка исполнителя-D осуществляется с учётом активности байта шины данных, к которому подключен этот исполнитель. Следует отдельно отметить, что исполнитель-D не имеет входа выборки байтов S_NBE, так как оснащён 8-разрядным интерфейсом STI. Логический вентиль ИЛИ на выходе S_EX_ACK этого исполнителя пропускает сигнал готовности на мультиплексор также при условии S_NBE[0] = «0». Из функциональной схемы видно, что использован младший байт шин данных, поэтому исполнитель-D доступен только при условии активности младшего байта данных: S_NBE[0] = «0». В противном случае на мультиплексор поступает высокий уровень, предотвращающий «зависание».

За байты со смещение адреса 0, 1, 2 и 3, передаваемые по этим линиям данных, отвечают сигналы разрешения байтов S_NBE[3:0]. Подключение 32-разрядного исполнителя-C к 64-разрядному сегменту STI реализовано с использованием младшей половины шин данных [31:0]. Исполнитель STI обязан корректно отвечать на такой цикл. В данном случае сигналы разрешения байтов не участвуют в формировании сигнала активации исполнителя FB3_S_EX_REQ, потому что циклы обращения к старшей половине шины данных (байтам со смещением адреса 4, 5, 6 и 7) вызовут пустой цикл на 32-разрядном интерфейсе исполнителя-C, при котором все четыре младших байта деактивированы.

image
а,

image
б,

image
в

3. Рис. Логическая организация мультиплексора

Каноническая схема мультиплексора строится по принципу ДНФ (дизъюнктивной нормальной формы преставления функции в двоичной алгебре). Рассмотрим организацию мультиплексора, коммутирующего выходные сигналы исполнителей на входы инициатора. Первый каскад включает вентили И (конъюнкции в формуле ДНФ), а второй каскад – объединяющий элемент ИЛИ (дизъюнкции в ДНФ). Схема на основе ДНФ состоит из двух каскадов. 3, а. Такая схема для трёхвходового мультиплексора показана на рис. Когда ни один из входов мультиплексора не выбран, такая схема даст на выходе низкий уровень, что не соответствует вышеизложенным требованиям для коммутатора сигнала S_EX_ACK. Принцип действия мультиплексора на основе ДНФ заключается в пропускании единиц первым каскадом только с выбранного входа.

3, б. Второй вариант организации мультиплексора показан на рис. Нетрудно заметить, что при наличии всех нулей на входах разрешения, когда не выбран ни один исполнитель, такой мультиплексор выдаёт на выходе единицу, удовлетворяя требованиям сигнала S_EX_ACK на входе инициатора. Эта схема построена по принципу КНФ (конъюнктивной нормальной формы) и состоит из двух каскадов, первый из которых включает вентили ИЛИ, пропускающие логический ноль только с выбранного входа, а второй каскад содержит объединяющий элемент И, работающий по принципу: хотя бы один ноль – на выходе ноль.

Именно мультиплексор на основе КНФ рекомендуется использовать при описании инфраструктуры шины стыка простого исполнителя – STI.

Тристабильный буфер в примере на рис. В некоторых базисах элементов СБИС и ранних архитектурах ПЛИС допускается использовать элементы с тремя состояниями на выходе (тристабильные буферы) не только в блоках ввода-вывода, но и в ядре. Коммутатор, основанный на разделяемой линии связи S_EX_ACK, которой управляют тристабильные буферы, показан на рис. 3, в передаёт сигнал IN_x на выход при наличии единицы на управляющем входе EN_x, иначе выход находится в третьем состоянии – «Z». Подтягивающий резистор задаёт значение сигнала на разделяемой линии связи, в том случае, когда все буферы выключены (не выбран ни один исполнитель). 3, в. Таким образом, выполняется требование к коммутатору сигнала S_EX_ACK. Резистор Pull-Up формирует логическую единицу в положительной логике.

3, б и рис. Следует отметить, что с точки зрения двоичной логики схемы на рис. В коммутаторе исполнителей STI может быть выбран только один исполнитель, либо не выбран ни один, что соответствует требованию для схемы на рис. 3, в идентичны на том наборе входных комбинаций, когда единица на разрешающих входах EN_x присутствует не более чем в одной позиции. Схема подобная рис. 3, в. 3, в. 3, б формируется многими синтезаторами HDL автоматически из RTL-модели, аналогичной рис.

Неиспользуемые старшие разряды данных на шинах чтения исполнителей C и D, дополняющие разрядность до 64 бит, установлены в нули постоянным соединением с цепью «цифровой земли» — GND.

2 связан с шиной адреса исполнителя-D. Ещё один интересный момент в функциональной схеме на рис. Например, блок памяти определённой ёмкости, требующей соответствующего адресного диапазона, или мост интерфейса, рассчитанный на полный формат адреса — 32 бита. В некоторых случаях к локальной системной шине требуется подключить разработанный ранее библиотечный блок, обладающий некоторой универсальностью. В нашем примере на неиспользованные входы S_ADDR[31:20] исполнителя -D поданы нули. В случае, если этот блок в текущей конфигурации системы использует не полный диапазон адресов, на старшие незадействованные биты входа S_ADDR следует подать константы.

Это обусловлено особенностью байтовой адресации. При подключении исполнителя с меньшей разрядностью данных к сегменту с большей разрядностью появляется эффект чередования адресов ресурсов этого исполнителя с неиспользованными адресами. Таким образом, адреса, соответствующие неиспользованным линиям шин данных, будут чередоваться с адресами ресурсов исполнителя, доступных по остальным линиям. Байты, адрес которых заканчивается на «000» всегда будут передаваться по разрядам [7:0] 64-разрядных шин данных, для байтов с адресами, заканчивающимися на «001» используются разряды [15:8], и т.д.… для байтов с адресом, содержащим в младших разрядах «111» задействуются линии данных [63:56].

B, а между «соседними» ресурсами исполнителя-C будет 4 неиспользованных байта, доступ к которым выполняется по линиям данных [63:32]. Исходя из вышесказанного, ресурсы исполнителя-C будут располагаться по адресам, шестнадцатиричное представление которых заканчивается цифрами 0…3 и 8..

Аналогично ресурсы исполнителя-D будут доступны по адресам, заканчивающимся на 0h и 8h, с шагом +8.

Иными словами, адрес 32-разрядного слова данных для исполнителя-C становится адресом 64-разрядного слова данных в сегменте STI, и адрес байта в объёме исполнителя-D тоже становится адресом 64-разрядного слова в сегменте STI. Следует отметить, что подключение исполнителей C и D реализовано со сдвигом шины адреса на 1 и 3 бита соответственно.

Организация такого моста выходит за рамки темы этой статьи. Для того чтобы подключить к сегменту STI исполнитель с меньшей разрядностью шин данных, так, чтобы его ресурсы располагались в адресном пространстве системы (процессора) последовательно и непрерывно, нужно использовать дополнительны функциональный блок – мост, разбивающий цикл обращения с большей разрядностью данных на 2 и более цикла с разрядностью данных исполнителя обмена.

2, на языке Verilog: Ниже приведён пример описания инфраструктуры сегмента STI, показанной на рис.

`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////
// Engineer: FPGA-Mechanic
//
// Create Date: 09:38:35 03/03/2017
// Design Name: Argon SoC Proto
// Module Name: STI_EXAMPLE
// Project Name: Argon Otd.23 Projects
// Target Devices: Any FPGA or ASIC
// Tool versions: Xilinx 14.7
// Description: Test-purpose synthesizable STI module
//
////////////////////////////////////////////////////////////////////////
module STI_EXAMPLE( input CLK, input RST ); // Internal signals declaration:
// STI-64: wire S_EX_REQ, wire [25:3] S_ADDR, wire [7:0] S_NBE, wire [2:0] S_CMD, wire [63:0] S_D_WR, wire S_EX_ACK, wire [63:0] S_D_RD,
//------------------------------------------
// Initiator: STI_64b_Initiator INITR( .CLK(CLK), .RST(RST), .S_EX_REQ(S_EX_REQ), .S_ADDR(S_ADDR), .S_NBE(S_NBE), .S_CMD(S_CMD), .S_D_WR(S_D_WR), .S_EX_ACK(S_EX_ACK), .S_D_RD(S_D_RD) );
//------------------------------------------
// STI Bus Infrastructure: reg FB1_EN, FB2_EN, FB3_EN, FB4_EN; wire FB1_S_EX_REQ, FB2_S_EX_REQ, FB3_S_EX_REQ, FB4_S_EX_REQ; wire [63:0] FB1_S_D_RD, FB2_S_D_RD, FB3_S_D_RD, FB4_S_D_RD; wire FB1_S_EX_ACK, FB2_S_EX_ACK, FB3_S_EX_ACK, FB4_S_EX_ACK; always @ (S_ADDR[25:16], S_CMD) if((~S_CMD[2] & S_CMD[0]) | (S_CMD[2] & ~S_CMD[1] & S_CMD[0]) | &(S_CMD[2:1])) // Memory CMD: 0X1,101,11X case(S_ADDR[25:23]) 3'b100 : // 100XXXXXXX begin FB1_EN <= 1'b1; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end 3'b000 : // 000XXXXXXX if(S_ADDR[22] == 1'b0) // 0000XXXXXX begin FB1_EN <= 1'b0; FB2_EN <= 1'b1; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end else // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end 3'b101 : // 101XXXXXXX if(S_ADDR[22]) // 1011XXXXXX begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b1; FB4_EN <= 1'b0; end else if(S_ADDR[21:16] == 6'b001011) // 1010001011 begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b1; end else // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end default : // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end endcase else // IO CMD: 0X0,100 case(S_ADDR[25:23]) 3'b100 : // 100XXXXXXX begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b1; end 3'b000 : // 000XXXXXXX if(S_ADDR[22] == 1'b0) // 0000XXXXXX begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b1; FB4_EN <= 1'b0; end else // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end 3'b101 : // 101XXXXXXX if(S_ADDR[22]) // 1011XXXXXX begin FB1_EN <= 1'b0; FB2_EN <= 1'b1; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end else if(S_ADDR[21:16] == 6'b001011) // 1010001011 begin FB1_EN <= 1'b1; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end else // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end default : // No Resource begin FB1_EN <= 1'b0; FB2_EN <= 1'b0; FB3_EN <= 1'b0; FB4_EN <= 1'b0; end endcase and (FB1_S_EX_REQ, FB1_EN, S_EX_REQ); and (FB2_S_EX_REQ, FB2_EN, S_EX_REQ); and (FB3_S_EX_REQ, FB3_EN, S_EX_REQ); and (FB4_S_EX_REQ, FB4_EN, S_EX_REQ, ~S_NBE[0]); // Acknowledge MUX: assign S_EX_ACK = (~FB1_EN | FB1_S_EX_ACK) & (~FB2_EN | FB2_S_EX_ACK) & (~FB3_EN | FB3_S_EX_ACK) & (~(FB4_EN) | S_NBE[0] | FB4_S_EX_ACK); // Read Data MUX: assign S_D_RD = (~} | FB1_S_D_RD) & (~{64{FB2_EN}} | FB2_S_D_RD) & (~{64{FB3_EN}} | FB3_S_D_RD) & (~{64{FB4_EN}} | FB4_S_D_RD);
//------------------------------------------
// Target-A: STI_64b_Target_A TARGET_A( .CLK(CLK), .RST(RST), .S_EX_REQ(FB1_S_EX_REQ), .S_ADDR(S_ADDR[22:3]), .S_NBE(S_NBE), .S_CMD(S_CMD), .S_D_WR(S_D_WR), .S_EX_ACK(FB1_S_EX_ACK), .S_D_RD(FB1_S_D_RD) );
//------------------------------------------
// Target-B: STI_64b_Target_B TARGET_B( .CLK(CLK), .RST(RST), .S_EX_REQ(FB2_S_EX_REQ), .S_ADDR(S_ADDR[21:3]), .S_NBE(S_NBE), .S_CMD(S_CMD), .S_D_WR(S_D_WR), .S_EX_ACK(FB2_S_EX_ACK), .S_D_RD(FB2_S_D_RD) );
//------------------------------------------
// Target-C: STI_32b_Target_C TARGET_C( .CLK(CLK), .RST(RST), .S_EX_REQ(FB3_S_EX_REQ), .S_ADDR(S_ADDR[21:3]), .S_NBE(S_NBE[3:0]), .S_CMD(S_CMD), .S_D_WR(S_D_WR[31:0]), .S_EX_ACK(FB3_S_EX_ACK), .S_D_RD(FB3_S_D_RD[31:0]) ); assign FB3_S_D_RD[63:32] = {32{1'b0}};
//------------------------------------------
// Target-D: STI_8b_Target_D TARGET_D( .CLK(CLK), .RST(RST), .S_EX_REQ(FB4_S_EX_REQ), .S_ADDR({12'h000, S_ADDR[22:3]}), .S_CMD(S_CMD), .S_D_WR(S_D_WR[7:0]), .S_EX_ACK(FB4_S_EX_ACK), .S_D_RD(FB4_S_D_RD[7:0]) ); assign FB4_S_D_RD[63:8] = {56{1'b0}};
//------------------------------------------ //------------------------------------------ //------------------------------------------ //------------------------------------------ //------------------------------------------
endmodule

Собственно сама инфраструктура сегмента STI описана в блоке кода, ограниченном комментарием «STI Bus Infrastructure».

Рассмотрим пример подключения 64-разрядного исполнителя к сегменту с 16-разрядными шинами данных. Интерфейс STI позволяет подключить исполнители с большей шириной шины данных к сегменту с меньшей разрядностью. 4. Функциональная схема такого подключения приведена на рис.

4. image
Рис. Подключение 64-разрядного исполнителя к 16-разрядному сегменту STI

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

Коммутирующие узлы представлены демультиплексором (DMX), буферами, дублирующими шину записи данных сегмента S_D_WR на соответствующие равные группы битов шины записи исполнителя, и мультиплексором (MX) шины чтения данных.

В рассматриваемом примере младшими битами адреса, управляющими коммутацией, являются S_ADDR[2:1]. Демультиплексор пропускает сигналы разрешения байтов S_NBE сегмента STI на соответствующие входы разрешения байтов исполнителя на основании младших битов адреса. На выходах демультиплексора, которые не выбраны текущей комбинацией S_ADDR[2:1] формируются логические единицы, запрещающие обращения к байтам, адрес которых на 16-разрядной шине не соответствует текущему адресу.

4, показана на рис. Функциональная схема демультиплексора, соответствующая конфигурации на рис. 5.

5. image
Рис. Функциональная схема демультиплексора

Так при S_ADDR[2:1] = 0h на выход S_D_RD[15:0] транслируются сигналы S_D_RD[15:0] исполнителя, при S_ADDR[2:1] = 1h – сигналы S_D_RD[31:16], при S_ADDR[2:1] = 2h – сигналы S_D_RD[47:32], при S_ADDR[2:1] = 3h – сигналы S_D_RD[63:48].
Немного отличается подключение 16,32 и 64 разрядных исполнителей к 8-разрядному сегменту STI, ибо в таком сегменте нет сигнала выборки байтов S_NBE. Мультиплексор представляет собой стандартный логический комбинационный узел, коммутирующий один из входных сигналов на выход в зависимости от управляющей комбинации – младших битов адреса. Если к определённому байту обращение не производится, на 8-разрядном сегменте не формируется соответствующий цикл обмена.

6. Пример подключения 16-разрядного исполнителя к 8-разрядному сегменту иллюстрирует рис.

6. image
Рис. Подключение 16-разрядного исполнителя к 8-разрядному сегменту STI

При обращении к младшему (чётному) байту бит адреса S_ADDR[0] содержит ноль, проходящий через буфер на вход исполнителя S_NBE[0]. Сигналы разрешения байтов S_NBE для 16-разрядного исполнителя формирует дешифратор адреса 1:2, построенный на буфере и инверторе. Одновременно на входе S_NBE[1] формируется единица, запрещающая обмен по линиям данных [15:8]. Таким образом, разрешается обмен данными по линиям [7:0]. При обращении к старшему (нечётному) байту исполнителя бит адреса S_ADDR[0] содержит единицу, что приводит к противоположной ситуации, когда обмен ведётся по линиям [15:8].

Мультиплексор – MX коммутирует на 8-разрядную шину чтения данных S_D_RD один из двух байтов выхода чтения исполнителя следующим образом: при нуле в бите адреса S_ADDR[0] на выход S_D_RD передаются данные [7:0] с выхода исполнителя, а при единице – данные [15:8].
Данные для записи дублируются на оба байта входа S_D_WR исполнителя, но производится запись только одного байта в зависимости от S_ADDR[0] и S_NBE[1:0], соответственно.

Мультиплексор при этом имеет формат 4:1 и управляется также битами адреса S_ADDR[1:0]. При подключении к 8-разрядному сегменту STI 32-разрядного исполнителя дешифратор адреса имеет формат 2:4 (с инверсными выходами) и конвертирует биты адреса S_ADDR[1:0] в S_NBE[3:0]. Мультиплексор 8:1 коммутирует байты на шине чтения данных согласно комбинации трех младших битов адреса. При подключении 64-разрядного исполнителя дешифратор 3:8 (с инверсными выходами) конвертирует биты адреса S_ADDR[2:0] в сигналы разрешения байтов S_NBE[7:0].

Выводы.

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

Описание дешифратора адреса на поведенческом уровне абстракции с использованием условных операторов if/case позволяет избежать трудоёмкого синтеза комбинационных цепей методами булевой алгебры.

Протокол взаимодействия агентов STI позволяет использовать исполнители с различной разрядностью шин адреса и данных в одном сегменте шины.

Список литературы

Борисенко Н. 1. Синхронный системный интерфейс взаимодействия вычислительных ядер с периферийными блоками кристалла СБИС. В. 2016.
2. «Компоненты и технологии» №10. By Pong P. RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability. John Wiley & Sons, Inc. Chu. Борисенко Н. 2006.
3. Подходы к организации унифицированного ряда синтезируемых моделей буферов FIFO, реализуемых в различных семействах программируемой логики. В. «Компоненты и технологии» №12. Часть 1. Борисенко Н. 2012.
4. Схемы включения буферов FIFO с унифицированным интерфейсом в тракт данных между источником и приёмником информации. В. 2013.
5. «Компоненты и технологии» №2. В. Борисенко Н. «Компоненты и технологии» №8. Организация синхронных буферов FIFO с унифицированным интерфейсом, построенных на регистрах общего назначения в объёме микросхем программируемой логики. 2016.

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть