Full picture
10

系统配置

10.1 概述

Zeal Video Board (ZVB) 提供了一些寄存器,用于配置当前映射的 I/O 控制器以及物理视频存储器。

这些配置区域在 I/O 总线上的基地址为 0x90,它永远不会被映射出去,因此随时可用。

10.2 固件版本

Zeal Video Board 由 FPGA 驱动,其固件存储在 SPI NOR Flash 上。这使得用户可以通过 JTAG 连接器,甚至通过连接到主端口的 CPU(借助 SPI 控制器)随时更新固件。更多信息请参阅恢复模式章节。

固件版本遵循标准的 vx.y.z 语义化版本格式,其中 x 表示主版本号,y 表示次版本号,z 表示修订号。

系统配置区域的前三个寄存器依次表示当前固件版本:修订号次版本号主版本号

截至目前,共发布过两个固件版本:第一个测试版 v0.1.0 和第一个正式版 v1.0.0

10.3 暂存寄存器

该配置区域包含四个通用暂存寄存器:SCRATCH0SCRATCH1SCRATCH2SCRATCH3,主机可以自由使用它们。由于该区域始终被映射,它可以简化上下文切换或用户模式与内核模式之间的转换,无需修改主存储器或当前栈。

10.4 I/O 控制器

为了减少 Zeal Video Board 在 I/O 总线上需要分配的寄存器数量,I/O 控制器(如 SPIDMA 等)采用分片(banked)方式。寄存器 MAPPED_DEVICE 可用于读取当前映射的控制器或写入新的控制器进行映射。可用控制器如下:

控制器 索引
文本控制器 0
SPI 1
CRC32 2
音频控制器 3
DMA 4
保留 5
定时器实验性 6

10.5 物理地址

22 位地址总线

如前所述,Zeal Video Board 嵌入了自己的视频 RAM,因此不需要使用主机的 RAM。尽管其大小约为 80KB,但由于子系统的对齐约束(例如 64KB 的字形图存储器),它需要 128KB 的地址空间。

Zeal Video Board 期望其所连接的计算机的物理地址空间为 4MB,因此主连接器上具有 22 位地址线。此外,它没有提供显式的片选信号线,目的是减少所需的外部逻辑。实际上,22 位地址线的高 5 位将与 PHYS_ADDR 寄存器进行比较。

因此,通过配置该寄存器,我们可以配置 ZVB 将响应的物理地址。

例如,该寄存器复位后的默认值为 8,这意味着 ZVB 将映射到从物理地址 8 << (22 - 5) = 8 << 17 = 0x1000000x11ffff(128KB)的范围。

任意宽度地址总线

大多数计算机,尤其是 8 位系统,并不提供完整的 22 位地址总线。为了兼容各种主机,高 5 位地址线 A21A17 被解释为片选信号。

这些信号在内部与 PHYS_ADDR 寄存器进行比较。默认情况下,该寄存器在复位后被设置为 8。因此,我们可以将这些片选信号解释为:

  • A21:低电平有效
  • A20:高电平有效
  • A19:低电平有效
  • A18:低电平有效
  • A17:低电平有效
示例:带分片存储器的 8 位计算机

考虑一个基于 Z80 CPU 的 8 位系统,其 64KB 地址空间组织如下:

  • 0x0000-0x7FFF:内部 ROM
  • 0x8000-0xFFFF:分片存储器

它还包括一个地址为 0x42 的 I/O 端口,用于控制一个 8 位的分片寄存器,最多支持 256 个存储器分片。

由于分片存储器空间为 32KB,我们需要为 ZVB 分配 128KB / 32KB = 4 个分片。我们将分片 0 到 3 分配给 ZVB,其余分片可以分配给 RAM 或其他组件。

要将 ZVB 与此计算机连接,我们需要如下连接方式:

接口示意图
与 8 位计算机的接口连接

当 Z80 CPU 访问 ROM(0x0000-0x7FFF)时,地址线 A15 为 0,因此 ZVB 不会被选中也不会响应。当访问分片存储器时,仅当分片的引脚 7、6、5、4、3 和 2 均为低电平时,ZVB 才会响应。换句话说,仅当当前分片值为 0、1、2 或 3 时,它才会被选中。

10.6 寄存器总览

Name Description Base-relative address Access
REV 固件修订码(补丁版本) 0x00 RO
MINOR 固件修订码(次版本号) 0x01 RO
MAJOR 固件修订码(主版本号) 0x02 RO
SCRATCH0 暂存寄存器0 0x08 RW
SCRATCH1 暂存寄存器1 0x09 RW
SCRATCH2 暂存寄存器2 0x0A RW
SCRATCH3 暂存寄存器3 0x0B RW
MAPPED_DEVICE 设备映射指示器(映射的I/O控制器) 0x0E RW
PHYS_ADDR FPGA高物理地址位 0x0F RW

10.7 寄存器

REV (0x00)
固件修订码(补丁版本)
PATCH
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
PATCH
固件版本的最低有效部分 (RO)
MINOR (0x01)
固件修订码(次版本号)
MINOR
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
MINOR
固件版本的中间部分 (RO)
MAJOR (0x02)
固件修订码(主版本号)
MAJOR
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 1
Reset
MAJOR
固件版本的最高有效部分 (RO)
SCRATCH0 (0x08)
暂存寄存器0
SCRATCH
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
SCRATCH
通用暂存空间(字节0) (RW)
SCRATCH1 (0x09)
暂存寄存器1
SCRATCH
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
SCRATCH
通用暂存空间(字节1) (RW)
SCRATCH2 (0x0A)
暂存寄存器2
SCRATCH
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
SCRATCH
通用暂存空间(字节2) (RW)
SCRATCH3 (0x0B)
暂存寄存器3
SCRATCH
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
SCRATCH
通用暂存空间(字节3) (RW)
MAPPED_DEVICE (0x0E)
设备映射指示器(映射的I/O控制器)
(reserved)
DEVICE_IDX
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0
Reset
DEVICE_IDX
映射的I/O控制器索引 (RW)
PHYS_ADDR (0x0F)
FPGA高物理地址位
(reserved)
ADDR_BITS
7 6 5 4 3 2 1 0
0 0 0 0 1 0 0 0
Reset
ADDR_BITS
物理基地址位(由总线或内存映射逻辑使用) (RW)
EN | 中文Beta