#GUID-84E4984C-B845-405E-92BD-B6F335FA2F04 展示了接收逻辑块的逻辑。
图 4-9 CLB RX 逻辑块逻辑
以下 CLB 逻辑块资源用于实施 CCSI 总线接收 (RX) 功能:
- COUNTER0 用于检测接收帧的结束。
- COUNTER1 用于在 SCLKX2 下降沿接收输入数据。它在串行器模式下运行。
- COUNTER2 用于对 SCLKX2 下降沿进行计数。它在正常计数器模式下运行。
- HLC 用于将数据从 COUNTER1 移动到 CLB PUSH FIFO。当接收到四个 16 位字以及检测到 CHECK 位错误和帧结束条件时,它还会向 CPU 生成中断。
- FSM0 用于定义和循环遍历两种状态:IDLE 和 ACTIVE。
- 当接收到四个 16 位字时,FSM1 用于计数。当接收计数达到四时,向 HLC 生成一个事件。
- 仅当处于 ACTIVE 状态时,FSM2 才用于生成帧结束中断。
- LUT0 用于检测相应的“0”位,该位用于检测 START 位和 END 字节。通过清除 ENABLE_RX 输入,可以强制将 LUT0 输出置为低电平,从而有效地禁用接收操作。
- LUT1 用于验证每个 16 位字上的 CHECK 位。如果 CHECK 位与预期状态不匹配,LUT1 输出会触发 HLC 中断。
- 当禁用接收操作(即 ENABLE_RX = 0)时,LUT2 用于使 COUNTER2 保持在复位状态。
FSM0 定义了 RX 逻辑块的两种运行状态。#GUID-7B6E728C-9904-4313-B56B-A0F7C91CE59C 和表 4-4 显示了 FSM0 状态图和真值表。
图 4-10 RX 逻辑块的 FSM0 状态图
表 4-4 FSM0 真值表
| S0 |
E1 (LUT0_OUT) |
E0 (C0_MATCH1) |
S0 次态 |
输出 (FSM0_OUTPUT) |
| 0 |
0 |
0 |
0 |
0 |
| 0 |
0 |
1 |
0 |
0 |
| 0 |
1 |
0 |
1 |
0 |
| 0 |
1 |
1 |
1 |
0 |
| 1 |
0 |
0 |
1 |
1 |
| 1 |
0 |
1 |
0 |
1 |
| 1 |
1 |
0 |
1 |
1 |
| 1 |
1 |
1 |
0 |
1 |
完整的逻辑方程为:
- S0 = !S1&!S0&E1&!E0 | !S1&!S0&E1&E0 | !S1&S0&!E1&!E0 | !S1&S0&E1&!E0
- OUTPUT = !S1&S0&!E1&!E0 | !S1&S0&!E1&E0 | !S1&S0&E1&!E0 | !S1&S0&E1&E0
FSM1 用于在接收到四个 16 位字后触发 HLC 事件。#GUID-361D0B5E-EEB4-4698-ADBD-3ED2521BBF14 和表 4-5 显示了 FSM1 状态图和真值表。
图 4-11 RX 逻辑块的 FSM1 状态图
表 4-5 FSM1 真值表
| S1 |
S0 |
E1 (FSM0_OUT) |
E0 (C2_MATCH2) |
S1 次态 |
S0 次态 |
输出 (HLC_INT) |
| 0 |
0 |
0 |
0 |
0 |
0 |
0 |
| 0 |
0 |
0 |
1 |
0 |
0 |
0 |
| 0 |
0 |
1 |
0 |
0 |
0 |
0 |
| 0 |
0 |
1 |
1 |
0 |
1 |
0 |
| 0 |
1 |
0 |
0 |
0 |
0 |
0 |
| 0 |
1 |
0 |
1 |
0 |
0 |
0 |
| 0 |
1 |
1 |
0 |
0 |
1 |
0 |
| 0 |
1 |
1 |
1 |
1 |
0 |
0 |
| 1 |
0 |
0 |
0 |
0 |
0 |
0 |
| 1 |
0 |
0 |
1 |
0 |
0 |
0 |
| 1 |
0 |
1 |
0 |
1 |
0 |
0 |
| 1 |
0 |
1 |
1 |
1 |
1 |
0 |
| 1 |
1 |
0 |
0 |
0 |
0 |
0 |
| 1 |
1 |
0 |
1 |
0 |
0 |
0 |
| 1 |
1 |
1 |
0 |
1 |
1 |
0 |
| 1 |
1 |
1 |
1 |
0 |
0 |
1 |
逻辑方程是:
- S1 = !S1&S0&E1&E0 | S1&!S0&E1&!E0 | S1&!S0&E1&E0 | S1&S0&E1&!E0
- S0 = !S1&!S0&E1&E0 | !S1&S0&E1&!E0 | S1&!S0&E1&E0 | S1&S0&E1&!E0
- OUTPUT = S1&S0&E1&E0