跳转至

模块化设计

0.1.1 概述

数字电路的的设计多采用自上而下的设计方法(Top-down),即先定义顶层模块功能,进而分析要构成顶层模块的必要子模块;然后进一步对各个模块进行分解、设计,直到到达无法进一步分解的底层功能块。这样,可以把一个较大的系统细化成多个小系统,从时间、工作量上分配给更多的人员去设计,从而提高了设计速度,缩短了开发周期。

我们回顾 Lab1 ~ Lab7 的历程,发现实际上我们是自底向上地进行学习。

  • Lab1 ~ Lab3 侧重于硬件开发的基础,代码实现也仅仅聚焦在一个模块的若干 always 语句中;
  • Lab4 ~ Lab5 介绍了组合逻辑电路和时序逻辑电路,此时开始以模块为单位进行代码的编写。比较典型的有 Lab3 中的数码管显示 Segment 模块、Lab4 的加法器单元 Adder,以及 Lab5 中的寄存器堆 Register File 和移位寄存器 Shift Reg 等。
  • Lab6 ~ Lab7 介绍了算数电路的一些知识,此时开始多模块协同实现特定的功能。ALU 就是一个很好的例子,这个模块里我们例化了先前编写的加法器、减法器、比较器,以及数码管显示单元。结合数据通路,最终实现了上板的 ALU 功能。

因此,面对复杂的问题,我们也可以按照如下的步骤进行设计:

  1. 需求分析与功能划分

    针对具体的问题,首先应当明确题目的需求,形成一个初步方案。包括:涉及到的交互模式、核心功能需求等。正确地分析了题目需求后,就可以进行逻辑功能的总体设计,包括整个电路的功能、接口和总体结构,考虑功能模块的划分和设计思路,各子模块的接口和时序(包括接口时序和内部信号的时序)等。

  2. 设计数据通路

    设计数据通路是一项很重要的工作。正如我们在 Lab6 的选择性必做题目 2 中给出的那样:

    Image title

    一个直观的数据通路就像是搭积木时的说明书一样,可以最小化我们实现时的工作量。根据上面的数据通路图,我们可以直接发现,电路中包含一个译码器、一个 ALU、四个寄存器以及最终的显示单元。每个元件如何连接已经在图中表明了,而元件内部的实现细节则可以参考 Lab1 ~ Lab7 的教程实现。

    补充:数据通路

    一个完整的数据通路应当包含下面的内容:

    • 模块信息:数据通路中包含了一系列的功能模块。模块的内部实现可以先不着急确定,但其实现的功能以及可能的接口信息要在通路中确定。
    • 存储模式:数据通路中通常包含寄存器和存储单元,用于存储中间结果和最终计算结果。这对于在计算过程中暂存数据、传递数据和在不同阶段保存计算结果非常重要。因此,在设计数据通路时需要明确电路中需要寄存器位置。
    • 数据传输:数据通路规定了在不同元件之间传递数据的方式。这包括输入数据的接收、输出数据的发送以及在各个组件之间传递中间数据。设计时需要考虑各个模块之间的信号依赖与传递关系,进而确定各个模块的端口信息。
    • 控制信号:数据通路通常包含若干控制单元(FSM),以确保在正确的时间执行正确的操作。控制信号用于同步和协调数据通路中的各个组件,确保它们按照正确的顺序和时间执行。控制信号是通路中另一种十分重要的信号,它保证了整个项目的顺利运行。

    数据通路的设计是一个反复的过程。在实现时如果发现某些信号遗漏或冗余,则需要及时修改数据通路以及对应模块的内容。

  3. 进行行为级仿真

    对模型电路进行功能上的仿真验证,查找设计的错误并修正。此时的仿真验证并没有考虑到信号的延迟等一些 timing 因素,只是验证逻辑上的正确性。

  4. 进行逻辑综合

    综合是在标准单元库和特定的设计约束的基础上,将设计的高层次描述(Verilog 建模)转换为门级网表的过程。逻辑综合的目的是产生物理电路门级结构,并在逻辑、时序上进行一定程度的优化,寻求逻辑、面积、功耗的平衡,增强电路的可测试性。此时我们需要进行电路的时序分析,查找可能影响上板工作的关键路径。

  5. 上板测试

    完成上面所有步骤后,就可以通过开发工具将设计的数字电路目标文件下载到 FPGA/CPLD 芯片中,然后在电路板上进行调试、验证。

以上的步骤可能会反复执行多次,直到最终的电路工作符合我们的预期。

0.1.2 数电与 LC-3

Image title

在学习了 Lab1 ~ Lab7 之后,再次看到这张数据通路图,是否有一些似曾相识的感觉?图中红色的部分为中断与异常处理单元,可以暂时无视。黑色的部分则是 LC-3 处理器的核心数据通路。可以看到,LC-3 的数据通路包含了以下的部分:

  • ALU 运算单元;
  • RegFile 寄存器堆;
  • MAR、MDR、Memory 核心存储器;
  • PC、IR 取指单元;
  • Control Logic 控制单元。

我们将在 2.3 LC-3 处理器中进行更为详细的介绍。


最后更新: November 29, 2023

评论

Authors: wintermelon008