От DDR к DDR2

Сергей Пахомов

Динамическая память

Характеристики памяти

Память DDR

Память DDR2

   OCD-калибровка сигнала

   Проблема терминирования сигналов

   Отложенная операция CAS

 

На прошедшем в сентябре этого года Форуме IDF корпорации Intel было уделено немало внимания новому стандарту памяти DDR2. Модули памяти DDR2 появятся на рынке уже в 2004 году и составят основу всех новых платформ как для ПК, так и для ноутбуков и серверов.

Помните те «застойные» времена, когда память SDRAM PC100, а впоследствии и PC133 были единственно доступными типами памяти на рынке? Появлялись новые модели материнских плат, чипсетов и процессоров, только память не подвергалась изменению. Так вот, те времена безвозвратно ушли. Сейчас память обновляется столь же быстрыми темпами, что и процессоры или чипсеты. Сначала была память DDR200, потом DDR266, DDR333, DDR400, DDR433. А сейчас уже можно встретить в продаже память DDR500 и даже DDR533. Более того, в следующем году нас ждет переход на новый стандарт памяти, получивший название DDR2. При этом память стандарта DDR2 не будет по своим контактам совместима с памятью DDR (в модулях DDR-памяти 184 контакта, а в модулях DDR2  — 240 контактов), а следовательно, для ее использования потребуются новые материнские платы с соответствующими разъемами для установки модулей памяти.

Столь быстрые темпы обновления типов памяти имеют как свои плюсы, так и минусы. Положительные моменты вполне очевидны — быстродействие памяти определяет и быстродействие всего компьютера. Но… это с одной стороны. С другой стороны, одной из главных проблем, существующих сейчас при сборке или модернизации ПК, является подбор памяти, которая была бы совместима с материнской платой. К сожалению, многие типы памяти просто-напросто несовместимы со многими материнскими платами, причем речь здесь идет не только о noname-производителях модулей памяти, но и об именитых компаниях. Вообще, проблема совместимости тех или иных модулей памяти с конкретными материнскими платами заслуживает отдельного разговора, и к нему мы еще вернемся, а в данной статье мы остановимся на главных различиях разных типов памяти, основных характеристиках памяти и подробно расскажем о новом стандарте памяти DDR2.

Но прежде чем переходить к принципам функционирования памяти DDR и DDR2, сделаем небольшое отступление, касающееся принципов функционирования оперативной памяти.

Динамическая память

Оперативная память по-другому называется RAM-память (Random Access Memory), то есть память с произвольным доступом.

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

Элементарная ячейка оперативной памяти представляет собой конденсатор, способный в течение короткого промежутка времени сохранять электрический заряд, наличие которого можно ассоциировать с информационным битом. Проще говоря, при записи логической единицы в ячейку памяти конденсатор заряжается, при записи нуля — разряжается. При считывании данных конденсатор разряжается через схему считывания, и если заряд конденсатора был ненулевым, то на выходе схемы считывания устанавливается единичное значение. Кроме того, поскольку при считывании конденсатор разряжается, то его необходимо зарядить до прежнего значения. Поэтому процесс считывания сочетается с подзарядкой конденсаторов (регенерацией заряда). Если в течение длительного времени обращения к ячейке не происходит, то за счет токов утечки со временем конденсатор разряжается и информация теряется. Вследствие этого память на основе массива конденсаторов требует периодического подзаряда конденсаторов (поэтому ее и называют динамической). Для компенсации утечки заряда применяется регенерация, основанная на периодическом циклическом обращении к ячейкам памяти, так как каждое такое обращение восстанавливает прежний заряд конденсатора. Регенерация в микросхеме происходит одновременно по всей строке матрицы при обращении к любой из ее ячеек, то есть достаточно циклически перебрать все строки.

Микросхемы динамической памяти организованы в виде квадратной матрицы, причем пересечение столбца и строки матрицы задает одну из элементарных ячеек. При обращении к той или иной ячейке памяти следует задать адрес нужной строки и столбца. Считывание адреса строки происходит, когда на входы матрицы памяти подается специальный стробирующий импульс RAS (Row Address Strobe), а считывание адреса столбца — при подаче стробирующего импульса CAS (Column Address Strobe). Импульсы RAS и CAS подаются последовательно друг за другом, причем импульс CAS всегда следует за импульсом RAS, то есть сначала происходит выбор строки, а затем выбор столбца. Сам адрес строки и столбца передается по специальной мультиплексированной шине адреса MA (Multiplexed Address).

