文档库 最新最全的文档下载
当前位置:文档库 › FPGA 设计技巧――ISE 高级设计工具

FPGA 设计技巧――ISE 高级设计工具

FPGA 设计技巧――ISE 高级设计工具
FPGA 设计技巧――ISE 高级设计工具

第十章 FPGA设计技巧――ISE高级设计工具

10.1 结构向导(Architecture Wizard)

10.2 管脚约束(PACE)

10.3 设计约束(Constrain Editor)

10.4 功耗分析(Xpower)

10.5 手工布局工具(Floorplanner)

10.6 手工布线工具(FPGA Editor)

10.7 下载工具(iMPACT)

10.8 PROM文件生成(PROM File Format)

10.9模块化设计工具(Modular Design)

10.9小结

在本章中介绍ISE中的几个工具,这些工具在一般的设计中不是很常用,本章也仅仅对这些工具做一个简单的介绍,使得读者有一个基本的概念和印象。

10.1 使用FloorPlanner手动布局逻辑块

如果读者有电路板的设计经验,那么就很容易理解FloorPlanner的流程与作用了。设计电路板时候,我们首先要画出原理图,接下来将原理图转换为网表传递给布线工具,我们在布线工具中画出板框大小尺寸,决定电路板的层数,设置布线线宽,再接下来要对元器件进行布局,然后进行布线。在电路板布局布线中,可以完全手工先布局,再布线。而在FPGA应用的设计中,先使用语言或原理图或其他方式描述我们的设计,这类似于电路板设计中的原理图,然后进行编译、综合将设计转换为RTL级其他格式的网表,这类似于电路板设计中原理图设计工具向布局布线工具转换网表,再下面,我们进行映射工作,就是将设计转换成的网表与具体的目标器件中的具体资源相结合起来,也即使用目标器件中的资源来实现我们设计的功能,这类似于电路板设计中将网表与具体的封装相结合,再接下来,我们可以决定使用目标FPGA器件中的哪些资源,这里我们就要进行布局工作了,这类似于电路板设计中的布局工作,最后,我们要将各个资源通过器件内部的互连线资源连接起来,也就是布线工作了,这类似于电路板设计中的布线工作。在一般的设计中,特别是入门阶段,由于对目标器件的内部结构及其资源不是很了解,很难对设计进行手工布局布线,我们这时候一般都是使用自动的布局布线方式。

Xilinx软件提供了强大的工具,使得我们可以手工布局布线。如前所述,这里需要读者对目标FPGA 器件的内部资源特别了解,这可以参阅本书前面的章节。如果不是很熟也没有关系,下面我将以极其通俗的语言来描述FloorPlanner,写书也确实是一件很困难的事情,尤其是当前几乎所有的比较好的资料都是英文的,有些术语确实难以翻译,尽管理解它的意思,像FloorPlanner如果翻译成布局工具,虽然较为合适,但也难以真正表达我的理解,如果直接将英文生搬硬套地翻译过来,这是对读者不负责的,也是应该受到谴责的,有关FloorPlanner等工具目前上市的中文书很少,也只有参照软件的英文说明了,有的地方也会有错误和不妥的地方,也希望读者能与我联系。讲了这些,只是希望我的这些罗罗嗦嗦的说明中,读者能轻松入门,尽早真正清楚地掌握各个工具,也希望能更快更好地发展我国的ASIC产业。讲了这么题外话,下面,言归正传吧。

通过前面的讲述,读者可能初步理解了FloorPlanner的作用,同时要说明的是,非常类似于电路板的设计流程,在FPGA的设计中,我们也可以将自动布局布线与手动布局布线相结合起来,这有时候是一个

循环和尝试的过程,即反复进行手动布局布线进行仿真看是否有时序方面的提高,直到满足要求为止。这也是一个设计方法。

下面我们还是以具体的实例来开始学习FloorPlanner吧。下面以一个2线-4线译码器为例来说明FloorPlanner的使用,这里使用的工具是ISE6.1SP3(补丁3)。

1、打开ISE,点击File->NewProject…新建一个工程,输入工程名为decoder24,工程路径为

D:\YHQProj\ISE\decoder,顶层模块类型为HDL,如图10-1-1所示,点击下一步,在出现的窗口中选择目标器件为Spartan2 xc2s100 tq144 –6,如图10-1-2所示,点击下一步,再点击下一步,点击下一步,点击完成;

图1 新建ISE工程

图10-1-2 选择目标器件类型

2、添加源文件,点击Project->New Source…,在出现的窗口中选择新文件类型为VHDL Module,输

入文件名为top,如图10-1-3所示,点击下一步,再点击下一步,点击完成;

图10-1-3 为工程添加源文件

3、在如图10-1-4的工程资源窗口(Sources in Project)中,双击top-behavioral (top.vhd),在主界面的

右侧会出现该文件的内容,我们输入以下内容作为该文件的内容:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity decoder24 is

Port ( a1,a0: in std_logic;

y: out std_logic_vector(3 downto 0));

end decoder24;

architecture Behavioral of decoder24 is

signal inputnum:std_logic_vector(1 downto 0);

begin

inputnum<=a1&a0;

process(inputnum)

begin

is

inputnum

case

"00"=>y<="0001";

when

"01"=>y<="0010";

when

"10"=>y<="0100";

when

"11"=>y<="1000";

when

others=>y<="XXXX";

when

case;

end

end

process;

end Behavioral;

图10-1-4 打开设计中的源文件

4、点击保存所有文件,下面就开始综合我们的设计,看看有没有错误发生,我们在工程资源窗

口(Sources in Project)中选中top-behavioral (top.vhd),然后在如图10-1-5所示的当前资源操作窗口(Processes for Source: “top-behavioral”)中,双击Synthesize – XST,系统提示有一个警告,点击Warnings选项卡可以看到警告的内容为如图10-1-6所示的内容,因为我使用的ISE6.1是评估版,所以有这个警告信息;

图10-1-5 对当前工程中的资源文件进行操作

图10-1-6 点击Warnings查看警告信息

5、这里为了后面的理解,我们先看看综合工具综合出的RTL视图是什么样的,我们双击View RTL

Schematic,这是会出现一个如图10-1-7所示的窗口,我们在如图10-1-8所示的RTL Design

