高电平有效和低电平有效信号在嵌入式系统中如何工作?


8

这是关于微控制器通常的工作方式。

我们所做的编程由编译器转换为1和0,然后将这些机器可理解的代码加载到微控制器中。

微控制器对此有何反应。.我的意思是这些1和0通过DAC转换为相应的逻辑电压(5v和0)吗?如果是这样的话,这片小小的硅片如何决定如何处理5v和0v的各种组合?

我知道每个IC都由逻辑门组成,而这些门由晶体管组成。那么这些晶体管如何响应5v和0v的各种组合?

是什么让他们寻找这些逻辑。.我的意思是说,他们在通电时如何监视这些指令?

因此,肯定要在MCU中加载一个操作系统来告诉它要处理以及如何处理这些指令,不是吗。

接下来是..考虑一个计时器..它只是一个寄存器,在每个时钟周期后加一。我对吗?在那种情况下,用什么语言编写操作系统的所有代码?

我可以继续对不同的任务进行mcu编程,但是今天我很想知道此机器如何理解我的代码。

抱歉,我的问题读起来很冗长..请帮助我学习这些基本知识。

提前致谢..


我想,人都会有自己的职业生涯开始时,这些类型的问题..
VV饶

删除的邮件感觉不好
Rick_2047 2011年

Answers:


6

无需使用DAC。按照惯例,电压用于表示1和0,0.8V以下(AKA“低”)为零,而2.4V以上(AKA“高”)为零。构建对这些代表性电压执行逻辑的电路相对简单。

例如,如果任一输入超过2.4V,则电路可以输出2.4V至5V范围内的某个值来表示“ 1”,否则输入小于0.8V的值,并且您具有“或”门。如果它要求两个输入都代表1才能输出2.4V,则您有一个AND门。当输入为低电平时,逆变器仅输出高电平,反之亦然。您可以只用很少的晶体管构建像这样的简单门,并执行组合布尔逻辑。通过使用位组来表示数字,您甚至可以构建电路以使用组合逻辑添加数字,而无需软件。

一旦使用了门,就可以构造触发器,并从中构造寄存器和计数器。触发器允许您从一个时间点存储1和0,并在以后使用。寄存器和计数器是对代表数字的位组执行功能的电路。寄存器会保存一个数字,直到您将新的数字加载到其中为止。计数器就像一个寄存器,但是有另一个输入,导致存储的数字递增。(也可以减少)。这使您进入了状态机和顺序逻辑的领域,仍然不需要任何软件。

内存系统是一种存储大量位的方法。在组件级别,有些存储器的构建就像大量的触发器一样,但是更常见的是另一种技术(DRAM),虽然不完全是触发器,但可以完成相同的工作。

下一步,您可以构建一个顺序和组合逻辑系统,该系统可以根据存储在存储系统中的位执行操作,包括将新值写回该存储系统。现在您已经达到了处理器的级别,处理器所做的一切,仅仅是执行许多简单任务的硬件。(尽管有微程序核)。此时,可以将您放入内存系统中的特定位组合视为机器语言软件。


现在我已经了解到,晶体管是创建处理器的基础,即使用nand之类的门,我们可以创建触发器,寄存器,计数器,alu,所有这些共同构成计算系统。晶体管输入可以为高电平或低电平(在2.4v时高于2.4v 0r)。我的问题是,如果不使用DAC,将来自编译器的1和0解释为与这些晶体管相对应的逻辑的器件是什么?
VV Rao

@Vicky Rao-我认为让您感到困惑的是,您混淆了抽象层次。不需要将编译器输出转换为晶体管的逻辑电平,因为软件1和0以及硬件1和0只是同一物理现实的不同视图。在一个层次上看起来像数百万个晶体管在改变状态,在另一个层次上看起来像在运行软件的处理器。
JustJeff 2010年


5

考虑一个NPN BJT;晶体管。最早发现的之一。

现在将其连接起来,使得集电极连接到可变逻辑输入,发射极连接到另一个逻辑输入,并串联一个电阻。然后,从发射极到地的电阻。

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