Вся современная память является синхронной динамической памятью (SDRAM). При этом отметим, что первоначально использовалась асинхронная память, но упоминание об этих типах памяти уместно только с исторической точки зрения. Разница между синхронной и асинхронной памятью заключается в том, что при синхронной работе обеспечивается синхронизация всех входных и выходных сигналов с тактами системного генератора, а в асинхронной памяти такой синхронизации нет и данные появляются на шине в произвольные моменты времени. С системной шины данные считываются контроллером, который уже синхронизирован с тактовой частотой. Таким образом, если данные появляются сразу за фронтом тактового импульса, они будут считаны только с началом следующего тактового импульса. Это происходит потому, что сигналом к считыванию данных является не уровень тактового импульса (высокий или низкий), а его фронт. Поэтому при использовании асинхронной памяти часто возникает задержка с обработкой данных, что, в свою очередь, приводит к жестким ограничениям на частоту системной шины.

Если проследить всю историю эволюции памяти — от первых модулей асинхронной памяти до памяти нового поколения DDR2, то нетрудно заметить, что эволюция шла по пути увеличения ее быстродействия. И достигалось это не только за счет увеличения тактовой частоты работы памяти. Так, еще со времени самых первых вариантов асинхронной памяти FPM DRAM (динамическая память с быстрым страничным доступом), которая уже давно не встречается, стали использовать технологию страничного доступа (Page Mode). Смысл страничного доступа заключается в том, что после выбора одной строки матрицы памяти допускается многократная установка адреса столбца, стробируемого CAS. Страницей в данном случае называется сама строка матрицы. Такой подход позволяет выбирать последовательные данные в пределах одной строки без изменения ее адреса, то есть с одним и тем же сигналом RAS. Это позволяет ускорить блочные передачи, но только в том случае, когда весь блок данных или его часть находится внутри одной строки матрицы.

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

Другой прием, реализованный в свое время в SDRAM-памяти PC100 и PC133, — разбиение модуля памяти на два независимых банка. Такое решение позволяет совмещать выборку данных из одного банка с установкой адреса в другом банке, то есть иметь одновременно две открытые страницы. Доступ к этим страницам чередуется (bank interleaving), а следовательно, устраняются задержки, что обеспечивает создание непрерывного потока данных.

В начало В начало

Характеристики памяти

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

Для того чтобы определить пропускную способность памяти, нужно частоту системной шины умножить на количество байт, передаваемых за один такт. Память SDRAM имеет 64-битную (8-байтную) шину данных.

Следует иметь в виду, что речь идет о максимально возможной пропускной способности, которая реализуется только в случае последовательной передачи данных, то есть когда данные передаются с каждым тактом. Однако при этом не учитывается количество тактов, необходимых для получения доступа к самой строке, а также для настроек модуля памяти. Поэтому другими важными характеристиками памяти являются RAS to CAS Delay, CAS Latency и RAS Precharge.

RAS to CAS Delay — это измеряемый в тактах системной шины промежуток времени между сигналами RAS и CAS, то есть задержка подачи сигнала CAS относительно сигнала RAS. При установке CAS в низкий уровень после прихода положительного фронта тактирующего импульса происходит выборка адреса столбца, присутствующего в данный момент на шине адреса, и открывается доступ к нужному столбцу матрицы памяти.

CAS Latency определяет задержку по времени в тактах, которая происходит с момента подачи сигнала CAS до выдачи первого элемента данных на шину. Каждый последующий элемент данных появляется на шине данных в очередном такте. Для SDRAM-памяти эта задержка может составлять два или три такта.

Завершение цикла обращения к банку памяти осуществляется подачей команды деактивации. Эта команда подается за один или за два такта перед выдачей последнего элемента данных. Время деактивации RAS Precharge также измеряется в тактах и может быть равно двум или трем.

Описанные времена RAS to CAS Delay (tRCD), CAS Latency (tCL) и RAS Precharge (tRP) определяют так называемый тайминг памяти, записываемый в виде последовательности tCL—tRCD—tRP. Понятно, что чем меньше тайминг, тем более быстродействующей является память. Поэтому если сравнивать память с таймингом 3-3-3 и память с таймингом 2-2-2, то последняя оказывается более быстродействующей.

В начало В начало

Память DDR

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