Hierarchy窗口中选中Mdecod_y,然后点击图标,这时我们可以在右下部分的界面中看到如图

10-1-9所示的RTL原理图,我们双击图中最下面的方框可以看到如图10-1-10所示的底层RTL原理图,由此可以看出,设计由四个二输入与门和三个非门组成,关闭Xilinx ECS窗口;

图10-1-7 Xilinx ECS窗口

图10-1-8 RTL设计层次窗口

图10-1-9 综合成的RTL原理图

图10-1-10 底层RTL原理图

6、我们双击如图10-1-11所示的Floorplan Design,这时会出现如图10-1-12所示的窗口,这就是

Floorplanner的主界面;

图10-1-11 对设计中的文件进行操作

图10-1-12 Xilinx Floorplanner窗口

7、在Florplanner主界面中,点击将图放大到足够大,这时候就可以看到我们所选取的FPGA的

内部资源图,如图10-1-13所示,下面我们所要进行的工作是将各个模块进行布局,类似于电路板

的布局。我们点击Windows->Arrange Default,使得在主界面中同时显示设计层次以及FPGA内部资源窗口,我们在如图10-1-14所示的层次窗口中,选中最上面一个逻辑块,将它用鼠标拖拉到FPGA内部资源窗口中,在合适的位置放下来,注意拖拉的时候不要在层次窗口中向下拖动,而是横向拖到资源窗口中,在没有禁止符号的地方放置下来,同理放置层次窗口中下面的各个逻辑块,放置完毕后的资源窗口如图10-1-15所示,如果将图放足够大,可以看到每一个逻辑块的编号;

图10-1-13 选定的FPGA内部资源图

图10-1-14 设计层次窗口

图10-1-15 放置完毕后的资源窗口

8、点击保存设计,这时候会出现窗口提示输入文件名字,需保存两个文件,一个是Floorplanner

的网表文件,一个是约束文件,在约束文件中有刚刚我们所设置的管脚帮定等信息;

9、退出Floorplanner窗口;

10、为设计添加刚刚生产的约束文件,我们点击Project->Add Source…,选择刚刚生成的

decoder24.ucf文件,点击打开将其添加到工程中;

11、我们在工程资源窗口(Sources in Project)中选中top-behavioral (top.vhd),然后在如图10-1-16

所示的当前资源操作窗口(Processes for Source: “top-behavioral”)中,双击View/Edit Placed Design(FPGA Editor),可以看到布线后的内部资源窗口如图10-1-17所示,当然我们也可以手工布线,这将在后续章节讲述;

图10-1-16 当前资源操作窗口

图10-1-17 布线后的资源图

12、至此,我们已经初步了解了Floorplanner的基本操作,这是最基本的操作,有关的更深入的

操作还是要读者去慢慢摸索了。其实Floorplanner的主要功能是将设计中的逻辑最佳地分组,同时也可以手动进行放置逻辑块的操作。因为例子很简单没有涉及分组操作,分组就是将联系紧密连线较多的逻辑块合成一个组,以后就可以按组进行放置逻辑块了。

10.2 使用FPGA Editor进行手动布局布线

如上节开始所述,在ISE中提供了手动布局布线的功能,这些功能在设计很大的时候可以提高设计的时序性能以及能使设计的密度更大更容易布线成功等等,这些功能是通过Floorplanner和FPGA Editor实现的,同时,我们也可以利用Floorplanner和FPGA Editor生成约束文件。在本节中,我们讨论手动布线工具FPGA Editor,我们还是通过一个例子来简单地说明其使用方法。

1、打开上一节设计的工程,可以通过双击工程文件或启动ISE后打开工程文件来打开它;

2、在如图10-2-1的窗口中,选中decoder24-behavoral(top.vhd),在如图10-2-2所示的窗口中双击

Manually Place & Route (FPGA Editor),这时候会出现如图10-2-3所示的窗口,我们可以一直放大该窗口,发现这完全是目标FGPA器件的内部逻辑块图,还没有引入我们的设计;

图10-2-1 工程中的资源窗口

图10-2-2 当前文件的可用进程

图10-2-3 FPGA Editor窗口

3、下面就要引入我们的设计,点击图标,会出现一个打开窗口,提示输入我们的设计以及物理

约束文件,所谓的物理约束文件一般是在映射过程中创建的,或者是我们通过FPGA Editor创建的,我们输入设计以及约束文件如图10-2-4所示,在Edit Mode中选择Read Write以便可以对设计中的逻辑块位置重新调整,点击OK;

图10-2-4 为FPGA Editor添加设计文件以及物理约束文件

4、有时候,这一步会有警告信息出现,警告信息如图10-2-5所示,我们点击是(Y);

图10-2-5 警告信息

5、有时候这一步又会有错误信息,如图10-2-6所示,我们点击确定,好了,这时候总算看到我们上

一节布局的结果了,如图10-2-7所示,这个界面就是我们进行布线操作的界面;

图10-2-6 错误信息

图10-2-7 FPGA Editor打开了布局结果后的界面

6、我们先试一下自动布线,点击Tools->Route->Auto Route All,这时候,可以看到自动布线后的结

果如图10-2-8所示;

图10-2-8 自动布局布线结果

7、再试一下手动布线,先把自动布线结果删除,点击Tools->Route->Unroute All,在出现的确认对

话框中点击确定,这时候又回到了布线前的状态,我们可以把图放大,点击y<1>中有鼠线的引脚,这里鼠线就是图中的绿色的线,表示两引脚之间有连接,但还没有布线,布线后,鼠线会消失,

如果放大图后没有显示标签y<1>,可以点击来显示,另外要注意的就是这里一定要选择引脚,

而不能选择鼠线,选中以后,再按Ctrl键的同时点击与该鼠线相连的另一个管脚,选中后,会在

该管脚上有一个红色的三角表示选中,选中两端之后,点击界面右侧的按钮,这时候,

可以看到这条鼠线已布线,这就是手动布线,也许你感觉点击route仍是自动布线,两点间的连线没有办法,自动布线也许与手动布线结果相同,但对于一个连接多个逻辑引脚的鼠线来说就有一个布线顺序的问题,这个布线顺序就体现了手动功能,我们依次选中各个相连的逻辑引脚,再按

