Как сигналы Active High и Active Low работают во встроенных системах?


8

Это о том, как работают микроконтроллеры в целом ..

Программирование, которое мы делаем, преобразуется компилятором в 1 и 0, и этот машинно понятный код затем загружается в микроконтроллер.

Как микроконтроллер реагирует на это? Я имею в виду, что эти 1 и 0 преобразуются в соответствующее логическое напряжение (5 В и 0) с помощью ЦАП? Если это так, как этот маленький кусочек кремния решает, что делать с этими различными комбинациями 5v и 0v?

Я понимаю, что каждая микросхема состоит из логических вентилей, и эти вентили состоят из транзисторов. Итак, как эти транзисторы реагируют на различные комбинации 5 В и 0 В?

Что заставляет их искать эту логику? Я имею в виду, как они следят за этими инструкциями, когда они включены?

Так что наверняка должна быть операционная система, загруженная в mcu, которая говорит ему обрабатывать, и как обрабатывать эти инструкции, не так ли? ..

Следующее, что нужно ... рассмотрим таймер ... это просто регистр, который увеличивается на единицу после каждого тактового цикла. Разве ОС не дает команду mcu увеличивать значение после каждого тактового цикла? Я прав? В таком случае, на каком языке написан весь код операционной системы?

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

Извините, что мой вопрос долго читать .. Пожалуйста, помогите мне изучить эти основные вещи ..

Заранее спасибо..


Я предполагаю, что у людей будут подобные вопросы в начале их карьеры ..
В.В. Рао

удаленное сообщение стало плохо
Rick_2047

Ответы:


6

Нет необходимости использовать ЦАП. Напряжения используются для представления единиц и нулей в соответствии с соглашением, что все, что ниже 0,8 В (AKA «низкий»), равно нулю, а все, что выше 2,4 В (AKA «высокий»), равно единице. Относительно просто построить схемы, которые выполняют логику с этими типичными напряжениями.

Например, схема может выводить что-то в диапазоне от 2,4 В до 5 В, чтобы представлять «1», если какой-либо вход превышает 2,4 В или что-то меньше 0,8 В в противном случае, и у вас есть логический элемент ИЛИ. Если для вывода 2,4 В требуются оба входа, представляющих 1, у вас есть логический элемент AND. Инвертор просто выдает высокий уровень, когда на входе низкий уровень, и наоборот. Вы можете создать простые вентили, подобные этим, используя всего несколько транзисторов, и выполнять комбинаторную логическую логику. Используя группы битов для представления чисел, вы даже можете создавать схемы для сложения чисел с помощью комбинаторной логики, программное обеспечение не требуется.

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

Системы памяти - это способ хранить огромное количество битов. На уровне компонентов некоторая память создается как огромная коллекция триггеров, но чаще существует другая технология (DRAM), которая, хотя и не является триггером, делает то же самое.

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


Теперь я понял, что Транзисторы - это основа, на которой создаются процессоры, то есть с воротами, подобными nand, мы можем создавать триггеры, регистры, счетчики, alu и все это вместе, чтобы сделать вычислительную систему. Вход транзисторов может быть высоким или низким (более 2,4 В 0r и менее 0,8 В). Мой вопрос: каково устройство, которое интерпретирует 1 и 0 из компилятора как соответствующую логику для этих транзисторов, если не используется ЦАП?
В.В. Рао

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

6

Получите книгу Чарльза Петцольда «Код: скрытый язык компьютерного оборудования и программного обеспечения» . Это удивительно, легко читается и ответит на многие из этих вопросов.

Если вы не можете позволить себе книгу Петцольда, посмотрите «Как работают компьютеры» Роджера Янга . Он охватывает большую часть того же материала, а HTML и PDF-версии бесплатны.


Также хорошей книгой были бы «Элементы вычислительных систем».
Rick_2047

5

Рассмотрим NPN BJT; транзистор. Один из первых обнаружил.

Теперь вы подключаете его так, чтобы коллектор был подключен к переменному логическому входу, а эмиттер был подключен к другому логическому входу с последовательно включенным резистором. Затем резистор от эмиттера к земле.

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

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

Затем вы также можете построить НЕ ворота;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

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

Реальные процессоры редко используют BJT, но вместо этого применяется логика CMOS, но применяются те же принципы.


Вы можете использовать FETs вместо NPNs :)
эндолиты

Вот почему я добавил это: «Реальные процессоры редко используют BJT, но вместо этого применяется логика CMOS, но применяются те же принципы». n-JFET и n-MOSFET, вероятно, будут работать так же хорошо, как и более эстетичные формы, такие как клапаны.
Томас О

Вы также можете использовать PNP, чтобы НЕ делать то же самое, что и AND с NPN
Мэтт Уильямсон,

3

Может быть, вам стоит поискать ссылки на цифровые системы или посмотреть что-то вроде VHDL. MCU в основном разработан со строительными блоками, которые могут быть различными логическими элементами и (меньшими) строительными блоками. В конечном итоге все сводится к логическим элементам, которые действительно состоят из транзисторов. Типичный простой MCU, такой как PIC18F или что-то еще, не работает под управлением операционной системы. Программа, которую вы загружаете в нее, представляет собой набор машинных инструкций, которые PIC выполняет непрерывно. Все процессы выполняются аппаратно.

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

