Принципы (архитектура) фон неймана

3.2. магистрально-модульный принцип построения пк

Гарвард и фон Нейман, начиная с глобальных константных переменных STM32

От школы до последующей стажировки, честно говоря, меня не особо заботила структура фон Неймана и гарвардская структура процессора, я знал только, что это связано с памятью данных и памятью программ. ЧтобыВчера в программе STM32, когда глобальная переменная была определена как атрибут const, было обнаружено, что ее местоположение было во встроенной FLASH STM32, а не во встроенной SRAM. Внезапно я чувствую себя очень странно, разве все программы не должны работать в ОЗУ? Разве его нельзя поместить в SRAM даже в статической постоянной области? Чтобы причина? Это должно начинаться с архитектуры процессора фон Неймана и Гарварда.

1. Гарвардская структура и структура фон Неймана.

Гарвардская структура относится к физическому разделению памяти данных и памяти программ. Если взять в качестве примера однокристальный микрокомпьютер 51, память данных представляет собой RAM однокристального микрокомпьютера, а программная память — это ROM однокристального микрокомпьютера. Запрещается хранить инструкции в памяти данных, равно как и данные в памяти команд. ЧтобыНа рисунке показана структура Гарварда в Интернете. Память данных и память программ используют две независимые шины. Блок управления может одновременно связываться с памятью программ и памятью данных для реализации функций системы программного обеспечения. ARM использует гарвардскую структуру. (Строго говоря, многие усовершенствованные чипы ARM приняли комбинацию структуры Гарварда и структуры фон Неймана)Структура фон Неймана, это структура, принятая в компьютерах общего назначения, при этом данные и память программ не разделены:Видно, что фон Нейман помещает в память как память данных, так и память программ. Для структуры фон Неймана инструкции и данные должны загружаться в рабочую память при выполнении программы. ЧтобыЭти две структуры должны иметь разные реализации в области защищенного кода. Гарвардская структура различает код и данные на аппаратном уровне, и, конечно, должно быть программное обеспечение, в то время как структура фон Неймана должна различаться только на программном уровне.

2. Адрес глобальной переменной STM32 const

Порядок действий следующий:

Результат работы программы:По карте памяти STM32 (вФайл запуска STM32Этот рисунок приведен в одной статье), можно сделать вывод, что адрес globalConstDat находится во Flash-памяти (0x0800 0000

0x0801 ffff), а адреса остальных переменных находятся в SRAM. Почему такая ситуация? Первое зависит от компилятора, а второе связано с тем, что ARM — это гарвардская структура. Встроенная FLASH и встроенная SRAM эквивалентны ROM и RAM однокристального микрокомпьютера 51. SRAM используется для хранения данных, а FLASH — для хранения инструкций.

Когда программа запущена, блок управления может одновременно взаимодействовать с RAM и FLASH, что означает, что CPU может напрямую выполнять программу во FLASH. Обратите внимание, что некоторые FLASH-файлы нельзя запускать непосредственно на нем, и их необходимо загружать в RAM, например NandFlash, потому что скорость чтения NandFlah очень низкая, но есть также некоторые FLASH-файлы, такие как NorFlah

Встроенная флэш-память STM32 — это флэш-память, аналогичная атрибуту NorFlash. Глобальная статическая константа находится в области текстовых констант. Она статична и не может быть изменена. Она размещается в области памяти программы компилятором, что означает, что она компилируется в «инструкцию» 。

Если он находится в процессоре фон Неймана, в этом случае у компилятора будет другой набор мер.

Разница между фон Нейманом и гарвардской архитектурой: архитектура фон Неймана была разработана известным физиком и математиком Джоном фон Нейманом в конце 1940-х годов, а архитектура Гарварда была основана на оригинальном релейном компьютере Harvard Mark I.

Оригинальная гарвардская архитектура использовалась для хранения инструкций на перфоленте и данных в электромеханических счетчиках. Архитектура фон Неймана составляет основу современных вычислений и проще в реализации. В этой статье рассматриваются две компьютерные архитектуры в отдельности и объясняется разница между ними.

Архитектура процессоров

Архитектура фон Неймана

Большинство современных процессоров для персональных компьютерах работают на архитектуре

фон Неймана
. В 1946 году фон Нейман, Бёркс и Голдстайн издали монографию «Предварительное
рассмотрение логического устройства электронного вычислительного прибора», которая подробно
описала устройство и технические характеристики будущего компьютера,
которые позднее стали носить название «архитектура фон Неймана».

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

