您的位置 首页 模拟

ASIC设计规范

1.规划有必要文档化。要将规划思路,具体完成等写入文档,然后经过严厉评定经过 后才干进行下一步的作业。这样做乍看起来很花时刻,可是从整个项目进程来看,肯定 要比一上来就写代码要节省…

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的,现在体系内部要经过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赋值了(b、c在该状况为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.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/192942.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部