在大规模逻辑设计中,逻辑模块可能达到数十甚至上百个。每个模块都需要通过寄存器输入配置和读取状态。若将每个模块的寄存器都平铺式设计,将每个模块的寄存器直接与逻辑模块相连,会带来以下几个问题:
第一,连线复杂,资源占用高:各逻辑模块与寄存器模块之间的连线会变得非常复杂,导致片上布线资源的大量占用,增加了设计的复杂性和物理实现的难度。
第二,地址管理困难:各模块寄存器的地址分配不易区分,寄存器说明文件会变得庞大且难以维护,查找特定寄存器的信息变得低效。
第三,扩展性差:当其中一个模块需要增加寄存器时,地址分配和文件修改的工作量会显著增加,影响设计的可扩展性和维护效率。
这种设计方式不仅增加了开发和调试的复杂性,还可能影响系统的性能和可维护性。因此,需要采用更优化的寄存器管理方案来解决这些问题。
针对上述设计带来的问题,我们提出一种寄存器分级设计方案。通过将寄存器按功能或模块进行层次化划分,可以有效解决连线复杂、地址管理困难以及扩展性差等问题。这种分级设计不仅优化了片上资源的利用率,还提高了系统的可维护性和可扩展性。
首先,设计一种寄存器总线,可支持针对特定地址的读写操作,应用于各模块之间。第二,对大规模逻辑设计进行层次化划分,从顶到底分为top、block、module三级,数个布局相邻模块、功能相近模块划分在一个block内,数个block汇聚为逻辑设计顶层。寄存器模块通过寄存器总线连接各block,在顶层设置寄存器总线仲裁器,同时只允许一个寄存器进行读写访问。为各block分配地址段。同理,对于同一个block下的数个module,block寄存器通过寄存器总线和各module寄存器相连,在block内设置总线仲裁器,同时只允许一个寄存器进行读写访问。为各module在block地址段内分配子地址段。层次结构如图一所示。
图一 寄存器层级划分
同时,在设计寄存器文件时,可以根据module和block进行如图二至图五所示的分页设计,使得大规模逻辑设计的地址更加清晰。
图二
图三 top寄存器设计实例
图四 block级寄存器设计
图五 module寄存器设计
按照这样的寄存器层级进行设计,可以实现多人协作设计和大规模逻辑设计的加速。