当前位置:文档之家› ASIC设计-FPGA原型验证

ASIC设计-FPGA原型验证

ASIC设计-FPGA原型验证
ASIC设计-FPGA原型验证

Goke Microelectronics

ASIC设计-FPGA原型验证

ASIC Design Team

I

ASIC设计-FPGA原型验证

目录

1ASIC验证技术 (1)

1.1 ASIC设计流程 (1)

1.2 FPGA验证技术 (3)

1.3 Altera与Xilinx工具对比 (3)

1.4 VHDL与Verilog对比 (5)

1.5 Verilog良好编程习惯 (6)

2 基于ALTERA的ASIC验证 (9)

2.1 Stratix IV FPGA资源与架构 (9)

2.2 QuartusII设计工具 (10)

2.3 ASIC设计转换 (11)

2.3.1 PLL设计 (11)

2.3.1 RAM设计 (16)

2.4 时序约束 (19)

2.4.1 QSF&Tcl (22)

2.4.2 LogicLock (23)

2.5 综合布局布线 (23)

2.5.1综合设置 (24)

2.5.2增量编译 (25)

2.5.3 VQM & QXP (30)

2.5.4 时序分析 (30)

2.6 下载设计文件 (32)

2.7 Debug (32)

2.7.1 In-System Memory Content Editor (33)

2.7.2 ChipPlanner (34)

2.7.3 SignalTapII (38)

2.7.4 Keep Signals (43)

2.8 Example工程 (45)

3 基于XILINX的ASIC验证 (49)

3.1 Vertex-7 FPGA资源与架构 (49)

3.2 设计工具ISE与Vivado (49)

3.3 ASIC设计转换 (54)

3.3.1 时钟资源 (54)

3.3.2 PLL设计 (58)

3.3.3 RAM设计 (61)

II

Goke Microelectronics

3.4 时序约束 (64)

3.5 综合布局布线 (70)

3.5.1 Blackbox (70)

3.5.2 Keep Signals (71)

3.5.3 Strategies (72)

3.5.4 Incremental Compile (75)

3.5.5 时序分析 (77)

3.5.6 Generate Bitstream (81)

3.6 下载设计文件 (84)

3.6.1 下载bit文件 (84)

3.6.2 下载mcs文件 (87)

3.7 Debug (88)

3.8 Example工程 (94)

3.8.1 导入ISE & Synplify工程 (94)

3.8.2 Working with Tcl (95)

3.9 Gate Clock处理 (99)

3.10多片FPGA验证 (101)

4 DDR相关技术 (104)

4.1 DDR Controller (108)

4.2 DDR PHY (111)

4.2.1 Altera PHY (111)

4.2.2 Xilinx PHY (113)

5 硬件技术 (117)

5.1 PCB设计注意事项 (117)

5.2 电磁兼容与信号完整性 (117)

5.2.1 端接匹配 (118)

5.2.2 防止地弹 (118)

5.2.3 减小串扰 (118)

5.2.4 降低电磁干扰 (119)

5.3 FPGA开发板使用注意事项 (120)

总结 (121)

III

Goke Microelectronics

1 ASIC验证技术

1.1 ASIC设计流程

ASIC分为全定制和半定制。全定制设计需要设计者完成所有电路的设计,因此需要大量人力物力,灵活性好但开发效率低下。如果设计较为理想,全定制能够比半定制的ASIC芯片运行速度更快。半定制使用库里的标准逻辑单元(Standard Cell),设计时可以从标准逻辑单元库中选择SSI、MSI、数据通路、存储器甚至系统级模块(如乘法器、微控制器等)和IP核,这些逻辑单元已经布局完毕,而且设计得较为可靠,设计者可以较方便地完成系统设计。现代ASIC常包含处理器,类似ROM、RAM、EEPROM、Flash的存储单元和其他模块. 这样的ASIC常被称为SoC(片上系统)。

