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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    转——FPGA 研发设计相关 规范(企业中很实用)
    5 \  k( w; L9 q& R+ F
          今天我们聊一聊FPGA做开发的时候,有哪些设计规范,从文档到工程建立等,聊一聊也许你会学到很多东西,少走很多弯路哦!
    3 S1 Y& E2 f' U8 N  |5 z      在团队项目开发中,为了使开发的高效性、一致性、正确性,团队应当要有一个规范的设计流程。按照规范来完成项目的设计开发工作,归类清晰明了的工程文件夹级别;项目应拥有良好风格和完整的文档,如设计思路与调试记录及器件选型等;代码书写高效,即统一的书写规范,文件头包含的信息完整,无论自己还是团队他人阅读便一目了然。( ]7 y& R: f( T1 _7 T2 X7 A

    8 G( K0 [( L# |5 h" r一、文档命名:
    - I+ v2 R; [" K5 x5 \* D8 S      清晰的文档命名能够让我们思路非常的清晰,所以FPGA工程文件夹的目录要求层次鲜明,归类清晰。一个工程必须要有一个严整的框架结构,用来存放相关的文档、设计,不仅方便自己查看,也提高了项目的团队工作效率。
    ; T: V* X2 O3 q. Q6 F& s/ s     下面我们来举例说明: 8 v5 t9 I( v: ^+ L
        一级文件夹为工程名<project>) b9 |! {# @( ]; g( ^, G6 C
        二级文件夹多个:
    % t* o2 V* j9 u! c7 Z& W       用以存放源文件<src>
    ! q9 T& x! E! I& {, v5 `       用以存放Testbench文件<sim>
    8 N& x) B- }# c3 [/ t- |8 f' X1 ^8 f       用来存放设计思路相关类的文件<doc>4 ^" z! Z* S0 m' ~% x
           用来存放IP 核的文件<core>% k1 v1 |' D: j- a0 A7 L0 n
           等等…! D$ e# h) t  u1 J& J$ }

    5 H+ F5 O0 L! b: W& \; K4 k0 u5 u8 G* N5 f% N6 ]# ~5 N, u% [
    二、设计文档化:
    8 e# C6 ^3 ?- {" T# Y       将自己对设计的思路和调试记录在文档中,有利于以后对模块功能的添加和维护,并且在项目联调时方便项目组其他人员读代码。也方便不同厂家的FPGA之间移植,以及FPGA到ASIC的移植。如下图就是设计文档化的举例说明,文档介绍清晰,功能分析明确,有利于以后对模块功能的添加和维护。
    2 R8 F7 q3 _; u8 ~/ L2 |        ; w! ]: o  {3 Q  o- @7 a
           设计思路:按照项目的要求,自顶向下的分成若干模块,分别编写功能。顶层尽量只做行为描述,逻辑描述在底层编写。模块的编写要有硬件电路思维方式,每一个模块的设计都应考虑是否存在该硬件电路,尽量采用同步设计。
      q- S* u% Y/ y" K4 s
    & I* Z7 Y) {" Q: o三、编程风格:
    * U* @1 {& e  w: e    每个module应存在于单独的源文件中,源文件名应与其所包含的模块名相同。每个设计都应该有一个完善的文件头,包含公司名称、设计者、设计时间、文件名、所属项目、模块名称及功能、修改记录及版本信息等内容。代码中的标识符采用传统C语言的命名方法,在单词之间用下划线分开,采用有意义,能反应对象特征、作用和性质的单词命名标识符,以此来增强程序的可读性。为避免标识符过于冗长,较长的单词可以适当的缩写。
    9 r9 b5 ]( R4 ]4 Z3 v4 j6 y, O& h( Q8 }  j* A' P
    四、代码规范:
    / Z5 x+ w8 i) Q7 B! D3 r  w        低电平有效的信号,后缀名要用“_n”,比如低电平有效的复位信号“rst_n”# z% U0 J# u9 U# |" H; c. B
            模块名和信号名统一小写
    4 e; f+ @+ p; `% k* K        变量名要小写,如wire、reg、input、output等定义的. b% `, B1 \! B6 s
            变量命名应按照变量的功能用英文简洁表示出来“xxx_xxx_xxx”,避免过长
    ( C/ `+ t# e1 M& `6 `        采用大写字母定义常量参数,参数名小于20个字母,如parameter TIME=20
    $ l( t; e5 a/ j0 ^/ ?) \        时钟信号应前缀“clk”,复位信号应前缀“rst”0 _+ U0 @% M- S( k. l& a) p
            对于顶层模块的输出信号尽量被寄存4 ^3 L2 c/ k; `
            三态逻辑避免在子模块使用,可以在顶层模块使用' Q" w1 z6 L& O& f: `3 P
            到其它模块的接口信号按:输入、(双向)、输出的顺序定义端口
    # p: C9 H0 C  w2 @         一个模块至少要有一个输入、输出,避免书写空模块
    / J3 T: l/ q+ F        时钟事件的表达式用“posedge”或“negedge”的形式
    : }' F8 n6 L! l. }4 F* J! e! o0 S  c        If语句嵌套不能太多8 G/ @0 ]% _2 s: T% n0 t  d
            建议不要使用include语句( J  P$ L: ?+ Y
            建议每个模块添加timescale3 r/ |, h5 U: G/ L) e. o0 m
            代码中给出必要的注释
    $ z) T  n- F& `7 C        每个文件有个一头文件
    - ~$ B3 Y  O* S; r7 d) B/ [: {) U        每个文件只包含一个模块6 r7 u3 b9 C* G6 _, {% X2 U
            模块名和文件名保持一致
    " ~$ ?. U! K. D        异步复位,用if(xxx==1’b1)  或  if(xxx==1’b0)
    / I' g% u5 K+ `  U        同步时序逻辑的always block中有且只有一个时钟信号,并且在同一个沿动作5 x% H5 ~8 ^" j2 u# W0 [  U
            采用同步设计,避免使用异步逻辑6 w9 k  y- v* y$ _& C: Q8 ~* B
            一般不要将时钟信号作为数据信号的输入' `3 {# m+ ]: q; S0 S- o
            不要在时钟路径上添加任何buffer; [* L% `7 @! \' S; P" Q$ ?
            在顶层模块中,时钟信号必须可见
    * g5 ]$ d4 F" s! r# c. \3 w  [: M        不要采用向量定义的方式定义一组时钟信号0 U: d9 `' \) Z- {( R* v
            不要在模块内部生成时钟信号,使用pll产生0 A, ]9 a9 p3 K& `$ T5 q% w* X
            尽量不使用任务! ^* P6 \4 i: l3 s2 S6 c' ]) N' N
            不使用事件变量* K: C0 ~3 }2 E6 H( A
            不使用系统函数% ^4 \3 g, ~9 A$ U9 B
            不使用disable语句* h/ t+ o) ?1 o  }! l* O- ?
            尽量不使用forever、repeat、while等循环语句6 A9 G& D* y+ g5 |4 |) @9 v* {
            不使用不可综合的运算符
    0 M' m  y) B  J  n! d* M        在一个always语句中有且只能有一个事件列表
    ; h1 }0 v7 l: j/ v1 F        移位变量必须是一个常数  Z8 ^4 m. z# Z* S, ~! G
            时序逻辑语块中统一使用非阻塞型赋值- }; ^* D) {1 a' l3 i" b
            组合逻辑语块中使用阻塞型赋值) a; c) @0 `5 t# [( K0 J% a: K

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 22:37 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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