Страница 1 из 2

AVR. Как 16-разр. инструкции передаются по 8-битной шине?

Добавлено: Сб апр 24, 2010 18:53:10
ktb
При чтении даташита на ATMega16 я не смог разобраться каким образом по 8-битной шине данных Data Bus 8-bit передаются 16-разрядные инструкции Most AVR instructions have a single 16-bit word format. На картинке нарисовано, что шина восьмиразрядная, а инструкции 16-разрядные, да еще и выполняются часто за один такт. :shock:
Я чего-то не понял или где-то шины шире чем 8 бит?
Еще не догоняю как по той же 8-разрядной шине передаются данные от 10-разрядного АЦП. Помогите разобраться, плиз. :)

Изображение

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Сб апр 24, 2010 19:11:14
GP1
А с чего ты взял что инструкции передаются по шине данных :wink:
смотри внимательнее на левую часть рисунка.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Сб апр 24, 2010 19:13:20
uldemir
Я в AVR не спец, но я не вижу чёрточки со стрелочкой от памяти программ к "восьмибитной шине данных". Не забывайте, это не фон Неймановская архитектура, а Гарвардская.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Сб апр 24, 2010 22:07:29
YS
А АЦП имеет два регистра данных, ADCH и ADCL. Восьмибитных.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Сб апр 24, 2010 22:50:41
ktb
GP1 писал(а):А с чего ты взял что инструкции передаются по шине данных
смотри внимательнее на левую часть рисунка.
Смотрю... Только там разрядность шины не указана... )))
Надо понимать, что 16-разрядная инструкция из Instruction Register загружается в два 8-битных регистра General Purpose Registers?
В даташите написано:
"In a typical ALU operation, two operands are output from the Register File, the operation is executed,
and the result is stored back in the Register File – in one clock cycle."

uldemir писал(а):Я в AVR не спец, но я не вижу чёрточки со стрелочкой от памяти программ к "восьмибитной шине данных".
Я вообще в электронике не спец, пытаюсь вот разобраться в микроконтроллерах. :)
uldemir писал(а):Не забывайте, это не фон Неймановская архитектура, а Гарвардская.
Только на схемках Гарвардской архитектуры, которую обычно рисуют, блоков гораздо меньше, чем здесь. :)
Смотрю на схему из даташита и не пойму алгоритм работы всех этих блоков.
YS писал(а):А АЦП имеет два регистра данных, ADCH и ADCL. Восьмибитных.
То есть значения из этих регистров за 2 такта пересылаются?