由于SoC设计复杂度不断增加,使得缩短面市时间的压力越来越重。虽然充分利用IP核大大减少了SoC的设计时间,但SoC验证仍然非常复杂耗时。 SoC 和ASIC的最大不同之处在于它的系统特性,除了大量硬件模块之外,SoC还需要大量的固件和软件,如操作系统、驱动程序、通讯协议以及应用程序等。这使得传统的软件仿真工具已经无法完全解决验证的问题。而且随着越来越多的需要处理大量实时数据的应用(如视频)出现,验证技术就要求能够在接近实时频率的条件下进行验证。现在越来越多的ASIC 设计者自己设计FPGA 验证板来进行ASIC 设计验证。用FPGA 验证ASIC 的好处是可以使软件的开发调试和ASIC 的开发调试并行的进行。

图1-1为典型的半定制设计流程,一般用来设计数字IC电路。全定制的设计,一般用于设计模拟电路和数模混合电路。

本文主要讨论设计流程中的仿真验证,RTL仿真工具一般用到的有Cadence 的NC-verilog,Synopsys的VCS和Mentor的ModelSim。

RTL验证包括基于UVM等方法学的逻辑验证和基于FPGA的原型验证。基于方法学的验证主要使用SystemVerilog产生可重用性好、功能覆盖率高和调试简易的测试激励。常见的验证平台有UVM、OVM和VMM,都基于SystemVerilog 搭建的。UVM是在OVM和VMM基础上推出的验证方法学的新的标准。2006年,Synopsys公司推出了验证方法学手册(VMM),这个是RVM从vera语言过度到SystemVerilog的方法学。2008年,Cadence公司和Mentor公司共同推出了OVM。2010年,ACCELLERA采用了OVM作为基础,推出了UVM验证方法

1

ASIC 设计-FPGA 原型验证

2

学。同时引入了VMM 的一些概念,作为业界方法学统一的一个雏形。基于FPGA 的原型验证,主要有基于Altera 和Xilinx 的 FPGA 验证平台。

设计流程

设计工具Matlab C C++SystemC C C++VHDL Verilog VCS NC-Verilog ModelSim SystemVerilog UVM FPGA DesignCompiler BuildGates Formality LEC PrimeTime Pearl Astro ICC Encounter Star-RCXT Assure-RCX Calibre-xRC Hercules Dracula Calibre

图1-1数字IC 设计流程

Goke Microelectronics

1.2 FPGA验证技术

随着SoC设计规模的与日俱增,其功能日趋复杂,芯片的验证阶段占据了整个芯片开发的大部分时间。为了缩短验证时间,在传统的仿真验证的基础上涌现了许多新的验证手段,如SDV(Software Driven verification)、BFM(Bus Function Model)等,以及基于FPGA的原型验证技术。因FPGA工艺及技术的发展,其速度、容量和密度都大大增加,功耗和成本在不断的降低,使得基于FPGA的原型验证得到广泛的应用。基于FPGA的原型验证可以比软件仿真速度高出4~6个数量级,而且还可以提高流片成功率,并为软件开发提供了硬件平台,加速了软件的开发速度。

FPGA原型验证平台的硬件设计应该考虑FPGA的逻缉资源、应用资源、扩展能力、PCB信号质量、调试难度、组态和成本等方面的因素。本原型验证系统采用的是基于Altera公司Stratix IV EP4SE820的开发板,和基于Xilinx公司Vertex-7 XC7V2000T的开发板,扩展板是根据SoC整体验证需求而设计的PCB 板。

虽然FPGA和ASIC所用资源和实现方式不同,但在进行原型设计中需要遵循的一个原则就是“尊重原设计”。在FPGA现有资源情况下实现SoC时,尽可能地少改动原SoC设计,在此基础上需要对原设计做如下转换:

1. 存储模块。存储单元是必须进行代码转换的,ASIC中的存储单元通常用代工厂所提供的Memory Compiler来定制。如果直接将ASIC代码中的存储单元作为FPGA的输入,通常综合器是综合不出来的,即使能综合出来,也要花费很长时间,并且资源消耗多、性能不好。而FPGA厂商一般提供经过验证并优化的存储单元,因此存储单元要进行代码转换。在设计里用FPGA的RAM宏单元来替换ESRAM,SoC芯片里面的DDR PHY是模拟的模块,此要替换成Altera或Xilinx公司的DDR PHY的IP核。

