Xilinx XAPP482 MicroBlaze Platform Flash/PROM 引导加载器和用户 ...

Xilinx XAPP482 MicroBlaze Platform Flash/PROM 引导加载器和用户 ... Xilinx XAPP482 MicroBlaze Platform Flash/PROM 引导加载器和用户 ...

china.xilinx.com
from china.xilinx.com More from this publisher
17.08.2013 Views

R 固件设计 END_PROM 字。然后,promread 函数返回 0x0。0xFFFFFFFF 的值表示已经达到 PROM 中的 空白数据的起点。 数据读 9F8FAFBF 80180000 00007100 BA101056 -------- -------- -------- -------address memory number data sync mapped of … word starting bytes address 当指示数据读 (promread 输入 = 0x0)时,软件每次读完 PROM 中的 32 位,直到发现与数 据同步字匹配的 32 位字。默认的数据同步字是 0x8F9FAFBF ;不过,可以在 promread.h 头 文件和用来填充 MCS 文件的 Perl 脚本中对其进行修改。在创建 PROM 文件时,可以确认同步 字的唯一性 (有关更多信息,请参见 “用法 / 流程”)。一旦找到数据同步字,则 promread 函数返回数据同步字后面的第一个 32 位字。如果还需要其他数据,就必须根据您的要求修改 promread 函数的数据检索段。 读 PROM 图 5: PROM 的软件段内容示例 为了在软件中读 PROM,MicroBlaze GPIO 翻转 PROM 的 CLK 引脚。 INIT 引脚必须为 “高”,而 CE 引脚为 “低”,才能读 PROMPROM 输出的每个字节都经过位交换。 //clock the PROM to output data XIo_Out32(XPAR_PROMREAD_BASEADDR, OE_HIGH | CCLK_HIGH | CE_LOW); XIo_Out32(XPAR_PROMREAD_BASEADDR, OE_HIGH | CCLK_LOW | CE_LOW); 图6 所示为如何对每个字节进行位交换。加载 PROM 的 Perl 脚本在将位元载入 PROM 之前先 进行位交换,这样才能按正确顺序从 PROM 中读回数据。 PROM Data (hex) Binary Bit-swapped This is how the data reads in the FPGA Hex 08 67 F3 5A ... 0000 1000 0001 0000 0110 0111 1110 0110 图 6: 对 PROM 的输出进行位交换 1111 0011 1100 1111 0101 1010 0101 1010 10 E6 BF 5A x694_08_033104 请注意,如果将 MCS 文件与从 PROM 读入的内容进行比较,则在 MCS 文件中进行位交换。 6 www.xilinx.com/cn XAPP482 (v2.0) 2005 年 6 月 27 日

固件设计 表2 是真值表,说明 PROM 控制输入如何从 PROM 中获得数据输出。 表 2: PROM 控制输入真值表 控制输入 输出 内部地址 OE/RESET CE DATA 固件性能 引导操作的性能缓慢,因为数据是串行读取,而且 PROM 的时钟是在软件中生成。访问 PROM 的时间还受到 PROM 中所存储比特流大小的影响。如果 PROM 中存储的比特流较大, promread 函数就要花较长时间来全程解析 PROM,直到在 PROM 中找到软件或用户数据段。 在以 50 MHz 运行的 Spartan-3 入门套件电路板上进行的实时性能标准测试发现,对于 1 Mb 比特流,全程解析 PROM 大约需要两秒。 promread 函数的软件代码大小是 0x344 (即 836)字节。 双软件工程 高 低 如果地址 TC:不变 有效 低 低 保持复位 高 -Z 高 高 保持复位 高 -Z 低 高 保持复位 高 -Z 在许多嵌入式系统中,设计人员使用链接器脚本将软件代码段分入不同存储器。另一种方法是 根据所执行代码使用多个软件工程。本参考设计使用双软件工程概念划分引导加载器软件和应 用软件。引导加载器软件在 Block RAM 中驻留并从中执行,而应用软件在 SRAM 中驻留并从 中执行。必须将 SRAM 中的程序设置成不会初始化到 Block RAM 中。在引导时,引导加载器 将数据从 PROM 复制到 SRAM。复制完成后,引导加载器跳转到 SRAM 的起始处,开始执行 应用软件。向 SRAM 的跳转是用函数指针完成,如 “修改 C 程序中的程序计数器 (PC)”中所 述。 图7 所示为在 EDK 7.1i 中设置双软件工程。 XAPP482 (v2.0) 2005 年 6 月 27 日 www.xilinx.com/cn 7 R

固件设计<br />

表2 是真值表,说明 <strong>PROM</strong> 控制输入如何从 <strong>PROM</strong> 中获得数据输出。<br />

表 2: <strong>PROM</strong> 控制输入真值表<br />

控制输入<br />

输出<br />

内部地址<br />

OE/RESET CE DATA<br />

固件性能<br />

引导操作的性能缓慢,因为数据是串行读取,而且 <strong>PROM</strong> 的时钟是在软件中生成。访问<br />

<strong>PROM</strong> 的时间还受到 <strong>PROM</strong> 中所存储比特流大小的影响。如果 <strong>PROM</strong> 中存储的比特流较大,<br />

promread 函数就要花较长时间来全程解析 <strong>PROM</strong>,直到在 <strong>PROM</strong> 中找到软件或用户数据段。<br />

在以 50 MHz 运行的 Spartan-3 入门套件电路板上进行的实时性能标准测试发现,对于 1 Mb<br />

比特流,全程解析 <strong>PROM</strong> 大约需要两秒。<br />

promread 函数的软件代码大小是 0x344 (即 836)字节。<br />

双软件工程<br />

高 低 如果地址 TC:不变<br />

有效<br />

低 低 保持复位 高 -Z<br />

高 高 保持复位 高 -Z<br />

低 高 保持复位 高 -Z<br />

在许多嵌入式系统中,设计人员使用链接器脚本将软件代码段分入不同存储器。另一种方法是<br />

根据所执行代码使用多个软件工程。本参考设计使用双软件工程概念划分引导加载器软件和应<br />

用软件。引导加载器软件在 Block RAM 中驻留并从中执行,而应用软件在 SRAM 中驻留并从<br />

中执行。必须将 SRAM 中的程序设置成不会初始化到 Block RAM 中。在引导时,引导加载器<br />

将数据从 <strong>PROM</strong> 复制到 SRAM。复制完成后,引导加载器跳转到 SRAM 的起始处,开始执行<br />

应用软件。向 SRAM 的跳转是用函数指针完成,如 “修改 C 程序中的程序计数器 (PC)”中所<br />

述。<br />

图7 所示为在 EDK 7.1i 中设置双软件工程。<br />

<strong>XAPP482</strong> (v2.0) 2005 年 6 月 27 日 www.xilinx.com/cn 7<br />

R

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!