Этапы цикла выполнения:

  1. Процессор выставляет число, хранящееся в регистре счётчика комманд,
    на шину адреса и отдаёт памяти команду чтения.
  2. Выставленное число является для памяти адресом. Память, получив адрес и команду
    чтения, выставляет содержимое, хранящееся по этому адресу, на шину данных и сообщает
    о готовности.
  3. Процессор получает число число с шины данных, интерпретирует его как команду из своей
    системы комманд и выполняет её.
  4. Если последняя команда не является командой перехода, процессор увеличивает на единицу
    (в предположении, что длина каждой команды равна единице) число, хранящееся в счётчике
    команд; в результате там образуется адрес следующей команды.
  5. Если последняя команда не является командой перехода, процессор увеличивает на единицу
    (в предположении, что длина каждой команды равна единице) число, хранящееся в счётчике
    команд; в результате там образуется адрес следующей команды.

Данный цикл выполняется неизменно, и именно он называется процессом,
откуда и произошло название процессора.

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

Гарвардская архитектура

Выделяют несколько гарвардских архитектур: классическая, модифицированная, расширенная и
гибридная с архитектурой фон Неймана.

Операции (такие как сложение и умножение) требуют от любой вычислительной машины
несколько действий:

  • Выборка двух операндов
  • Выбор инструкций и выполнение
  • Сохранение результата

Данную идею реализовал

Эйкен,
и суть этой идеи состояла в том, чтобы физически разделить линии передачи команд и данных.
В его первом компьютере Mark I для хранений инструкций использовалась перфорированная лента,
а для работы с данными — электромеханические регистры. Это позволяло одновременно пересылать
и обрабатывать команды и данные, из-за чего компьютер мог работать быстрее.

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

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

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

В гибридных гарвардских архитектур (их было несколько) сочетались достоинства как гарвардской
архитектуре, так и в архитектуре фон Неймана. Например CISC-процессоры обладают раздельной
кэш памятью для команд и данных, так они получают и команду за один такт.
Ядро аппаратно гарвардское, но программно оно фон Неймана.

Параллельная архитектура

Архитектура фон Неймана имеет один значимый недостаток, так называемое «Узкое горлышко фон
Неймана». Суть этого горлышка состоит в том, что процессор фон Неймана последовательный,
а значит, что большой массив данных должен по байту пройтись через процессор, даже если
над массивом надо провести одну операцию.

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

суперкомпьютерах.

Примерами таких архитектур являются: SISD, SIMD, MISD, MIMD.

Какие ограничения у архитектуры фон Неймана?

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

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

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

Общие сведения о микропроцессорных системах

В связи с множеством областей применения МП и микроЭВМ можно классифицировать МПС на системном уровне. Они могут быть представлены:

  • встроенными системами контроля и управления;
  • локальными системами накопления и обработки информации;
  • распределенными системами управления сложными объектами;
  • распределенными высокопроизводительными системами параллельных вычислений.

Исходя из вышесказанного, в наше время определились следующие приоритетные области, в которых применяются МПС:

  • техника связи;
  • системы управления;
  • бытовая и торговая аппаратура;
  • контрольно-измерительная аппаратура;
  • военная техника;
  • вычислительные машины, системы, комплексы и сети;
  • транспорт.

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

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

Замечание 1

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

Применение МПС в разных областях военной техники растет ежегодно — от навигационных систем летательных аппаратов до управления движением транспортных роботов.

Современное использование архитектуры Гарварда

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

  • Цифровые сигнальные процессоры (DSP) обычно выполняют небольшие, высоко оптимизированные алгоритмы обработки аудио или видео. Они избегают кеширования, потому что их поведение должно быть чрезвычайно воспроизводимым. Трудности работы с несколькими адресными пространствами имеют второстепенное значение для скорости выполнения. Следовательно, некоторые DSP имеют несколько запоминающих устройств данных в разных адресных пространствах для облегчения обработки SIMD и VLIW . Процессоры Texas Instruments TMS320 C55x, например, имеют несколько параллельных шин данных (две записи, три чтения) и одну шину команд.
  • Микроконтроллеры характеризуются небольшим объемом памяти программ (флэш-память) и данных ( SRAM ) и используют преимущества архитектуры Гарварда для ускорения обработки за счет одновременного доступа к инструкциям и данным. Раздельное хранилище означает, что память программ и данных может иметь разную разрядность, например, используя 16-разрядные инструкции и 8-разрядные данные. Они также означают, что предварительная выборка инструкций может выполняться параллельно с другими действиями. Примеры включают PIC от Microchip Technology, Inc. и AVR от Atmel Corp (теперь часть Microchip Technology).

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

Где используются архитектуры CISC и RISC?

На заре процессоров и контроллеров присутствовала только архитектура CISC, хотя официального названия этой архитектуры еще не было.Но с появлением такого программного обеспечения, как компиляторы, архитектура на основе RISC начала стремительно развиваться. Intel с самого начала зависела от архитектуры CISC.