2. 时钟和门控。数字电路中,时钟是整个电路最重要、最特殊的信号。在ASIC中,用布局布线工具来放置时钟树,利用代工厂提供的PLL进行时钟设计。而FPGA中通常已经配置一定数量的PLL宏单元,并有针对时钟优化的全局时钟网络,一般是经过FPGA的特定全局时钟管脚进入FPGA内部,后经过全局时钟BUF适配到全局时钟网络,这样的时钟网络可以保证相同的时钟沿到达芯片内部每一个触发器的延迟时间差异可以忽略不计,因此时钟单元需要采用FPGA 的PLL宏单元和专门的时钟布线资源来替换。为了减少功耗,SoC设计中使用了门控时钟(clockgating),对于FPGA来说这种门控时钟容易产生毛刺,导致数据不正确,所以在FPGA设计中要使用时钟使能寄存器代替门控时钟。

1.3 Altera与Xilinx工具对比

3

ASIC设计-FPGA原型验证

Altera和Xilinx是最大的两家FPGA厂商,Altera目前的高端器件是Stratix IV 系列,Xilinx是Vertex-7。在SoC的验证过程中,我们希望FPGA的频率能够达到和SoC一样,但是验证过程中对于超过400万门的SoC,FPGA的最高运行频率不超过200M。

Altera和Xilinx这两家,在高端器件,Xilinx处于领先地位。现在FPGA的规模越来越大,资源两家的高端器件都能满足一般开发验证,所以使用的瓶颈已经在软件这个层面。从EDA软件来说,Altera软件要做的好,特别是编译综合和时序收敛方面,Xilinx的v7资源占用率才40%左右,就时序很难收敛,然后要用SmartXplorer来跑多个case,看下有没有能编译通过的,编译同样规模的工程要比Quartus慢很多,而且内存开销很大,route一个800万门的design要占用20G左右的内存。毕竟对于用户来说,实现FPGA工程到成功编译下载的中间过程越短越好。Xilinx从v7系列开始,使用新的软件vivado编译工具,ISE后面不在出新的版本,从这个角度也可以看出Xilinx自己都认为原来的ISE软件太差,vivado是新的软件架构,编译综合功能还是很差劲,但是布局布线功能改善很大,同样规模的design,要比ISE快一倍,内存开销少一半,所以一般用synplify综合,用vivado布局布线。Quartus的集成界面易用性做得比ISE好,而ISE和vivado 的脚本支持比Quartus做得好;因此对初学者来说,Quartus更容易入门,而对熟练用户,在大型设计项目的开发中,vivado则会显得更顺手,因为可以对后端设计进行更精细的控制和自动化。

关于块RAM,Xilinx的双口RAM是真的,Altera的没有双口RAM,如果你要实现真正的双口RAM,只能用两块RAM来背靠背地实现,这样你的RAM 资源就少了一半,如果你的应用对片内双口RAM的需求很重要,用Altera的就划不来。

从RTL仿真、编译综合、布局布线、下载调试,两家公司都开发了一系列工具,如表1-1所示。

表1-1 Altera与Xilinx工具对比

4

Goke Microelectronics

1.4 VHDL与Verilog对比

Verilog HDL和VHDL作为描述硬件电路设计的语言,其共同特点在于:能形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述;可借用高级语言的精巧结构来简化电路行为的描述;具有电路仿真与验证机制以保证设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去);易于理解和设计重用。但是,两者又有着各自的特点:

Verilog HDL和VHDL最大的差别在语法上,Verilog HDL是一种类C语言,而VHDL是一种ADA(Action Data Automation,行动数据自动化)语言。由于C语言简单易用且应用广泛,因此也使得Verilog HDL语言容易学习;相比之下,VHDL语句较为晦涩,使用难度较大。VHDL比较严谨,Verilog比较自由。

