找回密码
 注册
关于网站域名变更的通知
查看: 200|回复: 1
打印 上一主题 下一主题

 转——FPGA 研发设计相关 规范(企业中很实用)

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-3-26 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    转——FPGA 研发设计相关 规范(企业中很实用)

    * E. M. |3 Z5 M/ J6 o* p& Q      今天我们聊一聊FPGA做开发的时候,有哪些设计规范,从文档到工程建立等,聊一聊也许你会学到很多东西,少走很多弯路哦!8 v% a6 y: W* f3 y5 P! u, y
          在团队项目开发中,为了使开发的高效性、一致性、正确性,团队应当要有一个规范的设计流程。按照规范来完成项目的设计开发工作,归类清晰明了的工程文件夹级别;项目应拥有良好风格和完整的文档,如设计思路与调试记录及器件选型等;代码书写高效,即统一的书写规范,文件头包含的信息完整,无论自己还是团队他人阅读便一目了然。8 v" v! a2 E& x; c9 ~

    * [1 H# [( J& T& S/ I* B$ e一、文档命名:: A) w3 S5 p; _5 C2 H3 G
          清晰的文档命名能够让我们思路非常的清晰,所以FPGA工程文件夹的目录要求层次鲜明,归类清晰。一个工程必须要有一个严整的框架结构,用来存放相关的文档、设计,不仅方便自己查看,也提高了项目的团队工作效率。
    9 n- ?: H% ^$ C6 W& m2 ~5 T     下面我们来举例说明:
    ( s2 K1 E% g* h8 a    一级文件夹为工程名<project>/ V$ f8 p7 `% F6 `+ y4 N. Z8 Z7 W
        二级文件夹多个:
    & f" i9 n% k3 ?' U; L. T* J  Q$ K       用以存放源文件<src>. F8 k8 e6 _! t* R
           用以存放Testbench文件<sim>
    8 L$ _7 |5 Z% e  X       用来存放设计思路相关类的文件<doc>
    2 S( w8 A% K9 u: q2 t% Z. D       用来存放IP 核的文件<core>0 P% ~6 Q; q* R) Z7 `6 V
           等等…
    2 {# Y% U& n$ m6 v) [5 W; ]
    2 |, H, i( q' C
    # P; R6 Y( Z$ Z1 [2 h二、设计文档化:
    ' N% X$ R1 K, I- R4 p$ T       将自己对设计的思路和调试记录在文档中,有利于以后对模块功能的添加和维护,并且在项目联调时方便项目组其他人员读代码。也方便不同厂家的FPGA之间移植,以及FPGA到ASIC的移植。如下图就是设计文档化的举例说明,文档介绍清晰,功能分析明确,有利于以后对模块功能的添加和维护。2 ^, J9 d% e) S; i4 H
            % r: G$ K7 p* E) y+ R* ^9 J
           设计思路:按照项目的要求,自顶向下的分成若干模块,分别编写功能。顶层尽量只做行为描述,逻辑描述在底层编写。模块的编写要有硬件电路思维方式,每一个模块的设计都应考虑是否存在该硬件电路,尽量采用同步设计。
    - d" ~  b* ~: R7 Z: W* u8 j
    . W* W, V3 `5 x4 j: H三、编程风格:/ y$ x% p. |8 [
        每个module应存在于单独的源文件中,源文件名应与其所包含的模块名相同。每个设计都应该有一个完善的文件头,包含公司名称、设计者、设计时间、文件名、所属项目、模块名称及功能、修改记录及版本信息等内容。代码中的标识符采用传统C语言的命名方法,在单词之间用下划线分开,采用有意义,能反应对象特征、作用和性质的单词命名标识符,以此来增强程序的可读性。为避免标识符过于冗长,较长的单词可以适当的缩写。9 N' K& h/ C  B
    0 _/ L$ r) l# b7 |% B, @! e
    四、代码规范:
    0 V8 c; q5 X3 V! \  K, x        低电平有效的信号,后缀名要用“_n”,比如低电平有效的复位信号“rst_n”
    4 i8 m' i' v: r5 J1 L! X        模块名和信号名统一小写
    " Z& N* I* c) D5 @9 L* ~        变量名要小写,如wire、reg、input、output等定义的! l  o0 ]8 T  Z+ K% Y
            变量命名应按照变量的功能用英文简洁表示出来“xxx_xxx_xxx”,避免过长
    , P( c& v3 u4 ]7 H4 U% q        采用大写字母定义常量参数,参数名小于20个字母,如parameter TIME=20
    4 ^9 k8 R9 h3 `- N        时钟信号应前缀“clk”,复位信号应前缀“rst”
    * g0 Q/ o4 U+ |# ~9 `  I+ l        对于顶层模块的输出信号尽量被寄存$ x' E  B- I7 r
            三态逻辑避免在子模块使用,可以在顶层模块使用7 d8 y0 S6 a/ {: k2 ?  O! C
            到其它模块的接口信号按:输入、(双向)、输出的顺序定义端口
    * h6 y& R' m5 T: ^5 e3 I! a         一个模块至少要有一个输入、输出,避免书写空模块
    . F" {7 d9 ]9 L2 W% c1 V        时钟事件的表达式用“posedge”或“negedge”的形式; y: x! r: s" j/ P- Y8 i7 D
            If语句嵌套不能太多
    # `, U/ W# R; Q) g! s6 E' x) ~5 Q        建议不要使用include语句9 l2 I0 q5 Y% @9 x) F* [+ D( Y
            建议每个模块添加timescale. L: S  ~/ j* N
            代码中给出必要的注释  n: Q% f0 E4 L  n
            每个文件有个一头文件# W: E) ]) ?; ^* J$ E
            每个文件只包含一个模块
    ) r3 m4 \" w5 Z4 X        模块名和文件名保持一致
    , X, s6 O0 r, {' O/ a# d% ~        异步复位,用if(xxx==1’b1)  或  if(xxx==1’b0)
    " g1 h" v+ s. z( |4 k) Y( K+ n        同步时序逻辑的always block中有且只有一个时钟信号,并且在同一个沿动作
    2 b) l7 L1 [; u, F2 r        采用同步设计,避免使用异步逻辑: i2 h3 R3 `- v( c
            一般不要将时钟信号作为数据信号的输入' W0 n3 A' Q8 D1 P) y& m+ C4 b" h
            不要在时钟路径上添加任何buffer
    . B; B. a  e, w4 A! U        在顶层模块中,时钟信号必须可见, I. y/ T) w7 p5 a- n
            不要采用向量定义的方式定义一组时钟信号% N( I7 `- K4 U5 [9 A. E. U% T
            不要在模块内部生成时钟信号,使用pll产生
    1 u; T* L, K  n; n' p& c        尽量不使用任务; A$ L: n9 K9 ?1 h1 {# D
            不使用事件变量' G+ z( Y( V+ M: k" A* l3 p6 g
            不使用系统函数3 P  C9 a& [! E7 J$ ?
            不使用disable语句
    9 X& z$ e/ c4 j. S9 n        尽量不使用forever、repeat、while等循环语句  k" v7 i% y( E$ M# f
            不使用不可综合的运算符
    - }. J  d- z9 f1 t- ]. Y        在一个always语句中有且只能有一个事件列表4 Q/ @0 J& Z6 a1 D7 n! X( A
            移位变量必须是一个常数
    7 _5 T$ S/ H0 j        时序逻辑语块中统一使用非阻塞型赋值
      y* a. e! h- y( ]- `        组合逻辑语块中使用阻塞型赋值
      S' G# L# c" l8 M" @- T5 v

    该用户从未签到

    2#
    发表于 2019-3-26 16:55 | 只看该作者
    好文章啊 收藏了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-29 00:58 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表