Как совершенно верно заметил kosmoflyko любая статья должна быть самодостаточной, читающий не обязан знать всех терминов, их расшифровка должна быть под рукой в "подвале", а по возможности тут же в скобках понятно и наглядно. Виноват ― исправляюсь. :)
BCD - Binary Coded Decimal, представление чисел в двоично-десятичном виде. Основание счисления точно такое же как и в десятичной системе - 10. Несмотря на то что в двоичной тетраде можно закодировать большее число чем 9, кодирование идет до девятки:
DEC BCD(bin) BCD(hex)
0 - 0000 0000 - 00
1 - 0000 0001 - 01
2 - 0000 0010 - 02
3 - 0000 0011 - 03
4 - 0000 0100 - 04
5 - 0000 0101 - 05
6 - 0000 0110 - 06
7 - 0000 0111 - 07
8 - 0000 1000 - 08
9 - 0000 1001 - 09
Согласно правила для любой позиционной системы счисления после использования всего набора знаков (цифро-буквенных элементов системы счисления) происходит переход к следующей цифре в обоих разрядах числа (из всего набора цифр возможных в данной системе счисления). То есть девятка в нулевом разряде переходит в ноль, а ноль в первом разряде переходит в один 09 => 10. По большому счету число девять имеет один значащий разряд и бесконечное количество разрядов незначащих, столько сколько мы пожелаем 000000000..0009, практически это ничего не меняет поэтому незначащие нули опускают. Но опуская нули мы опускаем и суть систем счисления, превращение ноля в единичку происходит для нас рефлекторно ― буквально из небытие, из пустого места, как по волшебству вырастает единичка. На самом деле все логично ничего для нас не значащий ноль логично сменяется на следующую в наборе цифру 1.
Возвращаясь к BCD имеем следующее
DEC BCD(bin) BCD(hex)
10 - 0001 0000 - 10
11 - 0001 0001 - 11
12 - 0001 0010 - 12
13 - 0001 0011 - 13
14 - 0001 0100 - 14
15 - 0001 0101 - 15
16 - 0001 0110 - 16
17 - 0001 0111 - 17
18 - 0001 1000 - 18
19 - 0001 1001 - 19
Строго говоря указанные выше в таблице код 0001 0000 - это упакованное BCD число, неупакованное BCD число в качестве разряда использует не тетраду (4 бита), а байт и в итоге табличка будет выглядеть следующим образом:
DEC BCD(bin) BCD(hex)
10 - 0000 0001 0000 0000 - 01 00
11 - 0000 0001 0000 0001 - 01 01
12 - 0000 0001 0000 0010 - 01 02
13 - 0000 0001 0000 0011 - 01 03
14 - 0000 0001 0000 0100 - 01 04
15 - 0000 0001 0000 0101 - 01 05
16 - 0000 0001 0000 0110 - 01 06
17 - 0000 0001 0000 0111 - 01 07
18 - 0000 0001 0000 1000 - 01 08
19 - 0000 0001 0000 1001 - 01 09
Очередная особенность BCD числа ― это то что в двоичном мире за двоичным числом 1001 должно следовать число 1010 ― которая ни что иное как десять ― 10 в десятичной системе счисления. Но не для BCD чисел, для BCD дальше двоичного кода 1001 чисел не существует.
Таким образом мы теряем для
байта ― FF - 99 = 156 значений двоичного числа (62%);
слова ― FFFF - 9999 = 55536 значений двоичного числа (85%);
двойного слова ― FFFFFFFF - 99999999 = 4194967296 значений двоичного числа (98%);
Примеры без знаковых (unsigned) упакованных BCD чисел:
DEC BCD(bin) BCD(hex)
61279045 – 0110 0001 0010 0111 1001 0000 0100 0101 – 61 27 90 45
459 ― 0000 0000 0000 0000 0000 0100 0101 1001 ― 00 00 04 59
Примеры со знаком (signed) упакованных чисел BCD :
DEC BCD(bin) BCD(hex)
+1238901 ― 1100 0001 0010 0011 1000 1001 0000 0001 ― C1 23 89 01
-3524492 ― 1101 0011 0101 0010 0100 0100 1001 0010 ― D3 52 44 92
Как видно из примеров знак числа кодируется запрещенной комбинацией, для «плюса» принято использовать 1100B – 0CH, для «минуса» 1101B – 0DH.
ЯВУ - язык высокого уровня (Си, Паскаль, Бейсик, Ада, Фортран, Алгол …) считается что ЯВУ приближает программиста к низкоуровневым абстракциям и делает программы платформо независимыми. ЯВУ упрощает разработку программ, упрощают поиск ошибок в них, делают возможным повторное использование кода, увеличивают наглядность и самодокументируемость кода.
FPGA - Field Programmable Gate Array матрица программируемых логических элементов (Logic Element) связанных между собой магистралями с зарнее известным врменем распространения сигнала, подсоединение к магистралям и выделеным линиям (тактовые линии, линии сброса и установки) осуществляется настраиваемыми мультиплексорами. Логические элементы на основе LUT и D-триггера(ов) способны при комбинировании осуществлять множество логических функций (сумматоры, дешифраторы, шифраторы, счетчики, регистры). Как правило FPGA подразумевают синхрнный дизайн устройств, осуществляя таким образом безошибочное и быстрое функционирование синтезированной схемы. Частоты на которых могут работать FPGA для отдельных элементов до 450-500МГц. Такая частота есстесвенно достигается за счет блоков PLL существующих не в каждом семействе FPGA.Все данные подключений и LUT в FPGA хранятся в ОЗУ, таким образом при снятии питания FPGA "забывает" схему.
ASIC - Application specific integrated circuit, попросту интегральная схема выполненая по нормам позволяющим полученной схеме работать на заявленной частоте, с заявленным потреблением. В отличие от FPGA цикл разработки для ASIC значительно трудоемче и дороже. Как правило до корпусировки изготовленного кристалла необходимо пройти такое колиичество проверок и тестов что не хватит денег на изготовление масок для фотолитографии, именно по этому цифровые ИС предварительно обкатывают в FPGA.
LUT – Look Up Table, базовый элемент FPGA (сейчас уже и CPLD) позволяющий проектировать логические функции не комбинированием основных логических элементов (И,ИЛИ,НЕ,ИСКЛ.ИЛИ), а описанием таблицы истинности для входов блока LUT. Совершенно ничего нового в мире цифровой схемотехники не произошло, существовавшие много раньше шифраторы и дешифраторы по сути использовали ЗУ (например К155РЕ3) точно так же как и LUT. LUT это ОЗУ содержащие N входов и один выход, в него загружается таблица истинности представленная в бинарном виде для каждой комбинации входов, фактически же фирмы производители ПЛИС «изгаляются» с различными режимами работ LUT внося дополнительные входы и выходы переноса для каскадирования арифметических функций.
"Строительный блок" Altera Arria-II использует 6-и входовой LUT
"Строительный блок" Xilinx Spartan-3 использует 4-х входовой LUT
Спасибо, теперь каша в голове улеглась... :)
ОтветитьУдалитьКстати про LUT очень интересно. Еще в ПК ЮТ-88 встречал ИМС К155РЕ3 (DD31) с прошивкой знакогенератора под 7-разрядные индикаторы, выполняющая сходные функции.
Рад что удалось все прояснить, еще больше рад что идея лежащая в основе LUT показалась тебе удачной и интересной. Синтезаторы для проектирования в FPGA конечно не так как я раскидываются LUT-ами, мой пример таблицы истинности прошел бы оптимизацию в синтезаторе (например через карты Карно) и был бы подсокращен , скорее всего до функции двух переменных (я не проверял конечно, но мне так кажется на первый взгляд). Именно по этому при описании схем рекомендуют пользоваться описательным выражением схемы в HDL - Hardware description language. Это ЯВУ для аппаратуры (теперь ты уже знаешь что это такое). Конечно все по старинке начинают свое знакомство с FPGA/CPLD с схемотехнического уровня (рисуют схему из стандартных блоков логических элементов), но в конце концов HDL и для них становится необходимым инструментом. У меня на слуху высказывание Бурцева (если я ничего не путаю) - а именно то что от практики представления схем из унифицированных узлов логики (то что называется "рассыпуха") необходимо отходить и принимать на вооружение описание поведения схемы в HDL.
ОтветитьУдалить