在中国台湾、美国、日本等使用Verilog 较多,而在欧洲VHDL 发展得比较好。国内大多数集成电路设计公司基本都采用Verilog。Verilog 在其门级描述的底层,也就是晶体管开关级的描述方面比VHDL 更强一些,所以即使是VHDL 的设计环境,在底层实质上也会由Verilog 描述的器件库所支持。Verilog 较为适合算法级、RTL级、门级和电路开关级的设计,而VHDL适合特大型的系统级设计,也就是在系统级抽象方面比Verilog好。这两种语言仍处于不断完善之中,都在朝着更高级、更强大描述语言的方向前进。其中,经过IEEE Verilog HDL 2001标准补充之后,Verilog的系统级描述性能和可综合性能有了大幅度提高。

学习HDL语言的时候有以下几点提示

1. 了解HDL的可综合性问题。HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现,那么我们就必须保证程序的可综合(程序的功能可以用硬件电路实现)。我们应该牢记一点:所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。

2. 用硬件电路设计的思想来编写HDL。学好HDL的关键是充分理解HDL 语句和硬件电路的关系。编写HDL,就是在描述一个电路,不能用纯软件的设计思路来编写硬件描述语言。Verilog描述电路的时候,一定要清楚它实现的电路,很多人只顾学习Verilog语言,而不熟悉它实现的电路,这是设计不出好电路来的。

3. 语法掌握贵在精,不在多。30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,程序移植或者更换平台的时,容易产生兼容性问题,也不利于他人阅读和修改。

表1-2为VHDL相应的功能在Verilog中的实现方式,列出来方便不熟悉VHDL的人员理解用VHDL编写的IP。

表1-2 VHDL与Verilog对比

5

ASIC设计-FPGA原型验证

VHDL

而且不同类型数据间赋值是严格禁止的,Verilog赋值灵活。

配置方面,VHDL这方面的组织比起Verilog显然要严密多了,使用configuration,用简单的语句,就可以把不同的architecture实现和entity实现绑定,而此时我们就能看出VHDL之所以要分开所谓entity和architecture的目的所在了。

例化方面,在VHDL当中尝试例化一个entity,比起Verilog要麻烦不少。首先,必须在Architecture当中用Component语法来声明这个实体的Port和Generic(参数);然后才可在后续内容当中例化实体,并且用generic map和port map来进行参数赋值和port连接。在Verilog中若要调用其他模块里面调用task,先例化task所在的module,如module_name inst1,然后使用inst1.task1( )调用task。

在VHDL里调用Verilog的module,需要现在Package中或Architecture当中用Component语法来声明,然后例化映射;在Verilog里调用VHDL的entity,直接例化映射。

1.5 Verilog良好编程习惯

6

Goke Microelectronics

良好代码编写风格的通则概括如下:

1. 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写。

2. 使用有意义的信号名、端口名、函数名和参数名。

3. 信号名长度不要太长。

4. 对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀。

5. 对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字。

6. 对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或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、enables other control signals、data and address signals。然后再申明输出信号的clk、rst、enalbes other control signals、data signals;

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

7

ASIC设计-FPGA原型验证

关)。

17. 如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得它可以复用。注意,内部函数的定义一般要添加注释,这样可以提高代码的可读性。

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

19. 对一些重要的always 语句块定义一个有意义的标号,这样有助于调试。注意标号名不要与信号名、变量名重复。

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

21. 在设计中不要直接使用数字,作为例外,可以使用0 和1。建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系。

22. 不要在源代码中使用嵌入式的dc_shell 综合命令。这是因为其他的综合工具并不认得这些隐含命令,从而导致错误的或较差的综合结果。即使使用Design Compiler,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合文件中易于维护。这个规则有一个例外的综合命令,即编译开关的打开和关闭可以嵌入到代码中。

23. 在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS 公司提供的GTECH 库包含了高质量的常用的门级电路。

24. 避免冗长的逻辑和子表达式。

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

