数字设计之ASIC流程1文档格式.docx

上传人:b****5 文档编号:15940867 上传时间:2022-11-17 格式:DOCX 页数:43 大小:1.35MB
下载 相关 举报
数字设计之ASIC流程1文档格式.docx_第1页
第1页 / 共43页
数字设计之ASIC流程1文档格式.docx_第2页
第2页 / 共43页
数字设计之ASIC流程1文档格式.docx_第3页
第3页 / 共43页
数字设计之ASIC流程1文档格式.docx_第4页
第4页 / 共43页
数字设计之ASIC流程1文档格式.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

数字设计之ASIC流程1文档格式.docx

《数字设计之ASIC流程1文档格式.docx》由会员分享,可在线阅读,更多相关《数字设计之ASIC流程1文档格式.docx(43页珍藏版)》请在冰豆网上搜索。

数字设计之ASIC流程1文档格式.docx

注意在同一个设计中要使用同一个小写字母表示低电平有效;

我习惯使用n来表示。

(7)对于复位信号使用rst作为信号名,如果复位信号是低电平有效,建议使用rst_n;

注意做异步复位的同步化;

一般在使用的时候为了避免异步复位的毛刺对芯片的工作产生影响,都把异步复位用在上电启动的复位过程中,在芯片上电后就不再使用异步复位而改用同步复位,牺牲一个周期的复位等待时间来得到不会受到复位毛刺影响的电路性能;

(8)当描述多比特总线时,使用一致的定义顺序,对于verilog建议采用bus_signal[x:

0]的表示;

(9)尽量遵循业界已经习惯的一些约定。

如*_r表示寄存器输出,*_a表示异步信号,*_pn表示多周期路径第n个周期使用的信号,*_nxt表示锁存前的信号,*_z表示三态信号等;

(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:

文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;

(11)使用适当的注释来解释所有的always进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。

注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;

(12)每一行语句独立成行。

尽管VHDL和Verilog都允许一行可以写多个语句,但是每个语句独立成行可以增加可读性和可维护性。

同时保持每行小于或等于72个字符,这样做都是为了提高代码得可读性;

(13)建议采用缩进提高续行和嵌套语句得可读性。

缩进一般采用两个空格,如果空格太多则在深层嵌套时限制行长。

同时缩进避免使用TAB键,这样可以避免不同机器TAB键得设置不同限制代码得可移植能力;

(14)在RTL源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog和VHDL语言的关键字;

(15)在进行模块的端口申明时,每行只申明一个端口,并建议采用以下顺序:

输入信号的clk、rst、enablesothercontrolsignals、dataandaddresssignals。

然后再申明输出信号的clk、rst、enalbesothercontrolsignals、datasignals;

(16)在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便debug连线错误;

(17)如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得它可以复用。

注意,内部函数的定义一般要添加注释,这样可以提高代码的可读性;

(18)尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效地减少代码行数;

(19)对一些重要的always语句块定义一个有意义的标号,这样有助于调试。

注意标号名不要与信号名、变量名重复;

(20)代码编写时的数据类型只使用IEEE定义的标准类型,在VHDL语言中,设计者可以定义新的类型和子类型,但是所有这些都必须基于IEEE的标准;

(21)在设计中不要直接使用数字,作为例外,可以使用0和1。

建议采用参数定义代替直接的数字。

同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系;

(22)不要在源代码中使用嵌入式的dc_shell综合命令。

这是因为其他的综合工具并不认得这些隐含命令,从而导致错误的或较差的综合结果。

即使使用DesignCompiler,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合文件中更易于维护。

这个规则有一个例外的综合命令,即编译开关的打开和关闭可以嵌入到代码中;

(23)在设计中避免实例化具体的门级电路。

门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。

如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS公司提供的GTECH库包含了高质量的常用的门级电路;

(24)避免冗长的逻辑和子表达式;

(25)避免采用内部三态电路,建议用多路选择电路代替内部三态电路。

三态电路一般只出现再I/O模块部分。

除了要做好端口与信号的命名约定外,还要根据顶层模块需要实现的功能将其划分若干的子功能模块,并且考虑好每个子功能模块的具体功能与测试激励的方案。

在以上工作都做好后,可以利用软件Debuss将.V的RTL级代码来观察所描述的代码是否与设计所需要的状态转换情况相吻合。

如果吻合可以利用工具NovasnLint2.2v24来检查在代码中是否存在不能进行综合或者综合错误的语法错误,保证在后面的综合过程中不会因为代码描述的问题得到错误的综合网表而无法实现正确的功能。

当然如果该设计式针对FPGA的话这一步骤可以省略。

附:

同步复位与异步复位的选择比较:

同步复位很适合于使用以周期为基础的仿真器。

同步复位通常保证电路100%同步工作。

同步复位保证复位只在时钟有效沿工作,作为一个滤波器过滤掉小的复位毛刺,不过当毛刺发生在时钟有效沿附近时,触发器有可能进入亚稳态。

当复位信号是由一组内部状态产生时,推荐使用同步复位,可以过滤掉时钟周期之间逻辑方程产生的毛刺。

同步复位可能需要一个脉冲延伸器,使得复位的脉冲宽度足够宽,保证复位信号出现在时钟的有效沿。

同步复位意味着需要一个时钟来实现复位操作,对于某些设计来说是很烦人的事。

如果ASIC/FPGA内部有三态的总线,由时钟引起的复位就变得十分重大了。

当芯片上电时,为了防止总线在内部三态上发生争用,芯片必须一个上电异步复位。

这样在芯片上电的时刻,总线就能够正确的分配数据通道而不必等待一个时钟周期来实现同步复位操作,保证了数据传输的正确性,避免总线的竞争。

单独使用异步复位是十分危险的。

最大的问题是复位的释放,也称为resetremoval。

Synopsys要求当敏感列表中的任何一个信号是边沿敏感时,其他所有敏感信号也必须是边沿敏感。

综合异步复位的方法在于设计者对reset-buffer-tree的设计。

如果复位信号直接被外部的复位引脚驱动,那么在该引脚上加“set_drive0”,该信号线上加“set_dont_touch_network”可以保护该信号线不会因为综合发生变化。

建议尽量避免采用同时使用异步复位和置位的触发器。

使用异步复位最大的优势在于,当供应商的库中有异步复位的触发器时,可以保证数据通路(datapath)是干净(clean)的。

异步复位的另一个优势在于电路的复位操作不需要时钟。

异步复位最大的问题在于复位信号有效和无效都是异步的。

有效不是问题,无效是个问题。

如果复位信号在或者靠近触发器时钟的有效沿,触发器的输出会可能进入亚稳态,ASIC的复位状态就丢失了。

异步复位的另一个问题是它的驱动,板极或系统级复位会因为噪声或毛刺而产生虚假复位。

如果系统级真的出现了这个问题,可以考虑用同步复位解决。

另一个类似的问题是这些虚假的复位如果出现在或者靠近触发器时钟的有效沿,触发器可能进入亚稳态。

异步复位信号释放对于时钟来说是异步的,这里有两个潜在的问题。

1)违反复位恢复时间;

