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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

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

    * M3 c! w1 A# H3 d: F( f      今天我们聊一聊FPGA做开发的时候,有哪些设计规范,从文档到工程建立等,聊一聊也许你会学到很多东西,少走很多弯路哦!4 I' h* I3 h. s! n# L
          在团队项目开发中,为了使开发的高效性、一致性、正确性,团队应当要有一个规范的设计流程。按照规范来完成项目的设计开发工作,归类清晰明了的工程文件夹级别;项目应拥有良好风格和完整的文档,如设计思路与调试记录及器件选型等;代码书写高效,即统一的书写规范,文件头包含的信息完整,无论自己还是团队他人阅读便一目了然。/ x. t; i! M; S6 V) w0 A0 Q
    3 j6 [, A( g  D
    一、文档命名:5 z4 E/ h+ M0 i# B+ ~
          清晰的文档命名能够让我们思路非常的清晰,所以FPGA工程文件夹的目录要求层次鲜明,归类清晰。一个工程必须要有一个严整的框架结构,用来存放相关的文档、设计,不仅方便自己查看,也提高了项目的团队工作效率。/ U: i& ]- |; x+ S, {" R
         下面我们来举例说明: ! B+ o1 W. A8 E' N& x
        一级文件夹为工程名<project>
    8 w. k" e  \" j    二级文件夹多个:$ D* `1 `$ E2 i3 f
           用以存放源文件<src>' e5 r4 P, y$ M+ A* w
           用以存放Testbench文件<sim>) k0 j! T7 D. P+ Y. n, i) e8 _
           用来存放设计思路相关类的文件<doc>+ m' v2 r  ^- S$ _
           用来存放IP 核的文件<core>  t5 L3 L* K) v% a0 `* q
           等等…
    - _% z* w5 A2 q* K9 Y/ h; p' C% @7 e7 {& W

    : N3 |+ E# K+ W" c二、设计文档化:
    $ I2 M& F% x( f& B) x' q$ }       将自己对设计的思路和调试记录在文档中,有利于以后对模块功能的添加和维护,并且在项目联调时方便项目组其他人员读代码。也方便不同厂家的FPGA之间移植,以及FPGA到ASIC的移植。如下图就是设计文档化的举例说明,文档介绍清晰,功能分析明确,有利于以后对模块功能的添加和维护。' x5 c5 ^8 \) F1 n
            ! o. A3 q" k* K
           设计思路:按照项目的要求,自顶向下的分成若干模块,分别编写功能。顶层尽量只做行为描述,逻辑描述在底层编写。模块的编写要有硬件电路思维方式,每一个模块的设计都应考虑是否存在该硬件电路,尽量采用同步设计。$ s5 L* N  P& M5 g/ `) e/ B* Q

    # S; A/ C) W. P* I; V- c* K; ~; h9 z三、编程风格:
    $ b3 C8 }0 r: w% k( \+ H% ?& ]6 o    每个module应存在于单独的源文件中,源文件名应与其所包含的模块名相同。每个设计都应该有一个完善的文件头,包含公司名称、设计者、设计时间、文件名、所属项目、模块名称及功能、修改记录及版本信息等内容。代码中的标识符采用传统C语言的命名方法,在单词之间用下划线分开,采用有意义,能反应对象特征、作用和性质的单词命名标识符,以此来增强程序的可读性。为避免标识符过于冗长,较长的单词可以适当的缩写。
      |6 H/ p' s* k) Z/ C) z
    % E& ]0 n9 A- R四、代码规范:
    * W- x. F; m1 m0 j  e6 t& d' o        低电平有效的信号,后缀名要用“_n”,比如低电平有效的复位信号“rst_n”; f" x: y# N& O
            模块名和信号名统一小写& k( z0 G# n7 r' ~6 |5 x( z
            变量名要小写,如wire、reg、input、output等定义的3 k  E- a; Q3 P$ j2 [: \8 [
            变量命名应按照变量的功能用英文简洁表示出来“xxx_xxx_xxx”,避免过长# o, {  K6 q) E$ w8 ^& P' I
            采用大写字母定义常量参数,参数名小于20个字母,如parameter TIME=20+ P8 e- i- E4 y; N
            时钟信号应前缀“clk”,复位信号应前缀“rst”
    * ^$ @# G$ ]# E% b" v        对于顶层模块的输出信号尽量被寄存
    + ~( {6 W9 Q. I2 d        三态逻辑避免在子模块使用,可以在顶层模块使用
    8 c' v! Z. S2 f( s* S% ^        到其它模块的接口信号按:输入、(双向)、输出的顺序定义端口
    ' j7 O( z; _0 b" ?1 w5 D6 V1 S         一个模块至少要有一个输入、输出,避免书写空模块
    ) G: g6 E6 A4 Z, _2 f$ q- K        时钟事件的表达式用“posedge”或“negedge”的形式
    2 B7 Q; T$ x0 B* z: Z3 v; p  U        If语句嵌套不能太多2 Y9 w* a0 K' p) L- d% N6 g9 M6 c; G
            建议不要使用include语句
    ) E) B, N; z& j8 n( X        建议每个模块添加timescale
    + X% T8 x5 @; E" N6 `2 ^5 T5 l        代码中给出必要的注释2 F& B+ ], y$ Y8 |
            每个文件有个一头文件
    7 R0 }3 O1 {1 \/ G( f) e, L        每个文件只包含一个模块+ E" g2 Z6 w2 e9 F( H0 ~9 A
            模块名和文件名保持一致) ?" }8 [2 W4 ^+ Z
            异步复位,用if(xxx==1’b1)  或  if(xxx==1’b0)
    $ B# @7 f3 H/ ]! }) u        同步时序逻辑的always block中有且只有一个时钟信号,并且在同一个沿动作: n3 d' I2 l2 \  _" b
            采用同步设计,避免使用异步逻辑
    ; X3 u- d' |: v) F1 v8 T        一般不要将时钟信号作为数据信号的输入3 g4 w+ y7 K* F" _8 ^: c
            不要在时钟路径上添加任何buffer
    4 ?2 w4 k% p" L0 {/ l% ], s# ^+ @# |        在顶层模块中,时钟信号必须可见5 m- E$ |& i. |. n1 ?
            不要采用向量定义的方式定义一组时钟信号
    1 y! V+ B. @; r5 w% a8 B/ ^) Y        不要在模块内部生成时钟信号,使用pll产生* G* Q. e* j7 N1 s2 D8 @+ b
            尽量不使用任务( C* E) @' `9 O0 z2 h# g
            不使用事件变量, q. L4 ~" j* u! S: l
            不使用系统函数$ }4 z1 Y' V- |
            不使用disable语句
    1 g: b* [% X( V! t        尽量不使用forever、repeat、while等循环语句
    ( H( g/ |/ g" V$ `! x        不使用不可综合的运算符/ Q5 A* l+ G+ b9 @  J" c
            在一个always语句中有且只能有一个事件列表
    " u0 j: Q1 Q( f( b1 \1 z8 `5 x1 w/ D        移位变量必须是一个常数
    % s! \; k: F7 k: f4 v- \        时序逻辑语块中统一使用非阻塞型赋值
    ) h1 v0 f2 f3 ~8 L        组合逻辑语块中使用阻塞型赋值
    : i* ]9 D1 D) j( P6 h

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-9 17:18 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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