进行布线,可以发现布线后的连接顺序是刚刚选取的顺序,我们可以对图中的a1进行布线,a1共有5个逻辑引脚相连,我们可以选择不同的顺序试一下,一个技巧是先选中鼠线,以便查看哪些逻辑引脚相连,在点击route前再点一下该鼠线以不选中,再点击即可,

图10-2-9显示了一个手工布线的结果,在其中有部分连线没有布线,在实际设计中也可以只布线几个关键的逻辑引脚,其余的自动布线完成;

图10-2-9 手工布线结果

8、手工布线结束后要进行规则检查,看看布线结果是否符合要求,点击Tools->DRC->Setup…会出现

设置检查规则的窗口,如图10-2-10所示,点击Tools->DRC->Run,看看有没有错误和警告信息,如果有错误需要更改相关的地方;

图10-2-10 设置DRC检查检查

9、点击图标保存设计并关闭FPGA Editor;

10、双击如图10-2-11所示窗口中的View/Edit Routed Design (FPGA Editor),可以看到如图10-2-12

所示的最终布线结果;

图10-2-11当前文件的可用进程

图10-2-12 布线最终结果

在本节仅仅简略的讲述了FPGA Editor的操作流程,还有许多其他的方面没有介绍,本节仅仅起到入门的作用。若读者需要更深入地使用该软件还要自己多多练习多多尝试了。

10.3 使用XPower分析设计的功耗

Xpower是ISE集成的一个功耗分析工具,使用该工具可以分析使用的目标器件的功耗,并能分析出电池的使用时间等信息,关于功耗分析方面的理论知识及计算公式,读者可以参阅其他教材或帮助文档,在本节仅仅就软件本身的使用做一个简略的介绍。本节的生成VCD文件部分需要安装ModelSim软件,如

果没有安装ModelSim读者可以略过生成VCD文件的几个步骤。

下面还是以我们上面设计的例子来说明。

1、使用ISE打开上一节的设计;

2、新建一个仿真波形输入文件,点击Project->New Source…,会出现一个窗口提示我们输入新建资

源的名称及类型,我们选择类型为Test Bench Waveform,文件名为top_tbw,如图10-3-1所示,点击“下一步”,出现选择与其关联的文件,我们选择decoder24,其实我们的设计中也只有这一个VHDL源文件,点击“下一步”,出现界面给出我们新建文件的信息,点击“完成”;

图10-3-1

3、这时候出现了初试化时序的设置,我们直接点击“OK”,这时会在ISE内出现了设置波形的窗口,

我们设置波形如图10-3-2所示,点击图中的保存;

图10-3-2 设置波形

4、我们设置仿真波形的目的是得到仿真中生产的VCD文件,为了得到VCD文件,我们需要进行

一些设置,首先在Sources in Project窗口中选中top_tbw(top_tbw.tbw),然后在Process for Source: “top_tbw”窗口中选中Simulate Post-Place & Route VHDL Model,然后点击右键,选择Properties…,这时候会出现如图10-3-3所示的窗口,我们在Generate VCD File后面打勾表示在仿真时生成VCD 文件,点击确定;

图10-3-3 设置仿真选项

5、接下来我们就要运行仿真以生成VCD文件,方法是双击Simulate Post-Place & Route VHDL

Model,这时候会自动运行ModelSim,并打开了仿真波形如图10-3-4所示,注意这里的仿真需要一些Xilinx提供的仿真库,在ModelSimXE版本中包括了这些库,如果使用ModelSimSE等版本需要首先编译这些库文件,我们退出ModelSim;

图10-3-4 使用ModelSim进行仿真的波形

6、接下来就要进行功耗分析了,在首先在Sources in Project窗口中选中

decoder24-behavioral(top.vhd),然后在Process for Source: “top_tbw”窗口中双击Analyze Power(XPower),如图10-3-5所示,这时候会出现XPower主界面,

图10-3-5

图10-3-6 XPower主界面

7、我们点击图中左下脚Report Views前面的加号,再点击Power Report,这时候,会在界面的右侧

出现功耗报告,报告的内容有功耗分析、温度分析以及建议的解耦电容参数等信息,本例的报告如下:

---------------------------------------------------------------- Release 6.1.03i - XPower SoftwareVersion:G.26

Copyright (c) 1995-2003 Xilinx, Inc. All rights reserved. Design: decoder24

Preferences: decoder24.pcf

VCD File: D:\YHQProj\ISE\decoder24\decoder24.vcd

Part: 2s100tq144-6

Data version: PRELIMINARY,v1.0,07-31-02

Power summary: I(mA) P(mW)

---------------------------------------------------------------- Total estimated power consumption: 15

Peak Power consumption: 14351

---

Vccint 2.50V: 2 5

Vcco33 3.30V: 3 10

---

Inputs: 0 0

Logic: 0 0

Outputs:

Vcco33 1 3

Signals: 0 0

---

Quiescent Vccint 2.50V: 2 5

Quiescent Vcco33 3.30V: 2 7

Thermal summary:

---------------------------------------------------------------- Estimated junction temperature: 25C

Ambient temp: 25C

Case temp: 25C

Theta J-A range: 31 - 32C/W

Decoupling Network Summary: Cap Range (uF) #

---------------------------------------------------------------- Capacitor Recommendations:

Total for Vccint : 8

470.0 - 1000.0 : 1

0.0470 - 0.2200 : 1

0.0100 - 0.0470 : 2

0.0010 - 0.0047 : 4

---

Total for Vcco33 : 3

470.0 - 1000.0 : 1

FPGA硬件实战设计经验

TR_Con_ZD板卡设计经验总结 针对TR板卡的PCB布线一根线未动想到的TR板卡bank分配方法介绍 与原来在华为工作的师兄(他做的TR板卡的PCB)聊了一下,他说TR板卡的FPGA线序一根都没改。Bank分配是我来做的,原则是方便PCB走线。分配时候是参考下面的资料来分配的。 TR板卡结构图 XC6VSX315T-FF1759的bank管脚分布图

的上方,因此将FPGA逆时针转90°,如下图所示,这样PCB布线就比较方便了。