2)对不同顺序的器件复位信号的释放发生在不同的时钟周期。

复位恢复时间也指复位或者置位信号在时钟上升沿之前释放的建立时间。

使用方针:

每个使用异步复位的ASIC都包括一个复位同步电路

没有复位同步电路,即使仿真中工作正常的异步复位信号在最后的系统中也是无用的。

复位同步逻辑被设计成同时利用同步复位和异步复位的优势。

 

第二步、综合:

#设计输入

remove_design-all#移除以前所有设计

analyze-formatverilog./cnt.v#读入设计并置顶所需要的设计

elaboratecnt

current_designcnt

uniquify#对一个单元的多个实例进行统一设置

check_design#检查源代码

#设置操作环境、负载模型

set_operating_conditionsWORST_TREE

setauto_wire_load_selectiontrue

set_wire_load_modetop

#设置时钟、复位信号

create_clock"

clk"

-period10-waveform{05}#创建时钟

set_clock_uncertainty-setup0.2clk#设置时钟扭

set_clock_uncertainty-hold0.1clk

set_clock_transition0.1clk#设置时钟转移

set_clock_latency1.0clk#时钟插入延迟

set_dont_touch_network{clkrstn}#暂不处理的信号

#设置输入驱动和输出负载

set_driving_cell-lib_cellQB40633S-pinDIN[remove_from_collection[all_inputs][get_ports{clkrstn}]]

#输入端口建模

set_drive0{clkrstb}#输入端口驱动强度

set_load0.5[all_outputs]#输出端口负载

#设置输入输出延迟

set_input_delay5.0-clockclk[all_inputs]

set_output_delay3.0-clockclk[all_outputs]

#设计检查和时序检查

check_design>

./RPT/check_design.rpt

check_timing>

./RPT/check_timing.rpt

#修复多个端口的直接连接(其间插入buffer)和修复违反保持时间约束

set_fix_multiple_port_nets-all-buffer_constants

set_fix_holdclk

#编译以及生成报告

write-fdb-o./DB/d1.db

compile-map_effortmedium

write-fdb-o./DB/d2.db

report_constraint-all_violators>

./RPT/all_violators.rpt

report_area>

./RPT/area1.rpt

report_timing-nets-capacitance-trans

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1