Поэтому наряду с банальным увеличением частоты работы памяти для увеличения ее пропускной способности часто используют иные приемы, такие как пакетный режим передачи и организация чередующихся банков, о которых мы уже упоминали. Однако более кардинальным способом увеличения пропускной способности памяти стал переход к стандарту DDR. Синхронная динамическая память DDR SDRAM, пришедшая на смену памяти SDRAM, обеспечивает в два раза большую пропускную способность. Аббревиатура DDR (Double Data Rate) в названии памяти означает удвоенную скорость передачи данных. По аналогии обычную SDRAM-память называют памятью SDR (Single Data Rate), то есть памятью с одинарной скоростью передачи.

Как уже отмечалось, основным сдерживающим звеном увеличения тактовой частоты работы памяти является само ядро памяти (массив элементов хранения). Однако, кроме ядра памяти, в модуле присутствуют и буферы промежуточного хранения (I/O Logic), через которые ядро памяти обменивается данными с шиной памяти. Эти буферы имеют значительно более высокое быстродействие, нежели само ядро, и тактовую частоту работы самой шины памяти и буферов обмена можно легко увеличить. Именно такой способ и используется в DDR-памяти.

В обычной SDRAM-памяти ядро и буферы обмена работают в синхронном режиме на одной и той же частоте. Передача каждого бита из буфера происходит с каждым тактом работы ядра памяти (рис. 1).

В DDR-памяти каждый буфер ввода-вывода передает два бита за один такт, то есть фактически работает на удвоенной тактовой частоте, оставаясь при этом полностью синхронизированным с ядром памяти. Такой режим работы возможен в случае, если эти два бита доступны буферу ввода-вывода на каждом такте работы памяти. Для этого требуется, чтобы каждая команда чтения приводила к передаче из ядра памяти в буфер сразу двух бит. С этой целью используются две независимые линии передачи от ядра памяти к буферам ввода-вывода, откуда биты поступают на шину данных в требуемом порядке.

Поскольку при таком способе организации работы памяти происходит предвыборка двух бит перед передачей их на шину данных, его также называют Pre-fetch 2 (предвыборка 2).

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

Все же остальные принципиальные моменты DDR-памяти не изменились: структура нескольких независимых банков позволяет совмещать выборку данных из одного банка с установкой адреса в другом банке, то есть можно одновременно иметь две открытые страницы. Доступ к этим страницам чередуется (bank interleaving), что приводит к устранению задержек и обеспечивает создание непрерывного потока данных.

DDR-память настраивается в процессе работы путем установки соответствующих регистров, как и SDRAM-память. Кроме того, DDR-память, как и SDRAM, предназначена для работы с системными частотами 100 и 133, 166 и 200, 216, 250 и 266 МГц. DDR-память, работающую на частоте 100 МГц, иногда обозначают как DDR200, подразумевая при этом, что «эффективная» частота памяти составляет 200 МГц (данные передаются два раза за такт). Аналогично при работе памяти на частоте 133 МГц используют обозначение DDR266, при частоте 166 МГц — DDR333, при частоте 200 МГц — DDR400 и т.д. Нетрудно рассчитать и пропускную способность DDR-памяти. Учитывая, что ширина шины данных составляет 8 байт, для памяти DDR200 получим 1,6 Гбайт/с (200 МГц Ѕ 8 байт); для памяти DDR266 — 2,1 Гбайт/с; для памяти DDR333 — 2,7 Гбайт/с, для памяти DDR400 — 3,2 Гбайт/с, для памяти DDR433 — 3,5 Гбайт/с, для памяти DDR500 — 4,0 Гбайт/с и для памяти DDR533 — 4,3 Гбайт/с.

Хотя обозначение типа DDR200, DDR266, DDR333 и т.д. кажется вполне логичным и понятным, официально принято другое обозначение этой памяти. В названии используется не «эффективная» частота, а пиковая пропускная способность, то есть память DDR200 обозначается как DDR PC1600, DDR266 — как DDR PC2100, DDR333 — как PC2700, а DDR400 — как PC3200.

Кроме частоты, память, как уже отмечалось, характеризуется схемой тайминга (tCL—tRCD—tRP). Для памяти DDR200 тайминг всегда 2-2-2, а вот для остальных типов памяти тайминг может быть различным. К примеру, встречаются тайминги 3-3-3, 2,5-3-3, 2-3-3 и 2,5-2-2.

В настоящее время наиболее распространенной является память DDR400. Кроме того, во всех современных чипсетах частота шины памяти не превосходит 400 МГц, а память типа DDR433, DDR500 и DDR533 является нестандартизованной.

Возникает логичный вопрос: если эти типы памяти не поддерживаются материнскими платами и не стандартизированы, то зачем они вообще нужны?