ALU обрабатывает инструкции с определенными кодами операций и входами. Например, типичная инструкция может быть ADD 12 1, что означает 12 + 1 = 13. Результат сохраняется в регистре на самом обработчике.

В зависимости от архитектуры, ALU, например, имеет ширину 8 бит. Простой 8-битный сумматор может быть сделан из 8x 1-битных сумматоров, соединенных вместе (используя блоки для создания большего блока). 1-битный сумматор может быть легко записан в логические элементы с помощью логической алгебры. Запись целого 8-битного сумматора вручную с использованием только логических элементов была бы безумной работой. Это похоже на написание программы без возможности использовать какую-либо функцию или подпрограмму вообще.

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


3

Это большая тема, и я не могу дать простой ответ, но ...

Вы можете немного приблизиться к этому ответу, выполнив несколько разделений и побед, и, поскольку другой ответ пытается атаковать эту проблему с точки зрения hw, я попробую с точки зрения SW высокого уровня.

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

Но давайте все равно начнем.

Простая программа, которая просто включает переменную.

int main(void)
{
    int i=0;
    while(1) {
        i++;
    }
}

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

gcc -O0 -S main.c -o main.lst

Тогда мы получим что-то вроде этого:

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $0, -4(%ebp)
.L2:
    addl    $1, -4(%ebp)
    jmp .L2
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

Затем вы пытаетесь понять каждую строку кода и то, что он делает.

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

    subl    $16, %esp

На данный момент все по-разному на разных архитектурах и x86, arm, pic вроде бы разные ... Но так как мой пример был x86.

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

Если вы видите какой-то « триггер » для каждого бита, то вы как бы близки, и тогда нам нужно много таких. Здесь мы начинаем находить ваши единицы и нули.

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

И затем мы следуем программе по одному шагу за раз, и чтобы узнать, где мы находимся, у нас есть счетчик программ (ПК). И перемещайте числа назад и на четвертое и сохраняйте их в другой памяти, которая также является своего рода решеткой с триггерами.

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

И проклясть ваш ALU в вашей части CPU вашего MCU намного сложнее, чем этот, но он работает по тому же базовому принципу.

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

И здесь мы соединяем эти части с каким-то автобусом.

Шина - это просто несколько проводов, которые соединяют различные части вместе, и затем логика управления сообщает памяти, какие данные отправлять на эту шину, и какую часть ЦП следует прослушивать, чтобы эти данные были отправлены. И это делается с помощью нескольких параллельных линий управления, которые будут включать / отключать различные части.

...


Поэтому, если вы выбираете mcu по своему выбору и анализируете очень маленькую программу, и пока вы не понимаете, что происходит, вы анализируете ее еще больше, пока у вас не получится симпатичная маленькая головоломка, которую можно использовать для создания «mcu».

И не забудьте прочитать таблицу данных для вашего mcu и посмотреть, с какими частями он был сделан, например, с какой памятью, alu, bus и т. Д. И т. Д.

Надеюсь, это поможет немного ???

Удачи


Ваша стратегия объяснить это, разделив инструкции, сделала это действительно легко .. спасибо ..
В.В. Рао

2

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

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

Если вы действительно хотите узнать, что входит в процессор, взгляните на исходный код vhdl / verilog по адресу: http://opencores.org/projects

Само изучение vhdl и verilog само по себе является большой задачей, так что вы будете долго читать :)


«огромный сценический автомат» - это звучит как бродвейская постановка.
OIO

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

2

Я имею в виду, что эти 1 и 0 преобразуются в соответствующее логическое напряжение (5 В и 0) с помощью ЦАП?

Нет, не ЦАП. 1 и 0 действительно никогда не существуют. Это просто математическая абстракция, которую мы используем для облегчения программирования. Фактическое цифровое напряжение может составлять 5 В, или 3,3 В, или 1 В, в зависимости от аппаратного обеспечения. В конечном итоге компьютер - это просто цифровая логика. Память хранит 1 и 0 как цифровую логику, цифровая логическая схема передает их из памяти в процессор, процессор представляет собой цифровую логическую схему, которая может складывать, вычитать или сравнивать двоичные числа и т. Д.

как этот маленький кусочек кремнезема

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

Я понимаю, что каждая микросхема состоит из логических элементов

Цифровые ИС сделаны из логических элементов, а не аналоговых.

Так как же эти транзисторы реагируют на различные комбинации 5 В и 0 В?

Читайте на простейшем примере, инвертор CMOS .


Вы объяснили, что ЦАП не используется, 1 и 0 - просто математическая абстракция, которую мы используем для облегчения программирования. Можете ли вы добавить немного больше информации по этому поводу со ссылкой на «Компилятор»? компилятор преобразует язык высокого уровня в 1 и 0. Вы сказали, что эти 1 и 0 хранятся в памяти как цифровая логика, цифровая логическая схема передает их из памяти в процессор. Как называется устройство, выполняющее эту функцию? ? И снова, вход процессора будет 5В или 0В. Так какое устройство преобразует 1 и 0 из памяти (фактически из компилятора) в 5v и 0v?
В.В. Рао

1
@ Vicky: Преобразование из «1» в 5 В не происходит. «1» и «0» - это просто метки, которые мы присваиваем высоким и низким напряжениям при выполнении математических операций с двоичными числами. Для простой низкоуровневой логики, которая не работает с двоичными числами, чаще называют их «H» (высокий) и «L» (низкий).
эндолит
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.