1、模块RTL代码编写前都必须准备设计说明书。一般来说,设计说明书主要描述一下内容:
1.1、模块功能简要介绍
1.2、模块接口信号以及系统框图
1.3、模块寄存器地址及功能描述
1.4、时钟信号连接(Multicycle Path/False Path/Negedge Clock/Generated Clock)
1.5、复位信号连接(Gated Reset/Soft Reset)
1.6、模块挂载总线--ARM公司的AMBA和AXI总线,IBM公司的Processor Local Bus
2、模块划分
2.1、确保只有顶层模块中才包含IO引脚。
2.2、顶层模块还应该包含边界扫描单元等测试逻辑。
2.3、IP选择及设计
2.3.1、确定那些模块是基于标准单元库进行设计,那些模块需要购买IP。
2.3.2、模块接口协议要尽可能简单。一个常用技巧就是在设计传输接口建立申请应答机制。
2.3.3、分钟分布,关键路径布线,电源和地址布线,IP模块支持的测试结构保持与系统芯片一致。
3、可测性
芯片可测性是指在芯片的生产测试中发现生产缺陷的能力。对于数字电路,通常使用扫描链提高可测试性。一般来说,综合工具中会有对RTL可测试的检查工具。但RTL设计人员应当尽量避免在RTL编写中引入影响可测试的问题:
3.1、复位信号在测试过程中应当设置为无效,否则测试过程可能被复位信号打乱。
3.2、门控时钟在测试中应当有效,只有时钟有效才可以进行扫描连的操作。
3.3、三态的驱动在测试中必要有可知的输出
3.4、边界扫描的逻辑应当放在一个单独的设计模块中,边界扫描的生产主要在综合中进行。
3.5、RAM测试。目前常用的方法是BIST(Bulit-in-self-test)
4、芯片速度
5、布线
调用Synopsys DesignWare优化设计
DesignWare是由Synopsys公司提供的IP库,DesignWare在综合时的调用是自动的,也可以是手工的。所谓的自动就是在写RTL代码时完全不考虑架构,由综合工具根据约束自动选择。这种情况通常对于电路规模小,综合时加一些特使约束是有效的。手工的方法是指在RTL代码编写时将选用的DesignWare单元“隐含”进去,这样子综合时就能够选用指定的DesignWare 了。具体有Operator Inference和Component Instantiation(模块实例化)两种。以超前进位加法器(carry-lock-ahead adder,cla)为例,举例如下:
DesignWare的使用需要Synopsys公司许可。以Foundation IP为例,首先需要在综合库(synthetic_library)变量中添加DesignWare库“synthetic_library=dw_foudation.sldb”,在启动Synopsys的综合工具DC后执行“set synthetic_library dw_foundation.sldb”。这样在综合上述RTL代码后的网表中,module my_adde将是用超前进位加法器这种架构实现
更多推荐
学习SOC--RTL代码编写指南
发布评论