您刚刚构建了一个AND门。仅当两个输入均为高电平时,输出才为高电平。无论如何,它都不是完美的,因为它取决于收集器的输入,并且扇形效果不佳,但是它使您了解了如何使用晶体管来计算函数。

然后,您还可以构造一个NOT门;

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

将其添加到刚刚构建的“与”门的输出上,可以得到一个“与非”门,您可能知道,使用“与非”门,您可以构造任何形式的逻辑。它还具有缓冲信号,增加扇出和链接能力的优势。

真正的处理器很少使用BJT,而是使用CMOS逻辑,但是原理相同。


您可以使用FET代替NPN :)
endolith

这就是为什么我添加以下内容的原因:“真正的处理器很少使用BJT,而使用CMOS逻辑,但是适用相同的原理。” n-JFET和n-MOSFET可能会更好地与诸如阀之类的雌激素形式一起使用。
Thomas O

你也可以使用一个PNP以同样的方式做不如和与NPN
马特·威廉姆森

3

也许您应该查找一些数字系统参考或研究VHDL之类的东西。MCU基本上是用构建块设计的,构建块可以是各种逻辑门和(较小的)构建块。最终,一切都归结为确实由晶体管组成的逻辑门。诸如PIC18F之类的典型简单MCU不能运行操作系统。加载到其中的程序是一堆机器指令,PIC可以连续运行这些指令。所有的处理都是由硬件完成的。

通用处理器通常具有ALU(计算特定指令的结果),并且在其周围有更多块来加载指令,管理堆栈和管理内存。该处理程序本身具有一些寄存器,主要用于加载输入并将结果存储在其中。您可能不会在C或另一种语言中看到很多,而在汇编中会看到很多。

ALU处理带有某些操作代码和输入的指令。例如,典型的指令可能是ADD 12 1,这意味着12 + 1 =13。结果存储在处理器本身的寄存器中。

根据体系结构,ALU例如为8位宽。一个简单的8位加法器可以由绑在一起的8个1位加法器组成(使用块构建更大的块)。使用布尔代数可以轻松地将1位加法器写入逻辑门。仅使用逻辑门手动写下整个8位加法器将是一项疯狂的工作。这就像在编写程序时根本无法使用任何函数或子例程一样。

为了使数字系统正常工作,大多数模块都设计为基于时钟的。每个数字系统都需要一定的时间才能达到其最终状态。这是由于晶体管的开关延迟和影响其他状态的状态。时钟信号是您应该熟悉的,处理器的运行速度也很高。计时器可能是一个非常简单的设备,它具有一个小的加法器模块,并且每获得一个时钟滴答就增加1。


3

这是一个大话题,我无法给出简单的答案,但是...

通过进行一些分而治之,您可以更接近此答案,并且由于另一个答案试图从硬件的角度来解决这个问题,因此我将从高层的SW角度尝试。

如果您用c代码(非常高的抽象水平)编写某些软件,您将不会真正看到正在发生的事情,而不会真正理解您所要求的所有爱好者的东西。

但是无论如何,让我们从那里开始。

一个仅包含变量的简单程序。

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

然后,我们需要获取汇编代码,以便我们了解发生了什么。此步骤可以在您使用的任何平台上完成,但为简单起见,我在PC上使用了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

    subl    $16, %esp

在这一点上,不同的体系结构和x86有所不同,arm,pic有所不同...但是由于我的示例是x86。

在此级别上,当您阅读副本时,大多数操作看起来就像是在移动数字,从某种意义上说,这就是发生的事情。我们有一个预先定义的程序,我们可以通过该程序,该程序存储在某种闪存中,通常是某种电子逻辑,它将捕获一个逻辑电平。

如果您看到某种“ 触发器”每时每刻都 ”,那么您就很接近了,那么我们需要很多。在这里,我们开始查找您的1和0。

然后,为了使某些动作发生,我们添加了一些很酷的逻辑,可以将一个数字转换为另一个数字(CPU本身)。