Несколькими компаниями, которые были готовы пойти на риск в отношении архитектуры RISC, были Apple, Atmel и т. д. Через несколько лет CISC стал немного устаревшим и непопулярным из-за трудностей с усовершенствованием. Однако Intel так и не покинула CISC и продолжила улучшения этой архитектуры.

В настоящее время разница между архитектурой RISC и CISC очень мала. Устройства ARM, устройства на базе AVR компании Atmel, такие как Arduino, PIC и почти все производители смартфонов используют архитектуру RISC, поскольку они намного быстрее, потребляют меньше ресурсов и более энергоэффективны. Устройства, основанные исключительно на CISC, все еще существуют в серии Intel x86 и микроконтроллерах 8051. Такой производитель, как AMD, использует гибрид RISC и CISC из серии K5 5-го поколения. В зависимости от приложения CISC предпочтителен для устройств автоматизации, а RISC — для устройств обработки видео и изображений.

Разница между фон Нейман и Гарвардской архитектуры

Основы фон Неймана и Гарвардской архитектуры

Архитектура фон Неймана — это теоретический компьютерный дизайн, основанный на концепции хранимых программ, где программы и данные хранятся в одной и той же памяти. Концепция была разработана математиком Джоном фон Нейманом в 1945 году и в настоящее время служит основой почти всех современных компьютеров. Гарвардская архитектура была основана на исходной компьютерной модели ретранслятора Harvard Mark I, в которой использовались отдельные шины для данных и инструкций..

Система памяти фон Неймана и Гарвардской архитектуры

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

Обработка инструкций фон Неймана и Гарвардской архитектуры

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

Стоимость фон Неймана и Гарвардской архитектуры

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

Использование фон Неймана и Гарвардской архитектуры

Архитектура фон Неймана в основном используется на каждой машине, которую вы видите, от настольных компьютеров и ноутбуков до высокопроизводительных компьютеров и рабочих станций. Гарвардская архитектура — довольно новая концепция, используемая в основном в микроконтроллерах и цифровой обработке сигналов (DSP)..

Основные понятия

Микропроцессор
— это программно-управляемое устройство в виде интегральной микросхемы (БИС или СБИС), предназначенное для обработки цифровой информации. Поскольку все современные микро-процессоры имеют интегральное исполнение, синонимом микропроцессора стал термин процессор.

Микроконтроллер
— это специализированный процессор, предназначен-ный для реализации функций управления (control— управление).

{xtypo_quote}Цифровой сигнальный процессор(Digital Signal Processor — DSP) — это специа-лизированный процессор, предназначенный для обработки цифровых сигналов. {/xtypo_quote}Микропроцессорная система представляет собой функционально законченное изделие, состоящее из нескольких цифровых устройств, включая процессор. Это понятие объединяет широкий набор законченных изделий, начиная с микроконтроллеров, выполненных на интегральных микросхемах, и кон-чая компьютерными системами, представляющими собой набор отдельных конст-руктивно оформленных устройств (системный блок, клавиатура, монитор и др.). В дальнейшем рассматриваются простейшие (однокристальные) микропроцес-сорные системы, содержащие помимо процессора основную память и устройства ввода/вывода. Такие микропроцессорные системы можно отнести к классу микро-процессоров.

Под организацией процессора
понимают совокупность его узлов (устройств, блоков, модулей), связи между узлами и их функциональные характе-ристики. Организация определяет аппаратную организацию процессора, т. е. состав и взаимодействие его аппаратных средств. Выделяют два уровня организации:

● физическую организацию в виде принципиальной схемы;

● логическую организацию в виде структурно-функциональной схемы.

В дальнейшем рассматривается организация микропроцессоров на логиче-ском уровне, или структурно-функциональная организация процессоров.

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

{xtypo_quote}Например, современные 32-разрядные процессоры х86 с архитектурой IA-32 (Intel Architecture — 2 bit) имеют стандарт-ный набор регистров, общую систему основных команд, одинаковые способы организации и адресации памяти, защиты памяти и обслуживания прерываний. Отметим, что понятие архитектуры в большей степени характеризует свойства системы, чем устройства. {/xtypo_quote}

Классическая гарвардская архитектура

Типичные операции (сложение и умножение) требуют от любого вычислительного устройства нескольких действий:

  1. выборку двух операндов,
  2. выбор инструкции и её выполнение,
  3. и, наконец, сохранение результата.

Идея, реализованная Эйкеном, заключалась в физическом разделении линий передачи команд и данных. В первом компьютере Эйкена «Марк I» для хранения инструкций использовалась перфорированная лента, а для работы с данными — электромеханические регистры. Это позволяло одновременно пересылать и обрабатывать команды и данные, благодаря чему значительно повышалось общее быстродействие компьютера.