分配bank的时候没有考虑Bank在FPGA内部的分布图,如下图所示:

想到的硬件设计流程的东西 师兄说:“动一根线的话,都需要FPGA程序重新跑一遍,这需要浪费很多时间。”FPGA 程序?TR板卡的程序还没有呢!的确值得思考了,到底这个设计应该是按照怎样的一个流程。 在华为,是按照这样的流程进行的。 1.硬件设计人员将IO需求,板卡供电等情况反馈给逻辑设计人员 2.逻辑人员对所需的FPGA资源做评估,最终确定FPGA型号(硬件设计人员也可以参与 一起选型) 3.逻辑设计人员对FPGA进行bank分配,需要以下资源: a)硬件设计人员提供硬件设计框图 b)最好对所用的IO先画一个自己根据原理图框图分配的bank的原理图草图,导入 PCB后进行一下预布局,这样信号流程就清晰了。 逻辑人员根据上述资源进行bank的分配,因为他们对FPGA内部的资源最清楚。逻辑人员要兼顾PCB布局布线的方便,有时候不可能照顾都到布局布线的方便。这时候,就需要在硬件设计人员和FPGA设计人员之间来回折腾,最终兼顾双方,得到一个bank 分配方案。 4.FPGA人员根据bank分配,写一个测试评估的程序,如果能够跑通,时序满足设计需求, 说明现在的bank分配可以使用,如果出现严重的时序错误,那么就需要考虑重新分配bank,通过不断地调整,最终确定板卡的bank分配。 5.根据最终的bank分配方案设计原理图。

FPGACPLD数字电路设计经验

FPGA/CPLD数字电路设计经验分享 摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。 关键词:FPGA数字电路时序时延路径建立时间保持时间 1 数字电路设计中的几个基本概念: 1.1 建立时间和保持时间: 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间 注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。 建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。

典型的FPGA设计开发流程

典型的FPGA 设计开发流程 (2011-10-02 16:08:17) 标签: 杂谈 分类: 专业总结 FPGA 的设计流程就是利用EDA 开发软件和编程工具对FPGA 芯片进行开发的过程。FPGA 的开发流程一般如图1所示,包括电路设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与调试等主要步骤。 图1 FPGA 开发的一般流程 1. 电路功能设计 在系统设计之前,首先要进行的是方案论证、系统设计和FPGA 芯片选择等准备工作。系统工程师根

据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。 2.设计输入 设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。目前,在实际开发中应用最广的就是HDL语言输入法,利用文本描述设计,可以分为普通HDL和行为HDL。普通HDL有ABEL、CUR 等,支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。而在中大型工程中,主要使用行为HDL,其主流语言是Verilog HDL和VHDL。这两种语言都是美国电气与电子工程师协会(IEEE)的标准,其共同的突出特点有:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。 3.功能仿真 功能仿真,也称为前仿真,是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。虽然功能仿真不是FPGA开发过程中的必需步骤,但却是系统设计中最关键的一步。

FPGA学习心得

回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。 废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段: ①、Verilog语言的学习,熟悉Verilog语言的各种语法。 ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA 板子。 ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII 的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在 Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。 其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍: ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。 ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。 学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。 Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。 刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD 的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好: ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。 ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。

一个合格的FPGA工程师需要掌握哪些知识

一个合格的FPGA工程师需要掌握哪些知识?这里根据自己的一些心得总结一下,其他朋友可以补充啊。 1.Verilog语言及其于硬件电路之间的关系。 2.器件结构(最好熟练掌握Spartan3,Vertix4系列的器件结构,及其资源于Verilog行为描述方法的关系。)。 3.开发工具(熟练掌握Synplify,Quartus,ISE,Modelsim)。 4.数字电路(组合电路,触发器,特别是D触发器构成分频器,奇数倍分频占空比为50%,时序电路,并且能用Verilog语言描叙。)。 5.熟悉FPGA设计流程(仿真,综合,布局布线,时序分析)。 6.熟练掌握资源估算(特别是slice,lut,ram等资源的估算)。 7.同步设计原理。 8.熟练掌握基本概念(如建立时间,保持时间,流量(即所做FPGA设计的波特率)计算,延迟时间计算(所做FPGA设计),竞争冒险,消除毛刺的方法等等)。 9.具备具体设计经验(对应届生而言如毕业设计)。 10.良好的设计思路(流水线设计即熟称打拍子,在速率资源功耗之间的折中考虑)。 一个合格的FPGA工程师至少在以下三个方面的一个非常熟悉: 1.嵌入式应用 2.DSP应用 3.高速收发器应用 将自己的走过的弯路和总结的经验与大家分享一下,希望对您有一点点

的参考价值。 首先从先从如何成为一个合格的设计者说起吧!初学者觉得一切都是挑战,一切都新鲜,不知从何处下手。我总结了学习EDA逻辑设计的4个步骤,请拍砖! 1。首先,应该好好学习一下FPGA/CPLD的设计设计流程。 不要简单的以为就是设计输入-》仿真-》综合-》实现那么一回事,要抠细,要学精,要多问每个步骤的注意事项,区分相关步骤的联系和区别。比如要搞清楚功能仿真、综合后仿真、Translate后仿真、Map 后的仿真、布局布线后仿真的作用都是什么,什么时候应该做,什么时候可以不做这些仿真!学习清楚了设计流程最大的好处就是有利于培养良好的EDA设计习惯,日后会受益非浅! 2。关于设计输入和Coding Style。 设计输入最好学习HDL语言,Verilog、VHDL都可以,可以把状态机输入和原理图输入作为补充内容,但不是重点。我在前面的帖子已经反复强调了Coding Style的重要性。因为它是逻辑设计人员的一个基本业务素质。而且Coding Style不是看几篇文章,学几条原则就能够成为高手的,他需要您在工作中不断的体会和积累,在学习的最初,有Coding Style的意识,设计者就会有意的积累,对日后发展很有好处。反之则后患无穷。 3。培养硬件的意识,培养系统的观念。 我也在交流和授课的时候很强调硬件意识,如果从形式上看,逻辑设计随着智能化和优化手段的不断发展最后会越来越灵活,越来越简单。比

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。 后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。 在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。 我们先谈一下FPGA基本知识: 1.硬件设计基本原则 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。速度与面积平衡和互换原则: 一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约; 反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进