然后,我们一次只执行一个程序,就知道我们在哪里,我们有一个程序计数器(PC)。然后将数字向前和向后移动,并将它们存储在另一个带有触发器的网格中。

但是,让我们再次回到特定示例中,为了更好地了解CPU,我们可以看一下ALU和这张简化的图片。从中可以看到,当我们将数据移入该逻辑块并使用OP引脚选择某些操作时,我们将在输出端获得新的结果。反过来,我们可以移回内存中的某个位置。

诅咒您的ALU在MCU的CPU部分比这要复杂得多,但它的工作原理相同。

在这一点上,我们可以看到一些逻辑电路在一侧完成“工作”,而另一侧则进行一些存储。存储分为两部分,一部分用于程序,另一部分用于数据。但是我们实际上是如何“移动”的,这些必须以某种方式连接起来...

这是我们将这些部分与一些总线相连的地方。

总线只是将不同部分连接在一起的一些电线,然后控制逻辑告诉内存哪些数据要发送到该总线上,以及CPU的哪个部分应侦听已发送的数据。这是通过一些并行控制线完成的,这些控制线将启用/禁用不同的部件。

...


因此,如果您选择mcu并剖析了一个很小的程序,并且只要您不了解正在发生的事情,就可以对其进行剖析,直到有了一个可以用来创建“ mcu”的漂亮小难题为止。

并且不要忘了阅读您的MCU的数据表,并查看它是由什么样的零件制成的,例如什么样的内存,ALU,总线等。

希望这有所帮助 ???

祝好运


您通过拆分说明进行解释的策略非常容易..谢谢..
VV Rao 2010年

2

除非您自己设计CPU,否则您实际上并不需要了解这些知识,但这全都归结为以硬件实现的大型状态机

这种问题的最大问题是答案是巨大的并且占用了数年的大学课程,因此,您在此处获得的任何答案都只能从头开始。

如果您真的想知道CPU的内容,请查看以下内容的vhdl / verilog源代码: http //opencores.org/projects

仅仅学习vhdl和verilog本身就是一项艰巨的任务,因此您需要长期阅读:)


“巨大的舞台机器”-听起来像百老汇的作品。
OIO 2010年

幸运的是,这些人给了答案并不让我刮伤表面,正如你所说,而是使它晶莹剔透..反正,感谢朋友..
VV饶

2

我的意思是说这些1和0是否通过DAC转换为相应的逻辑电压(5v和0)?

不,不是DAC。1和0从未真正存在。它们只是我们用来简化编程的数学抽象。实际的数字电压可能是5 V,3.3 V或1 V,具体取决于硬件。最终,计算机只是数字逻辑。存储器将1和0作为数字逻辑存储,数字逻辑电路将它们从存储器传输到处理器,处理器是可以对二进制数进行加,减或比较的数字逻辑电路等。

这小块二氧化硅如何

SILIC 一个是玻璃,硅和氧的混合物。芯片是由纯SILIC制成,在特定的地方加入使所有晶体管的杂质。

我了解每个IC都是由逻辑门组成的

数字IC由逻辑门而非模拟IC制成。

那么这些晶体管如何响应5v和0v的各种组合?

阅读最简单的示例CMOS反相器


您已经说明没有使用DAC,1和0只是我们用来简化编程的数学抽象。您是否可以参考“编译器”添加更多细节?编译器将高级语言转换为1和0。您说过,这1和0作为数字逻辑存储在内存中,数字逻辑电路将它们从内存传输到处理器。.执行此功能的设备的名称是什么?同样,处理器的输入将为5v或0v。那么,哪个设备将内存中的1和0(实际上是来自编译器)转换为5v和0v?
VV Rao

1
@Vicky:没有从“ 1”到5 V的转换。“ 1”和“ 0”只是我们在对二进制数字进行数学运算时给高电压和低电压的标签。对于未对二进制数字进行运算的简单低级逻辑,通常将它们称为“ H”(高)和“ L”(低)。
endlith 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.