Основные виды архитектур

По форматам используемых команд (инструкций) можно выделить:

● CISC-архитектуру, которая относится к процессорам (компьютерам) с полным набором команд (Complete Instruction Set Computer— CISC). Она реализова-на во многих типах микропроцессоров (например Pentium), выполняющих большой набор разноформатных команд с использованием многочисленных способов адресации.

Система команд процессоров с CISC-архитектурой может содержать не-сколько сотен команд разного формата (от 1 до 15 байт), или степени слож-ности, и использовать более 10 различных способов адресации, что позволя-ет программисту реализовать наиболее эффективные алгоритмы решения различных задач.

2. КЛАССИЧЕСКАЯ АРХИТЕКТУРА ЭВМ II ПРИНЦИПЫ ФОН НЕЙМАНА

Основы учения об архитектуре вычислительных машин заложил выдающийся американский математик Джон фон Нейман. Он подключился к созданию первой в мире ламповой ЭВМ ENIAC в 1944 г., когда ее конструкция была уже выбрана. В процессе работы во время многочисленных дискуссий со своими коллегами Г. Голдстайном и А. Берксом фон Нейман высказал идею принципиально новой ЭВМ. В 1946 г. ученые изложили свои принципы построения вычислительных машин в ставшей классической статье «Предварительное рассмотрение логической конструкции электронно-вычислительного устройства». С тех пор прошло полвека, но выдвинутые в ней положения сохраняют актуальность и сегодня.

Ранее все вычислительные машины хранили обрабатываемые числа в десятичном виде. Авторы убедительно продемонстрировали преимущества двоичной системы для технической реализации, удобство и простоту выполнения в ней арифметических и логических операций. В дальнейшем ЭВМ стали обрабатывать и нечисловые виды информации — текстовую, графическую, звуковую и другие, но двоичное кодирование данных по-прежнему составляет информационную основу любого современного компьютера.

Еще одной поистине революционной идеей, значение которой трудно переоценить, является предложенный Нейманом принцип «хранимой программы». Первоначально программа задавалась путем установки перемычек на специальной коммутационной панели. Это было весьма трудоемким занятием: например, для изменения программы машины ENIAC требовалось несколько дней (в то время как собственно расчет не мог продолжаться более нескольких минут — выходили из строя лампы). Нейман первым догадался, что программа может также храниться в виде набора нулей и единиц, причем в той же самой памяти, что и обрабатываемые ею числа. Отсутствие принципиальной разницы между программой и данными дало возможность ЭВМ самой формировать для себя программу в соответствии с результатами вычислений.

Фон Нейман не только выдвинул основополагающие принципы логического устройства ЭВМ, но и предложил ее структуру, которая воспроизводилась в течение первых двух поколений ЭВМ. Основными блоками по Нейману являются устройство управления (УУ) и арифметико-логическое устройство (АЛУ) (обычно объединяемые в центральный процессор), память, внешняя память, устройства ввода и вывода. Схема устройства такой ЭВМ представлена на рисунке 2.1. Сплошные линии со стрелками указывают направление потоков информации, пунктирные-управляющих сигналов от процессора к остальным узлам ЭВМ

Рисунок 2.1 — Архитектура ЭВМ, построенной на принципах Фон Неймана

Устройство управления и арифметико-логическое устройство в современных компьютерах объединены в один блок — процессор, являющийся преобразователем информации, поступающей из памяти и внешних устройств (сюда относятся выборка команд из памяти, кодирование и декодирование, выполнение различных, в том числе и арифметических, операций, согласование работы узлов компьютера). Память (ЗУ) хранит информацию (данные) и программы. Запоминающее устройство у современных компьютеров «многоярусно» и включает оперативное запоминающее устройство (ОЗУ), хранящее ту информацию, с которой компьютер работает непосредственно в данное время и внешние запоминающие устройства (ВЗУ) гораздо большей емкости, чем ОЗУ, но с существенно более медленным доступом. На ОЗУ и ВЗУ классификация устройств памяти не заканчивается — определенные функции выполняют и СОЗУ (сверхоперативное запоминающее устройство), и ПЗУ (постоянное запоминающее устройство), и другие подвиды компьютерной памяти.

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

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

Гарвардская архитектура

Основная особенность гарвардской архитектуры заключается в использовании раздельных адресных пространств для хранения команд и данных, как изображено на рис. 3.

Рисунок 3. Структура МПС с гарвардской архитектурой

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

Понравилась статья? Поделиться с друзьями:
Портал компьютеров
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: