|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
设计时应注意:
% O- `: m9 N5 S: |7 R: H1. 设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过,后才能进行下一步的工作。1 Y5 b/ F5 @# |, D, E' n6 F& n4 I
2. 端口信号排列要统一,一个信号只占一行,最好按从哪个模块来到哪个模块去的关系排列。, z4 z i/ @. U7 \7 H8 e6 \
3. 信号的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。8 K# H6 A' N4 V+ Z
4. 一个模块尽量只用一个时钟,这里的一个模块是指一个module。在多时钟域的设计中涉及到跨时钟的设计最好有专门一个模块做时钟的隔离。这样做可以让综合器综合出更优的结果。# y s* p+ g t3 F- |9 t+ b
5. 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只到做例化,禁止出现任何胶连逻辑(glue logic),哪怕仅仅对某个信号取反; _( \$ i& y9 }3 R/ a8 q
6. 在 FPGA 的设计上禁止用纯组合逻辑产生latch。
6 ^* W- Y$ N) K6 h* i7. 一般来说,进入 FPGA 的信号必须先同步,所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的。
7 k1 B$ t c& T- H8. 除非是低功耗设计,不然不要用门控时钟:这会增加设计的不稳定性,在要
7 w: ]9 s6 o# ^& m3 I, T; J用到门控时钟的地方,也要将门控时钟用时钟的下降沿打一拍再输出与时钟) V/ A' j" ^$ J
相与。4 W- h6 n$ g2 A1 A
分析系统划分模块' V g8 ~1 j/ }) |' ~
各 子模块设计: L/ m1 J" S% i4 a3 o
HDL 实现3 k0 B* T6 g& b/ G7 L9 { H* c) h! U
各子模块前仿真0 s: {% C" }" O8 e7 j
各模块联合组成系统
: T n! k0 J5 y) U功能仿真
; b/ D+ Z- B2 J4 r4 n9 z逻辑综合
) `, P" u, x7 ]. `$ J布局布线
3 k4 B, S Y8 l6 o3 Z0 o3 D! G后仿真0 f& x1 Y$ I8 d1 ?$ M4 t
系统硬件测试" x, p: ]' G! j K f
静态时序分析8 O% Z5 n! I; ~& Z$ u6 A8 H% l
! |9 ^* n: c3 w
9. 尽量不要用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的; e3 t" y- v, J6 k
方式,否则这钟时钟满天飞的方式对设计的可靠性极为不利,也大大增加了
+ C8 }6 i: k, V3 o- W6 Q) Y静态时序分析的复杂性。
) f) a$ O( {$ N" }% `& G2 U- Y7 n10. 内部模块不能出现 inout 端口,如果需要,把inout 端口拆分为一组input 和' V V+ M4 @4 ^0 k) _
output。
7 E& A, m$ L) f5 [: J/ r9 Z11. 数据都十六进制或者二进制表示,且要标上位数。这样做综合器综合出的结
; i/ E4 }3 A' c9 B6 n& ?果较好。 N4 z- q1 x7 _" t4 ?, t
12. 对齐一律用空格键,避免用TAB 键。这样可以保证程序在其它机子上显示的' R: z0 E% K. L0 r5 h( j% {3 B0 n# I
格式一致,便于阅读。
( y; o, [6 \4 W9 y4 U |
|