ASIC设计规范

发表于 2007/3/10 23:47:44,

标签: ASIC设计规范  

转自EDN上的

jerryzhang8023's Blog

ASIC设计规范

 

 

ASIC设计规范

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或者是一个en
tity
。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔

离。这样做可以让综合器综合出更优的结果。
      5)
尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止
出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。
      6)
FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的
,比如配置寄存器就是这种类型。
      7)
一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。
       
所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也
是极有好处的。
      9)
除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要
用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。
               clk_gate_en      --------                    ----
              -----------------|D     Q |------------------|     / gate_clk
_out
                               |        |         ---------|      )--------
-
                        ------o|>       |         |        |     /
                clk    |       --------           |         ----
              ------------------------------------
      10)
禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式
,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的
复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232PC通信,要以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赋值了(bc在该状态为0,不会产生锁存器,下同
)
                     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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASIC设计中的DFT(Design for Test)是为了保证芯片在出厂前能够通过测试,在实际应用中能够稳定可靠地工作ASIC flow中DFT的基本方法包括以下几个步骤: 1. 设计规范:在开始设计阶段,要制定合适的设计规范,确保DFT能够满足测试需求。设计规范包括设计层次、测试目标和测试限制等内容。 2. DFT插入:在设计完成后,通过特定的工具和技术,在设计中插入DFT逻辑来实现测试所需的功能。这些逻辑包括扫描逻辑、压缩逻辑、BIST(Built-In Self-Test)逻辑等。 3. 扫描测试:使用扫描链技术对设计进行测试。扫描链是一种在芯片中插入的逻辑,可以在测试时将内部寄存器的状态串联起来,形成一个或多个长的移位寄存器链。通过向扫描链输入测试数据,可以实现全面的芯片测试。 4. 压缩测试:对于大型芯片,扫描测试所需的测试数据量可能非常庞大。为了减少测试数据的传输和存储开销,可以使用压缩技术来减小测试数据量。压缩测试主要包括压缩编码和压缩解码两个步骤。 5. BIST测试:BIST是一种内建自测试技术,通过在芯片内部集成自测试模块,可以在芯片运行时实现自动测试。BIST可以检测到和诊断出芯片内部的故障,提高测试效率和可靠性。 6. ATPG(Automatic Test Pattern Generation):ATPG是一种自动生成测试模式的技术。通过分析设计的功能和结构特点,生成能够覆盖设计故障的测试模式。ATPG工具通过对设计进行仿真、故障模型生成和优化等步骤,可以自动生成高效的测试模式。 通过以上基本方法,ASIC设计中的DFT可以实现对芯片进行全面的测试,提高芯片的可靠性和生产效率。这些DFT方法在ASIC设计流程中都是必不可少的环节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值