逻辑胶合
8.1 概览
Zeal 8 位计算机有多个可以与 CPU 交互的组件。它们可以是与内存相关的(如 RAM 或 ROM),也可以是 I/O 相关的(如键盘或 Z80 PIO)。
从软件的角度来看,区分如何与它们通信相当容易:它们具有不同的地址。分配给每个组件的地址取决于硬件解码和分发它们的方式。
8.2 硬件描述
在 8 位计算机上,CPU 需要交互的所有组件都共享至少两条总线:地址总线(单向)和数据总线(双向)。如果我们将诸如 $\overline{RD}$、$\overline{WR}$、$\overline{IOREQ}$、$\overline{MREQ}$ 等信号视为一个互补的"信号"总线,那么每个组件也必须共享这个总线。
因此,很明显组件不能同时通信,在处理器的每次内存或 I/O 请求中,最多只有一个组件可以通过在 DATA 总线上读取或写入一个字节来响应。这就是为什么我们需要一个负责此事的实体:逻辑胶合。
逻辑胶合的作用是将给定的地址或地址范围分配给单个组件,通过这种方式,它将组件连接(或胶合)到 CPU。
8.3 硬件实现
在 Zeal 8 位计算机上,逻辑胶合使用可编程逻辑器件(PLD)实现。它们非常方便,因为它们让我们能够创建通用且灵活的逻辑功能,否则需要多个非门、与门、或门逻辑芯片。由于所有逻辑都集中在一个芯片内,这不仅减少了 PCB 上所需的空间,而且使传播延迟(即内部逻辑生成和输出预编程信号所需的时间)比使用多个逻辑芯片快得多。
Zeal 8 位计算机主板上使用的 PLD 是 ATF16V8B-15PU,其传播延迟为 15ns。在 PCB 上标记为 U6。 有关其电气和物理特性的更多信息,请查看其数据手册。
该芯片经过预编程,具有以下引脚排列:
输出信号如下:
- $\overline{PIO\_ENABLE}$:允许 Z80 PIO 在 DATA 总线上读取或写入一个字节。在 I/O 请求期间有效,当物理地址的低 8 位在 [
0xD0,0xDF] 之间时。 - $\overline{KB\_ENABLE}$:允许键盘缓冲器在 DATA 总线上输出一个字节。在 I/O 请求期间有效,当物理地址的低 8 位在 [
0xE0,0xEF] 之间时。 - $\overline{MMU\_WRITE}$:允许 MMU 从 DATA 总线读取字节。用于修改 MMU 页面的值。在 I/O 请求期间有效,当物理地址的低 8 位在 [
0xF0,0xF3] 之间且 CPU $\overline{WR}$ 信号有效时。在复位期间也有效。 - $\overline{MMU\_READ}$:允许 MMU 在 DATA 总线上输出一个字节。用于读取 MMU 页面的值。在 I/O 请求期间有效,当物理地址的低 8 位在 [
0xF0,0xF3] 之间且 CPU $\overline{RD}$ 信号有效时。 - $\overline{ROM\_ENABLE}$:允许 ROM 将字节写入 DATA 总线。在内存请求期间有效,当物理地址在 [
0x00000,0x7FFFF] 之间时。 - $\overline{RAM\_ENABLE}$:允许 RAM 在 DATA 总线上读取或写入一个字节。在内存请求期间有效,当物理地址在 [
0x80000,0xFFFFF] 之间时。
输入信号需要多个输入:
- ${ADDR\_21}$ 到 ${ADDR\_19}$:来自 MMU 的信号,表示当前(内存)请求的物理地址的最高 3 位。当 $\overline{IORQ}$ 信号有效时忽略。
- ${ADDR\_7}$ 到 ${ADDR\_4}$:来自 CPU 的信号,表示当前 I/O 请求的物理地址的最高位。当 $\overline{MREQ}$ 信号有效时忽略。
- $\overline{MREQ}$:来自 CPU 的信号,当 CPU 正在执行内存请求时有效。
- $\overline{IORQ}$:来自 CPU 的信号,当 CPU 正在执行 I/O 请求时有效。
- $\overline{WR}$:来自 CPU 的信号,当 CPU 正在执行写入时有效。
- $\overline{RD}$:来自 CPU 的信号,当 CPU 正在执行读取时有效。
- $\overline{RESET}$:来自电源电路的信号,当正在执行复位时有效。用于在复位时初始化 MMU。
8.4 硬件依赖与时序
从上面描述的输入信号可以看出,PLD 输入信号依赖于两个实体:MMU 和 CPU。这意味着要计算逻辑胶合的总传播延迟,我们首先需要确定输入信号本身到达 PLD 所需的延迟。
实际上,$d_0$ 值通常为 16ns,而 $d_1$ 通常为 15ns。
关于延迟和时序的所有详细信息在官方数据手册中有详细说明。
8.5 维护
可以用另一个 AT16V8B PLD 甚至 GAL16V8b 替换板上的 PLD。但是,请确保时序与原始的一致:15ns 传播延迟。
当然,您还需要在将其安装到主板上之前对 PLD 进行编程,您可以在 https://zeal8bit.com/bin/ZealLogicglue.jed 找到要烧录的 JED 文件。