26. 同一个层次的所有语句左端对齐;Initial、always等语句块的begin关键词跟在本行的末尾,相应的end关键词与Initial、always对齐;这样做的好处是避免因begin独占一行而造成行数太多。

27. 不同变量,以及变量与符号、变量与括号之间都应当保留一个空格。

28. 使用//进行的注释行以分号结束;使用/* */进行的注释,/*和*/各占用一行,并且顶头。

8

Goke Microelectronics

9

2 基于ALTERA 的ASIC 验证

2.1 Stratix IV FPGA 资源与架构

图2-1 Stratix IV E Device Features

Stratix IV GX/GT FPGA 主要集成了最多可达48对全双工的CDR-based transceivers ,supporting data rates up to 8.5 Gbps and 11.3 Gbps respectively 。若不需要高速CDR-based transceivers ,可以选择Stratix IV EP4SE820 FPGA ,主要优势在logic, user I/O, memory intensive ,具有 820K LE ,33.2-Mbit RAM ,960 个 18 x 18 位乘法器,1120个用户可用IO ,132个高速LVDS IO ,12个PLL 。

Stratix IV EP4SE820 FPGA 的关键特性:

ASIC 设计-FPGA 原型验证

10

Up to 813,050 LEs in Stratix IV E devices, efficiently packed in unique and innovative adaptive logic modules (ALMs).Ten ALMs per logic array block (LAB) deliver faster performance, improved logic utilization and optimized routing 。

Up to 33,294 Kb of embedded memory operating at up to 600 MHz 。

Each memory block is independently configurable to be a single- or dual-port RAM, FIFO, ROM, or shift register 。

Up to 16 global clocks and 88 regional clocks optimally routed to meet the maximum performance of 800 MHz, Up to 71 (16 GCLK + 22 RCLK + 33 PCLK) clock networks per device quadrant in Stratix IV E devices 。

各个型号的资源如图2-1所示;LVDS 和PLL 的分布情况如图2-2所示;详细信息请参考Stratix IV Device Handbook 。

图2-2 Stratix IV E 系列FPGA 架构

2.2 QuartusII 设计工具

Altera 主要FPGA 开发工具为QuartusII ,现在最新版本为13.1。QuartusII 中FPGA 开发流程如图2-3所示,右边的矩形框内为每个步骤用到的工具。

Goke Microelectronics

11

设计流程设计工具

图2-3 QuartusII 设计流程

2.3 ASIC 设计转换

搭建FPGA 原型验证的第一步就是把ASIC 中的一些RAM 和PLL 转换成FPGA 中的可综合的RAM 和PLL 模型。

2.3.1 PLL 设计

Stratix IV 器件中的专用全局时钟网络 (GCLK)、局域时钟网络 (RCLK) 以及外围钟网络 (PCLK) 组成了具有层次结构的时钟架构,此结构提供了多达 236 个单一的时钟域(16 GCLK + 88 RCLK + 132 PCLK),并支持每个器件象限中多达 71 个单一的 GCLK 、RCLK 和 PCLK 时钟源 (16 GCLK + 22 RCLK + 33 PCLK)。 表 2–1列出了 Stratix IV 器件中的可用时钟资源。

ASIC 设计-FPGA 原型验证

12

表 2-1 Stratix IV 器件中的时钟资源

GCLK 和 RCLK 网络。

专用时钟输入管脚,有些时钟管脚只能作为输入,有些只能作为输出,详细定义参考Stratix IV GX and Stratix IV E Device Family Pin Connection Guidelines.pdf 。

时钟管脚可以是差分时钟或者是单端时钟。Stratix IV 器件支持 16 个差分时钟输入或者 32 个单端时钟输入。您也可以将专用时钟输入管脚CLK[15..0]用于高扇出控制信号,例如:异步清零、预置和时钟使能信号,以及用于协议信号,例如通过GCLK 或RCLK 网络中 PCIe 的TRDY 和IRDY 。

图2-4 时钟输入管脚与PLL 的连接关系