(完整版)FPGA资深FAE的经验独白

骏龙科技Andrew —— FPGA资深FAE的经验独白 时间:2014-08-25 来源:elecfans 作者: 关键字:FPGA FAE骏龙科技 看似简单的几个问题,Andrew却回答的井井有条,小编已经没有办法有什么其他词语去形容了。本文Andrew不仅仅对FPGA入门学习流程做了详细的分享,更是对FPGA开发工作的要求分成大公司和小公司两个层面来分析。你能想象曾经从一个疏忽学业的人成为一名资深FAE的嘛? 1. 您认为想学FPGA的话,先学好什么才最重要? Andrew:我们玩FPGA的通常就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,当然这只是入门必备,实际上远远不够。个人拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程之外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等经常需要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,能够查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中难免有一些需要配置控制的需求,使用外置单片机或者内置ARM硬核或者其他软CPU来实现,简单又方便;由于本人水平有限,其他方面这里就不再赘述。 那么,针对FPGA入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道: 1.首先要有开发平台,把该准备的都准备好,磨刀不误砍柴工: 比如ALTERA的Quartus II软件、开发板和配置调试工具USB Blaster,以及仿真软件Modelsim SE。软件可以从网上下载,入门功能的许可的和谐方法一大堆;开发板和USB Blaster可以借,可以买,动手能力强的朋友,自己画一块也行。对于初学者,建议找一块有详细配套教程的开发板。 2. 对于新手来讲,按部就班地学习往往就是最快的学习方法: 照猫画虎尽管囫囵吞枣一知半解,但起码能把开发流程摸熟,能跑起来。刚拿到开发板,肯定是丈二和尚摸不着头脑。这个时候,建议先根据开发板的配套教程,把原理图上的各项模块功能厘清,把FPGA周围的电源、时钟、复位、配置、GPIO和连接器等的电路原理理一理分析分析。再按照配套教程中介绍的流程,把配套的测试工程跑通,在这个阶段,

个人总结FPGA设计中Verilog编程的27条经验

个人总结Verilog编程27条经验 1.强烈建议用同步设计; 2.在设计时总是记住时序问题; 3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿 或下降沿触发等问题,在所有模块中都要遵守它; 4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合 适,当在3层以上时,最好修改写法,因为这样不仅可以reduce area,而且可以获得好的timing); 5.在锁存一个信号或总线时要小心,对于整个design,尽量避免使用latch, 因为在DFT时很难test; 6.确信所有的信号被复位,在DFT时,所有的FlipFlop都是controllable; 7.永远不要再写入之前读取任何内部存储器(如SRAM); 8.从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时 钟FIFO(是异步的),可以用Async SRAM搭建Async FIFO; 9.在VHDL中二维数组可以使用,它是非常有用的。在VERILOG中他仅仅可以使 用在测试模块中,不能被综合; 10.遵守register-in register-out规则; 11.像synopsys的DC的综合工具是非常稳定的,任何bugs都不会从综合工具中 产生 12.确保FPGA版本与ASIC的版本尽可能的相似,特别是SRAM类型,若版本一致 是最理想的,但是在工作中FPGA版本一般用FPGA自带的SRAM,ASIC版本一般用厂商提供的SRAM; 13.在嵌入式存储器中使用BIST; 14.虚单元和一些修正电路是必需的; 15.一些简单的测试电路也是需要的,经常在一个芯片中有许多测试模块; 16.除非低功耗不要用门控时钟,强烈建议不要在design中使用gate clock; 17.不要依靠脚本来保证设计。但是在脚本中的一些好的约束能够起到更好的性 能(例如前向加法器); 18.如果时间充裕,通过时钟做一个多锁存器来取代用MUX; 19.不要用内部tri-state, ASIC需要总线保持器来处理内部tri-state,如IO cell; 20.在top level中作pad insertion; 21.选择pad时要小心(如上拉能力,施密特触发器,5伏耐压等),选择合适的 IO cell; 22.小心由时钟偏差引起的问题; 23.不要试着产生半周期信号; 24.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数; 25.在一个计算等式中排列每个信号的位数是一个好习惯,即使综合工具能做; 26.不要使用HDL提供的除法器; 27.削减不必要的时钟。它会在设计和布局中引起很多麻烦,大多数FPGA有1- 4个专门的时钟通道;

FPGA研发牛人心得总结

FPGA研发之道 FPGA是个什么玩意? FPGA是个什么玩意? 首先来说: FPGA是一种器件。其英文名feild programable gate arry 。很长,但不通俗。通俗来说,是一种功能强大似乎无所不能的器件。通常用于通信、网络、图像处理、工业控制等不同领域的器件。就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。只不过,一样的编程,却是不一样的思想。嵌入式软件人员看到的是C。而FPGA工程师看到是硬件描述语言,verilog或VHDL。软件看到是函数、对象、重构。FPGA工程师则是模块、流水、复用。从现象上看,都是代码到下载程序再到硬件上运行。不能只看现象而忽略本质。FPGA 开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。其实现的功能却一点也不逊色于百万身价流片的近亲。从而成为独树一帜的行业。 FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。那硬件描述语言描述的是什么?这里描述的就是组合逻辑电路和时序逻辑电路。组合逻辑电路就是大家所熟知的与门、或门、非门。时序逻辑电路则是触发器。数字芯片上绝大部分逻辑都是这两种逻辑实现的。也就是基本上每个电子行业的人所学过的数字电路。顺便说一下,感谢香农大师,在其硕士毕业论文<继电器与开关电路的符号分析>就奠定了数字电路的的根基。只

第8章FPGA设计技巧与设计经验介绍

第1节基本设计技巧 乒乓操作 1 操作过程 2 从外部看,数据流没有停顿的进出 3 用低速模块处理高速数据流 4 实际上,用两个缓冲模块实现了串并转换,两个预处理模块并行,面积换速度;串并转换 串并转换 1 FPGA设计的一个重要技巧 2 数据流处理的常用手段 3 面积与速度互换思想的直接体现 串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用: 1 寄存器:小设计 2 RAM:数据量比较大的情况 3 状态机:复杂的串并转换 流水线操作 1 流水线处理是高速设计中的一个常用设计手段 2 如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或

