当前位置:首页 > 芯闻号 > 充电吧
[导读]其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

 

   工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。

   在逻辑方面,我觉得比较重要的规范有这些:

   1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。

   2.代码规范。
   a.设计要参数化。比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我们可以这么写:
         parameter  CLK_PERIOD = 30;
         parameter  RST_MUL_TIME = 5;
         parameter  RST_TIME = RST_MUL_TIME * CLK_PERIOD;
         ...
         rst_n = 1'b0;
         # RST_TIME rst_n = 1'b1;
         ...
         # CLK_PERIOD/2 clk <= ~clk;
    如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。

   b.信号命名要规范化。
   1) 信号名一律小写,参数用大写。
   2) 对于低电平有效的信号结尾要用_n标记,如rst_n。
   3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后  方便很多。如:
      module a(
               //input
               clk,
               rst_n,   //globle signal
               wren,
               rden,
               avalon_din,  //related to avalon bus
               sdi,         //related to serial port input
               //output
               data_ready,
               avalon_dout, //related to avalon bus
               ...
              );
      4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔离。这样做可以让综合器综合出更优的结果。
      5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。
      6) 在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的,比如配置寄存器就是这种类型。
      7) 一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。

       所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也
是极有好处的。

      9) 除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。
               clk_gate_en      --------                    ----
              -----------------|D     Q |------------------|     gate_clk
_out
                               |        |         ---------|      )--------
-
                        ------o|>       |         |        |     /
                clk    |       --------           |         ----
              ------------------------------------
      10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232与PC通信,要以rs232_1xclk的速率发送数据。
        不要这样做:
        always (posedge rs232_1xclk or negedge rst_n)
        begin
            ...
        end
        而要这样做:
        always (posedge clk_25m or negedge rst_n)
        begin
            ...
            else if ( rs232_1xclk == 1'b1 )
            ...
        end
      11)状态机要写成3段式的(这是最标准的写法),即
         ...
         always @(posedge clk or negedge rst_n)
         ...
             current_state <= next_state;
         ...
         always @ (current_state ...)
         ...
         case(current_state)
               ...
               s1:
                  if ...
                    next_state = s2;
               ...
         ...
         always @(posedge clk or negedge rst_n)
         ...
             else
                a <= 1'b0;
                c <= 1'b0;
                c <= 1'b0;            //赋默认值
                 case(current_state)
                     s1:
                         a <= 1'b0;   //由于上面赋了默认值,这里就不用再对b
、c赋值了
                     s2:
                         b <= 1'b1;
                     s3:
                         c <= 1'b1;
                     default:
                     ...
        ...

      3.ALTERA参考设计准则
       1) Ensure Clock, Preset, and Clear configurations are free of glitch
es.
       2) Never use Clocks consisting of more than one level of combinatori
al logic.
       3) Carefully calculate setup times and hold times for multi-Clock sy
stems.
       4) Synchronize signals between flipflops in multi-Clock systems when
the setup and hold time requirements cannot be met.
       5) Ensure that Preset and Clear signals do not contain race conditio
ns.
       6) Ensure that no other internal race conditions exist.
       7) Register all glitch-sensitive outputs.
        Synchronize all asynchronous inputs.
       9) Never rely on delay chains for pin-to-pin or internal delays.
       10)Do not rely on Power-On Reset. Use a master Reset pin to clear al
l flipflops.
       11)Remove any stuck states from state machines or synchronous logic.

    其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