1.分割准则
自项向下等层次化设计方法,首先需要对系统功能进行分割。分割过程中,若分割过粗,则不易用逻辑语言表达;分割过细,则带来不必要的重复和繁琐。掌握分割程度,可以遵循以下的原则:分割后最底层的逻辑块应适合用逻辑语言进行表达;相似的功能应该设计成共享的基本模块;接口信号尽可能少;同层次的模块之间,在资源和I/O分配上,尽可能平衡,以便结构匀称;模快的划分和设计,尽可能做到通用性好,易于移植
2.系统设计的可测性
在系统设计中,应该同时考虑功能检查和性能的测试,即系统可测性。一些有经验的设计者会自觉地在设计系统的同时设计观测电路,指示系统内部的工作状态。建立观测电路应遵循以下原则:具有系统的关键点信号,如时钟、同步信号和状态等信号;具有代表性的节点和线路上的信号等。
可测性的发展
边界扫描测试(BST)架构提供了在PCB上狭小的空间中高效的测试器件的能力。BST架构使得器件在正常工作的情况下,可以不使用物理探针测试管脚连接情况和捕捉功能性的数据。器件当中的边界扫描单元迫使信号传输到管脚中,或者从管脚和内核逻辑中捕获信号。测试数据串行移位进入边界扫描单元。捕捉得到的数据被串行移出器件,并且在外部和期望结果相比较。目前,在复杂数字系统中采用边界扫描测试技术得到一定的应用。
3.系统设计的重用性
1)设计者应该尽可能采用同步电路进行设计,系统中应该有时钟和复位信号。异步电路会造成较大延时和逻辑竞争,容易引起系统的不稳定,而同步电路则是按照统一的时钟工作,稳定性好。因此在设计时尽可能采用同步电路进行设计,避免使用异步电路和锁存器。在必须使用异步电路时,应采取措施来避免竞争和增加稳定性。随着FPGA/CPLD设计规模的逐渐增加,片上时钟分布的质量变得非常的重要,要充分有效的利用FPGA/CPLD专用的时钟分布资源和使用方法,产生高扇出低畸变的时钟信号。
2)FPGA/CPLD的结构可以提供一定数量的片上存储器块。在FPGA/CPLD设计当中,存储器通常使用FPGA/CPLD芯片厂商支持的模块或者是模块发生器,在高速的SRAM(如350MHz)、零总线等待时间、大容量特点的存储器在SOC设计中推荐采用片外存储器。可以通过如下3种方式实现分布式RAM或者是块状RAM:RTL描述;图形例化;器件指定的存储器编译器。
3)复杂、系统级芯片需要各种标准的I/O接口。当需要设计重用模块时,选择支持所需要I/O电压标准的SOC芯片。任何包含不同I/O标准的重用模块应该充分使用FPGA结构提供的I/O标准的优点,并应该对所需要的电压标准做详细的说明。
4)编码是数字系统设计者应该给予足够重视的一项工作。在进行编码时,应该尽量用二进制编码方式,以提高编码效率和资源的利用率,减少对器件插入线、输出线、乘积项、寄存器等资源的消耗。对内部状态编码,应该尽量采用最短的编码形式。除此之外,对编码的结构也需要进行优化并对无效编码进行相应的处理。对于实际情况中不可能出现、但在编码中存在的无效编码,如果不会造成危害性结果,可以按任意态处理;对于会带来危害的非法编码,应采取措施防止或引导到有效编码状态上来。
4.最优化设计
由于可编程器件的逻辑资源、连接资源和I/O资源有限,器件的速度和性能也是有限的,用器件设计系统的过程相当于求最优解的过程。最优化目标有多种,设计中常见的最优化目标有:器件资源利用率最高;系统工作速度最快,即延时最小;布线最容易,即可实现性最好。具体设计中,各个最优化目标间可能会产生冲突,这时应满足设计的主要要求。
5.可靠性设计
可靠性是指“一个系统在一定的环境下,在所给定的时间内能按照预定的要求完成一定功能的概率”。这个定义表明,如果系统中存在故障,但是只要它不影响正常功能的执行和完成,系统仍然是“可靠”的。同时,“可靠性”是相对于一定的工作条件和工作时间范围的。因此提高系统的可靠性,首先要提高元器件的质量。但是,提高元器件质量的方法同样提高了系统成本。提高系统可靠性的另外一些办法有:故障容错技术、编码检错技术、自检测试技术和软件容错技术等。