УДК 004.334 DOI: 10.21661/r-81019
П.Е. Соколов, А.С. Бутов, И.С. Пеплов
Методика разработки RTL асинхронного блока FIFO, оптимизированного по площади и потреблению
Аннотация
В данной статье представлено несколько новых проектов асинхронных буферов FIFO. В то время как многие из существующих буферов FIFO имеют высокую пропускную способность при высокой латентности, цель авторов заключается в достижении низкой латентности, сохраняя хорошую пропускную способность. Архитектуры в данной статье основаны на круговых массивах памяти, ячейки которых подключены к общим шинам данных. Данные не перемещаются в памяти после их включения в очередь. Чтение и запись из каждой ячейки контролируется двумя охватывающими весь массив памяти по кругу указателями: один указатель позволяет включать данные в очередь, а другой - извлекать из неё. С того момента, когда были найдены проблемы в природе кода Грея, обе архитектуры, представленные в этой статье, используют модифицированные счетчики кодов Грея для сравнения указателей и адресации массива памяти. В первой архитектуре представленного буфера FIFO массив памяти адресуется двоичным кодом в то время как указатели конвертируются в код Грея и сравниваются синхронно. Во второй архитектуре FIFO массив памяти адресуется кодами Грея, но сравнение указателей происходит асинхронно. Эти изменения дают преимущество над первой архитектурой в снижении латентности и потребляемой мощности.
I
Ключевые слова: асинхронные FIFO, модифицированные счетчики, код Грея, обобщение, сравнение указателей.
P.E. Sokolov, A.S. Butov, I.S. Peplov
RTL design techniques of asynchronous FIFO memory blocks with area and power consumption optimizations
Abstract
This paper presents several new asynchronous FIFO designs. While most existing FIFO's have higher throughput for higher latency, our goal is to achieve very low latency while maintaining good throughput. The designs are implemented as circular arrays of cells connected to common data buses. Data items are not moved around the array once; they are enqueued. Each cell's input and output behavior is dictated by the flow of two tokens around the ring: one that allows enqueuing data and one that allows dequeuing data. Since the problems were found in gray code's nature, both FIFO architectures represented in this paper use a modified gray code counters to pointers comparison and addressing the memory array. In the first architecture of FIFO buffer, memory array is addressed by binary code while the pointers are converted to gray codes and compared synchronously. In the second architecture of FIFO buffer memory array is addressed by gray code, but the gray code pointers comparison proceeds asynchronously. These changes give the advantage over the first architecture to reduce latency and power consumption.
| Keywords: asynchronous FIFO, Gray count modification, synthesis, pointers comparison.
Современные отечественные высокопроизводительные СБИС и СнК (системы на кристалле) требуют наличия надёжных быстродействующих средств обмена данными с периферийными устройствами и блоками, которые работают на
других, порой более низких частотах, чем сама СБИС или СнК.
Подобными и популярными на сегодняшний день средствами являются буферы памяти типа FIFO («First In, First Out»).
В электронных системах, такие буферы рекомендуется устанавливать между устройствами, работающими на разных скоростях или нерегулярно. В противном случае, самый медленный компонент определяет скорость работы остальных, вовлеченных в обмен данными. Такими электронными системами могут являться связки высокопроизводительных процессоров и периферийных блоков сбора и обработки информации.
Принцип работы FIFO заключается в последовательной загрузке данных внутрь буфера на одной частоте и последовательной выгрузке их на другой частоте, как правило, превышающей частоту загрузки. Первое, записанное в буфер, слово будет прочитано первым.
В данной статье представлены два варианта архитектурной реализации буфера FIFO. Обозначаются они как FIFO1 и FIFO2, и имеют ряд отличий, подробное описание которых приведено ниже.
В основе архитектур FIFO1 и FIFO2 (рис. 1. и рис. 2 соотв.), лежит кольцевой буфер с двумя счётчиками [1, с. 1]. Один из этих счётчиков синхронизирован с тактовым сигналом write_clk, ответственен за установку флага «полон» (далее full) и формирует указатель записи wr_addr, который адресует данные, записываемые в FIFO. Другой счётчик синхронизирован с тактовым сигналом read_clk, ответственен за установку флага «пуст» (далее empty) и формирует указатель чтения rd_addr, адресующий данные, читаемые из FIFO.
Трудность, заключающаяся в проектировании такого типа FIFO, связана с генерацией указателей чтения и записи и поиском надёжного способа определения состояния full и empty.
В архитектуре FIFO1 для определения состояния empty указатель записи wr_addr транслируется в код Грэя (wr_addr_gray) и с помощью цепи синхронизации передаётся из домена, тактируемого сигналом write_clk, в домен, который тактируется уже сигналом read_clk, для
Engineering Sciences
FIFO
empty
wr 3ddr=7 (9 100)
rd_addr=7 (э_шз)
FIFO wr addr=7 (Э 100)[
full HI rd_addr=7 (1_100)r
I Зх-разрядныи I
0
e leoi
0 011
e .019
0 .119
0 in
.101 4-bit 3-bit
0 110 Э -- 7 7
- 1-bit 3-bit
8 7
T
Проблема'
Рис. 2. Проблема извлечения Зх-разрядного кода Грэя из 4х-разрядного
сравнения с указателем rd_addr. Если rd_addr равен синхронизированному wr_addr_gray, то FIFO немедленно перейдёт в состояние empty. Снятие же флага empty происходит с задержкой, равной времени синхронизации сигнала wr_addr_gray из домена write_clk в домен read_clk.
Аналогично, для определения состояния full, указатель чтения rd_addr транслируется в код Грэя (rd_addr_gray) и с помощью цепи синхронизации передаётся из домена, тактируемого сигналом read_clk, в домен, который тактируется уже сигналом write_clk, для сравнения с указателем wr_addr. Если wr_addr оказался непосредственно позади синхронизированного rd_addr_gray, то FIFO немедленно перейдёт в со-
стояние full. Снятие же флага full происходит с задержкой, равной времени синхронизации сигнала rd_addr_gray из домена write_clk в домен read_clk.
Для правильного определения состояний full и empty указатели чтения и записи должны быть на один разряд шире, чем ширина адреса памяти. Это нужно для того, чтобы определить какой из указателей идёт впереди, а какой позади другого.
Состояние full, в отличие от empty, определить не так просто. Использовать обычный счётчик Грэя, чей выход на один разряд шире адреса, здесь не получится. Проблема заключается в том, что код Грэя симметричен за исключением старшего разряда (см. рис. 2).
На рис. 2 данная проблема показана на примере получения 3-разрядного кода Грэя из 4-разрядного. В этом примере 3-разрядный код Грэя используется для адресации памяти, а дополнительный старший разряд 4-разрядного кода используется для определения состояний full и empty. Если в FIFO сперва были записаны строки от 0 до 6, а затем эти же строки были прочитаны, то FIFO перейдёт в состояние empty, оба указателя станут равными и укажут на адрес с номером 7. При следующей операции записи, 4х-разрядный указатель записи будет увеличен на 1 и его старший разряд перестанет быть равным MSB указателя чтения, но их оставшиеся три разряда останутся равными, что повлечёт переход FIFO в ложное состояние full и перезапись ячейки памяти.
Для корректной адресации массива памяти и исключения ложных состояний, в FIFO1 и FIFO2 используется модифицированный код Грэя (рис. 3).
В этом случае, при изменении первого MSB в коде Грэя, инвертируется второй по счёту MSB. В итоге, получаемый из n-разрядного, (n - 1)-разрядный код Грэя больше не является симметричным. При этом, будучи модифицированным, данный код перестанет быть «честным» кодом Грэя, так как при определённых переключениях будут меняться уже два разряда, а не один.
В архитектуре FIFO1 используется счётчик кодов Грэя, включающий в себя два набора регистров (см. рис. 4 счетчик Грэя). В данной реализации счётчика отсутствует необходимость в трансляции кодов Грэя обратно в двоичный код. Набор регистров, отвечающих за хранение двоичных значений счётчика, используются для адресации массива памяти FIFO.
Правильный п-рйзрядный код Грэя
Когда MSB=1P порядок счёта инвертируется
1-я половина счёта в кодах Грэя, М 58=О
ТЕ
Зеркальные LSB относительно середины счёта
2-я половина счёта в кодах Грэя, MSB=1
.„затем обратим. 2й MSB, чтобы получить правильный (п-1)-разрядный код Грэя
V
0ioe_ U ]
1000"" 1001 1011 10 1 Э 1110 1111 1101 1100-
U 7
0000-
Два MSB изменяются при переходе от 7 к 8
Рис. 3. Модифицированный 4-разрядный код
Два MSB изменяются при переходе or 15 к О
рэя
для извлечения из него правильного 3-разрядного кода
[п-1] дваичный указатель для адресации
памяти
5» ptrtn-l:9)
А
n-btt указатель кода Грэя длн синхронизации я противоположный тактовый домен
Рис. 4. Счётчик Грэя
wr"Lte reset
Рис. 5. Блок-схема архитектуры FIFO2
read reset
Engineering Sciences
В архитектуре FIFO2 (рис. 5), в отличие от FIFO1 (рис. 1), внутренний массив памяти адресуется кодами Грэя. Счётчик кодов Грэя в этом случае выглядит следующим образом (рис. 6).
За определение состояний full и empty отвечает блок асинхронного сравнения [2, с. 2]. Адресное пространство указателей записи и чтения делится на четыре квадранта (рис. 7 и рис. 8). Это позволяет определить, что либо указатель записи догоняет указатель чтения, либо, наоборот, указатель чтения догоняет указатель записи.
Согласно схеме на рис. 7, если указатель записи находится на один квадрант позади указателя чтения, то это приведёт к установке 1 на выходе защёлки (latch) в блоке асинхронного сравнения и означает, что FIFO возможно скоро заполнится. В случае на рис. 8, если указатель чтения находится на один квадрант позади указателя записи, то это приведёт к сбросу защёлки в 0 и означает, что FIFO возможно скоро опустеет.
Было проведено функциональное тестирование блоков FIFO1 и FIFO2, синтезированных по нормам 45 нм, в трёх режимах работы (рис. 9):
- в первом режиме производилась запись одного слова данных, а затем его считывание;
- во втором режиме производилась пакетная запись «шахматного» кода до заполнения массива памяти и установки флага full, затем подавалась команда на считывание записанных данных из FIFO до установки флага empty;
- в третьем режиме производилась пакетная запись случайных комбинаций кода до заполнения массива памяти и установки флага full, затем подавалась команда на считывание записанных данных из FIFO до установки флага empty.
Результаты логического синтеза с расчётом потребляемой мощности рассматриваемых архитектур FIFO с учётом переключательной активности их вентилей в среде САПР «Cadence» по нормам 45 нм следующие (таблица 1).
Рис. 6. Счётчик кодов Грэя в архитектуре FIFO2
Коды Грэя разряды п и п-1
wrjsddr 1й
квадрант
wr_addr I
квадрант |
wf.addr Зй
квадрант
wr.addr 4й
квадрант
LL
Коды грэя разряды п и п-1
go:, . . .
''Г...
ее;...
iL
Gl ... . Gl , . . .
11 ... . 11 ... .
бит направления direction = 1 FIFO возможно скоро заполнится
19 ... .
10 Л . .
wr_addrHa один квадрант позади rd_addr"|
00 .
ОЭ . . . ,
rd_addr 1й
квадрант
Ol;. . . .
о ij. . . .
rd_addr2й
квадрант
11. . . . 11,..,
rd_addr Зй
квадрант
18, . . .
rd_addr4ü
квадрант
й>П
wire dirset_n = ~((wr_addr[n] Л rd_addr[n-l]) & -(wr_addr[n-l] л rd_addr
Рис. 7. Определение положения указателей чтения и записи, а также прогнозирование состояния full
wire cti.rrst_n - -((-(wr_sddr[n] Л rd_addr[n-i]) & (ur_addr[n-i] Л rd_sddr[n])) | -wrst.iO
Рис. 8. Определение положения указателей чтения и записи, а также прогнозирование состояния empty
Таблица 1
Результаты логического синтеза FIFO1 и FIFO2
Area, um 2 AVG Power, mW
cell total leakage total
FIFO1 9904 24245 0.099 0.982
FIFO2 9776 24033 0.098 0.976
По результатам разработки и исследования двух блоков блоков FIFO c асинхронной архитектурой было выявлены преимущества архитектуры FIFO2 перед FIFO1:
- адресация массива памяти кодами Грэя позволила упростить архитектуру счётчиков указателей записи и чтения;
- асинхронное сравнение указателей позволило снизить потребляемую мощность до 25%.
Данный вывод подтверждают результаты логического синтеза блоков FIFO1 и FIFO2 и полученные данные по потребляемой мощности в различных режимах работы, представленные на графиках выше.
i
burst rd rand hurstwrrand У
■ FIF02 (mw) HFIFOl (mW)
У/////////////////////////////////
burst read
burst write
■1,111. 1.3 Б
JOS 3.816
0,633 0,703
single write
^SlS 2,918
[mW)
0 0,5 1 1,5 2 2,5 3 3,5 1 4,5
Рис. 9. Диаграмма потребляемой мощности схем FIFO1 и FIFO2 в ходе функционального тестирования (меньше - лучше)
Литература
1. Chelcea T. Low-latency asynchronous FIFO's using token rings / T. Chelcea, S.M. Nowick. - New York: Columbia University, 2000. - P. 1-2.
2. Wang X. A RTL Asynchronous FIFO Design Using Modified Micropipeline / X. Wang, J. Nurmi. - Tampere: Tampere University of Technology, 2006. - P. 2-3.