Browse Source

shenghui Update

Update desciprion of note 'CPU 刚启动时为什么能直接访问 BIOS 的代码?'
pull/25/head
c-blessed 3 years ago
committed by GitHub
parent
commit
37eb1f8c9c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      FAQ/第一回FAQ.md

17
FAQ/第一回FAQ.md

@ -18,4 +18,19 @@
![image](https://user-images.githubusercontent.com/25787738/141405471-44a45263-df37-418a-bc47-3bf1f3729f64.png)
### CPU 刚启动时为什么能直接访问 BIOS 的代码?
@解答人:ShengHui
可以分两部分来解释:1.CPU的硬件通路可以直接访问BIOS的地址。2.CPU复位后的硬件地址在BIOS所在的地址。
首先解释1。在设计CPU时会把CPU可以访问的地址进行划分,包括片内的ram,寄存器等,和片外的ROM,DDR,其他外设等。当CPU访问这些被提前划分好的地址时,会有不同的手段。比如对于 `UINT32 a=*(volatile UINT32)0x1000;` 来说,如果`0x1000`地址被分配至片内ram,则CPU会通过片内总线读取这段地址,如果被分配至片外,则会通过相应的总线进行访问。BIOS通常指代存在BIOS芯片中的程序,而BIOS芯片实际上就是一个ROM存储器,大部分是FLASH,BIOS程序由厂商固化至其中。CPU的硬件通路可直接通过外设总线(通常是SPI)访问其中内容。
再来解释2。CPU在上电复位后一定是从一个确定的地址启动,该地址(在PC机的结构下)被分配至BIOS所在的地址,并由内部硬件逻辑控制。其他类型的CPU可能会被分配至其他片内/片外存储器上,如51在0地址启动,MIPS大多在`0xBF400000`,不同的CPU复位启动地址可能会不同。 如果想了解更多可继续向下看,本人也不专业,仅做原理说明。
咨询了一下大佬,硬件复位逻辑EDA的实现大致如下:
```
always@(negedge rstn or posedeg clk)
if(~rst)
begin
reg<=0;
end
else
begin
reg<=wire;
end
```
简单解释下就是,当芯片复位(假设高有效)之前,寄存器会被赋一个初值,且如果RST没有被放开则所有的逻辑都会被强制拉住,不会有任何动作。RST有效之后,硬件逻辑才会开始工作,对于CPU来讲就从指令地址寄存器(已被初始化)中取到第一个指令的地址,如果从这个地址拿到了有效指令,那么就开始一条一条的跑下去了。因而可以看到,硬件复位地址完全由设计人员决定,不必太过于纠结为何如此,仅需参考芯片手册即可。

Loading…
Cancel
Save