者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法提高系统的工作频率。 3 将适当划分的n个操作步骤单向串连起来 4 数据流在流水线各个部分的处理,从时间上看是连续的 5 数据流依次流经n个模块,完成每个步骤的操作 6 流水线设计时,时序要进行合理安排,每个操作步骤的划分要合理,仔细考虑各个步骤间的数据流量 7 如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级直接输出到后级的输入即可 8 如果前级操作时间大于后级的操作时间,则后级会经常空闲。可以对前级的输出数据适当缓存,再输出到后级的输入端如果前级操作时间小于后级的操作时间,则必须通过复制逻辑,将数据流分流和并行预处理,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出 数据接口的同步 1 两种易出问题的设计习惯 --手工加入非门调整数据延迟,从而保证本级时钟对上级数据的建立、保持时间的要求 --为了有稳定的采样,时而用正沿打一下数据,时而用负沿打一下数据,以调整数据的采样位置 2 问题 --一旦芯片更新换代,或者移植到其它器件系列的芯片上,采样实现必须重新设计 --这两种做法造成电路实现的时序余量不够,一旦外界条件变换(比如温度升高),采样时序就有可能紊乱,造成电路不能完成预定的功能 3 如果输入数据的节拍和本系统处理时钟同频,可以直接用本系统的主时钟对输入数据寄存器采样,完成输入数据的同步化如果输入数据的节拍和本系统处理时钟同频,可以直接用本系统的主时钟对输入数据寄存器采样,完成输入数据的同步化 4 为了避免异步时钟域产生错误的采样数据,一般使用RAM、FIFO缓存的方法完成异步时钟域的数据转换。在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,就非 第2节FPGA设计思考 硬件描述语言的层次含义

10年FPGA开发经验的工程师肺腑之言

10年FPGA开发经验的工程师肺腑之言 从大学时代第一次接触FPGA至今已有10多年的时间。至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。 在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL 语言大有裨益,往往会起到事半功倍的效果。 当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。 1)看代码,建模型 只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。 例如: 上面这段代码实现的功能就是一个带使能端的2选1数据选择器,如下图所示。

再例如: 上面这段always实现的是带同步清零端的串并转换移位寄存器,位宽为width,下图为8位电路模型 当你具备了一定的识代码能力之后,你会发现原来Verilog不是那么的枯燥,只不过是一个个电路模型的拼搭而已。 2)组合逻辑中的if...else...与case 对于多输入端的组合逻辑来说,如果不需要考虑优先级应该尽量采用case语句来描述,这样综合出来的电路并行度要大一些,如果采用if...else...结构,综合出来的电路都是串行的,增大了信号时延路径。降低寄存器间组合路径的延迟是提高系统工作频率的主要手段,因此在完成相同功能的前提下应该尽量使用并行结构逻辑。

FPGA学习心得体会

篇一:fpga学习心得大报告 《fpga技术基础》学习报告 --课程内容学习心得 姓名: 学号:年级专业: 指导教师: 瞿麟 201010401128 自动化101薛小军摘要从开始学fpga到现在粗略算来的话,已经有3个多月了,就目前而言,我并不确定自己算不算高手们所说的入门了,fpga学习总结。但是不管现在的水平如何,现在就总结一下自己学习它的感受或一些认识吧。 关键词 fpga de2板 quartusii软件 verilog语言 引言 fpga是什么?fpga现状?怎样学习fpga? fpga是现场可编程门阵列的简称,fpga的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热门领域。并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。越来越多的设计也开始以asic转向fpga, fpga正以各种电子产品的形式进入了我们日常生活的各个角落。 正文 (1)掌握fpga的编程语言 在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从c语言开始入门,当掌握了c语言之后,开发单片机应用程序也就不是什么难事了。学习fpga也是如此,fpga的编程语言有两种:vhdl和verilog,这两种语言都适合用于fpga的编程。 (2)fpga实验尤为重要 除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的fpga里运行起来,这时我们需要选一块板子进行实验,我们选择使用de2板才进行试验。 初识de2开发板 de2的资源de2的资源非常丰富,包括 1. 核心的fpga芯片-cyclone ii 2c35 f672c6,从名称可以看出,它包含有35千个le,在altera的芯片系列中,不算最多,但也绝对够用。altera下载控制芯片- epcs16以及usb-blaste对jtag的支持。 2.存储用的芯片有: 512-kb sram,8-mbyte sdram,4-mbyte flash memory 3. 经典io配置:拥有4个按钮,18个拨动开关,18个红色发光二极管,9个绿色发光二极管,8个七段数码管,16*2字符液晶显示屏, 4. 超强多媒体:24位cd音质音频芯片wm8731(mic输入+linein+ 标准音频输出),视频解码芯片(支持ntsc/pal制式),带有高速dac视屏输出vga模块。 5.更多标准接口:通用串行总线usb控制模块以及a、b型接口,sd card接口,irda红外模块, 10/100m自适应以太网络适配器,rs-232标准串口, ps/2键盘接口 6.其他:50m,27m晶振各一个,支持外部时钟, 80针带保护电路的外接io 7.此外还有:配套的光盘资料,qutuarsii软件,niosii 6.0ide,例程与说明文档。 关于管脚分配 当我们创建一个fpga用户系统的时候,到最后要做的工作就是下载,在下载之前必须根据芯片的型号分配管脚,这样才能将程序中特定功能的管脚与实际中的fpga片外硬件电路一一对

fpga学习心得体会

fpga学习心得体会 篇一:FPGa学习心得大报告 《FPGa技术基础》学习报告 --课程内容学习心得 姓名: 学号:年级专业: 指导教师: 瞿麟20XX10401128自动化101薛小军 摘要从开始学FPGa到现在粗略算来的话,已经有3个多月了,就目前而言,我并不确定自己算不算高手们所说的入门了,FPGa学习总结。但是不管现在的水平如何,现在就总结一下自己学习它的感受或一些认识吧。 关键词 FPGadE2板Quartusii软件Verilog语言 引言 FPGa是什么?FPGa现状?怎样学习FPGa? FPGa是现场可编程门阵列的简称,FPGa的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消