Дело в том, что памяти типа DDR433, DDR500 и DDR533 отличаются от остальных типов памяти только способностью работать на более высоких частотах ядра памяти, что, во-первых, не препятствует ее использованию и на более низких частотах, а во-вторых, позволяет применять при разгоне (оверклокинге) системы. Кроме того, более важным преимуществом памяти DDR433, DDR500 и DDR533, на наш взгляд, является то, что тайминги, указываемые на эти типы памяти, относятся именно к частотам 433, 500 или 533 МГц. Но при использовании этих типов памяти на частоте 400 МГц возможно уменьшение таймингов памяти (идеальный случай соответствует таймингу 2-2-2), что можно рассматривать как своеобразный разгон памяти.

В начало В начало

Память DDR2

Если следовать терминологии SDR (Single Data Rate), DDR (Double Data Rate), то память DDR2 было бы логично назвать QDR (Quadra Data Rate), поскольку этот стандарт подразумевает в четыре раза большую скорость передачи. То есть в стандарте DDR2 при пакетном режиме доступа данные передаются четыре раза за один такт. Для организации данного режима работы памяти необходимо, чтобы буфер ввода-вывода работал на учетверенной частоте по сравнению с частотой ядра памяти. Достигается это следующим образом: ядро памяти, как и прежде, синхронизируется по положительному фронту тактирующих импульсов и с приходом каждого такого положительного фронта по четырем независимым линиям передаются в буфер ввода-вывода четыре бита информации (выборка четырех битов за такт). Сам буфер ввода-вывода тактируется на удвоенной частоте ядра памяти и синхронизируется как по положительному, так и по отрицательному фронту этой частоты. Иными словами, с приходом положительного и отрицательного фронтов происходит передача бит в мультиплексном режиме на шину данных (рис. 3). Это позволяет за каждый такт работы ядра памяти передавать четыре бита на шину данных, то есть вчетверо повысить пропускную способность памяти.

По сравнению с памятью DDR память DDR2 позволяет обеспечить ту же пропускную способность, но при вдвое меньшей частоте ядра. К примеру, в памяти DDR400 ядро функционирует на частоте 200 МГц, а в памяти DDR2 400 — на частоте 100 МГц. В этом смысле память DDR2 имеет значительно большие потенциальные возможности для увеличения пропускной способности по сравнению с памятью DDR.

OCD-калибровка сигнала

Одной из серьезных проблем, связанных с DDR-памятью, является потребление энергии. К примеру, системы, оснащенные 4 Гбайт DDR-памяти, при чтении всего объема памяти потребляют 35-40 Вт электроэнергии. Снижение номинального напряжения с 2,5 до 1,8 В приведет к уменьшению потребления электроэнергии на 28%. Кроме того, уменьшение напряжения позволяет увеличивать тактовую частоту работы памяти.

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

Еще одна проблема, связанная с высокой тактирующей частотой, заключается в том, что с ростом частоты следования импульсов начинают сказываться явления задержки, что может приводить к рассинхронизации сигналов. К примеру, в результате таких задержек опорные тактовые импульсы, с которыми синхронизируются все команды, могут быть рассихронизированы с импульсами DQS (Data Queue Strobe), передний и задний фронты которых используются для стробирования приема/передачи данных в буферы ввода-вывода.

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

Рассинхронизация может возникать и по другой причине. В DDR-памяти точкой синхронизации является пересечение переднего или заднего фронта стробирующего сигнала с опорным напряжением, условно принимаемым за ноль. То есть как только значение стробирующего сигнала достигает значения опорного напряжения, наступает момент синхронизации (срабатывания). Такой подход имеет свои проблемы: и опорное напряжение (ноль), и стробирующий сигнал могут «плавать», что неизбежно приводит к тому, что точка синхронизации также «плавает».

Для решения проблемы синхронизации в DDR2-памяти операции ввода-вывода в буфер синхронизируются не по одному стробирующему сигналу, а по двум: DQS (Data Queue Strobe) и инверсному к нему сигналу D—Q—S—. Эти стробирующие сигналы являются дифференциальными, то есть уровни сигналов DQS и D—Q—S— измеряются друг относительно друга, а не относительно некоторого опорного напряжения, как в DDR-памяти. Соответственно точкой синхронизации является пересечение самих стробирующих сигналов DQS и D—Q—S—.