А вот еще такой вопрос...
Что это за стрелка Control Lines, которая выходит из блока Instruction Decoder?
Куда она идет-то потом и какое у нее назначение? Про нее ничего не написано.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Сб апр 24, 2010 23:46:25
YS
Только на схемках Гарвардской архитектуры, которую обычно рисуют, блоков гораздо меньше, чем здесь.
Количество блоков не имеет никакой связи с типом архитектуры, оно зависит от особенностей конкретного МК. В данном случае архитектура определяет только принцип адресации. В микроконтроллерах AVR команды не передаются по шине данных.
Надо понимать, что 16-разрядная инструкция из Instruction Register загружается в два 8-битных регистра General Purpose Registers?
Нет. Это другое адресное пространство, ибо гарвардская архитектура.
Из Instruction Register инструкция поступает в Instruction Decoder, который управляет АЛУ. Шина команд не имеет никакого отношения к шине данных.
Что это за стрелка Control Lines, которая выходит из блока Instruction Decoder?
Это линии управления логикой. Instruction Decoder - это и есть блок, обрабатывающий шестнадцатибитные инструкции и управляющий АЛУ. Как не трудно видеть, он соединен с Flash памятью отдельной шестнадцатибитной шиной, не пересекающейся с шиной данных. Из блок-схемы видно, что команды и данные на АЛУ поступают по разным шинам с разной разрядностью.
То есть значения из этих регистров за 2 такта пересылаются?
Как захотим, так и перешлем. Мы должны сами явно их читать.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 01:25:39
ktb
YS писал(а):Instruction Decoder - это и есть блок, обрабатывающий шестнадцатибитные инструкции и управляющий АЛУ. Как не трудно видеть, он соединен с Flash памятью отдельной шестнадцатибитной шиной, не пересекающейся с шиной данных. Из блок-схемы видно, что команды и данные на АЛУ поступают по разным шинам с разной разрядностью.
А тогда что означают стрелки, идущие из Instruction Register к General Purpose Register и Data SRAM?
Команда даже еще не поступила в Instruction Decoder и не обработана АЛУ, а уже какие-то данные загружаются в регистры и ОЗУ.
Это что-то типа DMA получается что ли? :)

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 09:09:09
GP1
Это означает, что в регистре инструкций формируются управляющие сигналы для взаимодействия между различными устройствами в МК в соответствии с кодом команды.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 11:04:40
ktb
GP1 писал(а):Это означает, что в регистре инструкций формируются управляющие сигналы для взаимодействия между различными устройствами в МК в соответствии с кодом команды.
Если в регистре инструкций формируются управляющие сигналы в соответствии с кодом команды, то чем же тогда занимается декодер команд?

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 11:25:16
Arlleex
Он их декодирует. При этом на выходе дешифратора команд сигналы идут на АЛУ, Память, например, т.е. активирует те устройства, которые необходимы для выполнения текущей команды.
Да, и еще, не всегда в регистре команд (Program counter) содеджится 2 байт. Может и 1.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 11:35:54
Arlleex
ktb писал(а):При чтении даташита на ATMega16 я не смог разобраться каким образом по 8-битной шине данных Data Bus 8-bit передаются 16-разрядные инструкции Most AVR instructions have a single 16-bit word format. На картинке нарисовано, что шина восьмиразрядная, а инструкции 16-разрядные, да еще и выполняются часто за один такт. :shock:
Я чего-то не понял или где-то шины шире чем 8 бит?
Еще не догоняю как по той же 8-разрядной шине передаются данные от 10-разрядного АЦП. Помогите разобраться, плиз.
А почему нельзя слать байт за байтом? Например, переслал младший байт, потом переслал старший байт? (так оно и происходит во многоих МК и МП).

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 12:14:27
ktb
Stalker46 писал(а):Он их декодирует. При этом на выходе дешифратора команд сигналы идут на АЛУ, Память, например, т.е. активирует те устройства, которые необходимы для выполнения текущей команды.
Это понятно, только стрелки к памяти идут до блока дешифратора команд. :) Получается, что вроде как прям из регистра инструкций что-то шлется в регистровый файл и ОЗУ.
Stalker46 писал(а):Да, и еще, не всегда в регистре команд (Program counter) содеджится 2 байт. Может и 1.
Program Counter - это счетчик команд, вроде. А регистр команд - это Instruction Register. О чем именно речь? :)
Stalker46 писал(а):А почему нельзя слать байт за байтом? Например, переслал младший байт, потом переслал старший байт? (так оно и происходит во многоих МК и МП).
Изначально меня смутило то, что многие команды выполняются за 1 такт.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 13:08:01
YS
Люди, вы меня конечно извините, но вы читать умеете? По английски? Что написано на тех линиях, которые "стрелки, идущие из Instruction Register к General Purpose Register и Data SRAM?". Ладно, прочитаю сам - Direct Adressing! Если кто не в курсе, команда содержит адреса операндов. Вот они то и передаются дешифратору адреса памяти и регистров. Еще раз: это Гарвардская архитетура, команды по шине данных ПРИНЦИПИАЛЬНО НЕ ПЕРЕДАЮТСЯ (В рабочем режиме. А то вдруг кто-то знает про бутлоадер... :wink: )!!!

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 13:16:46
Arlleex
ktb писал(а):
Stalker46 писал(а):Он их декодирует. При этом на выходе дешифратора команд сигналы идут на АЛУ, Память, например, т.е. активирует те устройства, которые необходимы для выполнения текущей команды.
Это понятно, только стрелки к памяти идут до блока дешифратора команд. :) Получается, что вроде как прям из регистра инструкций что-то шлется в регистровый файл и ОЗУ.
Stalker46 писал(а):Да, и еще, не всегда в регистре команд (Program counter) содеджится 2 байт. Может и 1.
Program Counter - это счетчик команд, вроде. А регистр команд - это Instruction Register. О чем именно речь? :)
Да, точно, ошибся.
А те стрелочки, это шина!
А стрелочка после дешифратора управляет АЛУ, памятью, и т.д. что там необходимо для выполнения текущей команды.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 13:51:27
ktb
YS писал(а):Если кто не в курсе, команда содержит адреса операндов. Вот они то и передаются дешифратору адреса памяти и регистров.
Попробую по-другому мысль сформулировать...
Понятно, что адреса операндов в команде содержатся, но как АЛУ понимает по какому адресу данные взять, если команда из регистра команд еще не поступила в дешифратор команд? Если бы стрелки к памяти и регистрам шли после дешифратора команд, то я бы это понял...
Почитал AVR Instruction Set.
Насколько я понимаю, поля адресов операндов в команде не находятся в фиксированной позиции. Вариантов много... Пока команда не дешифрована в Instruction Decoder, неизвестно с какого по какой бит считывать адреса.
Как тогда Instruction Register знает по какому адресу обращаться с помощью Direct Addressing, если команда еще не дошла до Instruction Decoder?