费类市场、测量测试等多个热门领域。并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。越来越多的设计也开始以aSic 转向FPGa,FPGa正以各种电子产品的形式进入了我们日常生活的各个角落。 正文 (1)掌握FPGa的编程语言 在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从c语言开始入门,当掌握了c语言之后,开发单片机应用程序也就不是什么难事了。学习FPGa也是如此,FPGa的编程语言有两种:VHdL和Verilog,这两种语言都适合用于FPGa的编程。(2)FPGa实验尤为重要 除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的FPGa里运行起来,这时我们需要选一块板子进行实验,我们选择使用dE2板才进行试验。 初识dE2开发板 dE2的资源 dE2的资源非常丰富,包括 1.核心的FPGa芯片-cycloneii2c35F672c6,从名称可以看出,它包含有35千个LE,在altera的芯片系列中,不算最多,但也绝对够用。altera下载控制芯片-EPcS16以及USB-Blaste对Jtag的支持。 2.存储用的芯片有:512-KBSRam,8-mbyteSdRam,4-mbyteFlashmemory

FPGA架构设计

FPGA架构设计 前言 FPGA架构设计人员需要对FPGA开发本身足够熟悉外,对FPGA的优劣势、等都要心中有数。接下来就是对FPGA的架构流程、注意点有足够的知识和经验。本文就对FPGA架构设计进行系统讲解。 勿用讳言,现在国内FPGA开发还处于小作坊的开发阶段,一般都是三、四个人,七八台机器.小作坊如何也能做出大成果。这是每个FPGA工程师都要面临的问题。架构设计是面临的第一关。经常有这样的项目,需求分析,架构设计匆匆忙忙,号称一两个月开发完毕,实际上维护项目就花了一年半时间。主要包括几个问题,一,性能不满足需求。二,设计频繁变更。三,系统不稳定,调试问题不收敛。 磨刀不误砍柴工,FPGA设计的需求分析是整个设计第一步。如何将系统的功能需求,转换成FPGA 的设计需求,是FPGA架构设计的首要问题。首先,需要明确划分软件和硬件的边界。软件主要处理输入输出、界面显示、系统管理、设备维护。而FPGA则负责大数据流的处理。 如果使用几百元FPGA实现了一个十几元单片机就能完成的功能,就算实现的非常完美,那么这是一个什么样的神设计?任何一个项目都要考虑成本,研发成本、物料成本、维护成本等等。FPGA的使用位置必定是其他器件难以企及的优势。 因此对于一个FPGA架构设计,其首先需要考虑就是性能,如没有性能的需求,其他的处理器ARM 就可能替代其功能。其次就是接口,用于处理器扩展其没有的接口,作为高速接口转换。最后,需要考虑就是可维护性,FPGA的调试是非常耗时的,一个大型的FPGA的编译时间在几小时甚至更高(通过嵌入式分析仪抓信号,每天工作8小时,只能分析两到三次)。而软件调试只需make,编译时间以秒来记(这个问题可以通过提升编译服务器性能改善而不能消失,本质上要考虑可测性设计)。如果不考虑维护性和可测性,调试成本和压力就非常之大。 下面主要介绍几个FPGA架构设计过程中通常考虑点。 架构设计方式:流驱动和调用式 通常,FPGA的大部分架构设计可以采用数据流驱动的方式来实现,例子1,假设一个实现视频解压缩FPGA的设计,输入是无线接口,输出为显示屏。那么输入输出的接口基本就能确定。以数据流为驱动可以粗略划分,输入接口->解压缩模块->视频转换模块->显示接口。如需要视频缓冲,则确定是否需要连接外部存储器。那就需要确认在什么位置进行数据的缓冲。通过要支持显示的画面的质量,就能确认最大码流,同样可以计算视频解压模块和转换模块的计算能力,从而导出所需的内部总线宽度,系统频率,以及子模块个数等等。例子2,某支持通过有线电视网上网电视IP网关,同样也是输入的普通IP网络,输出为有线调试网的调试解调器。将IP报文等长填充后,在固定时隙内送入有线电视网中,同样也是基于数据流驱动的方式。 数据流驱动式架构,可以作为FPGA设计中一个最重要的架构。通常来说应用于IP领域、存储领域、数字处理领域等较大型FPGA设计都是数据流驱动式架构,主要包括输入接口单元,主处理单元,输出接口单元。还可能包括,辅助处理单元、外部存储单元。这些单元之间一般采用流水式处理,即处理完毕后,数据打包发完下一级处理。其中输入输出可能有多个,此时还需要架构内部实现数据的交换。

9年FPGA工作经验总结

9年FPGA工作经验总结 三年的,用altera的c3和c4 做led控制卡。2年的用lattice的MACHXO-XO2和ECP2做了视频和网络光端机,3年的XILINX的SPARTAN 6 做了视频ISP处理,现在一年的xilinx的ZYNQ做机器视觉。 第一个,9年的fpga,说起来,给我感觉fpga写代码牛逼的人,都是写着看不懂的代码。基本上的代码都是小逻辑做的。大逻辑做的都是沙雕。 第二个,知道各类高速接口,做fpga只会玩玩串口,I2C,SPI还有DVI,这种低能儿工资也就是低于几千块钱。高速总线,列入DDR3控制,双边沿,SERDRES,这个是必须知道怎么用,怎么调试。好多沙雕就知道下载代码,有问题也不知道从哪里入手。 第三个,知道时序约束,fpga很傻的元件,你经常发现,他自己不知道哪个是时钟,要求跑多少。还有各类并行总线,要求相位抖动控制多少。还有不同时钟不要去约束。特别是用低端器件,用上了60%资源的人,经常无缘无故的bug的,低于五位数的工资基本不知道啥原因的。 第四个,也就是我一直遗憾的东西,行业的算法和需求了。有些沙雕一辈子就是打工的命。一年除去房租和吃饭,回去大农村还被邻居鄙视大学生读书无用。所以有些时候,要学会沉淀。也许我当年在led行业待了9年,我估计现在已经接无数的兼职和订单,少数一年买个宝马x1没有问题。哪像现在,自己出来真怕死。 就说这些。我转行了。一把眼泪。有人问我,是不是工资太少了。拿着别人要饭的钱,都是吊丝。想想你农村的父母和还有孩子吧。好好想点更快的路子。做硬件工程师,是做产品的第一步。因为你要面对很多销售沙雕,他们很有钱,但是天花乱坠的需求,这个时候,你只有学会硬件才能制造硬件方案。然后找软件工程师一起协作做项目。我以前的兼职项目就死在这里了。(小编注:其实楼主的工资不算低) 而且FPGA工程师,也必须熟悉硬件。连原理图都看不懂,你还做啥这么没前途的东西。 还有一个ZYNQ平台,fpga 工程师要学会arm的裸跑系统。因为我被傻x害惨了。

