顶层集成的职责
- clock
PLL启动顺序。
所有PLL的工作状态。比如lock和频率信息等。
时钟关键节点的工作状态、频率等。
clockgate等信息。 - reset
要做好异步复位同步释放。
复位关键节点的工作状态、顺序等。 - top_reg
多提供一些软操作手段。 - pinmux
严格依赖文档要求。 - 系统划分
根据signoff划分,比如面积划分、是否可综合(不可综合的模块,一般都需要放在)、 - debug
上述内容,都要有清晰的框图文档,早晚都要明白的,要么主动,要么被逼无奈。
debug手段
bug出现后,常见的顶层集成问题,包括,
- clock是否工作;
可以通过计数器的运转得知。两拍的计数器值不一致,就代表计数器正在工作。 - clock频率是多少?
可以通过寄存器的配置得知。或者直接状态寄存器输出clock频率,之前博客里写过一个clock频率检测的方法,可以实践一下。 - reset是否释放?
可以通过状态寄存器得知。 - reset的释放顺序(是否符合要求)
可以通过状态机获取各种顺序。 - 系统启动顺序(是否符合要求)
可以通过状态机获取各种顺序。 - pinmux的选择?
可以通过寄存器配置得知。不是一个个寄存器查询操作,而是集合成一个个debug针对点,做一些debug状态寄存器。 - 系统没有正常启动,原因?
可以通过test_mode模式,查看系统启动顺序是否正确或者卡在哪个步骤了。
总之,上述debug手段,可以RTL代码实现。并通过寄存器查询或者test_mode方式得知。
为了不必要的问题或者功耗。所有debug方式,都使用寄存器使能,比如debug使能寄存器。
如此,SOC的debug手段就方便多了,所有功能异常的检查,设计的时候都可以考虑进去。任何IP的设计,都可以主动增加debug手段,提高IC可测试性。