Упомянутый дешифратор адреса находится в регистре команд или дешифраторе команд?

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 14:00:40
Arlleex
Команда сразу декодируется декодером! Сначала счетчик команд инкрементировал свое состояние. Понятно?
Затем, ЦПУ выдает сигнал считывания на вход ПЗУ. Понятно?
По шине данных, 8 разрядные данные направляются из ПЗУ в регистр команд, а оттуда сразу же в декодер команд. Понятно?
декодер команд декодирует ту двоичную комбинацию, которая и представлена КОП. На выходе дешифратора команд генерируется сигнал активации каких либо-устройств. Понятно?
например:
Пуста дв. комбинация 00000001 поступила из ПЗУ. Она сразу засылается в регистр команд. Пусть эта дв. комбинация декодируется как "сложить содержимое регистров А и В. Дешифратор команд активирует регистр А и В, а также АЛУ на режим сложения.
Данные по шине данных передаются в АЛУ из регистров А и В. Содержимые регистров складываются.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 14:01:55
Arlleex
ktb писал(а):
YS писал(а):Если кто не в курсе, команда содержит адреса операндов. Вот они то и передаются дешифратору адреса памяти и регистров.
Попробую по-другому мысль сформулировать...
Понятно, что адреса операндов в команде содержатся, но как АЛУ понимает по какому адресу данные взять, если команда из регистра команд еще не поступила в дешифратор команд? Если бы стрелки к памяти и регистрам шли после дешифратора команд, то я бы это понял...
Почитал AVR Instruction Set.
Насколько я понимаю, поля адресов операндов в команде не находятся в фиксированной позиции. Вариантов много... Пока команда не дешифрована в Instruction Decoder, неизвестно с какого по какой бит считывать адреса.
Как тогда Instruction Register знает по какому адресу обращаться с помощью Direct Addressing, если команда еще не дошла до Instruction Decoder?


Упомянутый дешифратор адреса находится в регистре команд или дешифраторе команд?
дешифратор адреса - это вообще отдельное устройство. И к дешифратору команд и регистру команд никакого отношения не имеет.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 14:07:41
Arlleex
YS писал(а):Если кто не в курсе, команда содержит адреса операндов.
Почему это? Это при какой адресации? Только при косвенной регистровой и прямой.

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 14:24:14
ktb
Stalker46 писал(а):Пуста дв. комбинация 00000001 поступила из ПЗУ. Она сразу засылается в регистр команд. Пусть эта дв. комбинация декодируется как "сложить содержимое регистров А и В. Дешифратор команд активирует регистр А и В, а также АЛУ на режим сложения.
Данные по шине данных передаются в АЛУ из регистров А и В. Содержимые регистров складываются.
:)) Все это мне понятно. )))
Просто, глядя на схему, я подумал, что сначала из инструкции каким-то непонятным образом выделяются поля адресов операндов, а уж потом инструкция декодируется в дешифраторе команд.
Stalker46 писал(а):дешифратор адреса - это вообще отдельное устройство. И к дешифратору команд и регистру команд никакого отношения не имеет.
А где оно находится на схеме, в каком блоке?
Stalker46 писал(а):Почему это? Это при какой адресации? Только при косвенной регистровой и прямой.
У нас-то вроде прямая.

Кстати, вот пример команды ADD из AVR Instruction Set http://atmel.com/dyn/resources/prod_doc ... oc0856.pdf
Изображение
ddddd - номер регистра Rd;
rrrrr - номер регистра Rr;
Написано: 0000 11rd dddd rrrr
Может кто объяснит почему старший бит номера регистра Rr оказался перед старшим битом номера Rd?
Почему не 0000 11dd dddr rrrr?

Re: AVR. Как 16-разр. инструкции передаются по 8-битной шине

Добавлено: Вс апр 25, 2010 15:21:07
Arlleex
ktb писал(а): А где оно находится на схеме, в каком блоке?
на схеме он не показан
У нас-то вроде прямая
Да, поэтому не при всех типах адресации команда - это всего лишь КОП и адрес операнда. Например, при неявной адресации никаких адресов не используется.
Из последнего ничего не понял.