fpga设计心得体会

fpga设计心得体会 篇一:fpga设计的几个实例 Verilog HDL设计练习一.简单的组合逻辑设计 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=1:0,这是一种在组合逻辑实现分支判断时常使用的格式。模块源代码: " ,.b); 等为模块要连接的信号 endmodule 仿真波形(部分): 练习: 设计一个字节(8位)比较器。 要求:比较两个字节的大小,如a[7:0]大于 b[7:0]输出高电平,否则输出低电平,改写测试模型,使其能进行比较

全面的测试。 练习二. 简单时序逻辑电路的设计 目的:掌握基本时序逻辑电路的实现。 在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 @或 @的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。 lk_in,.clk_out); endmodule 仿真波形: 练习:依然作clk_in的二分频clk_out,要求输出与上例的输出正好反相。编写测试模块,给出仿真波形篇二:fpga设计流程 1. FPGA开发流程:电路设计与设计输入仿真验证:利用Xilinx集成的仿真工具足矣逻辑综合:利用XST工具布局布线:利用Xilinx的Implementation Tool工具 FPGA配置下载:利用iMPACT工具 2. 时序标注文件是指SDF(Standard Delay Format Timing Annotation)文件,在Xilinx公司的FPGA/CPLD设

(完整版)华为fpga设计流程指南

FPGA设计流程指南 前言 本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。编写本流程的目的是: ●在于规范整个设计流程,实现开发的合理性、一致性、高 效性。 ●形成风格良好和完整的文档。 ●实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利 移植。 ●便于新员工快速掌握本部门FPGA的设计流程。 由于目前所用到的FPGA器件以Altera的为主,所以下面的

例子也以Altera为例,工具组合为modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。 V

目录 1. 基于HDL的FPGA设计流程概述 (1) 1.1 设计流程图 (1) 1.2 关键步骤的实现 (2) 1.2.1 功能仿真 (2) 1.2.2 逻辑综合 (2) 1.2.3 前仿真 (3) 1.2.4 布局布线 (3) 1.2.5 后仿真(时序仿真) (4) 2. Verilog HDL设计 (4) 2.1 编程风格(Coding Style)要求 (4) 2.1.1 文件 (4) 2.1.2 大小写 (5) 2.1.3 标识符 (5) 2.1.4 参数化设计 (5) 2.1.5 空行和空格 (5) 2.1.6 对齐和缩进 (5) 2.1.7 注释 (5) 2.1.8 参考C语言的资料 (5) 2.1.9 可视化设计方法 (6) 2.2 可综合设计 (6) 2.3 设计目录 (6)

3. 逻辑仿真 (6) 3.1 测试程序(test bench) (7) 3.2 使用预编译库 (7) 4. 逻辑综合 (8) 4.1 逻辑综合的一些原则 (8) 4.1.1 关于LeonardoSpectrum (8) 4.1.1 大规模设计的综合 (8) 4.1.3 必须重视工具产生的警告信息 (8) 4.2 调用模块的黑盒子(Black box)方法 (8) 参考 (10) 修订纪录 (10)

FPGA课程设计心得题目【模版】

1、彩灯控制器设计 内容及要求: 设计一个彩灯控制器,具体设计要求如下: (1)要有多种花型变化(至少设计5种),led至少16路 (2)多种花型可以自动变化 (3)彩灯变换的快慢节拍可以选择 (4)具有清零开关 (5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 2、数字秒表设计 内容及要求: 设计一用于体育比赛的数字秒表,具体设计要求如下: (1)6位数码管显示,其中两位显示min,四位显示see,显示分辨率为0.01 s。 (2)秒表的最大计时值为59min59.99see。 (3)设置秒表的复位/启动键,按一下该键启动计时,再按即清0。依此循环。 (4)设置秒表的暂行/继续键。启动后按一下暂行,再按继续。依此循环。 (5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 3、交通信号控制系统设计 内容及要求: 设计一个十字路口交通控制系统,具体设计要求如下: (1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是40秒、5秒和45秒, 交通灯运行的切换示意图和时序图分别如图1、图2所示。 (2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。 (3)当东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。 图1 交通灯运行切换示意图

B红 CP A绿 A黄 A红 B黄 B绿 5S 5S 图2 交通灯时序图 (4)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 4、简易密码锁设计 内容及要求 设计一个4位串行数字锁。 (1)开锁代码为4位二进制,当输入代码的位数与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮一个指示灯。否则进入“错误”状态,并发出报警信号。 (2)锁内的密码可调,且预置方便,保密性好。 (3)串行数字锁的报警由点亮一个灯,直到按下复位开关,报警才停下。此时,数字锁又自动等待下一个开锁状态。 (4)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。 5、出租车计价器设计 内容及要求 (1)设一个出租车自动计费器,计费包括起步价、行驶计费和等待计费三个部分,用4个数码管显示出金额数目,最大值为999.9元,最小计价单位为0.1元。行驶里程在3公里范围内且等待时间未超过三分钟时按起步价8元计费;行驶里程超过三公里后按每公里2元收费;等待时间超过三分钟后按每分钟1元收费。等待时间用两个数码管显示,最大值为59分钟。 总费用=起步价+(里程-3km )*里程单价+(等待时间-3)*等候单价 (2)能够实现的功能: 显示汽车行驶里程:用四位数字显示,单位为km 。 计程范围为0~99km ,计程分辨率为1km 。 显示等候时间:用两位数字显示分钟,单位为min 。计时范围为0~59min ,计时分辨率为1min 。

相关文档
相关文档 最新文档