<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1089583139347961352</id><updated>2011-11-29T17:01:37.354+06:00</updated><category term='Quartus'/><category term='TTL'/><category term='Новый год'/><category term='ATMega16'/><category term='Лунолет-1'/><category term='Altera'/><category term='Nokia 6100'/><category term='ATMega8515'/><category term='LCD'/><category term='Atmel'/><category term='Model-Sim'/><category term='MK61'/><category term='I2C'/><category term='ATMega8'/><category term='Proteus'/><category term='VM'/><category term='Verilog'/><category term='Avrdude'/><category term='программированиие'/><category term='умножитель'/><category term='CPLD'/><category term='LUT'/><category term='N6100'/><category term='FPGA'/><category term='FloatingPoint'/><category term='MCU'/><category term='МК'/><category term='PCI'/><category term='basic4ppc'/><category term='WinAVR'/><category term='фоторезист'/><category term='Xilinx'/><category term='nylc'/><category term='Music'/><category term='MK61avr'/><category term='SN74'/><category term='МК61'/><category term='DS18xx'/><category term='Assembler'/><category term='ATTiny12'/><category term='Nokia3310'/><category term='Linux'/><category term='USBasp'/><category term='VMLab'/><category term='N6100-T2'/><category term='AVR'/><category term='BCD'/><category term='AVR910 USB'/><category term='Adder'/><category term='EEPROM'/><category term='программируемые калькуляторы'/><category term='ЯВУ'/><category term='PocketPC'/><category term='Basic'/><category term='HDL'/><title type='text'>Цифра в пробирке</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-1426612811341506910</id><published>2010-01-22T10:46:00.011+05:00</published><updated>2010-03-19T22:26:41.516+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avrdude'/><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR910 USB'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='VMLab'/><category scheme='http://www.blogger.com/atom/ns#' term='USBasp'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>AVR в Linux - Тропой Кулика.</title><content type='html'>Леонид Алексеевич Кулик, советский специалист по минералогии и исследованию метеоритов. Особый интерес проявил в исследовании Тунгуского метеорита. Несколько раз организовал экспедиции в район Подкаменной Тунгуски но найти метеорит не удалось.&lt;br /&gt;&lt;br /&gt;Я начал эту статью так, потому что Linux невероятно интересная и прогрессивная платформа, но работать в ней человеку пришедшему из мира $MS титанически тяжко... Как в распространенной шутке, собственно, "первые три года тяжело, а потом привыкаешь" :) Вот и я подобно Кулику постоянно предпринимаю попытки найти философский камень в Linux, но всегда оказываюсь перед проблемой недостатка опыта и знаний что бы его найти. :) Отчаявшись приспособиться к линкусовой психологии шарахаешься опять в мир $MS где все привычно - где работают все "программаторы", где нет проблем с Quartus-ом, с VMLab-ом, но при всем при этом нет той понятности и стройности, а главное открытости операционной системы.&lt;br /&gt;&lt;br /&gt;Начитавшись до дури статей я приступил: выкачал старого знакомого Ubuntu сменившего за мое отсутствие номер версии, установил и... и начала морочиться. Видимо нормальные люди разрабатывают в IDE, но я же настолько прирос к FAR-у (приятно осознавать что используешь продукт земляка воспитанного тем же ВУЗом, что и ты, с которым можно сказать через одно рукопожатие знаком :)). Ну и поскольку я уже привык к файловому менеджеру то MC меня начал раздражать практически сразу, я его выкинул из головы и перешел на терминал где возни конечно побольше, но хотя бы раздражения не вызывает. Тут надо сказать, что я забыл о &lt;a href="http://code.google.com/p/mk61avr/wiki/LinuxAVREnvironment"&gt;великолепном ресурсе&lt;/a&gt;, который подготовил Vitasam, специально для тех кто отважился спрыгнуть с Win. Потерял бы меньше времени. &lt;br /&gt;&lt;br /&gt;Начать необходимо с avr-binutils, avr-gcc, avr-lib, avrdude как основного и самого необходимого инструментария разработчика. &lt;br /&gt;Затем задуматься над  вопросом в чем писать. Vitasam предложил не плохой вариант без нагромождений - Geany. В принципе вариант достойный, единственное что не позволяет создать makefile как это делал например автоматически, VMLab. Страшного в этом ничего нет, те кто работал с WinAVR помнят что в поставке всегда был инструмент MFile. Мне приходилось пользоваться им крайне редко - обычно все решалось копированием имеющегося makefile и изменением содержимого: списка файлов проекта, типа микроконтроллера, опций компиляции. Однако автоматический генератор makefile существует он интерактивный так же как и в Win и он скрипт поэтому требуется небольшая доработка. Сам MFile находится по &lt;a href="http://www.sax.de/~joerg/mfile/"&gt;адресу&lt;/a&gt;. Доработка скрипта попила много крови, сперва я не понял почему не стартует скрипт, оказалось что в заголовке файла (который является для Linux исполнимым) прописан не Ubunt-овский интерпретатор Tcl/Tk. Прописывание интерпретатора Tclsh, оказавшимся в Ubuntu не самим файлом, а лишь ссылкой на него (/etc/alternatives/tclsh) ничего не решило. Tclsh - интерпретатор не поддерживающий работу mfile в GUI. Но на широких просторах интернета благодаря google отыщется все, а именно то что для запуска mfile нужно использовать wish прописав внутри самого mfiel строчку запуска #!/usr/bin/wish.&lt;br /&gt;После компиляции и сборки обычно необходима симуляция. В Win это либо VMLab, либо AvrStudio, либо Proteus. С тех пор как VMLab стал свободен привык использоваться им, хоть он и вызывает у меня нарекания по навигации в исходнике. Под Wine VMLab устанавливается исключительно, даже под старый WINE 1.0.1, который по умолчанию находится в Ubunt-овском репозитари (sudo apt-get wine). Само собой изменения вносимые на ходу в проект VMLab компилировать toolchain-ом, который находится в Linux не будет. Конечно можно поставить под Wine и WinAVR но получится что-то вроде "масло-масляное". На сайте VMlab есть информация что включением опции &lt;span style="font-weight: bold;"&gt;Any 3rd party high level lenguage generating COFF&lt;/span&gt; при создании проекта производится выбор компиляции и сборки сторонними средствами генерирующими исполняемый файл в формате &lt;span style="font-weight: bold;"&gt;COFF&lt;/span&gt; для отладки его в VMLab. Эта ключевая фраза задала мне жару часа на 4 поиском ошибки makefile при создании COFF.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_E9iC2oUZmVA/S1rzU1D4MjI/AAAAAAAAAOA/gi7ShhMZnlY/s1600-h/Screenshot-1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5429919839914832434" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/S1rzU1D4MjI/AAAAAAAAAOA/gi7ShhMZnlY/s400/Screenshot-1.png" style="cursor: hand; cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 386px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Рис.1. Использование VMLab для отладки проектов в Linux под WINE.&lt;br /&gt;&lt;br /&gt;Благодаря ошибке с COFF возвращаемся к этапу номер один. В комплекте avr-binutils поставляется маленькая, но так необходимая утилитка avr-objcopy собирающая из elf файла coff файл. Попросту конвертор исполняемых форматов который нужен потому, что elf файлы VMlab не приемлет. Запущенный из makefile avr-objcopy при сборке выдает ошибку&lt;br /&gt;&lt;br /&gt;avr-objcopy: "имя преобразуемого файла".cof: Invalid bfd target&lt;br /&gt;&lt;br /&gt;Благодаря своему не важному знанию языка и не желанию вчитаться в "англицкий" текст хотя бы в течении пяти минут, я минимум три часа провел в бесполезном серфинге. Вот &lt;a href="http://www.captain.at/electronic-linux-atmel-avr-simulator-gui-vmlab.php"&gt;пост&lt;/a&gt; рассказывающий как победить ошибку. Все достаточно тривиально для того что бы ошибка была исправлена нужно либо "одеть" на  новый avr-objcopy заплатку, либо взять старый файл, в котором этой проблемы еще не существовало. Репозитарий Debian или Ubuntu содержит свежие avr-binutils и ошибка там себя проявляет, а вот распространенный некогда cdk4avr остановился на версии GNU objcopy 2.16.1 + coff-avr-patch (20050630) (CDK4AVR 3.0 2.16.1-20060708) и в нем этой ошибки нет. Однако не спешите ставить это пакет, потому что остальные утилиты из avr-binutils нас устраивают , да и не стоит мешать сапоги с конфетами. Необходим только avr-objcopy нужно его извлечь из пакета cdk-avr-binutils_2.16.1-20060708_i386.deb находящегося на &lt;a href="http://cdk4avr.sourceforge.net/"&gt;сайте&lt;/a&gt; архиватором и поместить, внимание !!! в два места /usr/bin и /usr/bin/lib/avr. Во вторую папку на всякий случай, хоть путь $PATH и указывает на /usr/bin, а вдруг где то жестко в makefile будет прописано /usr/bin/lib/avr для вызова binutils. Кстати копирование под Ubunu в системные места разрешено только "судоерам", так что про sudo перед командой копирования cp забывать не нужно.&lt;br /&gt;&lt;br /&gt;#sudo cp avr-objcopy /usr/bin&lt;br /&gt;&lt;br /&gt;И так проблем симуляции железа уже решена, но можно чуть расширить ее посмотрев в сторону Code::Block IDE который дает все возможности и по созданию проекта (вплоть до сборки) и по его симуляции с применением avr-dbg и simulavr, все это очень хорошо описано на этой &lt;a href="http://www.ibm.com/developerworks/ru/library/l-CodeBlocks_and_avr-gcc/index.html?S_TACT=105AGX99&amp;amp;S_CMP=GR01T"&gt;страничке&lt;/a&gt; и нет смысла пересказывать. Однако у меня почему то не заладилось с отладкой все переменные были пустые хоть отладчик ходил по веткам кода.&lt;br /&gt;&lt;br /&gt;Следующий вопрос является наиболее важным - &lt;span style="font-weight: bold;"&gt;ЧЕМ ШИТЬ?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Все время до этого пользовался удачным вариантом &lt;a href="http://prottoss.com/projects/AVR910.usb.prog/avr910_usb_programmer.htm"&gt;USB программатора AVR910 USB (разработки prottoss)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Программатор хороший но по рассказам на форуме линуксоидов для его использования необходимо пересобирать ядро включив туда изменения для нештатной работы с USB, либо перешивать сам программатор в avr-doper. Перешивать я не стал боясь оказаться без удобного рабочего инструмента (в загашнике на всякий случай есть деревянный PonyProg), а стал искать какой программатор легкий в сборке поддерживается и работает без нареканий в Linux. Таким программатором оказался &lt;a href="http://www.fischl.de/usbasp/"&gt;USBasp&lt;/a&gt;. Конструкция похожа на AVR910 USB, но для того что бы на сигнальные линии диф-пары USB не попало напряжение питания микроконтроллера (в схеме USBasp VCC равно 5 вольт) использовано два стабилитрона на 3.6В. Такой "выверт" необходим&amp;nbsp;&amp;nbsp;из за того что не во всех материнских платах чипсеты&amp;nbsp;толерантные&amp;nbsp;к уровню TTL и требуют конвертирования уровней. Конструкция AVR910 USB обеспечивает питание микроконтроллера программатора 3.6V, чем координально решает вопрос с попаданием 4..5V уровней на сигнальные линии USB. Падение напряжения после двух диодов приводит к тому что напряжение питание VCC снижается &amp;nbsp;с 5V до приемлемых 3.5-3.6V. Переделка отражена на рис.4., дополнительные детали (два диода и конденсатор) выделены красным цветом, а номинал резистора R3 изменен на 1.5КОм (на USBasp R3 = 2.2КОм).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1r3vBmCDXI/AAAAAAAAAOI/HW0O553Dncc/s1600-h/usb_3.6V.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5429924688002420082" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1r3vBmCDXI/AAAAAAAAAOI/HW0O553Dncc/s400/usb_3.6V.png" style="cursor: hand; cursor: pointer; display: block; height: 142px; margin: 0px auto 10px; text-align: center; width: 138px;" /&gt;&lt;/a&gt;&lt;br /&gt;Рис.2. Часть схемы USBasp обеспечивающая толерантность линий USB к уровню сигналов TTL с AVR.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1r4GkjUi_I/AAAAAAAAAOQ/lqh9ekjhCAU/s1600-h/prottoss-power.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5429925092523281394" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1r4GkjUi_I/AAAAAAAAAOQ/lqh9ekjhCAU/s400/prottoss-power.png" style="cursor: hand; cursor: pointer; display: block; height: 244px; margin: 0px auto 10px; text-align: center; width: 290px;" /&gt;&lt;/a&gt;&lt;br /&gt;Рис.3. Решение Prottoss на "корню" ликвидирующее не толерантность линий USB сигналам с AVR.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_E9iC2oUZmVA/S1voRvGpJJI/AAAAAAAAAO4/_chnkm9RABo/s1600-h/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F+USBasp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/S1voRvGpJJI/AAAAAAAAAO4/_chnkm9RABo/s320/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F+USBasp.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Рис.4. Изменения вошедшие в USBasp из схемы AVR910 USB.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;После сборки и зашивки USBasp его наличие в Linux можно проверить утилитой lsusb вот как это выглядит:&lt;br /&gt;# lsusb&lt;br /&gt;Bus 002 Device 003: ID 16c0:05dc VOTI USBasp AVR Programmer&lt;br /&gt;Bus 002 Device 002: ID 16c0:05e1 VOTI &lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;&lt;br /&gt;Устройство 16c0:05dc это USBasp, а 16c0:05e1 это AVR910 USB. На &lt;a href="http://www.linux.org.ru/view-message.jsp?msgid=3168599"&gt;форуме&lt;/a&gt; рекомендуют записать правило (помните про sudo) для определения USBasp утилитой avrdude и другими программами:&lt;br /&gt;&lt;br /&gt;# UDEV-style hotplug map for usbasp programmer&lt;br /&gt;# Put this file in /etc/udev/rules.d&lt;br /&gt;&lt;br /&gt;SUBSYSTEM=="usb", ATTR{product}=="USBasp", ATTR{idProduct}=="05dc", ATTR{idVendor}=="16c0", MODE="666"&lt;br /&gt;&lt;br /&gt;При помощи утилитки avrdude шьется огромная часть AVR и в принципе ее более чем достаточно для работы. Документация на русском &lt;a href="http://kvorb.ru/2009/06/24/russkaya-dokumentaciya-k-avrdude-chast-1/"&gt;Часть 1&lt;/a&gt;, &lt;a href="http://kvorb.ru/2009/06/29/russkaya-dokumentaciya-k-avrdude-chast-2/"&gt;Часть 2&lt;/a&gt; также доступна благодаря &lt;a href="http://kvorb.ru/"&gt;блогу&lt;/a&gt;. &lt;br /&gt;Но под USBasp оказывается есть &lt;a href="http://extremeelectronics.co.in/avr-tutorials/gui-software-for-usbasp-based-usb-avr-programmers/"&gt;софт&lt;/a&gt; не только для Windows, но и для Linux.&lt;br /&gt;&lt;br /&gt;Однако надо сказать софт этот принес мне массу головоломок. После установки (простой распаковки) xAVR необходимо было установить wxGTK, как это рекомендует автор (usblib уже стоял). wxGTK взял с репозитария версии 2.8. Софт для работы с USBasp запускается из под sudo, о чем предупреждает автор. После запуска ./avrprog заявляет, что с библиотеками 2.8 работать не хочет, желает 2.6. Деинсталируем gtklib 2.8 ставим 2.6 - софт выдает уже одну ошибку вместо двух, где требует so-шку из библиотеки 2.8. Предупреждаю сразу ставить 2.8 бессмысленно получим тоже сообщение "с 2.8 несовместимо". Поступил так: выкачал RPM (для RedHart нашел в какой пакет засунуты нужные *.so) и скопировал их по адресу, который от меня требовали /usr/lib. Однако avrprog этого оказалось мало и он сгонял меня за следующим *.so из очередного пакета wxGTK. Под конец потребовав tiff-овскую библиотеку (tiff*.so), ублаженный запустился.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_E9iC2oUZmVA/S1rttp7PGEI/AAAAAAAAANo/4mkG0N6sAAs/s1600-h/AVRPROG.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5429913669352757314" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/S1rttp7PGEI/AAAAAAAAANo/4mkG0N6sAAs/s400/AVRPROG.png" style="cursor: hand; cursor: pointer; display: block; height: 192px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Рис.5. Ублаженный xAVR &lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_E9iC2oUZmVA/S1rvjPOn83I/AAAAAAAAANw/faO1a3HpWsg/s1600-h/23012010222.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5429915689410884466" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/S1rvjPOn83I/AAAAAAAAANw/faO1a3HpWsg/s400/23012010222.jpg" style="cursor: hand; cursor: pointer; display: block; height: 254px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;Рис.6. Программатор USBasp с небольшими доработками, в работе.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_E9iC2oUZmVA/S1v29R5vWXI/AAAAAAAAAPI/K3irimFbJD8/s1600-h/23012010224.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/S1v29R5vWXI/AAAAAAAAAPI/K3irimFbJD8/s320/23012010224.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Рис.7. USBasp макетная плата, работы не так уж много.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1vwqfYsBpI/AAAAAAAAAPA/_Xi24GY-kV0/s1600-h/23012010225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/S1vwqfYsBpI/AAAAAAAAAPA/_Xi24GY-kV0/s320/23012010225.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Рис.8. USBasp макетная плата, оборотная сторона.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Поскольку большинство программ мечтают о запуске через sudo, но не являются при этом терминальными то могу предложить использовать простой алгоритм по их запуску со стола кликом по значку - в созданном текстовом файле на столе располагается скрипт запуска &lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;gksudo /usr/bin/dolphin&lt;br /&gt;&lt;br /&gt;Файл сохраняется с нужным именем, и назначается исполняемым выбором крыжика в закладке &lt;span style="font-weight: bold;"&gt;ПРАВА&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;позволять исполнения файла как программы&lt;/span&gt;. Кликом на это скрипт программа запустится с правами root, запросив при этом пароль.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-1426612811341506910?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/1426612811341506910/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2010/01/avr-linux.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1426612811341506910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1426612811341506910'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2010/01/avr-linux.html' title='AVR в Linux - Тропой Кулика.'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/S1rzU1D4MjI/AAAAAAAAAOA/gi7ShhMZnlY/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-378810991719862804</id><published>2009-12-21T23:09:00.000+05:00</published><updated>2009-12-30T14:47:28.749+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ATMega8515'/><category scheme='http://www.blogger.com/atom/ns#' term='nylc'/><category scheme='http://www.blogger.com/atom/ns#' term='Новый год'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>ATMega8515  - Гори гори, моя звезда...</title><content type='html'>&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-66f214c1d79808dd" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v2.nonxt7.googlevideo.com/videoplayback?id%3D66f214c1d79808dd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330310167%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FE0788A99D8D2E70FFBABBF1B2E28F942A2F83.30AF92DB8C9312161BF0A303ACEF0B868D27B01D%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D66f214c1d79808dd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DcE5A5YpBuT5LCAMEC_dKcY8kBkg&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v2.nonxt7.googlevideo.com/videoplayback?id%3D66f214c1d79808dd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330310167%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FE0788A99D8D2E70FFBABBF1B2E28F942A2F83.30AF92DB8C9312161BF0A303ACEF0B868D27B01D%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D66f214c1d79808dd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DcE5A5YpBuT5LCAMEC_dKcY8kBkg&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;                 Новый 2010 Год наступает нам на пятки! &lt;br /&gt;  &lt;br /&gt;  Всяк по своему пытается создать атмосферу праздника - украшая, наряжая, размалевывая во все тяжкие. Однако мы же хорошо знаем, что по В.И.Ленину - "Из всех искусств для нас важнейшим является кино». Или по Павлову - первая сигнальная ублажает мозг млекопитающего своей глубинностью и дремучестью. Так всегда было народ со времен Вавилона требовал "Хлеба и зрелищ!". &lt;br /&gt;&lt;br /&gt;  Предыстория вопроса контроллера гирлянд уходит своими корнями в далекое прошлое когда микроконтроллеры были жутко дорогие и очень слабенькие по функциональным возможностям. В те давние времена получив заказ от высокого руководства, требовавшего "хлеба и зрелищ" в завуалированном виде "что бы во дворике предприятия все мигало, да причем разными цветами" мы с моим хорошим другом стали "отращивать мозг" :) как же бы это реализовать. До этого во дворе по периметру вешали раскрашенные в разные цвета лампочки ватт так на сто пятьдесят. Лампочки сильно грелись цвета выгорали, так что мало того что к следующему "нью еар" нужно было их красить, так еще и от начальства, вернувшегося с новогодних праздников по шапке за поблеклость внешнего вида отхватывали. Предложений было много некоторые хотели на двигатель прилепить группу размыкаемых контактов и таким образом отделаться от назойливой верхушки предприятия. Однако разобрав несколько катодных станций на предмет мощных тиристоров T-160 нами было решено сделать по науке - генератор, счетчик и дешифратор. А что бы с управления мощным тиристором вдруг бы не пришло на логику вольт эдак сотню в качестве дешифратора была выбрана популярная для газоразрядных цифровых индикаторов (от 0 до 9) микросхема высоковольтного десятичного дешифратора К155ИД1. Вся конструкция была упрятана в ящик из фанеры и просуществовали лет эдак пару. Но кто то из электриков это дело благополучно "запалил" по извечной русской "авось". Теперь уже в наших  ручках суждено было блеснуть микроконтроллерам, к которым мы подобрались практически вплотную. Задача управления нагрузкой большой мощности встала в полный рост. Лепить на мощных тиристорах стало очень накладно ибо такими мощностями в гирляндах мы не управляли и близко. Тиристоры по проще нужных мощностей (до 400 - 500 ватт) не обеспечивали. Совершенно случайно в одном из журналов по комплектующим были подсмотрены "твердотельные реле" довольно дорогие по тем временам но для нас как возможность реализоваться бесценные. S202T02 - оптосимисторы позволяют управлять нагрузкой в 400-500 ватт и при этом изолировать управляющий интерфейс микроконтроллера от воздействия переменного тока 220 вольт :) &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sy_NNfsTAcI/AAAAAAAAAMs/np4mlWolzc0/s1600-h/st202.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 222px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sy_NNfsTAcI/AAAAAAAAAMs/np4mlWolzc0/s400/st202.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5417774508479283650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Мы были счастливы как дети и на радостях воплотили идею практически мгновенно. Но как водится, то что делается наспех, почти всегда не долговечно и не реализует всех возможностей. Так и вышло. В этом году дела давно минувших лет аукнулись. На этот раз решено было не допускать соплей при проектировании и сделать на совесть, с возможностью реализовать на 16 линиях управления любую схему коммутации как то "бегущий огонь", "инверсию", "пульсирующую линию" и прочее.&lt;br /&gt;&lt;br /&gt; И так хотелось бы:&lt;br /&gt;&lt;br /&gt;  1. Управлять мощной нагрузкой переменного тока 220В&lt;br /&gt;  2. Иметь возможность менять схемы управления "огнем" в любом порядке&lt;br /&gt;  3. Сделать систему настраиваемой вплоть до внесения изменений в составленную программу светопреставления "на ходу", без использования средств высокого уровня&lt;br /&gt;  4. Обеспечить наглядность прохождения программы и тем самым упростить диагностику в цепях управления и коммутации нагрузки&lt;br /&gt;&lt;br /&gt;    Одна из "авосечности" и "торопыжничества" предыдущего проекта было отсутствие даже приблизительного расчета по возможному току портов МК и как следствие напрямую, даже без токо-ограничительных резисторов запайка управления непосредственно на линию порта. Если внимательно приглядеться к ДШ по твердотельным реле можно узреть что  номинальный ток на открытие 50мА, а это на 10мА больше возможного номинального тока порта. Со временем (3-5 лет) как указано в ДШ на "твердотелки" оптопары реле деградируют имеющегося тока на открытие не хватает - разжечь ветку гирлянды становится не возможно и она начинает мерцать вместо того, что бы гореть. В этот раз из имеющихся под рукой КТ3107 были собраны ключи с током до 100мА (200мА в импульсе) и в качестве индикатора работоспособности каждый ключ нагружен светодиодом визуализатором. Схема ниже.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzjctQwma2I/AAAAAAAAAM0/Vi1Yoc-FFLo/s1600-h/sch-nycl.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 279px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzjctQwma2I/AAAAAAAAAM0/Vi1Yoc-FFLo/s400/sch-nycl.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5420324821691427682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Для расчета ключей (дабы транзисторы не вошли в насыщение и при этом хватило тока на открытие) моим хорошим другом профессионалом в "радио" была предложена следующая  методика расчета.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SzsYIqNXf1I/AAAAAAAAANc/8Lqw_xqIF08/s1600-h/trz-calc.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 194px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SzsYIqNXf1I/AAAAAAAAANc/8Lqw_xqIF08/s400/trz-calc.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5420953113518899026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Справедливости ради нужно сказать что более разумным было бы использование комплементарного КТ3107 транзистора КТ3102, по схеме с разрывом эмиттером общего провода, однако схемотехника уже изготовленного шлейфа для гирлянд подразумевала управление "+" а не "-".&lt;br /&gt;  &lt;br /&gt;  Программа управления построена на чтении инструкции из памяти EEPROM, и предусматривает задержку поступления следующей команды на исполнение. В дальнейшем нужно предусмотреть переход программы управления на любой шаг (пока только в нулевой шаг) и редактирование программы управления средствами контроллера гирлянд. В качестве источника ввода данных неплохо будет смотреться переменный резистор, а так как ATMega 8515 не имеет встроенного АЦП, то для задачи референсного напряжения для сравнения на компараторе можно использовать либо сеть R2R резисторов (ЦАП) либо ШИМ с RC цепочкой. В AppNote AVR400 фактически рассмотрен пример построения ADC на базе встроенного компаратора и ШИМ, с условием правда что измеряемые напряжения до 2/5 VCC. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzsWnOT434I/AAAAAAAAANM/x-iUTyzmbp4/s1600-h/AVR400_low_cost_ADC.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 262px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzsWnOT434I/AAAAAAAAANM/x-iUTyzmbp4/s400/AVR400_low_cost_ADC.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5420951439582748546" /&gt;&lt;/a&gt;&lt;br /&gt;   Application Note AVR400. Применение МК без АЦП для измерения аналогового сигнала.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzsXAtFe1oI/AAAAAAAAANU/ml58Vmounws/s1600-h/tab_low_cost_adc.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 67px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SzsXAtFe1oI/AAAAAAAAANU/ml58Vmounws/s400/tab_low_cost_adc.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5420951877340550786" /&gt;&lt;/a&gt;&lt;br /&gt;  Application Note AVR400. Таблица значений R,C и тактовой частоты.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SzsPTejoA5I/AAAAAAAAANE/VQnXS4pb008/s1600-h/appnote_avr_131.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 111px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SzsPTejoA5I/AAAAAAAAANE/VQnXS4pb008/s400/appnote_avr_131.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5420943403764941714" /&gt;&lt;/a&gt;&lt;br /&gt;   Application Note AVR113. Схема включения RC цепи&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;К моему великому сожалению контроллер отобрали как только я завершил испытания на стенде и обещали вернуть только по прошествии праздников. Так что изыскания будут продолжены :)&lt;br /&gt;&lt;br /&gt;  Исходные тексты проекта находятся по адресу &lt;a href="http://code.google.com/p/nylc/"&gt;адресу в Google Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sy--BS08TnI/AAAAAAAAAMc/pE3LHW-tHjE/s1600-h/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%D0%B4%D0%BD%D0%B8%D0%BC%D0%B8+%D0%B3%D0%B8%D1%80%D0%BB%D1%8F%D0%BD%D0%B4%D0%B0%D0%BC%D0%B8+%D1%81%D0%BB.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 245px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sy--BS08TnI/AAAAAAAAAMc/pE3LHW-tHjE/s400/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F+%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%D0%B4%D0%BD%D0%B8%D0%BC%D0%B8+%D0%B3%D0%B8%D1%80%D0%BB%D1%8F%D0%BD%D0%B4%D0%B0%D0%BC%D0%B8+%D1%81%D0%BB.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5417757806193036914"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-378810991719862804?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/378810991719862804/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/12/atmega8515.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/378810991719862804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/378810991719862804'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/12/atmega8515.html' title='ATMega8515  - Гори гори, моя звезда...'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/Sy_NNfsTAcI/AAAAAAAAAMs/np4mlWolzc0/s72-c/st202.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6256236889285974318</id><published>2009-11-25T19:50:00.000+05:00</published><updated>2009-11-29T22:14:22.388+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='Assembler'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><category scheme='http://www.blogger.com/atom/ns#' term='ATTiny12'/><title type='text'>ATTiny12 - Позвони мне, позвони...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sw1XwNTsDMI/AAAAAAAAAME/CQqvjtgPfD0/s1600/music_alarm_scr.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 214px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sw1XwNTsDMI/AAAAAAAAAME/CQqvjtgPfD0/s400/music_alarm_scr.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5408075213259410626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Дверной звонок - что может быть проще? Как правило об изготовлении дверного звонка никто не задумывается - возьми готовый в магазине. Но приобретение в магазине не окупается моральным удовлетворением от проделанной работы. Не важно как, но старый звонок времен СССР решено было отправить на заслуженный отдых, взамен водрузив что то издающее приятный или уж по крайней мере не режущий ухо звук. Задача в общем не ахти какая сложная, но интересная. &lt;br /&gt;  Глаз попремерявщись к имеющимся в заначке микроконтроллерам выбрал восьми ногую ATTiny12. Эх была бы ATTiny11.... или выпущенная недавно ATTiny10... глаз непременно упал бы на нее. Но в наличии только ATTiny12.&lt;br /&gt;   И так ознакомимся что же мы имеем в составе ATTiny12. Интервальный таймер, 1024 слова программной памяти, встроенный RC генератор до 1МГЦ, пять линий IO из которых одна линия может работать как внешнее прерывание INT0. Не плохо! Подойдем к задаче творчески. Что бы нам хотелось? А хотелось бы нам, что бы звонок мог проигрывать мелодию! Это означает нужно издавать определенную ноту с определенной длительностью по списку партитуры. Насчет ноты все более менее ясно, имея интервальный таймер ничего не мешает проигрывать ноты, задавая их частотой меандра. Формировать его можно в прерывании по переполнению таймера, в этом случае имеющийся интервальный таймер задает период колебания. А вот с длительностью уже так легко не выйдет, если мы задаем ее через кол-во периодов сигнала - нам становится очень неудобно жить. Периоды будут обязательно не кратные целым числам ms, придется использовать целые числа бОльших разрядностей. Сплошная головная боль да и только. Вот если бы нам еще один таймерок бы в помощь, тогда задавать длительность было бы так просто и однозначно...  По счастью AVR снабжен еще одним таймером могущим отрабатывать несколько вариантов задержек - это Watch Dog timer, "сторожевая собака" не дающая AVR впасть в маразм - например бесконечный цикл по вине программиста или помехи из вне. Как правило работа с этим устройством происходит по принципу - взвел таймер на случай ошибки и "виса", а если таковой не случился и процедура отработала нормально - "собаку" вернем в будку на цепь (инструкцией WDR) и пусть опять ждет в будке пока не завершится сторожевой интервал. Если все таки "собаке" вовремя не дали "укорот" - она "кусает" кнопку RESET. В принципе этот сброс ничем не отличается от внешнего, но идентифицировать что именно привело к сбросу возможно. Регистр MCUSR содержит информацию о событии предшествующем сбросу.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sw1PfFois7I/AAAAAAAAALs/79vQH9or4fw/s1600/RESET_SOURCE.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 356px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sw1PfFois7I/AAAAAAAAALs/79vQH9or4fw/s400/RESET_SOURCE.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5408066123048596402" /&gt;&lt;/a&gt;&lt;br /&gt;           рис.1. Схема формирования сигнала RESET для MK AVR фирмы Atmel.&lt;br /&gt;&lt;br /&gt;  И так возьмем эту собаку в оборот и не станем "дергать ее за цепь" возвращая на место преждевременно - пусть срабатывает как и положено через интервал Twdg который к слову достаточно гибок и может настроиться отдельным делителем на разные интервалы (см. рис.2). &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sw1SfL-dtCI/AAAAAAAAAL0/FT6EFSy3JLU/s1600/RESET_WDR.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 313px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sw1SfL-dtCI/AAAAAAAAAL0/FT6EFSy3JLU/s400/RESET_WDR.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5408069423286039586" /&gt;&lt;/a&gt;&lt;br /&gt;           рис.2. Пределитель для "сторожевого пса" MK AVR фирмы Atmel.&lt;br /&gt;&lt;br /&gt;  Таким образом WATHCDOG будет таймером задатчиком интервала работы основного таймера издающего тональный сигнал. Надо заметить что у данного метода будет один не очень существенный но заметный на слух недостаток - так как WATHCDOG именно сбрасывает МК, то состояние всех портов, в том числе и порта используемого для формирования тонального сигнала будет сбрасываться в логический ноль. Практически это означает, что с определенным периодом задаваемым таймером WATCHDOG будет происходить срыв внутри периода генерации на время восстановления. Время восстановления конечно не значительное, но ухо все равно будет слышать срывы из за их периодичности. На качество инструмента аля "дверной свисток" влияет не сильно :) Можно окончательно избавиться и от этого изъяна отключив WATCHDOG в процедуре обработки прерывания Timer0 (тонального сигнала), тогда интервал работы тона будет слегка варьироваться на половину периода, но никогда не будет обрываться внутри периода тональной посылки. Мне показалось что борьба за чистый и незамутненный звук инструмента достойного Амати, не так уж и важна.&lt;br /&gt;  Само собой мелодию надо хранить в виде записи последовательности ДЛИТЕЛЬНОСТЬ, ТОН в памяти программ. Кроме того необходимо отлавливать прерывание от внешнего источника (дверной кнопки) и осуществлять старт проигрыша сигнала. После проигрывания сигнала вполне допустимо уложить контроллер в летаргический сон - дабы минимизировать потребление (а вдруг проще будет менять батарейки чем возиться с источником питания?).&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sw1VgoL4AOI/AAAAAAAAAL8/n9Kh9CnXTLU/s1600/music_alarm_sch.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 195px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sw1VgoL4AOI/AAAAAAAAAL8/n9Kh9CnXTLU/s400/music_alarm_sch.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5408072746573234402" /&gt;&lt;/a&gt;&lt;br /&gt;    Рис.3. Схема электронного музыкального многотонального программируемого дверного звонка.&lt;br /&gt;&lt;br /&gt;  Конечно писать программу для такого устройства на Си можно, но невероятно глупо - ибо чего там писать то? &lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/View?id=dgnm8ngw_17dw6x79fj"&gt;&lt;span style="font-weight:bold;"&gt;Исходный текст программы на ассемблере AVR.&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S. Расширение этого устройства может быть весьма забавным - например добавление к имеющимся возможностям атаки звука или вариации звука по громкости в зависимости от установки пользователем. Но это уже совсем другая история.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SxKHmIsiKuI/AAAAAAAAAMM/LuDNGB6bvLI/s1600/alarm_wav.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 78px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SxKHmIsiKuI/AAAAAAAAAMM/LuDNGB6bvLI/s400/alarm_wav.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5409535191664437986" /&gt;&lt;/a&gt;&lt;br /&gt;                Рис.4. Автопортрет дверного звонка.&lt;br /&gt;&lt;br /&gt;Используемая литература:&lt;br /&gt;&lt;br /&gt;1. ATTiny11-ATTiny12 Atmel datasheet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6256236889285974318?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6256236889285974318/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/11/attiny12.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6256236889285974318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6256236889285974318'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/11/attiny12.html' title='ATTiny12 - Позвони мне, позвони...'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/Sw1XwNTsDMI/AAAAAAAAAME/CQqvjtgPfD0/s72-c/music_alarm_scr.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-7499338802610887892</id><published>2009-10-04T22:25:00.000+06:00</published><updated>2009-10-05T23:17:47.830+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='DS18xx'/><category scheme='http://www.blogger.com/atom/ns#' term='фоторезист'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia 6100'/><category scheme='http://www.blogger.com/atom/ns#' term='умножитель'/><category scheme='http://www.blogger.com/atom/ns#' term='N6100-T2'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>N6100-T2  -  "А вы ноктюрн сыграть могли бы, на флейте водосточных труб?"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsjcG9e53MI/AAAAAAAAAKM/7Hh5nOiasCs/s1600-h/n6100-t2_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsjcG9e53MI/AAAAAAAAAKM/7Hh5nOiasCs/s400/n6100-t2_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388798966290308290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Комплекс N6100-T2. Уже не еж провода и деталей на "макетке" :).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsnWXBrrQzI/AAAAAAAAALc/qQRVn3ZgkM4/s1600-h/N6100-T2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 399px; height: 400px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsnWXBrrQzI/AAAAAAAAALc/qQRVn3ZgkM4/s400/N6100-T2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5389074120202470194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Комплекс N6100-T2 общий вид.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Фирма Nokia безусловно флагман мобилостроения в Европе, однако не все то что позволено Юпитеру, позволено быку :) &lt;br /&gt;  Проведя на просторах интернета поиск по ключевой строке "LCD Nokia 6100 AVR" я еще до начала макетирования выяснил что Nokia использует в своих изделиях LCD различных производителей отличающихся между собой контроллерами. Все "разнообразие видов" этих цветастых животных по мнению "съевших на них собаку" радиолюбителей размножалось в рамках четырех платформ-прародителей&lt;br /&gt; a) Philips Semiconductors PCD8833&lt;br /&gt; б) LEADIS LDS176&lt;br /&gt; в) Seiko Epson Corparation S1D15G00&lt;br /&gt; г) Seiko Epson Corparation S1D15G10, (S1D15G14, S1D15G17 см.1)&lt;br /&gt;&lt;br /&gt;список литературы по описанию различий контроллеров применяемых Nokia для моделей телефонов 6100,6610,2600,7200,7250,3100 :&lt;br /&gt;&lt;br /&gt; 1. http://www.silabs.ru/pubs/Stat_119.pdf&lt;br /&gt; 2. http://www.electricstuff.co.uk/noklcd.html&lt;br /&gt;  &lt;br /&gt; Изучение, ДШ легкодоступных в интернет, дает много пищи для размышлений. В принципе основное различие LCD в том, что изначально ставившийся в Nokia на ряд совместимых по нему моделей (6100,6610,2600,7200,7250,3100....) LCD имел возможность работать в режиме 16 битного цвета. В целом же были доступны 8-битный, 12-битный упакованный, 12-битный не упакованный и 16 битный режимы. А вот последующие (S1D15G00 как я предполагаю) поддерживали только 8 и 12 битный режимы. По системе команд для управление дисплеем зверинец делится на два класса PHILIPS и EPSON. Пункты списка а) и б) соответственно PHILIPS. Как показала практика вышеуказанные корпорации все время совершенствовали свои устройства (при этом меняя технологические нормы) и изменяли процедуры инициализации - пуска LCD. Фактически LCD запитывается одним напряжением (на самом деле их два VCC, VDD) 3.3В, но для работы ячейки ЖКИ нужно как минимум напряжения разной полярности, кроме того еще и в зависимости от температуры окружающей среды оно должно варьироваться. Таким образом внутри изделия стоит зарядовый насос (Booster) и его запуск процедура и так крайне запутанная судя по всем четырем ДШ еще и прирастала изменениями связанными с модернизацией, о чем можно судить по многочисленным вариантам кода инициализации гуляющего по вебу. &lt;br /&gt;&lt;br /&gt; http://forum.lcdinfo.com/viewtopic.php?t=586&amp;postdays=0&amp;postorder=asc&amp;start=0&lt;br /&gt;&lt;br /&gt; Вход, а особенно выход из режима сна тоже связаны с запуском "насоса" и осциллятора и они тоже очень разные для разных модификаций. При инициализации кроме запуска бустера, нужно еще и сконфигурировать сам LCD, а именно развертки данных из ОЗУ (горизонтальная и вертикальная), режим хранения цветовых данных в ОЗУ LCD, палитра, контрастность, настройка входного питания (резистивного делителя я полагаю). На  форумах посвященных LCD Nokia N6100 вычислять и определять тип попавшего в руки LCD предлагалось по размерам кристалла контролера, его в некоторых дисплеях может закрывать легко устраняемая полоска изоляционного материала, в части он открыт для обозрения со стороны ЖКИ и залит компаундом. По данным этих исследований получалось так что самый маленький по размерам кристалл это PHILIPS совместимый. Оно и понятно так как по всей видимости он явился родоначальником этого вида LCD для Nokia. Однако мне в частности попался экземпляр EPSON с контроллером по размерам даже ниже чем у последних PHILIPS. Так что селекция по данному типу не всегда работает. Так же не работает и предложенная селекция по цвету шлейфа зеленый - EPSON, желтый/коричневый - PHILIPS. Кроме того PHILIPS во время инициализации в определенный период времени (во время старта) умеет посылать идентификационные данные. &lt;br /&gt;  Что характерно мне попался PHILIPS-совместимый дисплей, который совершенно не стандартным (не по ДШ) методом отрабатывал зеркальность вокруг осей и добиться результата стало возможным используя неописанный в ДШ режим работы по цвету, спать и просыпаться данный LCD так же пришлось учить в слепую. Этот дисплей весьма неприятно вел себя при выходе из режима "сна" и запуске бустера, на экране появлялось переконтрасированное изображение с четко пересвеченными по габаритам вертикальными полосами. Как мне показалось данный тип дисплеев очень зависит от напряжения питания, и пр его больших значениях (выше 3.4В) начинает комкать гамму и "жечь" переконтрастом экран. Подгонка контраста на нем занятие очень не приятное градиент в 2-3 единицы не заметен на глаз, но значительно влияет на цветность.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SsjfKez6OaI/AAAAAAAAAKc/nX2k8du2LfA/s1600-h/n6100-t2_phnew.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 318px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SsjfKez6OaI/AAAAAAAAAKc/nX2k8du2LfA/s400/n6100-t2_phnew.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388802325311273378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Новый PHILIPS-совместимый дисплей, заставляет попотеть при запуске. Внешне очень похож на EPSON.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Кроме того один из дисплеев (мой знакомый в другом городе) не принял ни одно ухищрение - картинка осталась инверсной по цвету и отраженной зеркально, не смотря на то что дисплей принимал команды PHILIPS-ской кодировки. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SsnQf081E9I/AAAAAAAAALU/g2dsTMSt14Q/s1600-h/unlnown-lcd.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SsnQf081E9I/AAAAAAAAALU/g2dsTMSt14Q/s400/unlnown-lcd.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5389067674333811666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Нечто PHILIPS-подобное неподдающееся дрессировке. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  При этом имеющийся в моей коллекции ортодоксальный PHILIPS вел себя очень покладисто, правильно реагируя на все то что описано в ДШ. Как мне кажется хорошим признаком что LCD является оригинальным PHILIPS является наличие, спрятанного под скотчем в задней части дисплея шлейфа с контактными дорожками, к которым очень удобно подпаяться. Однако настолько же легко этот шлейф и ломается по сгибу (в моем случае переломался за 2-3 цикла сгибания-разгибания) припаянным шлейфом, поэтому закреплять его надо жестко на макетной плате или печатной, раз и навсегда. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsnD0sw_bWI/AAAAAAAAALE/UW_5uVBzfgg/s1600-h/philips-break.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 344px; height: 400px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsnD0sw_bWI/AAAAAAAAALE/UW_5uVBzfgg/s400/philips-break.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5389053739262766434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Оригинальный PHILIPS "убитый" в последствии за два перегиба шлейфа.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsnIDjO9CRI/AAAAAAAAALM/i4iamJU1L_c/s1600-h/orig_philips_back.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 255px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsnIDjO9CRI/AAAAAAAAALM/i4iamJU1L_c/s400/orig_philips_back.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5389058392448633106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Оригинальный PHILIPS вид с задней панели, разгибать и сгибать шлейф противопоказано!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Подпаяться к EPSON на много сложнее - придется сдернуть разъем "кроватку" (это легко сделать обычным паяльником) и распаяться на открывшиеся монтажные площадки этой "кроватки". МГТФ хороший вариант но нужно выбирать сечение поменьше, что бы получившийся шлейфик а в нем 8-9 проводников не был жестким. Самое сложное это припаяться к шлейфу - это практически "вырви глаз", а если еще и рука не набита... :)      Третий по счету дисплей я оппаял за минуты, набив руку и глаз, хотя перед этим уходило до часу. Исходя из этого конечно лучший вариант будет приклеенный к монтажке и распаянный ответный разъем "кроватка". Только не нужно пытаться снять ее с телефона феном, она покоробится (что и получилось у меня) и станет не пригодной для сочленений. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Ssjiw_dioVI/AAAAAAAAAK0/VktZXaObpvo/s1600-h/n6100-t2-eps_maket.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 329px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Ssjiw_dioVI/AAAAAAAAAK0/VktZXaObpvo/s400/n6100-t2-eps_maket.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388806285445734738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EPSON совместимый дисплей "распят" на макетной плате.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Ssnuw67HP2I/AAAAAAAAALk/2xCFyvIviig/s1600-h/n6100-t2-eps_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 386px; height: 400px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Ssnuw67HP2I/AAAAAAAAALk/2xCFyvIviig/s400/n6100-t2-eps_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5389100953343836002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Подпайка не к оригинальному PHILIPS составляет определенную трудность. Вид EPSON-совместимого дисплея с обратной стороны защитная лента отклеена.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Вдоволь намучившись с дисплеем на монтажке я перенес устройство в уже окончательной конфигурации на печатный монтаж. PCB проектировалась в KiCAD ровно как и схема устройства. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjbVCiOKUI/AAAAAAAAAJ8/7Pw7e0ahgpk/s1600-h/n6100T2-sch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 264px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjbVCiOKUI/AAAAAAAAAJ8/7Pw7e0ahgpk/s400/n6100T2-sch.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388798108652939586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Схема комплекса N6100-T2. KiCAD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Я бы остался в целом доволен KiCAD если бы вдруг не оказалось, что он "позабыл" о нескольких соединениях указанных на схеме в печатной плате. Печально конечно, это означает что KiCAD нужно проверять после разводки гораздо тщательней. &lt;br /&gt;  В дополнении к "косякам" KiCAD, некоторые я допустил еще и сам, они хоть и были не приятной новостью, в принципе легко устранились без применения скальпеля. Сама печатная плата как мне сейчас кажется зря была сделана с применением фотоспособа (позитивным фоторезистом), вполне подошла бы и "утюговая технология". Ультрафиолет полученный естественным путем (с выносом на открытое пространство), без применения ультрафиолетовой лампы, чуть-чуть "не добил" дорожки и потом при проявке и травлении хлорное железо их изрядно подъело. Одна подъеденная дорога таки попила у меня крови, проявившись в готовом устройстве непостоянством инициализации дисплея. Я даже начал подумывать - а не перетерло ли у меня шлейфик LCD? Пробитая дорожка нашлась и  оказалась выбором LCD, линией #CS. В тот момент когда я прислонялся к ней пальцем или пинцетом и сбрасывал комплекс - устройство не заводилось. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Ssjg0TFRViI/AAAAAAAAAKk/Y1ZCcAjzqw4/s1600-h/n6100-t2-pcb.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 363px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Ssjg0TFRViI/AAAAAAAAAKk/Y1ZCcAjzqw4/s400/n6100-t2-pcb.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5388804143228999202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Фотоспособ при нанесении рисунка дорожек на фольгированый текстолит.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjhPh4gBHI/AAAAAAAAAKs/LAOPstORhqY/s1600-h/n6100-t2_4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 279px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjhPh4gBHI/AAAAAAAAAKs/LAOPstORhqY/s400/n6100-t2_4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388804611058435186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Так видит печатный монтаж N6100-T2 KiCAD (3D-просмотр монтажа)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjctbGFEBI/AAAAAAAAAKU/nR7kwRIkP0M/s1600-h/n6100-t2_3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SsjctbGFEBI/AAAAAAAAAKU/nR7kwRIkP0M/s400/n6100-t2_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388799627074277394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Флюс, канифоль - печатный монтаж комплекса N6100-T2 без доводки C2H5OH :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Изначально в конструкции планировалось использовать две батареи AAA или одну дисковую CR. Однако до конца совладать с умножителем не получилось и я запустил компромиссный вариант от трех Ni-Cd аккумуляторов. Таким образом напряжение питания устройства 1.2*3 = 3.6-3.8В. Скорей всего у порта МК попросту не хватает возможностей по току раскачать умножитель (утроитель см. схему) в итоге от имеюшихся Uпит=3В на выходе умножителе получается 5.19В, что не достаточно для качественной подсветки дисплея (как правило это два светодиода). &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsjbezYtNsI/AAAAAAAAAKE/oSG4YKtOuJg/s1600-h/%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 341px; height: 400px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SsjbezYtNsI/AAAAAAAAAKE/oSG4YKtOuJg/s400/%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5388798276385191618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Схема умножителя (х3). *1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Возможно мне удастся довести умножитель в следующих вариантах, но установка в конструкцию IC "зарядового насоса" по эффективности на порядок лучше умножителя. Да и в качестве МК для термометра стоит выбирать не ATMega8 а что нибудь по совершенней, например ATMega88P. &lt;br /&gt;  Применение в любительской конструкции однопроводных цифровых термометров DALAS DS18S20(DS18B20) не очень то и оправдано. Лучшим решением по моему мнению было бы применение внутри ШИМ датчика температуры серии TMPxx от AD, а внешнего либо DS18xx, либо AD7814, либо цифрового последовательно Microchip-а.&lt;br /&gt;&lt;br /&gt; статья в стадии завершения....будет дописана и дополнена в части фотоматериала в ближайщее время :)&lt;br /&gt;&lt;br /&gt;ссылки на литературу:&lt;br /&gt;&lt;br /&gt;1. Ирвинг М. Готлиб "ИСТОЧНИКИ ПИТАНИЯ. Инверторы. Конверторы. Линейные и импульсные стабилизаторы".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-7499338802610887892?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/7499338802610887892/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/10/n6100t2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/7499338802610887892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/7499338802610887892'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/10/n6100t2.html' title='N6100-T2  -  &quot;А вы ноктюрн сыграть могли бы, на флейте водосточных труб?&quot;'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/SsjcG9e53MI/AAAAAAAAAKM/7Hh5nOiasCs/s72-c/n6100-t2_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-567996435232778603</id><published>2009-08-19T11:08:00.000+06:00</published><updated>2009-08-19T13:38:36.761+06:00</updated><title type='text'>N6100 - "Задание дадено, будет сделато!"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SouJNKgo-zI/AAAAAAAAAJs/ViXc80n5Z68/s1600-h/IMG_1607.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 325px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SouJNKgo-zI/AAAAAAAAAJs/ViXc80n5Z68/s400/IMG_1607.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5371537839822011186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; Вот такой прибор комнатный/уличный термометр пришлось в условиях сжатых сроков делать на NokiaN6100, подвинув в сторону то что "ближе к телу" - mk61avr. Цветовая схема и экспозиция заказчика, к сожалению я не разделяю его эстетических наслаждений от этюда в темных тонах. Прибор отображает температуру дом/улица и старается как может экономить батарейное питание :) засыпая и гася подсветку через минуту. Как видно подсветка дисплея на 3.6В было 3.3В преобладает артефактами - чередующимися светлыми-темными полосами. Напряжение питание пришлось поднять до 3.6В, так как 3.3В это все равно что "кина не будет, электричество кончилось" :). Заказчик хочет долгой и безбедной работы от дисковой батареи желательно 3.3В. Замеры с амперметром увы приводят к не очень утешительным результатам, ток потребления в спящем режиме 0.16-0.20 мА. В рабочем состоянии с включенной подсветкой 10-11 мА. С выключенной подсветкой 6-7 мА. При особых стечениях обстоятельств (расчеты приведу потом) получается на 280мАЧ батарейки протянуть с полгодика можно, но не год! Правда еще пока не отключаю в "спячке" питание самого LCD, как вариант конечно можно рассмотреть - но время старта тогда около 2-3 секунд, не очень то приятно. В "горячем" режиме время старта 0.8-1.2с из за задержки между конвертированием температуры  и ее чтением из датчиков.&lt;br /&gt;&lt;br /&gt;  Из интересного - так как клиент захотел дюже красиво и что бы шрифты антиалиасились, конечно пришлось попотеть загоняя битмапы цифр и изображений в расчетные 5-6Кб, на данный момент реализована разновидность алгоритма RLE позволившая вкатить прилично картинок в flash контролера (Данные без сжатия в районе 20-25Кб). Однако реализую сейчас смешанный RLE-словарь алгоритма сжатия который даст выигрыш в еще пару Кб, что не лишне для продвинутого сервиса термометра. &lt;br /&gt;&lt;br /&gt;to &lt;span style="font-weight:bold;"&gt;Vitasam&lt;/span&gt;: Виталий в связи с уже наработанным алгоритмом сжатия ФС для mk61avr мы с тобой поменяем в пользу сжатия RLE что бы не морочаться с указанием размера кода в странице MK61. Я думаю что ты меня все таки поддержишь с ФС и поможешь в реализации тем более там осталось на один чих.&lt;br /&gt;&lt;br /&gt;P.S. Для себя решил если заказчик "потеряется" (а похоже что к тому идет) исходники надо будет отдать в массы, не плохой термометр получается в хозяйстве каждому сгодится. &lt;br /&gt;&lt;br /&gt;P.P.S.Не устаю восхищаться n6100 потребляет мало, функциональность интерфейса выше всяческих похвал, возможно Виталий стоит подумать о применении в mk61avr как  штатного средства отображения. Потребление подсветки ~2mA. Сколько потребляет "тельце" LCD пока не измерял но скоро доберусь и до этого :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-567996435232778603?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/567996435232778603/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/08/n6100.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/567996435232778603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/567996435232778603'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/08/n6100.html' title='N6100 - &quot;Задание дадено, будет сделато!&quot;'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/SouJNKgo-zI/AAAAAAAAAJs/ViXc80n5Z68/s72-c/IMG_1607.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6200711865048186494</id><published>2009-08-10T09:22:00.000+06:00</published><updated>2009-08-11T01:19:09.452+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='N6100'/><category scheme='http://www.blogger.com/atom/ns#' term='LCD'/><category scheme='http://www.blogger.com/atom/ns#' term='ATMega8'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>Дисплей Nokia N6100 - "от нашего стола - вашему".</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sn-tUNLEKPI/AAAAAAAAAJU/Fq2rOO6Elh4/s1600-h/IMG_1548.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 316px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sn-tUNLEKPI/AAAAAAAAAJU/Fq2rOO6Elh4/s400/IMG_1548.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5368199843493980402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  Выпала случайная возможность познакомиться с еще одним весьма дешевым (от 150 до 250 рублей) цветным графическим дисплеем. Мало того приличное разрешение 132х132, так еще и  12 и 16 битные режимы цветности. По сравнению с ZX-spectrum это больше половины разрешения экрана спектрума 256×192, а по цветам так и в десятки раз превосходит последний. Это я к тому что как далеко шагнула микроэлектроника, на первый "замыленный" взгляд кажется что успехи незначительны, но если оценивать пристально - то результаты на лицо. Контроллер дисплея принимает данные последовательно, так же как например и Nokia3310, а значит для управления всего и нужно 4 сигнала CS, SDA, CLK, RESET. Кроме того очень много полезных функций возложено на сам контроллер LCD, в отличии от Nokia3310 который прямо сказать сервисом не перегружен :). Работать с LCD удобно, удобней даже чем с N3310, результаты тестов на фотографиях.&lt;br /&gt;  &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sn-teabwMyI/AAAAAAAAAJc/cDpPvNLIbbk/s1600-h/IMG_1550.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 364px; height: 400px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sn-teabwMyI/AAAAAAAAAJc/cDpPvNLIbbk/s400/IMG_1550.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5368200018852328226" /&gt;&lt;/a&gt;&lt;br /&gt;           "монтажка" в сборе и LCD N6100 с подсветкой от 3.6V&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SoByYFG4QlI/AAAAAAAAAJk/SAN0bvPlD8s/s1600-h/IMG_1563.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 315px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SoByYFG4QlI/AAAAAAAAAJk/SAN0bvPlD8s/s400/IMG_1563.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5368416513839088210" /&gt;&lt;/a&gt;&lt;br /&gt;              Шрифты и изображения на LCD N6100&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6200711865048186494?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6200711865048186494/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/08/nokia-n6100.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6200711865048186494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6200711865048186494'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/08/nokia-n6100.html' title='Дисплей Nokia N6100 - &quot;от нашего стола - вашему&quot;.'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/Sn-tUNLEKPI/AAAAAAAAAJU/Fq2rOO6Elh4/s72-c/IMG_1548.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-95278080685861569</id><published>2009-07-21T21:09:00.000+06:00</published><updated>2009-07-24T12:29:17.215+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='EEPROM'/><category scheme='http://www.blogger.com/atom/ns#' term='I2C'/><title type='text'>MK61avr - Подальше положишь, поближе возьмешь.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SmiYNRi6SPI/AAAAAAAAAJE/NiVqpGbp5o0/s1600-h/mk61avr-vitasam.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SmiYNRi6SPI/AAAAAAAAAJE/NiVqpGbp5o0/s400/mk61avr-vitasam.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5361702710200125682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Фотография mk61avr комплекса &lt;span style="font-weight:bold;"&gt;vitasam&lt;/span&gt; на "бредовой доске"&lt;br /&gt;&lt;br /&gt;Решение хранить во внутреннем EEPROM AVR программы МК61, конечно самое простое, но хочется что бы порядок был во всем. Приятно когда память внешняя и ее может быть не один или два, а много. А еще хорошо когда что то кроме памяти можно зацепить.. А еще хорошо управлять чем то зацепленным к mk61avr... А еще.., а еще.. Вот так собственно мы и пришли к мнению, что лучшим из лучших, удобнейшим из удобнейших будет решение оснастить mk61avr внешней шиной стандарта I2C - мало того что это возможность подключить 127 устройств, семь из которых могут быть памятью EEPROM для хранения программ или памятью для хранения процедур mk61avr, но так же и возможность зацепить различные  датчики I2C и любые устройства обладающие I2C интерфейсом. Так же было решено что I2C шина расширяет во вне адресное пространство виртуальной машины VM61 и дает возможность передавать исполнение на куски кода находящиеся не в стандартной странице mk61avr (в отличии от MK61, mk61avr поддерживает размер страницы 256 байт) и работать с EEPROM как с частью адресного пространства для mk61avr распространяющимся от 0..0xFFFFFFFF (базовая разрядность). Так же пришли к выводу что оснастить внешним EEPROM хотя бы в количестве одна штука для хранения программ было бы для базовой конфигурации вполне сносным решением, не сильно тяготящим карман, но и дающим возможность хранить более 2-4 стандартных программ.&lt;br /&gt; Вот так чаяниями Vitasam и моим "кодингом" и "паянингом" платформа mk61avr обзавелась внешней шиной I2C и EEPROM 24LC32 хорошо известной фирмы Microchip.&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SmXdRQNzSjI/AAAAAAAAAI8/yuxQg9dfaLI/s1600-h/mk61avr-I2C-store.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 165px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SmXdRQNzSjI/AAAAAAAAAI8/yuxQg9dfaLI/s400/mk61avr-I2C-store.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5360934219934812722" /&gt;&lt;/a&gt;&lt;br /&gt;   Схема I2C встроенного "хранилища" программ.&lt;br /&gt;&lt;br /&gt; Надо сказать что фирма Филипс очень хорошо позаботилась о логичности и понятности двух проводного синхронного интерфейса I2C. Разборки с ним, для меня еще не подходившему к данному протоколу, не составили большого труда.&lt;br /&gt;&lt;br /&gt;P.S. Ну а внутренний EEPROM с подачи Vitasam теперь принято считать резервным хранилищем контекста (регистров,стеков и страницы кода из ОЗУ) mk61avr при выключении.&lt;br /&gt;&lt;br /&gt;P.P.S. На комплексе &lt;span style="font-weight:bold;"&gt;Vitasam&lt;/span&gt; была проверена работа с внешним EEPROM 24LC128. В принципе до значения адреса FFFF внутреннего счетчика все EEPROM будут работать увеличивая кол-во страниц под программы - пропорционально размерной сетке. &lt;br /&gt;&lt;br /&gt; 24LC32  - 4Кб &lt;br /&gt; 24LC64  - 8Кб&lt;br /&gt; 24LC128 - 16Кб&lt;br /&gt; 24LC256 - 32Кб&lt;br /&gt; 24LC512 - 64Кб&lt;br /&gt;&lt;br /&gt;единственный пока не вписывающийся EEPROM&lt;br /&gt; 24LC1025 - 128Кб&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-95278080685861569?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/95278080685861569/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/07/mk61avr_21.html#comment-form' title='Комментарии: 10'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/95278080685861569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/95278080685861569'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/07/mk61avr_21.html' title='MK61avr - Подальше положишь, поближе возьмешь.'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/SmiYNRi6SPI/AAAAAAAAAJE/NiVqpGbp5o0/s72-c/mk61avr-vitasam.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-8625238827634728017</id><published>2009-07-06T00:38:00.000+06:00</published><updated>2009-07-06T07:27:45.721+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LCD'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><title type='text'>MK61avr - делу время, потехе час</title><content type='html'>Устав от монотонного прохождения тестов все ж таки не утерпел и "устроил шалость", результаты на видео.&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-ecf051a980ce365c" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v16.nonxt1.googlevideo.com/videoplayback?id%3Decf051a980ce365c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330310167%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7ABF11C1A5ECD9C00E8EC50C2A65702EB21394B7.1FE8650CBD1C7BE4AF5B725BCECABAF8018EC80F%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Decf051a980ce365c%26offsetms%3D5000%26itag%3Dw160%26sigh%3D5knlv2ph5XKJROKn3VN7kzz0ZzU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v16.nonxt1.googlevideo.com/videoplayback?id%3Decf051a980ce365c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330310167%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7ABF11C1A5ECD9C00E8EC50C2A65702EB21394B7.1FE8650CBD1C7BE4AF5B725BCECABAF8018EC80F%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Decf051a980ce365c%26offsetms%3D5000%26itag%3Dw160%26sigh%3D5knlv2ph5XKJROKn3VN7kzz0ZzU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;http://code.google.com/p/mk61avr/source/browse/trunk/%20mk61avr%20--username%20vitasam70/avi/mk61avr_native_write_lcd.AVI&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Текст программы в мнемонике МК61&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ИП0 КП7 ИП3 КП8 FL3 02 БП 06&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Если перевести в ЯВУ то это примерно следующее:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; X = R0;&lt;/div&gt;&lt;div&gt; *R7 = X;&lt;/div&gt;&lt;div&gt; do {X = R3; *R8 = X;} while(--R3&amp;gt;0); &lt;/div&gt;&lt;div&gt; while(1);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; С пояснениями:&lt;br /&gt; в R0 константа для позиционирования в LCD и одновременного вывода данных. Так как MK61avr - имеет базовую разрядность 4 байта то при выводе в ячейку памяти с адресом 16, 2 байт - это координата X, 1 - байт координата Y, 0 -байт информация, которую нужно вывести в LCD по координате X,Y. Если писать в адрес выше 16, то позиционирование на байт происходить не будет, а будет просто записываться байт 0 в LCD. Так как LCD nokia3310 автоматически переходит к следующему байту после операции записи, то последовательная запись в адрес например 17 будет заполнять LCD данными. На видео видно как 50000 вводится в R3 и затем программа записывает данные в LCD в цикле 50000 раз.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;mk61avr [06. 51]&amp;gt;d&lt;/div&gt;&lt;div&gt;60 B7 63 B8 5A 02 51&amp;lt;06&amp;gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;mk61avr [06. 51]&amp;gt;@&lt;/div&gt;&lt;div&gt;R00=255.0000000&lt;/div&gt;&lt;div&gt;R01=255.0000000&lt;/div&gt;&lt;div&gt;R02=0.000000000&lt;/div&gt;&lt;div&gt;R03=1.000000000&lt;/div&gt;&lt;div&gt;R04=0.000000000&lt;/div&gt;&lt;div&gt;R05=0.000000000&lt;/div&gt;&lt;div&gt;R06=0.000000000&lt;/div&gt;&lt;div&gt;R07=16.00000000&lt;/div&gt;&lt;div&gt;R08=17.00000000&lt;/div&gt;&lt;div&gt;R09=0.000000000&lt;/div&gt;&lt;div&gt;R0A=0.000000000&lt;/div&gt;&lt;div&gt;R0B=0.000000000&lt;/div&gt;&lt;div&gt;R0C=0.000000000&lt;/div&gt;&lt;div&gt;R0D=0.000000000&lt;/div&gt;&lt;div&gt;R0E=0.000000000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;mk61avr [06. 51]&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-8625238827634728017?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=ecf051a980ce365c&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/8625238827634728017/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/07/mk61avr.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8625238827634728017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8625238827634728017'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/07/mk61avr.html' title='MK61avr - делу время, потехе час'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-4154425533702395621</id><published>2009-06-26T23:47:00.000+06:00</published><updated>2009-11-25T23:11:21.047+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HDL'/><category scheme='http://www.blogger.com/atom/ns#' term='МК61'/><category scheme='http://www.blogger.com/atom/ns#' term='Quartus'/><category scheme='http://www.blogger.com/atom/ns#' term='BCD'/><category scheme='http://www.blogger.com/atom/ns#' term='Adder'/><category scheme='http://www.blogger.com/atom/ns#' term='Verilog'/><title type='text'>Анализ архитектуры МК61 - кто сильнее Кит или Слон?</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; И так воспользовавшись синтезатором Quartus и описанием моделей 4 битных сумматоров для BCD и BIN определим кто "сильнее" и насколько :) Оговорим правила схемного решения блока суммирования (сумматора) пусть в модуль входят исходные значения для суммирования A и B, и вход переноса Cin с предыдущего сумматора для возможности каскадирования блоков. Выходом является результат суммирования RESULT и выход переноса Cout. При каскадировании перенос Cout соединяется с входом в очередной сумматор. Оговорим так же что по фронту тактового сигнала clk значения A,B,Cin,RESULT,Cout - записываются в свои регистры, это нужно для окончательного придания дизайну синхронности. Кроме того по расчету допустимой тактовой частоты на "клоке" синтезатором мы и будем судить о скорости решения. &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Опишем в Verilog обычный четырех битный сумматор. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 153, 0);  font-size:10px;"&gt;module sumbin(RESULT, Cout, a, b, Cin, clk);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-size:85%;color:#009900;"&gt;&lt;span class="Apple-style-span"  style="font-size:10px;"&gt;&lt;div&gt;output reg [3:0]RESULT;&lt;/div&gt;&lt;div&gt;output reg Cout;&lt;/div&gt;&lt;div&gt;input  [3:0]a,b;&lt;/div&gt;&lt;div&gt;input  Cin;&lt;/div&gt;&lt;div&gt;input  clk;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;reg [3:0]rA,rB;&lt;/div&gt;&lt;div&gt;reg rCin;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;wire [4:0]sum_bin = rA + rB + rCin;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;wire BIN_carry = sum_bin[4];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;always@(posedge clk) begin&lt;/div&gt;&lt;div&gt; rA &lt;= a;&lt;/div&gt;&lt;div&gt; rB &lt;= b;&lt;/div&gt;&lt;div&gt; rCin &lt;= Cin;&lt;/div&gt;&lt;div&gt; RESULT &lt;= sum_bin[3:0];&lt;/div&gt;&lt;div&gt; Cout &lt;= BIN_carry;&lt;/div&gt;&lt;div&gt;end&lt;/div&gt;&lt;div&gt;endmodule&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;div&gt;Синтезируем и смотрим результат:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SkUNbVcBbnI/AAAAAAAAAHU/NcfL-_7U7yc/s1600-h/BIN_sum_reprot_clk.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SkUNbVcBbnI/AAAAAAAAAHU/NcfL-_7U7yc/s400/BIN_sum_reprot_clk.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351698495462010482" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 191px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Синтезатор показывает нам что тактовая частота способна достигнуть 380МГц, задержка на самом длинном участке 2.631 ns.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SkURnGfS7jI/AAAAAAAAAHc/r2zaPmSlt1c/s400/BIN_sum_reprot_le.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351703095654149682" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 380px; " /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Так же синтезатор показывает нам свои затраты на реализацию схемы - это 6 LUT и 14 однобитных регистров (D-триггеров), так как в ядре общая обвязка РОН - сумматор - РОН симулируется нашими регистрами то расход именно D-триггеров можно не рассматривать. Таким образом затрачено 6 LUT из которых 5 находятся в арифметическом режиме (т.е. фактически сумматоры-полусумматоры и есть).  Кое какое представление как синтезатор видит описанную в HDL схему мы можем получить из просмотра RTL схемы, это конечно не ахти что - но пользоваться этим приходится.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUUJAzY7uI/AAAAAAAAAHk/pDeH5rZBIp4/s1600-h/BIN_sum_shem.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUUJAzY7uI/AAAAAAAAAHk/pDeH5rZBIp4/s400/BIN_sum_shem.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351705877266624226" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 221px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Как видно из RTL представления схемы синтезатор вполне разборчиво отрисовывает регистры на входах (это то что он делает очень хорошо), а вот с изображением сумматора почти всегда не задается - единичный бит Cin суммируется при помощи еще одного сумматора, как 4 битная константа 0001B. Это не совсем так и для того что бы четко выяснить что же там понастроил синтезатор можно взглянуть на пост-роутинг блоков LE's.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SkUVLdd9BDI/AAAAAAAAAHs/jb9b51F11Lo/s1600-h/BIN_le_shem.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SkUVLdd9BDI/AAAAAAAAAHs/jb9b51F11Lo/s400/BIN_le_shem.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351707018832708658" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 202px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; Вот тут уже становится понятно что каждый LUT это однобитный полусумматор с входом переноса с предыдущего разряда. А вот два LUT в начале и в конце цепочки сумматоров синтезатор влепил как обыкновенные проводники, не берусь точно сказать почему он так решил сделать, но рискну предположить что цепи входа на D-триггер оказались более удаленными от выходов LUT полусумматоров. Думаю ситуация поменялась бы заставь я синтезатор оптимизировать по размеру, а не по скорости. В принципе эти два LUT можно не считать и тогда расход LUT составит - 4.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; Приступим к BCD четырехбитному сумматору. BCD сумматор можно представить себе как двоичный сумматор с коррекцией результата, коррекция необходима тогда когда полученный результат является недопуcтимым значением (1010B,1011B,1100B,1101B,1110B,1111B) или в результате сложения возник перенос в следующий разряд (сумма превысила 1111B). &lt;/div&gt;&lt;div style="text-align: left;"&gt;    Коррекция - это вычитания из полученного результата 10, например для 7+7 сумматор даст 0111B + 0111B = 1110B (Eh), а должен дать 0100 (4h) с переносом в следующую тетраду 1. Воспользуемся тем что вычитание - это сложение с отрицательным числом, а отрицательное число это дополненое до 1 значение.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; A - B = A + ~B + 1&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; A - 1010B (10) = A + 0101B (5) + 0001B = A + 0110B (6)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   Таким образом коррекция результата BIN для возращения его в BCD форму это сложение полученного при двоичном суммировании значения с 0110B.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Опишем в Verilog, BCD сумматор.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;module sumbcd(RESULT, Cout, a, b, Cin, clk);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;output reg [3:0]RESULT;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;output reg Cout;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;input  [3:0]a,b;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;input  Cin;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;input  clk;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;reg [3:0]rA,rB;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;reg rCin;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;wire [4:0]sum_bin = rA + rB + rCin;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;wire [3:0]sum_bcd = sum_bin[3:0] + 4'b0110;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;wire BCD_carry = (sum_bin &gt; 4'b1001);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;wire BIN_carry = sum_bin[4];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;always@(posedge clk) begin&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; rA &lt;= a;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; rB &lt;= b;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; rCin &lt;= Cin;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; RESULT &lt;= (BCD_carry|BIN_carry)? sum_bcd : sum_bin[3:0];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; Cout &lt;= BCD_carry;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#006600;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;endmodule&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Просинтезируем схему с помощью Quartus и рассмотрим полученные результаты.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SkUb8GCrGLI/AAAAAAAAAH0/3RE_P2GpDxY/s1600-h/BCD_sum_reprot_le.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SkUb8GCrGLI/AAAAAAAAAH0/3RE_P2GpDxY/s400/BCD_sum_reprot_le.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351714451427629234" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 383px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Таблица использования ресурсов говорит о том что количество LUT увеличилось до 10 и похоже два LUT опять обычные проводники - так как используется только два входа, точнее можно ответить рассмотрев пост-роутинг.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUc-tIKAuI/AAAAAAAAAH8/Ndc1Hs61iYA/s1600-h/BCD_sum_reprot_clk.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUc-tIKAuI/AAAAAAAAAH8/Ndc1Hs61iYA/s400/BCD_sum_reprot_clk.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351715595790975714" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 273px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; Рассматриваем "скорострельность" схемы, само собой понимаем раз LUT стало больше то и задержка увеличилась (чудес не бывает). Так оно и есть максимальная частота снизилась до 353МГц упав на 27МГц по сравнению с BIN сумматором. Однако можно совершенно четко сказать что применения суммирования в бинарном виде и коррекции результата раздельно, в следующем такте (через этот же сумматор) снизило бы частоту решения вдвое. Так что выигрыш все таки есть, насколько он значителен сказать трудно - нужно строить полную модель ядра что бы понять это. Ну и посмотрим на схемы.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SkUePgNn4LI/AAAAAAAAAIE/n0pUg3D8RIU/s1600-h/BCD_shem.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SkUePgNn4LI/AAAAAAAAAIE/n0pUg3D8RIU/s400/BCD_shem.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351716983893647538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 150px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Мда... Бред сивой кобылы и то выглядел бы более подобающим :)  Мы видим опять каскад сумматоров, элемент сравнения и кучу мультиплексоров. Конечно схемотехнически выразить то что описано Verilog очень сложно и ориентировать на RTL не стоит. Очевидно что оператор ? означающий селекцию по логическому значению в скобках оператора синтезатор отрисовывает как мультиплексор переключаемый этим значением. Взглянем лучше на пост-роутинг он даст неимоверно больше информации о реализации схемы.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUfUBDog6I/AAAAAAAAAIM/VqZNcw_tPgo/s1600-h/BCD_le_shem.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SkUfUBDog6I/AAAAAAAAAIM/VqZNcw_tPgo/s400/BCD_le_shem.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351718160941220770" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 203px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; Ну вот совершенно другое дело, видно даже то что синтезатор понял что суммирование в первом разряде не требует коррекции и завел это разряд сразу на регистр готового результата. Оно и верно с каким бы числом мы не суммировали 0110B (константа коррекции) в первом разряде ничего уже не поменяется. Лишний раз убеждаемся что синтезатор прогоняет всю таблицу истинности через оптимизатор (ну например через карту Карно). Кроме того видим опять шунты из двух LUT, таким образом считаем расход LUT как 8. В дальнейшем эти LUT могут быть использованы синтезатором в своих целях. &lt;/div&gt;&lt;div style="text-align: left;"&gt;   Осталось верифицировать BCD сумматор проверить получаемый им результат.  Для этого необходимо написать testbench на том же Verilog.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left;"&gt;module testbench; &lt;/div&gt;&lt;div style="text-align: left;"&gt; reg  clk;&lt;/div&gt;&lt;div style="text-align: left;"&gt; wire [3:0]Co;&lt;/div&gt;&lt;div style="text-align: left;"&gt; wire Carry;&lt;/div&gt;&lt;div style="text-align: left;"&gt; reg  [3:0]Ai,Bi;&lt;/div&gt;&lt;div style="text-align: left;"&gt; reg  Ci;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; reg  [15:0]QADDR;&lt;/div&gt;&lt;div style="text-align: left;"&gt; sumbcd sum(&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .clk(clk),&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .a(Ai),&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .b(Bi),&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .Cin(Ci),&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .RESULT(Co),&lt;/div&gt;&lt;div style="text-align: left;"&gt;   .Cout(Carry)&lt;/div&gt;&lt;div style="text-align: left;"&gt; );&lt;/div&gt;&lt;div style="text-align: left;"&gt; initial begin&lt;/div&gt;&lt;div style="text-align: left;"&gt;   Bi = 4'h0;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   forever #40   Bi &lt;= (Ai &gt; 8)? Bi + 1'b1 : Bi;&lt;/div&gt;&lt;div style="text-align: left;"&gt; end;&lt;/div&gt;&lt;div style="text-align: left;"&gt; initial begin&lt;/div&gt;&lt;div style="text-align: left;"&gt;   Ai = 4'h0;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   Ci = 1'b0;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   forever #40   Ai &lt;= (Ai &gt; 8)? 0 : Ai + 1'b1;    &lt;/div&gt;&lt;div style="text-align: left;"&gt; end  &lt;/div&gt;&lt;div style="text-align: left;"&gt; initial begin&lt;/div&gt;&lt;div style="text-align: left;"&gt;   clk = 0;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   forever #20   clk = !clk; &lt;/div&gt;&lt;div style="text-align: left;"&gt; end    &lt;/div&gt;&lt;div style="text-align: left;"&gt;endmodule&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Запустив проект в симуляторе ModelSim можно отсмотреть осциллограмму, хотя в принципе можно было бы просто сравнивать результат с тем что должно быть автоматически.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SkUg9VRQ2JI/AAAAAAAAAIU/6Ru74upXOfU/s400/bcd_sum_wave.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5351719970253363346" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 296px; " /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; Результат появляется на регистрах только в следующем такте, так как по первому фронту значения слагаемых записываются в регистры rA, rB и только в следующем фронте результат сложения rA и rB записывается в выходной регистр результата. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;   И так сделаем выводы:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;     BCD сумматор - 8 LUT&lt;/div&gt;&lt;div style="text-align: left;"&gt;     BIN сумматор - 4 LUT&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Расход LUT для BCD арифметики вдвое выше.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;    BCD сумматор - 353 МГц&lt;/div&gt;&lt;div style="text-align: left;"&gt;    BIN сумматор - 380 МГц&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Частотность - здесь не все так очевидно, возможно будет и выигрыш по скорости, если количество операций для суммирования итоговых вещественных чисел будет меньше в случае BCD. Для этого необходимо задаться примером и совершить сложение на полноразрядных BIN и BCD сумматорах таким образом что бы получить вещественные значения в сопоставимом по точности формате BIN и BCD.&lt;/div&gt;&lt;div style="text-align: left;"&gt;  &lt;/div&gt;&lt;div style="text-align: left;"&gt; &lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-4154425533702395621?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/4154425533702395621/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/61_26.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4154425533702395621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4154425533702395621'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/61_26.html' title='Анализ архитектуры МК61 - кто сильнее Кит или Слон?'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/SkUNbVcBbnI/AAAAAAAAAHU/NcfL-_7U7yc/s72-c/BIN_sum_reprot_clk.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-5930228563844146043</id><published>2009-06-19T16:03:00.000+06:00</published><updated>2009-06-20T17:48:16.467+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ЯВУ'/><category scheme='http://www.blogger.com/atom/ns#' term='BCD'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='LUT'/><category scheme='http://www.blogger.com/atom/ns#' term='CPLD'/><category scheme='http://www.blogger.com/atom/ns#' term='Altera'/><title type='text'>По следам "публикаций" -  термины и пояснения</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   Как совершенно верно заметил &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;kosmoflyko&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; любая статья должна быть самодостаточной, читающий не обязан знать всех терминов, их расшифровка должна быть под рукой в "подвале", а по возможности тут же в скобках понятно и наглядно. Виноват ― исправляюсь. :)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style=" white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre-wrap; font-family:-webkit-monospace;font-size:13px;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;BCD&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Binary Coded Decimal&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, представление чисел в двоично-десятичном виде. Основание счисления точно такое же как и в десятичной системе - 10. Несмотря на то что в двоичной тетраде можно закодировать большее число чем 9, кодирование идет до девятки:   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; DEC       BCD(bin)      BCD(hex)   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  0    -  0000 0000   -   00   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  1    -  0000 0001   -   01   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  2    -  0000 0010   -   02   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  3    -  0000 0011   -   03   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  4    -  0000 0100   -   04   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  5&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    -  0000 0101   -   05   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  6    -  0000 0110   -   06   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  7    -  0000 0111   -   07   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  8    -  0000 1000   -   08   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  9    -  0000 1001   -   09    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Согласно правила для любой позиционной системы счисления после использования всего набора знаков (цифро-буквенных элементов системы счисления) происходит переход к следующей цифре в обоих разрядах числа (из всего набора цифр возможных в данной системе счисления). То есть девятка в нулевом разряде переходит в ноль, а ноль в первом разряде переходит в один 09 =&gt; 10. По большому счету число девять имеет один значащий разряд и бесконечное количество разрядов незначащих, столько сколько мы пожелаем 000000000..0009, практически это ничего не меняет поэтому незначащие нули опускают. Но опуская нули мы опускаем и суть систем счисления, превращение ноля в единичку происходит для нас рефлекторно ― буквально из небытие, из пустого места, как по волшебству вырастает единичка. На самом деле все логично ничего для нас не значащий ноль логично сменяется на следующую в наборе цифру 1.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;     Возвращаясь к BCD имеем следующее    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; DEC       BCD(bin)    BCD(hex)  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 10    -  0001 0000  -  10  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 11    -  0001 0001  -  11  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 12    -  0001 0010  -  12  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 13    -  0001 0011  -  13  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 14    -  0001 0100  -  14  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 15    -  0001 0101  -  15  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 16    -  0001 0110  -  16  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 17    -  0001 0111  -  17  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 18    -  0001 1000  -  18  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 19    -  0001 1001  -  19   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Строго говоря указанные выше в таблице код 0001 0000 - это упакованное BCD число, неупакованное BCD число в качестве разряда использует не тетраду (4 бита), а байт и в итоге табличка будет выглядеть следующим образом:   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; DEC             BCD(bin)       BCD(hex)  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 10    -  0000 0001 0000 0000  -  01 00  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 11    -  0000 0001 0000 0001  -  01 01  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 12    -  0000 0001 0000 0010  -  01 02  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 13    -  0000 0001 0000 0011  -  01 03  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 14    -  0000 0001 0000 0100  -  01 04  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 15    -  0000 0001 0000 0101  -  01 05  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 16    -  0000 0001 0000 0110  -  01 06  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 17    -  0000 0001 0000 0111  -  01 07  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 18    -  0000 0001 0000 1000  -  01 08  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; 19    -  0000 0001 0000 1001  -  01 09   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Очередная особенность BCD числа ― это то что в двоичном мире за двоичным числом 1001 должно следовать число 1010 ― которая ни что иное как десять ― 10 в десятичной системе счисления. Но не для BCD чисел, для BCD дальше двоичного кода 1001 чисел не существует. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Таким образом мы теряем для    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    байта ― FF - 99 = 156 значений двоичного числа (62%);    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    слова ― FFFF - 9999 = 55536 значений двоичного числа (85%);    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    двойного слова ― FFFFFFFF - 99999999 = 4194967296 значений двоичного числа (98%);   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Примеры без знаковых (unsigned) упакованных BCD чисел:    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;    DEC             BCD(bin)                              BCD(hex)   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;  61279045 – 0110 0001 0010 0111 1001 0000 0100 0101 – 61 27 90 45           &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;       459 ― 0000 0000 0000 0000 0000 0100 0101 1001 ― 00 00 04 59  &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Примеры со знаком (signed) упакованных чисел BCD :    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;  DEC             BCD(bin)                             &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; BCD(hex)   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;  +1238901 ― 1100 0001 0010 0011 1000 1001 0000 0001 ― C1 23 89 01   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;  -3524492 ― 1101 0011 0101 0010 0100 0100 1001 0010 ― D3 52 44 92 &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   Как видно из примеров знак числа кодируется запрещенной комбинацией, для «плюса» принято использовать 1100B – 0CH, для «минуса» 1101B – 0DH.   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; ЯВУ&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; -  язык высокого уровня (Си, Паскаль, Бейсик, Ада, Фортран, Алгол …) считается что ЯВУ приближает программиста к низкоуровневым абстракциям и делает программы платформо независимыми. ЯВУ упрощает разработку программ, упрощают поиск ошибок в них, делают возможным повторное использование кода, увеличивают наглядность и самодокументируемость кода.   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;FPGA&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Field Programmable Gate Array матрица программируемых логических элементов (Logic Element) связанных между собой магистралями с зарнее известным врменем распространения сигнала, подсоединение к магистралям и выделеным линиям (тактовые линии, линии сброса и установки) осуществляется настраиваемыми мультиплексорами.  Логические элементы на основе LUT и D-триггера(ов) способны при комбинировании осуществлять множество логических функций (сумматоры, дешифраторы, шифраторы, счетчики, регистры). Как правило FPGA подразумевают синхрнный дизайн устройств, осуществляя таким образом безошибочное и быстрое функционирование синтезированной схемы. Частоты на которых могут работать FPGA для отдельных элементов до 450-500МГц. Такая частота есстесвенно достигается за счет блоков PLL существующих не в каждом семействе FPGA.Все данные подключений и LUT  в FPGA хранятся в ОЗУ, таким образом при снятии питания FPGA "забывает" схему.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;ASIC&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; - Application specific integrated circuit, попросту интегральная схема выполненая по нормам позволяющим полученной схеме работать на заявленной частоте, с заявленным потреблением. В отличие от FPGA цикл разработки для ASIC значительно трудоемче и дороже. Как правило до корпусировки изготовленного кристалла необходимо пройти такое колиичество проверок и тестов что не хватит денег на изготовление масок для фотолитографии, именно по этому цифровые ИС предварительно обкатывают в FPGA.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; LUT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; – Look Up Table,  базовый элемент FPGA (сейчас уже и CPLD) позволяющий проектировать логические функции не комбинированием основных логических элементов (И,ИЛИ,НЕ,ИСКЛ.ИЛИ), а описанием таблицы истинности для входов блока LUT. Совершенно ничего нового в мире цифровой схемотехники не произошло, существовавшие много раньше шифраторы и дешифраторы по сути использовали ЗУ (например К155РЕ3) точно так же как и LUT. LUT это ОЗУ содержащие N входов и один выход, в него загружается таблица истинности представленная в бинарном виде для каждой комбинации входов, фактически же фирмы производители ПЛИС «изгаляются» с различными режимами работ LUT внося дополнительные входы и выходы переноса для каскадирования арифметических функций.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="  white-space: normal; font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sju1PGnG4VI/AAAAAAAAAGs/k6yzSbDH3h0/s1600-h/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%A2%D0%98_%D0%9E%D0%97%D0%A3_LUT.PNG"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sju1PGnG4VI/AAAAAAAAAGs/k6yzSbDH3h0/s400/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%A2%D0%98_%D0%9E%D0%97%D0%A3_LUT.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5349068253509902674" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 221px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="  white-space: normal; font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju4BxwxWgI/AAAAAAAAAG8/Q9iOYvRHc6I/s1600-h/4in-LUT.PNG"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju4BxwxWgI/AAAAAAAAAG8/Q9iOYvRHc6I/s400/4in-LUT.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5349071323109874178" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 194px; " /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"Строительный блок" Altera MAX-II использует 4-х входовой LUT&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju3tfXfRdI/AAAAAAAAAG0/GnDfISQEqeM/s1600-h/6in-LUT.PNG"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="  white-space: normal; font-family:Georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju3tfXfRdI/AAAAAAAAAG0/GnDfISQEqeM/s1600-h/6in-LUT.PNG" style="text-decoration: none;"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju3tfXfRdI/AAAAAAAAAG0/GnDfISQEqeM/s400/6in-LUT.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5349070974574609874" style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 231px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style=" white-space: normal;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);  "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Строительный блок" Altera Arria-II использует 6-и входовой LUT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;span class="Apple-style-span" style=" white-space: normal;"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sju6LOKEMWI/AAAAAAAAAHE/Fcy_UJOBvy8/s400/4in-LUT-spartan.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5349073684374237538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 220px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="white-space: normal;   "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"Строительный блок" Xilinx Spartan-3 использует 4-х входовой LUT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-5930228563844146043?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/5930228563844146043/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/5930228563844146043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/5930228563844146043'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/blog-post.html' title='По следам &quot;публикаций&quot; -  термины и пояснения'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/Sju1PGnG4VI/AAAAAAAAAGs/k6yzSbDH3h0/s72-c/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%A2%D0%98_%D0%9E%D0%97%D0%A3_LUT.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-4099996875335121627</id><published>2009-06-16T09:47:00.000+06:00</published><updated>2009-06-24T09:28:38.143+06:00</updated><title type='text'>Анализ архитектуры МК61 - рекогносцировка местности</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Виртуальная машина MK61 хоть и существует как программное решение поверх унифицированной аппаратной базы К745ИК13xx (MK161/152 - MCS51; mk61avr, calc152 - AVR&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;), является самостоятельной сущностью - &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;вычислительным ядром&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; МК61 использующим стековую модель вычислений,  это дает возможность сравнивать его функциональные возможности с распространенными вычислительными ядрами AVR, ARM, Z80, MSC51. В таблице приведенной ниже возможности МК61 сопоставляются с перечисленными вычислительными ядрами - как &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;возможности платформы&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, без учета их реализации (ASIC/выч.комплект).&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="margin-left:.5pt;border-collapse:collapse;mso-table-layout-alt:fixed;  border:none;mso-border-alt:solid windowtext 1.0pt;mso-padding-alt:0cm 0cm 0cm 0cm;  mso-border-insideh:1.0pt solid windowtext;mso-border-insidev:1.0pt solid windowtext"&gt;  &lt;tbody&gt;&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Характеристика&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;MK61&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;MK161&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;/152&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;Z80&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;AVR&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;MSC51&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border:solid windowtext 1.0pt;   border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;ARM&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;7&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:1"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Базовая разрядность данных&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;48&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;32&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:2"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Кол-во РОН&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;5/15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;5/15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;18/3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;32&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;9&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;31&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:3"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Регистровые фреймы&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:4"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Битовые операции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:5"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Логические операции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:6"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Арифметика с целыми числами&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:7"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Арифметика с вещественными числами&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:8"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Адресное пространство данных&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:9"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Прямая адресация&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:10"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Абсолютная адресация&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:11"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Косвенная адресация&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:12"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Кол-во условий ветвления&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;20&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:13"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;PIC&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:8.0pt"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;(перемещаемость кода)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:14"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Самомодификация кода&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да**&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:15"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Косвенный переход&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:16"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Цикловые конструкции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да***&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:17"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Авто инкременты (++)/ декременты (--) регистров РОН (&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;SP&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;и&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;PC&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:8.0pt"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;не входит)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;++&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;--&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;++&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;--&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;++&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;--&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;++&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;--&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;++&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;--&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:18;height:12.85pt"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm;   height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Стековые структуры&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;2&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:8.0pt"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;AS&lt;span class="apple-converted-space"&gt; &lt;/span&gt;= 5&lt;/span&gt;&lt;span style="font-size:   8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;RS = 5&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;3 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;AS&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;5&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;RS = 64&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;TS = 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;1 &lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;64&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;K&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;64K&lt;/span&gt;&lt;span style="font-size:8.0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;64K&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt;height:12.85pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span lang="EN-US" style="font-size:8.0pt;mso-ansi-language:EN-US"&gt;1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;4Г&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:19"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Обслуживание прерываний&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:20"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Формат инструкции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;0, 2, 3 - адресный&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;0&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;0/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;2&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;2&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;2&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;3&lt;/span&gt;&lt;span lang="EN-US" style="font-size:8.0pt;   mso-ansi-language:EN-US"&gt;/1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:21;mso-yfti-lastrow:yes"&gt;   &lt;td width="84" valign="top" style="width:63.0pt;border:solid windowtext 1.0pt;   border-top:none;mso-border-top-alt:solid windowtext 1.0pt;padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Гибкий формат машинной инструкции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:29.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да****&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="40" valign="top" style="width:29.95pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 0cm 0cm 0cm"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="33" valign="top" style="width:25.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Да&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="37" valign="top" style="width:27.85pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="39" valign="top" style="width:28.9pt;border-top:none;border-left:none;   border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="44" valign="top" style="width:33.05pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-top-alt:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext 1.0pt;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal" align="center" style="text-align:center"&gt;&lt;span style="font-size:8.0pt"&gt;Нет&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;font-size:11.0pt;color:black;"&gt;* - Перемещение кода между страницами возможно&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* - Самомодификация кода для AVR осуществима только в старшем семействе AVR и связанна с необходимостью записи данных в EEPROM программ, а значит ограничено предельным кол-вом циклов записи и длительностью записи в EEPROM.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;*** - Циклической конструкцией для ARM подразумевается блочная загрузка/выгрузка регистров в память, поскольку она является параметризированной командой то с некоторым приближением ее можно назвать итеративным процессом с задаваемым количеством итераций.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;**** - В том виде в котором МК61 существует с прошлого века формат инструкции задан двумя типами с однобайтным операндом (адресом перехода) и без оного. Но это не помеха и формат может быть легко изменен например увеличением разрядности второго операнда, отчасти благодаря наличию "расшиваемого" декодера команд (микропрограммное управление). В отличии от MISC (чем МК61 скорее всего и является) и CISC - практика построения RISC зачастую подразумевает дешифрацию определенных полей команды на лету (в такте выборки инструкции) и смена формата инструкции даже в части операнда - прямое изменение аппаратуры дешифрации.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Так как видимо ядро МК61 не предполагалось использовать вне ветки калькуляторов разработчики пошли на многочисленные упрощения платформы MISC. Например стараясь сделать систему команд понятной для ввода программ не специалистом, заменили непосредственный набор константы на ввод ее по разрядно или осуществили ввод и хранение адресов перехода в двоично-десятичном, а не полностью двоичном виде (МК61 может "переваривать" в качестве адресов и полные бинарные данные строя адрес по тому же BCD принципу). Использование медленной элементной базы (и принципа передачи и хранения данных в ЗУ комплекса - последовательное кольцо с 4 фазным методом передачи) скорее всего и привело к отказу от ввода событийного управления вычислительным ядром, лишив таким образом ядро МК61 подсистемы обработки прерываний. Ориентация на скромный объем программ, диктуемых калькуляторными задачами, внес в схемотехнику МК61 отказ от вместительных ЗУ и исключение инструкций доступа к адресному пространству через абсолютную адресацию (да и не в писывалось это в модель передачи индиректных констант). Однако наличие в системе команд косвенных операций решают проблему доступа к ЗУ, как к памяти данных (К(И)ПМ) так и к памяти программ (КБПМ, КППМ). Плата за такой переход - необходимость постоянно держать свободным регистр указатель на адрес в ЗУ или сохранять значение регистра используемого для доступа на арифметическом стеке. Увеличение кол-во уровней стека возвратов так же возможны без особых изменений платформы.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Одна из особенностей МК61 заслуживает особого внимания, поскольку благодаря этому платформа находится на ранг ближе к ЯВУ чем любая из рассмотренных. Эта особенность - возможность реализации циклических структур командой FLМ XX, где М это четыре возможных итератора в регистрах РОН R0...R3,  а XX адрес перехода в случае неравенства результата итерации нолю.  Структуры FLM дают возможность организовать автоматичеcкий декремент итератора (надо заметить - &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;только декремент&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;) с последующим сравнением на достижения ноля и переходом по результатам сравнения. При этом не происходит изменения в арифметическом стеке ядра - что не маловажно. Инструкция FLM в МК61 выражает сходную конструкцию do-while-for на языке Си:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;table class="MsoTableGrid" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse;mso-yfti-tbllook:480;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"&gt;  &lt;tbody&gt;&lt;tr&gt;   &lt;td width="213" valign="top" style="width:159.5pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US"  style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;do{                                      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;} while (i-- &gt; 0);                  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="213" valign="top" style="width:159.5pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US"  style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; while(i-- &gt; 0){&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;};                                            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="213" valign="top" style="width:159.55pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="EN-US"  style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;for(i=N;i&lt;0;i--){&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; с одной не очень приятной особенностью итератор i никогда не достигнет ноля, так как его изменение в МК61 происходит в момент исполнения адреса перехода. И выход из цикла FLM всегда знаменуется равенством итератора &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, при этом количество циклов соответствует значению итератора на входе в цикл.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;     Хотелось бы заметить так же, что МК61 обладает такой интересной особенностью не свойственной стековым машинам как регистр предыдущего результата Х1 (попросту "откат" регистра Х), в некотором смысле это пятый по счету уровень стека. Для стековых машин, по мнению Каупмана, наличие уровневости арифметического стека менее определенного числа (точно не помню скорее всего это 16) приводит к снижению эффективности производимых на базе стека вычислений. В принципе стек как безадресное ЗУ действительно быстрее любого адресного ЗУ, если он реализуется на основе регистров, так как при этом как минимум отсутствуют дешифраторы столбца/колонки. Мало того что стек как физический объект быстрее чем ЗУ с произвольным доступом, но он еще и приближает ядро к ЯВУ в виду того, что при разборе арифметических высокоуровневых скобочных выражений они легко (см. Дикстра - "лекции по компиляторам") сводятся к стековому порядку вычисления. Кроме того стек как капсула с параметрами отправляемыми в процедуру, мало того что очень выгоден (ибо быстр) и может являться удобным возвращаемым из процедуры контейнером результатов (для стековых машин), еще и исполняет роль фрейма локальных переменных. Почти всегда скорость работы стека организуемого в ОЗУ разработчиков компиляторов ЯВУ не устраивает, заставляя&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; плодить сущности&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; вида &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;fast call &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;для передачи параметров в регистрах :). Но и регистры в МК61 точно так же присутствуют как и в сравниваемых платформах.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  В остальном, как показывает таблица сравнения ядер, МК61 вполне самостоятельное, специализированное на вещественной арифметики вычислительное ядро. Тот факт что скорость вычисления для вещественных чисел ниже чем для целочисленных может быть восполнено наличием аппаратного блока вычислений с вещественными числами. Правда есть тут и своя "ложка дегтя" - в МК61 вещественная арифметика осуществляется в BCD формате, а адресация по BCD весьма и весьма расточительна :) так как использует не всю информационную емкость двоичных чисел. Емкость тетрады (4 бит) 2^4 = 16, из которых BCD использует 10 позиций (от 0000B до 1001B), оставляя за бортом 6, которые составляет 37.5% - треть общей емкости. А значит и приведенное к целому BCD, вещественное BCD число так же будет адресовать меньше ЗУ, чем  бинарное целое. Эта "неприятность" может быть разрешена внесением в платформу бинарного формата целого числа или возможным переходом с BCD представления вещественных чисел (IEEE-854) в бинарное представление FP чисел (IEEE-754). Это было бы целесообразно еще и потому что BCD представление ощутимо увеличивает размеры аппаратных сумматоров из за необходимости контроля десятичного, а не бинарного переноса (суммирование младших разрядов для BCD чисел зависит от получаемого результата). Существует мнение что работа с BCD числами быстрее отчасти из за того что не требует перевода в десятичное представление при выводе :), от части из за того что работать с вещественным представлением в BCD намного проще, нежели в бинарном. Кроме того из за того что BCD представление напрямую отображает ряд чисел точность вычислений по сравнению с IEE-754 напрямую зависит от количества представленных разрядов. В принципе осуществить качественное и количественое сравнение сумматоров соответствующих друг-другу разрядностей на базе LUT  не составит особого труда. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;P.S. Как частенько бывает ошибки и неточности вкрадываются уже после публикации, но не ошибается лишь тот кто не работает. Правки вносятся. В комментариях к посту можно понять какие изменения и почему произошли.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-4099996875335121627?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/4099996875335121627/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/61.html#comment-form' title='Комментарии: 15'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4099996875335121627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4099996875335121627'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/61.html' title='Анализ архитектуры МК61 - рекогносцировка местности'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6163926958637713800</id><published>2009-06-10T22:38:00.000+06:00</published><updated>2009-06-10T23:08:15.678+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><title type='text'>MK61avr - Доверяй, но проверяй!</title><content type='html'>&lt;div style="text-align: left;"&gt;  Развернутое тестирование платформы mk61avr по тестам приведенным у Дьяконова приносит урожай разномастных "глюков" и "багов", никаких революций и потрясений - просто нудное монотонное прохождение или провал тестов. Что делать, хоть в голове и рояться идеи побыстрей запустить на mk61avr работу с графикой - нужно обязательно получить результаты на тестах. &lt;/div&gt;&lt;div&gt;  Скорость исполнения кода VM61 показывает завидную по сравнению с платформой МК61 воплощенной в "Калькулятор 3000", но надо заметить что это сравнение с железом прошлого века, кроме того single precision и должен быть быстрей. &lt;div&gt;  Подробное &lt;a href="http://code.google.com/p/mk61avr/source/browse/trunk/%20mk61avr%20--username%20vitasam70/docs/mk61avr-tests.odt"&gt;описание&lt;/a&gt; пройденых тестов как всегда на сайте проекта, там же выложены их &lt;a href="http://code.google.com/p/mk61avr/source/browse/#"&gt;бинарные образы&lt;/a&gt; для зашивки в EEPROM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt; Вскрылась интересная подробность на следующем тесте &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Si_lb9VpbKI/AAAAAAAAAGk/et_IuWgWpmI/s1600-h/1.png"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Si_lb9VpbKI/AAAAAAAAAGk/et_IuWgWpmI/s400/1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5345743551196654754" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 189px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; у Дьяконова ответ 1090.3019, на mk61avr 1090.3018 - предположил что из за точности используемого формата чисел. Однако.... проверка на "Калькулятор 3000" дала тот же результат 1090.3018. Проверка кода &lt;b&gt;Vitasam&lt;/b&gt;-ом на МК52 образца "шестьсот лохматого года" дала теже результаты  1090.3018. Либо "ошибка" в прошивке образца МК61/52/Б3-34 используемого Дьяконовым для составления программ и проведения расчетов, либо банальная опечатка :)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6163926958637713800?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6163926958637713800/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/mk61avr.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6163926958637713800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6163926958637713800'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/06/mk61avr.html' title='MK61avr - Доверяй, но проверяй!'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/Si_lb9VpbKI/AAAAAAAAAGk/et_IuWgWpmI/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-2856858964085793140</id><published>2009-05-31T21:52:00.000+06:00</published><updated>2009-06-01T10:27:14.788+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><title type='text'>MK61avr - а не пора бы нам - пора?</title><content type='html'>&lt;div style="text-align: left;"&gt;       За исключением одной малой, но  значительной детали (переключатель Р-ГРД-Г), комплекс MK61avr можно считать аппаратно состоявшимся, т.е. комплекс имеет функционирующие клавиатурный и дисплейный модуль. MK61avr на данном этапе работоспособен в обоих режимах МК61, автономном и программном.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiK9gawNd0I/AAAAAAAAAFU/vCwlI3hifPg/s1600-h/mk61avr-example-stageI.png"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiK9gawNd0I/AAAAAAAAAFU/vCwlI3hifPg/s400/mk61avr-example-stageI.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5342040472649824066" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 288px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;       Результат выполнения команды терминала "=12.405". В регистр X внесено делимое &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;12.405&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SiLI8_qElCI/AAAAAAAAAFk/9vc1-DmYByY/s1600-h/mk61avr-example-stageII.png"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SiLI8_qElCI/AAAAAAAAAFk/9vc1-DmYByY/s400/mk61avr-example-stageII.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5342053058220430370" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 317px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Результат ввода делителя &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.2&lt;/span&gt;  с клавиатуры комплекса.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiM8tQp4FjI/AAAAAAAAAFs/Z5mNNWEa5lM/s1600-h/mk61avr-example-stageIII.png"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiM8tQp4FjI/AAAAAAAAAFs/Z5mNNWEa5lM/s400/mk61avr-example-stageIII.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5342180331253929522" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 320px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Результат выполнения команды "делить" с клавиатуры (&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;/&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SiM9kzdtNRI/AAAAAAAAAF0/qImTIlW8XQw/s1600-h/src-sh-single-prec.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SiM9kzdtNRI/AAAAAAAAAF0/qImTIlW8XQw/s400/src-sh-single-prec.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5342181285490930962" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 333px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Ошибка в последней цифре - точность арифметики с числами single precision.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiNXT0FKhFI/AAAAAAAAAGc/WDqqraAY0V0/s1600-h/scr-detailed-mk61avr-term.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SiNXT0FKhFI/AAAAAAAAAGc/WDqqraAY0V0/s400/scr-detailed-mk61avr-term.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5342209580900975698" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 370px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;Отладочный интерфейс реализованный через RS232 - "черный ход" в MK61avr :)&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SiM_p_b8AxI/AAAAAAAAAGE/pjQxK1bz51Y/s1600-h/scr3.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SiM_p_b8AxI/AAAAAAAAAGE/pjQxK1bz51Y/s400/scr3.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5342183573627339538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 330px; height: 211px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Включен режим ПРГ, на экране фрагмент программы (12.3,Вх,С/П) MK61avr.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Конечно на MK61avr в рамках платформы можно не только делить 12.405 на 3.2 :) ниже привожу список что возможно и что нет:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;а)  single precision арифметика, а значит, точность вычислений не соответствует МК61;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    б) формат переходов несовместим с МК61 (в некотором роде это сделано намеренно) &lt;/div&gt;&lt;div&gt;    в) VM61 на данном этапе не поддерживает &lt;/div&gt;&lt;div&gt;  1. тригонометрию sin,cos,tg,arcsin,arccos,argtg и операции с угловыми величинами&lt;/div&gt;&lt;div&gt;  2. логические операции not,or,and,xor&lt;/div&gt;&lt;div&gt;  3. lg, ln, e^x, ВП&lt;/div&gt;&lt;div&gt;  4. |x|,{X},[X],max,ЗН,СЧ&lt;/div&gt;&lt;div&gt;    г)  MK61avr оснащен последовательным интерфейсом для отладки и тестирования, в дальнейшем может быть исключен из кода (код терминала MK61avr объемист).&lt;/div&gt;&lt;div&gt;    д)  клавиатура МК61 завершена и транслирует все опкоды МК61&lt;/div&gt;&lt;div&gt;    е) экран МК61 (газоразрядный 7-сегмент индикатор)  воспроизводится на ЖКИ (кроме порядка числа при приведении и вводе порядка - команда ВП)&lt;/div&gt;&lt;div&gt;    ж) MK61avr  работает в обоих режимах - АВТ и ПРГ.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt; Вот и подумалось мне а не пора ли начать тестирование и "скармливание" тест-пакетов MK61avr, а мой соратник &lt;b&gt;Vitasam&lt;/b&gt; и главный зачинщик :) проекта MK61avr меня в этом поддержал, предложив хороший набор &lt;a href="http://arbinada.com/pmk/system/files/Diakonov.1989.ed3_.djvu"&gt;таковых&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;как всегда все подробности и исходные тексты проекта на &lt;a href="http://code.google.com/p/mk61avr/"&gt;googlecode&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-2856858964085793140?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/2856858964085793140/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_31.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2856858964085793140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2856858964085793140'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_31.html' title='MK61avr - а не пора бы нам - пора?'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/SiK9gawNd0I/AAAAAAAAAFU/vCwlI3hifPg/s72-c/mk61avr-example-stageI.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-226454828455651642</id><published>2009-05-25T00:37:00.000+06:00</published><updated>2009-05-25T11:19:24.371+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='LCD'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia3310'/><category scheme='http://www.blogger.com/atom/ns#' term='ATMega16'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - русские с финами братья на век!</title><content type='html'>&lt;div style="text-align: center;"&gt;  Пришло время отложить клавиатуру в виду ее завершенности и приступить к дисплею. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/ShmWyIt3OgI/AAAAAAAAAEs/qD92XDS1yL0/s1600-h/%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/ShmWyIt3OgI/AAAAAAAAAEs/qD92XDS1yL0/s400/%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5339464621301905922" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 314px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                        Терминал с логом работы клавиатуры, набрано (123 Bx 65 /) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  В качестве такого верного соратника я почти всегда использую очень дешевый у нас в стране (у нас до 150 рублей. На родине Торвальдса очень даже не дешево от 7 евро.), но одновременно очень удобный в подключении графический ЖКИ дисплей NOKIA 3310. Данное изделие просто подарок нам от финов :) такого распространения как у нас телефон NOKIA 3310 больше не смог бы получить ни в одной стране мира :). Дисплей исключительно удобен, управляется по последовательному интерфейсу и может быть подключен к порту SPI AVR. Дисплей сверх документирован, набрав в поиске lcd nokia3310 AVR можно получить огромное количество ссылок на его использование вот часть из них:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  &lt;a href="http://fandigunawan.wordpress.com/2008/06/18/lcd-nokia-3310-pcd8544-driver-in-winavravr-gcc/"&gt;http://fandigunawan.wordpress.com/2008/06/18/lcd-nokia-3310-pcd8544-driver-in-winavravr-gcc/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://www.microsyl.com/"&gt;http://www.microsyl.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Года два назад один мой знакомый написал под дисплей компонент для VMLab, я там кое что поправлял и ревизировал, но основную работу сделал он. К сожалению я этот модулек куда то задевал. В Proteus разработчики тоже быстренько подсуетились заметив эту тенденцию "народного ЖКИ" и сделали компонент для LCD Nokia3310.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Есть конечно и ложка дегтя - дисплейчик с контактами на стекле и поэтому нужно очень хорошо прижимать "гребенку" с контактами к самому дисплею и очень аккуратно распаивать проводочки (желательно потоньше). Кроме того питание контроллера дисплея 3.3В и к ТТЛ по всей видимости не толерантен - либо нужно конвертировать уровни, например через делитель на сопротивлениях 1К/1.2К и стабилизировать питание (LM117), либо переходить на питание AVR от 3.3В.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/ShoOw_98vbI/AAAAAAAAAE8/SGtyzsQYW0c/s1600-h/IMG_1299.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/ShoOw_98vbI/AAAAAAAAAE8/SGtyzsQYW0c/s400/IMG_1299.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5339596543168921010" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 372px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                      В комплекс MK61avr добавился ЖКИ дисплей (на экране тестовая заставка).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/ShoPOOqRGlI/AAAAAAAAAFE/9411Mi3zBg0/s1600-h/IMG_1297.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/ShoPOOqRGlI/AAAAAAAAAFE/9411Mi3zBg0/s400/IMG_1297.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5339597045329107538" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                    Монтаж делителя и стабилизатора для подключения LCD Nokia3310.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Shonr4-MQeI/AAAAAAAAAFM/0C8n6Yiv6G8/s1600-h/LCD3310.jpg" style="text-decoration: none;"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Shonr4-MQeI/AAAAAAAAAFM/0C8n6Yiv6G8/s400/LCD3310.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5339623943182238178" style="text-decoration: underline;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 196px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                             Схема подсоединения LCD Nokia3310 к комплексу MK61avr (KiCAD).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-226454828455651642?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/226454828455651642/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_24.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/226454828455651642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/226454828455651642'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_24.html' title='MK61avr - русские с финами братья на век!'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/ShmWyIt3OgI/AAAAAAAAAEs/qD92XDS1yL0/s72-c/%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-3645866138292024778</id><published>2009-05-16T22:41:00.001+06:00</published><updated>2009-05-17T00:15:32.518+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='ATMega16'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - истории из гаражной жизни</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg7v_lNlg7I/AAAAAAAAAD8/MveZP7KwPdM/s1600-h/IMG_1243.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg7v_lNlg7I/AAAAAAAAAD8/MveZP7KwPdM/s400/IMG_1243.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336466484080509874" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Програмно-аппаратный комплекс MK61avr.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;    Проект Mk61avr дошел  до стадии подключения клавиатуры, и извлеченная из гаражных залежей того что выкинуть жалко, а хранить негде - МК61 отправилась ко мне на "прозекторский стол" на подключение в качестве модуля клавиатуры к своему последователю MK61avr. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sg7wWoGob-I/AAAAAAAAAEE/5J09mUPLSGI/s1600-h/IMG_1238.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sg7wWoGob-I/AAAAAAAAAEE/5J09mUPLSGI/s400/IMG_1238.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336466879993638882" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                              &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;span class="Apple-style-span" style="font-style: normal;"&gt;Довольно стандартная для 80х-90х пленочная клавиатура.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   Сразу оговорюсь что МК61 уже как 10 лет неспособна к вычислениям - тряпичная корпусировка (если кто видел телефонный провод с основанием из ниток поверх обмотанных медной тонкой стружкой то легко представит что из себя представляет корпусировка микропроцессора МК61) не выдержала нажатия на кристалл со стороны частей корпуса и клавиатуры и отошла от торца кристалла. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sg8CTuuNbYI/AAAAAAAAAEk/VpMEwQbKbLU/s1600-h/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sg8CTuuNbYI/AAAAAAAAAEk/VpMEwQbKbLU/s400/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336486621439946114" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 146px; height: 157px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;                                    Корпусировка центрального процессора МК61.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  В составе "программно-аппаратного комплекса MK61avr" клавиатура выглядит совсем даже не поблекшей и уже дает скан-коды. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; "&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg70xLkHTHI/AAAAAAAAAEU/FAj_5daxijQ/s1600-h/kicad-mk61avr-kbd-sch.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg70xLkHTHI/AAAAAAAAAEU/FAj_5daxijQ/s400/kicad-mk61avr-kbd-sch.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336471734235647090" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 194px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;                                                    Схема клавиатурного модуля MK61avr (KiCAD)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Справедливости ради стоит заметить, что по глупости и извечному "торопыжничеству" при подключении "вылетел" порт, а надо то было всего то включить токо-ограничительные резисторы и мое головотяпство прошло бы безболезненно.&lt;/span&gt;&lt;/span&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;   Лунолет-1 на MK61avr взлетел и сел по тестовому шаблону один раз. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sg712KlJ1jI/AAAAAAAAAEc/JKVfwbl5umI/s1600-h/Lun-1-down.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sg712KlJ1jI/AAAAAAAAAEc/JKVfwbl5umI/s400/Lun-1-down.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336472919382545970" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 276px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                                                  &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;  Взлет....&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sg7vp8rrc-I/AAAAAAAAAD0/vBZ7dUWPQhg/s1600-h/Lun-1-down.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sg7vp8rrc-I/AAAAAAAAAD0/vBZ7dUWPQhg/s400/Lun-1-down.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336466112423621602" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 347px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                                        &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;   Посадка! &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg7zuARztcI/AAAAAAAAAEM/FiOJDiL6ZTE/s1600-h/%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0+%D0%B2+%D0%9B%D1%83%D0%BD%D0%BE%D0%BB%D0%B5%D1%82-1.JPG" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg7zuARztcI/AAAAAAAAAEM/FiOJDiL6ZTE/s400/%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0+%D0%B2+%D0%9B%D1%83%D0%BD%D0%BE%D0%BB%D0%B5%D1%82-1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5336470580154840514" style="text-decoration: underline;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 251px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;                           А вот почему не смог сеть при первом испытании &lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Vitasam&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;     Затем пришлось очень серъезно переработать терминал, и подтвердить результаты полетов мешали возникающие как грибы после дождя ошибки. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Проект продолжает развиваться. &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Vitasam&lt;/span&gt; всерьез взялся за SVN организовав все необходимое для работы коллектива вплоть до форума, подписки и Wiki.&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/mk61avr/wiki/Software"&gt;http://code.google.com/p/mk61avr/wiki/Software&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-3645866138292024778?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/3645866138292024778/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_16.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3645866138292024778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3645866138292024778'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr_16.html' title='MK61avr - истории из гаражной жизни'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/Sg7v_lNlg7I/AAAAAAAAAD8/MveZP7KwPdM/s72-c/IMG_1243.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-2089626670615338684</id><published>2009-05-10T09:32:00.000+06:00</published><updated>2009-05-11T10:46:35.879+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Лунолет-1'/><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='ATMega16'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - Лунолет-1, на рубеже</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SgZQJKgYS0I/AAAAAAAAADs/3QCX6ul-BOo/s1600-h/Lunolet.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SgZQJKgYS0I/AAAAAAAAADs/3QCX6ul-BOo/s400/Lunolet.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5334038927036140354" /&gt;&lt;/a&gt;&lt;div&gt;  MK61avr делает первые шаги по программам своих старших товарищей МК61 и МК52, после того как нам удалось реализовать необходимый инструментарий в терминальной отладке, кстати проект опять ушел на платформу ATMega16 уже бесповоротно, так как терминальный режим для МК61avr потребовал реализации объемного сервиса. А так как еще потребуется подключить клавиатуру  и ЖКИ дислпей - в платформу ATMega8 уже не влезть.&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;  И вот сегодня утром пришло сообщение от Vitasam - MK61avr смогла пройти по тестовым данным для программы Лунолет-1 почти до самого конца, отказав уже на посадке (зависнув в бесконечном цикле).  Разбор полетов продолжается :)  Листинг черного ящика Лунолета опубликует&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; &lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Vitasam &lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-size: 13px; line-height: 20px; "&gt;http://mk61avr.googlecode.com/files/Lunolet1_on_mk61avr_terminal_1.pdf&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-size: 16px; line-height: normal; "&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Исходные тексты программы MK61avr доступны в репозитарии (благодаря Vitasam, настроившему его) &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);  line-height: 20px; font-size:13px;"&gt;   http://mk61avr.googlecode.com/svn/trunk/ mk61avr-read-only&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-2089626670615338684?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/2089626670615338684/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr-1_09.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2089626670615338684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2089626670615338684'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr-1_09.html' title='MK61avr - Лунолет-1, на рубеже'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E9iC2oUZmVA/SgZQJKgYS0I/AAAAAAAAADs/3QCX6ul-BOo/s72-c/Lunolet.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-8268212048694449850</id><published>2009-05-09T12:22:00.001+06:00</published><updated>2009-05-09T12:22:54.279+06:00</updated><title type='text'>С Победой!</title><content type='html'> &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-8268212048694449850?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/8268212048694449850/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/blog-post_08.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8268212048694449850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8268212048694449850'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/blog-post_08.html' title='С Победой!'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-1404085628655389240</id><published>2009-05-07T08:29:00.000+06:00</published><updated>2009-05-07T08:49:37.787+06:00</updated><title type='text'>С днем Радио!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SgJKeGrXQkI/AAAAAAAAADk/_9kXf12fgMs/s1600-h/03-21.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 341px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SgJKeGrXQkI/AAAAAAAAADk/_9kXf12fgMs/s400/03-21.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5332906789809111618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;   73!73!73!&lt;/div&gt;&lt;div&gt;&lt;br /&gt; Всех, всех, всех причастных к радио и не причастных поздравляю с Днем Радио, с тем что в нашей стране в первые в мире в этот день 7 мая (по старому стилю 25 апреля) 1895 года была продемонстрирована работа радиопередатчика-радиопремника инженером Александром Степановичем Поповым. Попов А.С. удивительно  скромный человек, совершивший прорыв в области беспроводной связи и так и не удостоившийся заслуженной награды - признания по всему миру, образец для современных инженеров. В Российской и Советской науке таких людей было не очень много, но именно такие люди в и делали Российскую, а затем и Советскую науку. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Для тех кто желает ознакомится подробно: &lt;a href="http://www.connect.ru/article.asp?id=5481"&gt;http://www.connect.ru/article.asp?id=5481&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-1404085628655389240?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/1404085628655389240/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1404085628655389240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1404085628655389240'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/blog-post.html' title='С днем Радио!'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/SgJKeGrXQkI/AAAAAAAAADk/_9kXf12fgMs/s72-c/03-21.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6827324395911294931</id><published>2009-05-03T22:26:00.000+06:00</published><updated>2009-05-03T22:53:50.004+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Лунолет-1'/><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - теперь в "железе" :)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sf3G3KqeDII/AAAAAAAAADc/gWFgkSeu85Q/s1600-h/MK61avr_hard.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 397px; height: 400px;" src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sf3G3KqeDII/AAAAAAAAADc/gWFgkSeu85Q/s400/MK61avr_hard.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5331636184934124674" /&gt;&lt;/a&gt;&lt;br /&gt; Устал от медлительной симуляции "терминалки" достал из "закромов родины", совсем так же как это делает kosmoflyko :), собранную ранее для экспериментов монтажку с ATMega8 и MAX232 закачал туда MK61avr... Ну и заработало! Тут же по ходу действия выявился глюк в дампировании с d, поправил.  Посмотрев программу Лунолет-1, на сайте СЕМИКО http://mk.semico.ru/text/kon-tiki.djvu. Выяснил что отсутсвует набор /-/ с клавиатуры (т.е. с отладчика из терминала) пришлось приладить и опкод /-/ и терминальную команду '=~' для смены знака числа. Пора полетать на &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Лунолет - 1&lt;/span&gt;, хотя бы в терминале (LED дисплей к монтажке не подцепил еще). &lt;div&gt; &lt;/div&gt;&lt;div&gt; Хотел было фотку монтажки подцепить, но телефоны плохо снимают - мажут, в принципе ничего интересного конечно.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. Осталось 164 слова, убить их что ли на загрузку программы из файла через терминалку?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6827324395911294931?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6827324395911294931/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6827324395911294931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6827324395911294931'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr.html' title='MK61avr - теперь в &quot;железе&quot; :)'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/Sf3G3KqeDII/AAAAAAAAADc/gWFgkSeu85Q/s72-c/MK61avr_hard.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-2973937227631455961</id><published>2009-05-02T15:42:00.000+06:00</published><updated>2009-05-02T16:16:48.257+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='VMLab'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>mk61avr - звезды становятся ближе или в погоне за Лунолет-1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sfwak16lb7I/AAAAAAAAADU/pk9k8n2hakk/s1600-h/MK61avr.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sfwak16lb7I/AAAAAAAAADU/pk9k8n2hakk/s400/MK61avr.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5331165279150239666" /&gt;&lt;/a&gt;&lt;br /&gt;   1 Мая - это всемирный день солидарности трудящихся, и самый что ни на есть повод ударно поработать на благо МК61 :) Виртуальная машина VM61, умеет почти все за исключением следующих операций:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  10^X, E^X, Lg, Ln, Arcsin, Arccos, Arctg, Sin, Cos, Tg, Число Пи, /-/ и ВП&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Поскольку клавиатуры еще нет, точнее пока ей мы еще не занимались, а набора опкодов как утверждает Freshman хватает для Лунолет-1,... и в общем так хочется, что то запустить пусть и неправильно (а как еще выявлять ошибки) и вот тут нам на помощь приходит отладочный интерфейс через терминал  (UART - RS232 PC) , так удачно написанный в эти праздники, дающий нам возможность делать следующее:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; d - общий дамп памяти программ МК61 в шестнадцатеричном виде.&lt;/div&gt;&lt;div&gt; x - вывод содержимого регистра X и дисплейного буфера (содержащего X в виде char)&lt;/div&gt;&lt;div&gt; s - вывод содержимого арифметического стека в виде &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;             X&lt;/div&gt;&lt;div&gt;             Y&lt;/div&gt;&lt;div&gt;             Z&lt;/div&gt;&lt;div&gt;             T&lt;/div&gt;&lt;div&gt;             X1&lt;/div&gt;&lt;div&gt; r - ывод содержимого 6 уровневого стека возвратов &lt;/div&gt;&lt;div&gt; g - запуск программы МК61 (аналог С/П в автономном режиме)&lt;/div&gt;&lt;div&gt; = - 16 символов команд для интерактивного ввода (0,...9,.,+,-,*,/) (по сути ввод чисел и операций в автономном режиме)&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Терминал подключается на скорости 2400 бод, 2 стоп бита, 8 - бит данных, без четности&lt;/div&gt;&lt;div&gt; Не рекомендуется давить на "щелкатели" до окончания вывода отладочной информации на экран, хотя вроде бы эту проблему решить удалось (но в самом начале запуска МК61 и вывода приглашения все таки осталась возможность испортить UDR).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Так как оказалось что я перемудрил с библиотекой printf/scanf, и удалось еще уменьшить размер программ для AVR до 3887 слов, то мы вернулись на ATMega8, а использование TX/RX ног микроконтроллера потребовало переразместить интерфейс с разрядами LED, изменились подключаемые к LED ноги - PORTD[4...7],PORTC[0...3].LED нужно подключать через ключи открывающиеся по "1" на выводе порта, сегменты так же разведены на активную "1". В желез не проверялось, так что может быть и расхождения с симулятором.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Проект состоит уже из трех файлов, не считая компонента dll 7-сегментного дисплея. По идее нужно разделять его еще сильнее - надоедает прыгать сверху внизу по листингу.&lt;/div&gt;&lt;div&gt;место нахождение исходников http://mk61avr.googlecode.com/&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-2973937227631455961?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/2973937227631455961/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr-1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2973937227631455961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/2973937227631455961'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/05/mk61avr-1.html' title='mk61avr - звезды становятся ближе или в погоне за Лунолет-1'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/Sfwak16lb7I/AAAAAAAAADU/pk9k8n2hakk/s72-c/MK61avr.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-4980215414013354775</id><published>2009-04-29T00:49:00.000+06:00</published><updated>2009-04-29T00:56:23.637+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='VMLab'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - промежуточные итоги</title><content type='html'>&lt;div&gt;Итоги таковы, что пришлось перебраться на платформу ATMega161, так как ATMega8 оказалась маловатой.  Конечно это только исполнение программы, без автономного режима, клавиатура отсутсвует, в качестве устройства отображения результатов вычисления 8 разрядный LED - дисплей. Это все симуляция на VMLab фактически на железках ничего не проверялось, ввиду бессмысленности и достаточности симулятора VMLab.&lt;/div&gt;&lt;div&gt;Исходники проекта:&lt;/div&gt;&lt;div&gt;  &lt;a href="http://code.google.com/p/mk61avr/"&gt;http://code.google.com/p/mk61avr/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse;  font-family:arial;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse;   font-family:arial;font-size:13px;"&gt;реализованные опкоды&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse;   font-family:arial;font-size:13px;"&gt;&lt;div&gt;  для набора числа 0...9, .&lt;/div&gt;&lt;div&gt;  операции +, -, *, /, SQRT(X), X^2,  1/X, X^Y, &lt;/div&gt;&lt;div&gt;  управлением стеком Bx, FBx, XY, Fo &lt;/div&gt;&lt;div&gt;  работа с регистрами памяти П0...ПЕ, ИП0...ИПЕ, КП0...КПЕ, КИП0...КИПЕ&lt;/div&gt;&lt;div&gt;  управление исполнением программы БП, X==0, X!=0,X&lt;0,x&gt;=0, L0, L1, L2, L3&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-4980215414013354775?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/4980215414013354775/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/mk61avr_28.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4980215414013354775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4980215414013354775'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/mk61avr_28.html' title='MK61avr - промежуточные итоги'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-1025637824781106184</id><published>2009-04-26T21:39:00.000+06:00</published><updated>2009-04-26T23:31:06.844+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='FloatingPoint'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61avr'/><category scheme='http://www.blogger.com/atom/ns#' term='VMLab'/><category scheme='http://www.blogger.com/atom/ns#' term='WinAVR'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>MK61avr - Шах и рокировка</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/SfSGza_tweI/AAAAAAAAADE/e5QZxIUKk58/s1600-h/MK61avr.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 243px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SfSGza_tweI/AAAAAAAAADE/e5QZxIUKk58/s400/MK61avr.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5329032477064151522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;   "Определяющие трудности", а именно точность арифметики при реализации МК61 на распространенной платформе Atmel AVR не заставили себя ждать. Как правильно заметил гн. Степанищев, проектант МК161, single precision это не та база на которой плавающая точка будет сохранять необходимую точность. Что бы это понять нужно осознать что в бинарном мире выразить дробное десятичное число невероятно сложно из за интервала в котором находятся максимум и минимум таких чисел. Это настолько же сложно насколько сложно в реальном мире привести любую дробь к абсолютно точному значению...&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;   В первые я понял это когда в черте каком лохматом году сдавал лабораторную по сопромату (надеюсь все знаю когда надлежит жениться прилежному студенту? :)), принимал у нас лабы зав. кафедрой, мужичок на редкость въедливый и жутко противный. Ну понятно что целых чисел при нагружении балки  от индикаторов часового типа не добиться, особенно дело усугублялось трех этажными формулами переводящими перемещение в напряжение, ну а когда ко всему этому прибавляется кручение балки вокруг возможных осей и в дело вступают углы, а значит синусы - то хорошо обученный студент задавшись точностью округляет до третьей цифры после запятой и высчитав огроменный  формульный ряд в калькуляторе ничтоже сумнявшись идет сдавать. Ха-ха в этот день все получили отлуп... Поокруглив исходные значения для конечных формул мы естественно получили неправильные результаты - такие прогибы и кручения балки какие были у нас должны были разрушить конструкцию еще на первом этапе нагружения. Лабы мы сдавали ровно неделю, под конец уставший от нашей тупости зав.кафедрой потребовал немедленно выбросить все наши калькуляторы и считать в дробях пока есть такая возможность, каково же было наше удивление когда без всякого округления до тысячных или десятитысячных (некоторые кадры округляли до -6) у нас получились значения прогибов и кручений с точностью до сотых и десятых долей. Мораль собственно такова что обыкновенная  дробь до тех пор имеет точность - пока отсутствуют эволюции по переводу ее в десятичный вид. Поскольку в двоичном виде мы завязаны на базу - степень двойки, то как бы мы не крутились точно может быть представлена только дробь. &lt;/div&gt;&lt;div&gt;  32 битный формат хранения так сильно растягивает отрезки на числовой прямой пытаясь охватить необходимый диапазон min..max что результаты будут заметны уже в 7 порядке после запятой (если привести число к виду 1.MxE = ) - что и демонстрирует симуляция исполнения сложения двух чисел на виртуальной машине МК61avr:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  123.235 &lt;/div&gt;&lt;div&gt;  B^&lt;/div&gt;&lt;div&gt;  961.32&lt;/div&gt;&lt;div&gt;  +&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; МК61avr = 1084.5551&lt;/div&gt;&lt;div&gt; МК61       =  1084.555&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Это для разминки мозгов тех, кто одной левой на просторах инета хотел показать собственную удаль.  Для double precision 64 бита существует только одна возможность работать нативно в пределах платформы компилятора - это купить IAR C. WinAVR к сожалению только называет double - double-ам, а на самом то деле это обычный single precision то, что в ANSI Си  часто  кличут float32.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;  Что бы шах не стал матом нужно найти библиотеку 64 битного floating point и прикрутить ее к WinAVR. А пока рокировка - терпим ту точность, которая есть в наличии :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. Вот как эту же операцию проделывает код от BCB6 для float32 становится понятно откуда у 1 после 555  ввыросли ноги :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SfSU0cVfrQI/AAAAAAAAADM/vGQJyt447cc/s1600-h/BCB6_float.bmp"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SfSU0cVfrQI/AAAAAAAAADM/vGQJyt447cc/s400/BCB6_float.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5329047887766596866" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 176px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-1025637824781106184?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/1025637824781106184/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/mk61avr.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1025637824781106184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/1025637824781106184'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/mk61avr.html' title='MK61avr - Шах и рокировка'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E9iC2oUZmVA/SfSGza_tweI/AAAAAAAAADE/e5QZxIUKk58/s72-c/MK61avr.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6545011537877437109</id><published>2009-04-23T10:28:00.000+06:00</published><updated>2009-04-24T09:18:41.381+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VM'/><category scheme='http://www.blogger.com/atom/ns#' term='МК'/><category scheme='http://www.blogger.com/atom/ns#' term='MCU'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>МК61avr - виртуальная машина, ход Е2..Е4</title><content type='html'>&lt;div style="text-align: left;"&gt;  Виртуальная машина, это почти что машина желаний :) ты ей номер желания, а она распоряжается собственными ресурсами используя процедуру реализации желания. Сразу вспомнился анекдот про то как в "дурке" контингет травит анекдоты, и так давно он уже этим делом занят, что за анекдотами закрепили номера и вместо длинной борадатой байки называют номер анекдота - ну а дальше по ситуации "ржут" или обижают расказчика. Тут в палату заходит медсестра и один из разказчиков хитровато выпаливает - "127!". Народ начинает мычать "уууу....как тебе Вась не стыдно в присутсвии женщин такой пошлый анекдот рассказывать!".  Вот точно таким же образом используя маш.код МК61 занимающий ровно байт нужно "будить память" виртуальной машины и выполнять список действий над ресурсами. &lt;br /&gt;&lt;/div&gt;&lt;div&gt; Ресурсами ВМ являются:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;    регистры памяти П0...П14 - по аналогии с MCU регистры общего назначения (РОН)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;    регистры арифметического стека X1,X,Y,Z,Т - для стековой машины маловато&lt;br /&gt;&lt;/li&gt;&lt;li&gt;    регистры стека возвратов - по аналогии с MCU аппаратный стек возвратов &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt; (ничего не забыл?)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Обощенно мне видится следующая блок схема виртуальной машины МК61.&lt;br /&gt;&lt;div&gt;  &lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Se_-LBzfcNI/AAAAAAAAAC8/Hp1_10csksY/s1600-h/mk61avr.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Se_-LBzfcNI/AAAAAAAAAC8/Hp1_10csksY/s400/mk61avr.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5327756349619007698" style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 350px; height: 400px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6545011537877437109?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6545011537877437109/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61avr-24.html#comment-form' title='Комментарии: 14'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6545011537877437109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6545011537877437109'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61avr-24.html' title='МК61avr - виртуальная машина, ход Е2..Е4'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E9iC2oUZmVA/Se_-LBzfcNI/AAAAAAAAAC8/Hp1_10csksY/s72-c/mk61avr.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-3788355632217447876</id><published>2009-04-22T23:05:00.001+06:00</published><updated>2009-04-22T23:38:27.507+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='basic4ppc'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='PocketPC'/><category scheme='http://www.blogger.com/atom/ns#' term='Basic'/><title type='text'>МК61ppc - лучше меньше, да лучше</title><content type='html'>&lt;div style="text-align: left;"&gt;  Не буду нараспев хвалить Бейсик как язык, он в этом не нуждается, но вот среда Basic4ppc - выше всяких похвал, пишется комфортно, удобно - думаешь только о проекте, не отвлекаясь на мелочи &lt;span class="Apple-style-span" style="font-style: italic;"&gt;" как это сделать"&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;"а как тут вывернуться"&lt;/span&gt;. Все очень органично, уже который вечер просто получаюу довольствие от самого процесса. Дело с  эмулятором стронулось настолько лихо, что под  впечатлением скорости разработки я начал забредать не туда, подставляя костыли под покосившиеся конструкции, потом понял это - осознал сделал несколько шагов назад и перелопатил код так как мне бы хотелось что бы он выглядел не мешая наращивать мясо. Благодаря этому отливу обнажились острые камни, которые потом бы резали ноги. Успел к "приливу" :)  вырастить новый скелет - теперь "нарастать мясу" одно удовольствие. &lt;/div&gt;&lt;div style="text-align: left;"&gt;   В который раз удивился Бейсику (но первым языком в памяти все равно остается Фортран!)  умудряющемуся простотой не мешать творческому процессу. &lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  Теперь эмулятор умеет многое (арифметика, читать/писать память, кое-что со стеком). Конечно это далеко не все, но что особенно важно не стыдно показать :) и легко его будет нарастить новыми оп-кодами. Как писал Владимир Ильич - "лучше меньше, да лучше!". В режиме программирования загнал простецкое вычисление гипотенузы :) получилось без ошибок - чем собственно и доволен.&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Se9TCiBSmzI/AAAAAAAAAC0/9XOWWV_EUgA/s400/srceen-mk61ppc.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5327568187159649074" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 243px; height: 300px; " /&gt;&lt;/div&gt;&lt;div&gt; Как художник, художнику оформление не задалось - дорисовать фальш панель можно и позже. &lt;/div&gt;&lt;div&gt; Хоотел прицепить файлик с исходным кодом, кто бы научил как это делать? :) Ну не постить же простыню исходника на весь блог.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-3788355632217447876?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/3788355632217447876/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61ppc.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3788355632217447876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3788355632217447876'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61ppc.html' title='МК61ppc - лучше меньше, да лучше'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_E9iC2oUZmVA/Se9TCiBSmzI/AAAAAAAAAC0/9XOWWV_EUgA/s72-c/srceen-mk61ppc.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-8189710103329754848</id><published>2009-04-21T20:19:00.000+06:00</published><updated>2009-04-22T00:11:25.033+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FloatingPoint'/><category scheme='http://www.blogger.com/atom/ns#' term='MK61'/><category scheme='http://www.blogger.com/atom/ns#' term='программируемые калькуляторы'/><title type='text'>МК61 - симуляторы, определяющие трудности</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Se3dQBA9mpI/AAAAAAAAACs/bJHxx6-8aGE/s1600-h/IEE754-32.JPG"&gt;&lt;/a&gt;&lt;br /&gt;   Тема аппаратного симулятора МК61, на примере его реального прототипа МК152 в свое время дало огромную пищу для роста все возможных спекуляций и заблуждений, а именно в "инете" процветали высказывания:&lt;div&gt; &lt;span class="Apple-style-span" style="font-style: italic;"&gt;"Что тут продавать, ерунда какая, никакого прорыва, никакого хай тека!"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt; "Вот так разработчики что за халтуру они нам продают, чем хвалятся? Да я за неделю (день, месяц, полгода) сделаю лучше и удобней!"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  На самом деле МК152 это образец хорошо выполненной работы. Далеко не халтура, а прибор, в который инженер проектировщик вложил душу и знания. И вот почему я так считаю - по заявлению многих уже опробовавших калькулятор, он очень близко совместим с аналогом, при наличии заложенного в него &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;огромного потенциала расширения&lt;/span&gt;. Совместимость это огромный плюс, учитывая накопленную базу алгоритмов в маш-коде МК61-МК52. Достаточно быстрая арифметика и, что самое главное, при заявленной скорости работы &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;допустимая погрешность вычислений&lt;/span&gt; (на уровне аналога или выше) - вот это тот самый параметр, который на мой взгляд и показывает глубину вложенных в МК152 знаний.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;  Первое с чем столкнется человек решивший повторить разработку СЕМИКО в железе это точность вычисления. Точность вычислений задается форматом арфиметики с плавающей точкой используемой в проекте. Золотой серединой будет floating point single precision формат требующий для хранения 32 бита. При использовании 8 битного микроконтроллера (а в МК152 стоит х51 клон) добиться от арифметики сходных по сокорости с зарубежными микрокалькуляторами результатов (с 32 битным сердцем и аппаратным умножением, а под час и блоком MAC)  задача очень сложная. Требующая проработки процедур на уровне ассемблера. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Вот что из себя представляет формат хранениния 32 битного fp single числа:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); "&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Se3dQBA9mpI/AAAAAAAAACs/bJHxx6-8aGE/s400/IEE754-32.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5327157201469282962" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 41px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;Для того что бы хотя бы начать с ним работать его нужно как минимум распаковать :) &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-8189710103329754848?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/8189710103329754848/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8189710103329754848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8189710103329754848'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/61.html' title='МК61 - симуляторы, определяющие трудности'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E9iC2oUZmVA/Se3dQBA9mpI/AAAAAAAAACs/bJHxx6-8aGE/s72-c/IEE754-32.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-4940952755913618267</id><published>2009-04-17T10:51:00.000+06:00</published><updated>2009-04-17T13:47:41.726+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='программированиие'/><category scheme='http://www.blogger.com/atom/ns#' term='PocketPC'/><title type='text'>в PocketPC теперь можно програмировать легко и удобно</title><content type='html'>&lt;div style="text-align: left;"&gt;   Накануне решил поискать, а какие средства разработки есть под мой старый добрый коммуникатор PocketPC Rover W5. И очень удивлся когда кроме монстроидального VisualStudio2008 (3.5Гб !!!), сущетвует маленький пакетик Pelles C с SDK и визардом под создание проектов на платформе Windows Mobile 5 (6, 2003) &lt;a href="http://www.smorgasbordet.com/pellesc/"&gt;http://www.smorgasbordet.com/pellesc/&lt;/a&gt;. Принцип создания программ в этом пакете восходит к старым древним традициям - опуская нас на уровень обработки очереди сообщений от GUI устройства (все возможные WM_ сообщения)  бесконечной вереницей case-ов. Ну в принципе тоже хорошо, хоть и отвык я от этого в Borland C++ builder.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Порывшись еще в мировой паутине, я наткнулся на велкиолепную штуку позволяющую писать программы для коммуникаторов (и для Смартфонов тоже) не только на хосте (IBM PC), но и на самом коммуникаторе, причем делать это в очень удобной форме &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;визуальной разработки&lt;/span&gt; и на всем доступном и понятном языке Basic. Продукт это называется Basic4ppc &lt;a href="http://www.basic4ppc.com/Downloads.html"&gt;http://www.basic4ppc.com/Downloads.html &lt;/a&gt;,  триальная версия ограничена тем что не может компилировать в исполняемый модуль, а работает только с  интерпритатором устанавливаемом на PocketPC и являющимся таким же законченным модулем для разработки исключительно средствами самого PocketPC. Существует Российский сайт поддержки данного продукта http://basic4ppc.narod.ru/index.htm&lt;div&gt;   Меня это водушивило (ну а что еще делать сидя в очереди у кабинета врача?! Или например в очереди на предстоящем техосмотре?!). И я решил а не попробовать в появившиеся у меня внезапно свободное время  написть симулятор программируемого калькулятора МК-61 на этом языке. Найти таковой на просторах интернета для PocketPC не удалось, а покупать аппартную платформу МК-152 точнее его мобильный вариант МК-161 пока нет средств. Кстати думаю что стоит приобрести себе МК-161 как память об МК-61 и моих лучших дестких впечталениях от начал программирования - когда программировать очень хочется, а не на чем :) и тут появляется подарок родителей - поошривших меня за мое зверское стремление к программированию. СЕМИКО в Новосибе конечно молодцы, работу проделали огромную &lt;a href="http://mk.semico.ru/oinfo.htm"&gt;http://mk.semico.ru/oinfo.htm.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SegRR92Bj2I/AAAAAAAAACc/LFIl7Nexme4/s1600-h/mk_125b.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SegRR92Bj2I/AAAAAAAAACc/LFIl7Nexme4/s400/mk_125b.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5325525559722217314" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;div&gt;                                   Так выглядит настольный варинат МК-152&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E9iC2oUZmVA/SegRitJGtLI/AAAAAAAAACk/KBf77SdjXTo/s1600-h/i2588a.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/SegRitJGtLI/AAAAAAAAACk/KBf77SdjXTo/s400/i2588a.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5325525847296619698" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;                                       Так выглядит мобильный варинат МК-161&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Вот так выглядит средство разарботки Basic4ppc с моим проектом МК61 в нем, в принципе очень удобно как на хосте так и на самом КПК работать в этом пакете.&lt;/div&gt;&lt;div&gt; &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); "&gt;&lt;img src="http://1.bp.blogspot.com/_E9iC2oUZmVA/SegQaNqaY8I/AAAAAAAAACU/c0yq_IiiznU/s400/basic4ppc_MK61.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5325524601895805890" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 335px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-4940952755913618267?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/4940952755913618267/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pocketpc.html#comment-form' title='Комментарии: 13'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4940952755913618267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4940952755913618267'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pocketpc.html' title='в PocketPC теперь можно програмировать легко и удобно'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/SegRR92Bj2I/AAAAAAAAACc/LFIl7Nexme4/s72-c/mk_125b.jpg' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-7256407011783839539</id><published>2009-04-14T09:49:00.001+06:00</published><updated>2009-04-15T13:46:43.681+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Proteus'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - оптимизация</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SeWQC85trnI/AAAAAAAAACM/uRfJwwz5Tqs/s1600-h/pci-osc.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SeWQC85trnI/AAAAAAAAACM/uRfJwwz5Tqs/s400/pci-osc.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5324820514817814130" /&gt;&lt;/a&gt;                                                &lt;br /&gt;&lt;br /&gt;   Несмотря на сваливший меня с ног грипп я все так заставил себя добить симуляцию схемы, и заменил дешифратор на ИМС (уж слишком много ступеней логики) на дешифратор на диодной матрице :) симуляция в Протеусе показала работоспособность на уровне логических связей :) Пришлось правда вместо регистра SN74F377 (оказалось в предыдущей схеме я накосячил с регситром взяв латч с разрешением выхода SN74F374) поставить 6-триггерный регистр хранения, так как в Протеусе SN74377 не симуляционная модель.            На уровне времянки я думаю проще проверить практикой. Кстати Протеус делает авторазводку. Но вот разъема PCI у него в шаблонах нет. А вот в KiCAD-е, который так любезно подсказал мне Kosmoflyko есть все, и пакет очень не плох, попробую в нем изготовить PCB.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S.(от 15.04.2009) Изменил схему, (убрал лишний диод и лишний элемент, таким образом даже уменьшил готовое устройство - на один ИМС корпус). Слегка поправил симуляцию, была помарка.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-7256407011783839539?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/7256407011783839539/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/sn74f377-sn74f373-6-sn74377.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/7256407011783839539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/7256407011783839539'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/sn74f377-sn74f373-6-sn74377.html' title='Шина PCI - оптимизация'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/SeWQC85trnI/AAAAAAAAACM/uRfJwwz5Tqs/s72-c/pci-osc.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-4692335746083503332</id><published>2009-04-08T23:43:00.001+06:00</published><updated>2009-04-08T23:47:58.601+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SN74'/><category scheme='http://www.blogger.com/atom/ns#' term='TTL'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - хулиганство чистой воды</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sdzifs3A6kI/AAAAAAAAABs/M0CDiSIvuXg/s1600-h/POST-CARD-PCI.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="http://1.bp.blogspot.com/_E9iC2oUZmVA/Sdzifs3A6kI/AAAAAAAAABs/M0CDiSIvuXg/s400/POST-CARD-PCI.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5322377893890812482" /&gt;&lt;/a&gt;&lt;br /&gt;  Вот так я себе представляю это устройство в серии SN74Fxx, честно скажу я его еще не проверял в симуляторе. Проверю и скажу работоспособно ли. Три ступени логики с задержкой порядка 8 нс, дают Fmax схемы до 41МГц. Не уверен что у дешифратора задержка не больше 8нс, скорее всего больше. Надо бы как то проверить в симуляторе. Ну вообщем хулиганство это чистой воды :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-4692335746083503332?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/4692335746083503332/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_08.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4692335746083503332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/4692335746083503332'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_08.html' title='Шина PCI - хулиганство чистой воды'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E9iC2oUZmVA/Sdzifs3A6kI/AAAAAAAAABs/M0CDiSIvuXg/s72-c/POST-CARD-PCI.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-8339385966053043216</id><published>2009-04-08T01:08:00.000+06:00</published><updated>2009-04-08T11:07:54.668+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Model-Sim'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - интересная эта работа из болота тащить бегемота</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdwrlL59a8I/AAAAAAAAABU/BgNbJYjFJwI/s1600-h/PCI.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 164px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdwrlL59a8I/AAAAAAAAABU/BgNbJYjFJwI/s400/PCI.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5322176777496128450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;  Вообщем чувствую я это далеко не последний подход к схеме :). О главном - два триггера, один Dsel отмечает начало и конец транзакции &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;данных &lt;/span&gt;(не транзакции PCI шины!!!), второй Dst служит формирователем импульса захвата (импульс одиночный в первом такте транзакции &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;данных&lt;/span&gt;). Сигнал DEVSEL# и TRDY# формируются по остаточному принципу, при появлении готовности IRDY# от инициатора обмена по шине (в данном случае от CPU).  Как мне кажется элемент AND на запись данных в Dsel все таки излишен, надо думать как от него избавится не нарушив логику работы.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Соответсвенно болячки остались:&lt;/div&gt;&lt;div&gt; а) при обмене с портом ВВ в пакетном режиме с стартовым адресом отличным от 8оН, весь пакет будет пропущен. &lt;/div&gt;&lt;div&gt; б) при изменении готовности инициатора в момент передачи данных не повлияет на устройство, оно все равно защелкнет "какой-то" код.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;В отличии от схемы приведенной ранее, эта хоть работоспособна на разных пакетах данных, первая схема - совсем "шлак". Как я заметил позже там и сигнал TRDY# не правиильно формируется, так же и триггера не возращаются в исходное состояние по завершении транзакции.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ну и как всегда результаты проверок ModelSim-ом:&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;  Данная диаграмма отражает запись в порт 80Н данных 22Н. Это самый простой вариант.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdwrlL59a8I/AAAAAAAAABU/BgNbJYjFJwI/s1600-h/PCI.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/Sdwu6yrgWeI/AAAAAAAAABc/fBxh8_X62ik/s400/PCI_osc.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5322180447216622050" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 177px; " /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_E9iC2oUZmVA/SdwvnsG1sHI/AAAAAAAAABk/c4RVPHHrT7w/s1600-h/PCI_osc.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_E9iC2oUZmVA/SdwvnsG1sHI/AAAAAAAAABk/c4RVPHHrT7w/s400/PCI_osc.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5322181218546331762" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 173px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: left; "&gt;  Данная диаграмма отражает запись в порт 80Н данных 80Н. Это вариант посложнее - так как линия декодера POT80# активна в течении всей транзакции шины PCI, а  диаграмма показывает что устройство зависит от этого сигнала лишь однажды в начале транзакции по шине PCI.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdwrlL59a8I/AAAAAAAAABU/BgNbJYjFJwI/s1600-h/PCI.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;  Исходники устройства на Verilog:&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;div style="text-align: left; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;`timescale 1ns / 100ps&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;module post(POSTo, TRDY, AD, CBE, FRAME ,IRDY, RESET, CLK);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;output [7:0]POSTo;        // вывод кода POST-ошибки&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;//input  MXpost;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  // мультеплексирование тетрад POST-кода&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;//input  PortSel;           // конфигурация устройства на адрес порта POST 80H/84H&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;//-------- ШИНА PCI --------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;output TRDY;              // Target Ready - готовность к обмену целевого устройства&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  [15:0]AD;          // Address/Data - мультиплексированная шина (32 бита) адреса/данных. В начале транзакции передается адрес, в последующих тактах -данные&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  [3:0]CBE;          // Command/Byte Enable - команда/разрешение обращения к байтам. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  FRAME;             // Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигнала указывает на то, что последующий цикл передачи данных является последним в транзакции&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  IRDY;              // Initiator Ready - готовность ведущего устройства к обмену данными&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  RESET;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  // Сброс&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;input  CLK;               // Тактовый сигнал&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;//-------- &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;reg [7:0]R80H;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;reg Dst,Dsel;           // Триггера START и выбор устройства&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;wire CAPTURE = ~Dst;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;assign TRDY   = Dsel|IRDY; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;assign POSTo  = R80H[7:0]; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;wire PORT80 = ~((AD == 16'H0080)&amp;amp;(CBE == 4'B0011)&amp;amp;(~FRAME));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;wire Dsti = PORT80|~Dsel; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;wire Dseli = PORT80&amp;FRAME; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;always@(posedge CLK or negedge RESET) begin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; if(~RESET) begin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  R80H &lt;= 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  Dst &lt;= 1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  Dsel &lt;= 1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; end &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; else begin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  Dsel &lt;= Dseli;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  Dst &lt;= Dsti;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;  if(CAPTURE) R80H &lt;= AD[7:0];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; end &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left; "&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 51, 255);"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;endmodule&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt; Исходник тест-прогона для устройства не изменился.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-8339385966053043216?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/8339385966053043216/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_07.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8339385966053043216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8339385966053043216'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_07.html' title='Шина PCI - интересная эта работа из болота тащить бегемота'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/SdwrlL59a8I/AAAAAAAAABU/BgNbJYjFJwI/s72-c/PCI.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-3471741581387825412</id><published>2009-04-06T00:16:00.000+06:00</published><updated>2009-04-06T00:32:54.997+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Model-Sim'/><category scheme='http://www.blogger.com/atom/ns#' term='Verilog'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - "семь раз отмерь - один раз отрежь"</title><content type='html'>   Или доверяй, но проверяй :) Результаты симуляции показали вот такую картину.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_E9iC2oUZmVA/Sdj3baZLs8I/AAAAAAAAABE/uV95K-puVFc/s400/POST-CARD-PCI.JPG" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 206px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5321275010051716034" /&gt;&lt;/div&gt;&lt;div&gt; Смотрим на TRDY# и видим неприятную площадку вызванную запаздыванием сигнала IRDY# - готовности ведущего относительно фронта сигнала по которому переключается триггер обеспечивающий активизацию устройства сигналом DATA.  Это означает что главным является сигнал IDRY#, а операция AND (элемент И на схеме) к сожалению коммунитативна.  Значит.... продолжение следует на месте этого элемента должен быть мультиплексор, схему нужно изменить. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Исходники HDL проекта прилагаю.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Само устройство:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;// команды по CBE шине&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`define ConfigRead  4'b1010&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`define ConfigWrite 4'b1011&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`define PortWrite   4'b0011&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`define MemRead     4'b0110&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`timescale 1ns / 100ps&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;module post(POSTo, TRDY, AD, CBE, FRAME ,IRDY, RESET, CLK);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;output [7:0]POSTo;        // вывод кода POST-ошибки&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;//-------- ШИНА PCI --------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;output TRDY;              // Target Ready — готовность к обмену целевого устройства&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  [15:0]AD;          // Address/Data — мультиплексированная шина (32 бита) адреса/данных. В начале транзакции передается адрес, в последующих тактах —данные&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  [3:0]CBE;          // Command/Byte Enable — команда/разрешение обращения к байтам. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  FRAME;             // Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигнала указывает на то, что последующий цикл передачи данных является последним в транзакции&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  IRDY;              // Initiator Ready — готовность ведущего устройства к обмену данными&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  RESET;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  // Сброс&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;input  CLK;               // Тактовый сигнал&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;//-------- &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;reg [7:0]R80H;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;reg Dst,Dframe;           // Триггера START и FRAME&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;wire DATA = ~Dframe;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;wire CAPTURE = ~Dst;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;assign TRDY   = DATA&amp;IRDY;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;assign POSTo  = R80H[7:0]; //(MXpost)? POST[7:4] : POST[3:0];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;wire Dsti = DATA|FRAME;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;wire PORT80 = (AD == 16'H0080)&amp;amp;(CBE == 4'B0011);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;always@(posedge CLK or negedge RESET) begin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; if(~RESET) begin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  R80H &lt;= 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  Dst &lt;= 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  Dframe &lt;= 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; end &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; else begin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  Dframe &lt;= FRAME;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  if(PORT80) Dst &lt;= Dsti;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  if(CAPTURE) R80H &lt;= AD[7:0];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; end &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;endmodule&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;  Тест-прогон для него:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;`timescale 1ns / 100ps&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;module testbench; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; reg  clk, reset;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; wire [7:0]POSTo;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; wire TRDY;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; reg  [15:0]AD;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; reg  [3:0]CBE;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; reg  FRAME, IRDY;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; post card(&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .CLK(clk),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .RESET(reset),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .POSTo(POSTo),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .TRDY(TRDY),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .AD(AD),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .CBE(CBE),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .FRAME(FRAME),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   .IRDY(IRDY)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; );&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; initial begin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   reset = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   IRDY = 1'b1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   FRAME = 1'b1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   AD = 16'H0200;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   CBE = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #15  reset &lt;= 1'b1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #20  AD = 16'H0080;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #1   CBE = 4'b0011;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #30  FRAME = 1'b0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #39  AD = 16'h0022;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #1   IRDY = 1'b0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #81  FRAME = 1'b1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   #2   IRDY = 1'b1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; end  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; initial begin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   clk = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;   forever #20   clk = !clk; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; end    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;endmodule&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-3471741581387825412?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/3471741581387825412/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_05.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3471741581387825412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/3471741581387825412'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_05.html' title='Шина PCI - &quot;семь раз отмерь - один раз отрежь&quot;'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E9iC2oUZmVA/Sdj3baZLs8I/AAAAAAAAABE/uV95K-puVFc/s72-c/POST-CARD-PCI.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6443119167637134981</id><published>2009-04-03T11:08:00.000+06:00</published><updated>2009-04-04T00:41:51.078+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - первый подход</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdZXY-9E6JI/AAAAAAAAAA0/yFRA3bDchLs/s1600-h/easy_PCI_port80.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 241px;" src="http://4.bp.blogspot.com/_E9iC2oUZmVA/SdZXY-9E6JI/AAAAAAAAAA0/yFRA3bDchLs/s400/easy_PCI_port80.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5320536096512469138" /&gt;&lt;/a&gt;&lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Пользуясь казусами шины и формализую задачу:&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;     Необходимо выполнить захват операции записи в порт 80H (POST-CODE) на PCI-шине. &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;      По пунктам:&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;        1. Падение FRAME# сигнализирует о начале операции на шине PCI (о любой операции!!!)&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;        2. Поднятие FRAME# сигнализирует о завершении операции на шине PCI, синхронно сбрасывая по приходу фронта CLK аппаратуру устройства в исходное состояние.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;        3. Переданные по первому фронту CLK, после упавшего FRAME#, 4 бита шины C/BE  и 16 бит мультиплексируемой шины AD необходимо дешифровать в одну линию - сигнал PORT80H, уведомляющий о наличии на шине PCI операции по записи в порт ВВ с адресом 0080H.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;        4.&lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Сигнал &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language:EN-US;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;PORT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;80&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language: EN-US;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;H&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;является стартовым для устройства. По получению этого сигнала необходимо будет ответить на готовность ведущего IRDY# собственной готовностью TRDY# и указать сигналом DEVSEL# на то, что устройство (то бишь мы)  выбирает себя в качестве целевого на шине PCI. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;      5. Сигнал CAPTURE# является определяющим для регистра R80H назначения кода-ошибки. Важно то что это сигнал необходимо фиксировать только на один такт шины (второй по счету), для избежания записи данных остального пакета - если будет запущен пакетный режим обмена с устройством.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span style="mso-spacerun:yes"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;        5&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. Переданные во втором такте CLK, при наличии разрешающего сигнала &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language: EN-US;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;CAPTURE#&lt;/span&gt;&lt;/span&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;, данные с 8 младших бит шины AD  защелкиваются в регистре R80H по фронту CLK.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Вот пожалуй и все. Басенку конечно я сократил до минимума. :). Если порт 80&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style=" mso-ansi-language:EN-US;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;H&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;попадется внутри пакетной операции и будет не первым в ней при записи в порты ВВ - мы пролетаем. Если операция записи в порт 80&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language:EN-US;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;H будет прерываться ведущим устройством при помощи сигнала IRDY# сразу же во втором такте с момента падения FRAME# , то мы защелкнем "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;какие то&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;" данные&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;. Блок схему  и диаграмку сигналов прилагаю. &lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;P.S. Ндао будет отладиться в Model-Sime на ошибки. Может быть и намудрил где. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;P.P.S. Читая спецификацию заметил что я не правильно нотирую сигналы, # - означает что действующий активный уровень сигнала низкий. Т.е. по сути эквивалентно обычному подчерку инверсии сигнала в привычных гостовских обозначениях. Исправился :)&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6443119167637134981?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6443119167637134981/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_02.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6443119167637134981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6443119167637134981'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci_02.html' title='Шина PCI - первый подход'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_E9iC2oUZmVA/SdZXY-9E6JI/AAAAAAAAAA0/yFRA3bDchLs/s72-c/easy_PCI_port80.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-8151888125629352416</id><published>2009-04-01T23:37:00.000+06:00</published><updated>2009-04-02T00:31:52.500+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI казусы кторые помогают</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;   После изнурительного серфинга по вебу, скопилось много информации, которую необходимо систематизировать. И так вот интересные ссылки, которые раскрывают подробности по использованию PCI что называется "на коленке". По всей видимости "коленка" эта произрастает по моему скромному мнению из следующих причин:&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; а) для многих чипсетов на мат.плате находятся куча устройств PCI которые вися за мостом захватывают на себя порты ВВ как ресурс, соответственно на шине за мостом всегда будет выделен ресурс ВВ.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; б) для многих древних PCI устройств спецификация шины не предусматривала крайне неудобного протокола автоконфигурации, правда такие устройства хоть и область ресурсов устанавливать не обязаны, маску доступа к портам ВВ указывать должны, так же как и код вендора.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Честно говоря ни пункт а) ни пукт б) меня совершенно не удовлетворяют в качестве ответов - почему оно работает, не думаю что спецификация по PCI даст какие то "всходы" после изучения. Конечно братья из комитета по стандартизации PCI хотели не малых американских денег за "тугоментацию", но ничего - свою работу они уже закончили стандартом 3.0 и денежных знаков у них наверное и без меня с избытком (нашел я спецификацию в свободном доступе :)).  &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;и так ссылки:&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language:EN-US; layout-grid-mode:bothfont-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;1.  http://www.platan.ru/shem/pdf/pci.pdf&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;===============================&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Если кратенько: автор не рекомендует идти таким путем - ибо некрасиво это, да и инженерной мысли не достойно. Но как говориться "если сильно хочется, но нельзя! То - можно" :) Автор для ухода от реализации дешифратора области ВВ использует PAL(GAL) , в общем ПЛМ в своем самом зачаточном еще состоянии. Это понятно, потому что на 16 линий адреса и 4 линии команды нужно дешифроваться горой логики. &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;2. &lt;/span&gt;&lt;a href="http://elm-chan.org/works/pci/report_e.html"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://elm-chan.org/works/pci/report_e.html&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=====================================&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  Хорошо известный в интернете китайский ресур также особо не напрягается, следуя принципам - "а что бы работало!", предлагает схожий подход - в центре PAL как стейт-машина и дешифратор адреса на 8 компараторах SN74F521. Причем адрес выставляется набором "щелкателей", что очень удобно. Все прекрасно обходится без шинников, за счет регистров с три-стейтом. Соответственно тоже ни каких "автоконфигураций" и областей ресурсов.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;3. &lt;/span&gt;&lt;a href="http://www.rlocman.ru/shem/schematics.html?di=41202"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;http://www.rlocman.ru/shem/schematics.html?di=41202&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;===========================================&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  А вот тут уже подход продуман и что радует автор так же "убился" затолкав все-про-все в 21 макроячейку и применив, как я и задумал, &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"   style="mso-ansi-language:EN-US; layout-grid-mode:bothfont-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;E&lt;/span&gt;&lt;/span&gt;&lt;span style=" layout-grid-mode:both;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;PM7032. В данном изделии осознано отдается в конфигурационное пространство порт и шина с переключателей. Вот это уже явный прогресс DeviceID на шине позволит потом найти устройство в списках подключенных в ОС. Снимаю шляпу перед автором http://pvuinc.narod.ru устройства. &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Посмотрев на народное творчество захотелось похулиганить самому, собрав все на голимой логике и посмотреть а зарботает ли. Вот уже почти и схема готова. Конечно без конфигурирований - только захват команды write IO (B/CE#=4'b0011) и адреса 84H или 80H. Схемка конечно не очень большая, но и маленькой ее не назвать. Так хотелось собрать дешифратор адреса на диодиках :) - но решил без фанатизма.&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-8151888125629352416?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/8151888125629352416/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8151888125629352416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/8151888125629352416'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/04/pci.html' title='Шина PCI казусы кторые помогают'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1089583139347961352.post-6265780674576079343</id><published>2009-04-01T11:35:00.000+06:00</published><updated>2009-04-01T23:37:00.029+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>Шина PCI - доступно ли простому смертному?</title><content type='html'>&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Сожалею что не пришлось столкнуться раньше, очень занимательный протокол и архитектура. Думаю что обязательно эксперементну с ней, на прмере POST-CODE считывателя. Посмотрел имеющиеся в свободном доступе реализации на VHDL и AHDL. В принципе понятно, после прочтения вступительного материала по шине PCI, понял что зря ее боялся. Но залезть даже на 33МГц будет не так просто. Все имеющиеся реализации начинают с 64 ячеечной EPM7064, у меня либо больше (EPM240) либо меньше (EPM7032). Поскольку простых путей мы не ищем :), попытки реализоваться начнем с 7032. &lt;div&gt;       Как нельзя вовремя попался блог &lt;a href="http://kosmoflyko.blogspot.com/2009_04_01_archive.html"&gt;http://kosmoflyko.blogspot.com/2009_04_01_archive.html&lt;/a&gt;, хотелось бы отгородится от 8 старших бит адреса - нужно было знать задержки на логике (мои благодарности автору, за то что не поленился систематизировать материал). Хотелось бы без рассыпухи и с честными DeviceID, ClassID и BAR. Будем посмотреть.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1089583139347961352-6265780674576079343?l=digitalinvitro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digitalinvitro.blogspot.com/feeds/6265780674576079343/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://digitalinvitro.blogspot.com/2009/03/pci.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6265780674576079343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1089583139347961352/posts/default/6265780674576079343'/><link rel='alternate' type='text/html' href='http://digitalinvitro.blogspot.com/2009/03/pci.html' title='Шина PCI - доступно ли простому смертному?'/><author><name>Alexeys</name><uri>http://www.blogger.com/profile/17884841411526478404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