PLL 的时钟输入连接关系如图2-4所示,For single-ended clock inputs, only the CLK<#>p pin has a dedicated connection to the PLL. If you use the CLK<#>n pin, a global clock is used.。这些是非补偿的时钟输入路径。对于需要PLL 的补偿输入,

Goke Microelectronics

13

需使用相应的PLL_[L, R][1,4]_CLK 输入管脚。

PLL 时钟输出

Stratix IV PLL 能够驱动 GCLK 以及 RCLK 网络。不能通过内部生成的GCLK 或者RCLK 来驱动Stratix IV PLL 。PLL 的输入时钟必须来自专用时钟输入管脚或者 PLL 反馈的 GCLK 和 RCLK 。只有 PLL 计数器输出 C0 - C3 能够驱动 GCLK 网络。

在菜单界面选择tool->MegaWizard Plug-In Manager ,新建IP 选择Create a new custom megafunction variation ;修改已经存在的IP ,选择Edit a existing custom megafuction variation 。

图2-5 IP 核生成向导界面

点击Next ,搜索选择需要的ALTPLL IP ,器件类型,输出文件的类型和路径。灰色的IP 核为本器件不支持的IP ,高亮显示的为可用的。然后点击Next ,每一步更加需要配置相关参数,一直到最后生成verilog 文件。

图2-6 PLL 参数选择

ASIC 设计-FPGA 原型验证

14

图2-7 输入时钟设置

图2-8 输出c0设置

Goke Microelectronics

15

图2-9 更多输出时钟设置

输出c0默认选中,设置输出频率相对输入频率的M/D 值、占空比、相位等参数。如果还需要一个输出clk ,选中c1界面的Use this clock 。

图2-10 输出文件列表

在输出文件列表中,不需要blackbox 文件的话,取消选中最后一项PLL_bb.v

ASIC 设计-FPGA 原型验证

16

的blackbox 文件。点击Finish ,完成IP 核的设计。后期若需要修改某个参数,可以直接修改生成的verilog 文件。如下所示可以修改频率系数和占空比。

altpll_component.clk0_divide_by = 1,

altpll_component.clk0_duty_cycle = 50,

altpll_component.clk0_multiply_by = 3,

如果要查看PLL 相关说明文档,可以点击右上角的Documentation 。

2.3.1 RAM 设计

存储模块的转换分包括RAM (Ramdom Access Memory )、ROM (Read Only Memory )。RAM 主要存储程序运行中的变量和数据。ROM 主要用于存放CPU boot 程序。RAM 是易挥发性随机存取存储器,掉电后存储的内容都丢失。ROM 只读存储器,断电后信息不丢失。

RAM 有两大类,一种称为静态RAM (Static RAM/SRAM ),SRAM 速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU 的一级缓冲,二级缓冲。另一种称为动态RAM (Dynamic RAM/DRAM ),DRAM 保留数据的时间很短,速度也比SRAM 慢,不过它还是比任何的ROM 都要快,但从价格上来说DRAM 相比SRAM 要便宜很多,计算机内存就是DRAM 的。DDR RAM (Date-Rate RAM )也称作DDR SDRAM ,这种改进型的RAM 和SDRAM 是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存。DDR RAM 将会在第四章单独介绍。

在菜单界面选择tool->MegaWizard Plug-In Manager,根据需要选择单端或者双端RAM 和ROM 的类型,输出文件类型和路径。

图2-11 存储器类型选择

Goke Microelectronics

17

如图2-11,单端RAM 选择RAM :1-PORT, 双端RAM 选择RAM :2-PORT, 单端ROM 选择ROM :1-PORT, 双端ROM 选择ROM :2-PORT,器件类型选择Stratix IV ,输出文件类型选择Verilog HDL,设置输出文件路径和文件名。

如图2-12,选择RAM 的位宽和深度,使用的memory block 类型,一般选择A uto ,时钟策略Single clock 为输入输出为同一个clock ,Dual clock 为输入和输出或者读写分别采用不用的clock ,一般用于双端RAM 中。

图2-12 RAM 宽度和深度设置

图2-13 输出参数设置

相关主题
相关文档 最新文档