Теоретически сигналы DQS и D—Q—S— должны быть зеркально симметричны друг относительно друга, но на практике эта симметрия не всегда достижима, поскольку имеют место индуцированные искажения и расфазировка сигналов. В результате точка пересечения между DQS- и D—Q—S—-сигналами, используемая как точка синхронизации, может «плавать» и не совпадать с точкой пересечения сигнала DQ (Data Queue) (сигнал на выдачу данных) с опорным напряжением. Это явление известно как DQ-DQS-сдвиг.

В дополнение ко всему необходимо учитывать, что входные импедансы буферов ввода-вывода могут слегка отличаться друг от друга. Это в еще большей степени препятствует компенсации DQ-DQS сдвига.

Для решения данной проблемы в DDR2-памяти используется калибровка OCD (Off-Chip Driver), при которой DQS и D—Q—S— стробовые сигналы калибруются друг относительно друга и относительно сигнала DQ и в результате которой исчезает DQ-DQS-сдвиг (рис. 4).

Проблема терминирования сигналов

Распространение любого сигнала вдоль шины неизбежно приводит к его частичному отражению от любых неоднородностей вдоль пути его распространения. Для того чтобы такого отражения сигнала не происходило, необходимо, чтобы, во-первых, на пути распространения сигнала не было неоднородностей, а во-вторых, чтобы сам путь был бесконечным. Понятно, что на практике такие условия не реализуемы и отражение сигнала всегда присутствует. Отраженный сигнал интерферирует с основным сигналом, что приводит к искажению последнего. Поэтому одной из основных задач является уменьшение отраженного сигнала.

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

В случае памяти DDR2 используется принципиально иной метод терминирования сигналов, получивший название ODT (On-Die-Termination). В данном случае терминальные сопротивления устанавливаются непосредственно на самих модулях памяти, а для того, чтобы предотвратить поглощение сигнала в активном модуле памяти, используется технология отключения терминальных сопротивлений от активных модулей (рис. 5).

Отложенная операция CAS

Другая проблема, связанная с функционированием памяти и приводящая к снижению пропускной способности, — это возникновение конфликтов команд. Дело в том, что на шине в один момент времени может присутствовать только одна команда. Для простоты предположим, что существуют четыре командные линии, уровни напряжений на которых задают команды RAS, CAS, CS (Chip Select) и WE (Write Enable). Если предположить, что на шине одновременно появляются две команды, задаваемые, к примеру, комбинациями 101 и 001, то возникает конфликт. Рассмотрим в качестве примера ситуацию с тремя банками памяти (рис. 6). Активация каждого следующего банка может происходить только после определенного промежутка времени, называемого Row to Row Delay (tRRD). Типичным является случай, когда tRRD составляет два такта. Кроме того, для каждого отдельного банка после его активации команда на чтение (выбор столбца в пределах активированной строки) поступает с задержкой, определяемой RAS to Cas Delay (tRCD). И если tRCD = 4T, то команда на чтение первого банка совпадет с активацией третьего банка. Для того чтобы избежать конфликта команд, команду активации третьего банка приходится смещать на целый цикл, что, естественно, приводит и к смещению всех последующих команд для этого банка. В результате такого сдвига на шине данных образуется пропуск, или пузырь (Bubble), что приводит к снижению пропускной способности памяти.

Для того чтобы избежать пропусков данных, в DDR2-памяти используются отложенные операции CAS. Суть заключается в том, что операции активации банка и команда на выбор столбца (CAS) следуют непосредственно друг за другом с разницей в один цикл. Это позволяет избежать конфликта команд, поскольку команда CAS уже не совпадает с командой активации банка. Команда CAS поступает в буфер команд и хранится там требуемое количество циклов в зависимости от значения tRCD. После этого она считывается, но шина команд остается незанятой и может быть использована для команды активации очередного банка. В результате достигается непрерывный поток данных на шине и увеличивается пропускная способность памяти.

Хранение команды CAS в буфере эквивалентно введению дополнительной задержки (Additive Latency, AL), поэтому данный способ известен также как Additive Latency или как способ отложенного чтения (Posted CAS).

В DDR-памяти при операциях записи контроллер может осуществлять запись в любую ячейку в пределах открытой строки, причем задержка записи (Write Latency, WL) данных относительно сигнала CAS (выбора столбца) составляет один такт. В памяти DDR2 задержка записи определяется несколько иначе — она на один такт меньше задержки на чтение (Read Latency, RL): WL = RL–1T. Если, к примеру, RL = 7, то WL = 6.

В заключение нашего обзора памяти DDR2 приведем сравнительную таблицу характеристик памяти DDR и DDR2.

 

При написании статьи использовались материалы Форума IDF Fall 2003.

КомпьютерПресс 11'2003

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует