欢迎来到我的范文网!

fpga,

自荐信 时间:2020-07-10

【www.myl5520.com--自荐信】

FPGA EDITOR高手经验
篇一:fpga,排序

Clayton Cameron是赛灵思公司在多伦多市的一名资深现场应用工程师(FAE)。他于2000年加入赛灵思公司,在赛灵思渥太华的办公处工作,主要为电信客户提供支持。作为一名现场应用工程师,Clayton为客户提供支持,帮助他们解决问题。他喜欢这一工作的多样性以及每天遇到的各种挑战。业余时间,他喜欢健身,还十分享受家庭生活。

工程师在设计过程中,经常需要一定的创造力(你不妨称之为数字管道胶带)才能够保证设计的顺利完成。过去8年时间里,我曾经目睹许多优秀工程师利用这一方法出色地完成了许多工作,而他们采用的最主要工具就是FPGA Editor。

利用FPGA Editor,你可以察看完成的设计并确定是否在FPGA构造一级真正实现了设计意图 – 而这对于任何工程师或现场应用工程师来说都是非常需要的。假设你拿到协作者的设计,需要对其进行修改,但他们的HDL源代码非常难于理解,或者根本没有任何注释或文档。也许你只是想将某些时钟逻辑锁定,但却不知道实例的名称或者如何将其锁在所希望的位置。下面讨论的一些用来探查FPGA构造以及创建命令行补丁的技巧可以帮助设计人员满足不断迫近的任务期限要求。

FPGA构造勘察技巧

当赛灵思发布针对新FPGA器件的工具时,通常我做的第一件事就是打开FPGA Editor来勘FPGA器件的内部构造。具体做法是找到Xilinx → ISE →Accessories菜单并点击FPGA Editor图标,或者在命令行键入fpga_editor。图形用户界面打开后,在File菜单下选择New。FPGA Editor会询问设计文件名称和物理约束文件。此时还没有任何设计文件,因此随便键入一个设计文件名(例如,test.ncd),并选择希望察看的器件类型。FPGA Editor将会使用同样的名字作为物理约束文件的名称,并加载一个空白设计。

另一种方法是编译随软件提供的某个ISE?工具套件设计例子,并将其加载到FPGA Editor中来察看FPGA构造。加载一个设计实例可以显示更多细节,并且更容易定位感兴趣的项目。 在FPGA Editor中浏览只需要记住两件事:

1、如何利用CTRL / Shift快捷键进行放大缩小。

2、如果利用F11键放大选定的项目。

不使用GUI按钮快速缩放的方法是,按住Ctrl 和 Shift键,然后分别利用鼠标左键和右键进入放大和缩小。要想快速找到任何项目,在GUI右上角的列表窗口(List window)中选择该项目即可。一旦定位了想找的项目,按F11键。阵列窗口(Array window)就会放大显示该项目。

FPGA Editor有四个主要窗口:列表(List)、全局(World)、阵列(Array)和块(Block)。List窗口显示设计中所有活动的项目。通过此窗口顶部的下拉菜单可选择其内容 – 列表内容包括已经布局或还未使用的部件、网络或未布线的网络等等。

全局视图窗口(World Windows)始终显示完整FPGA硅片视图,这在试图确定某个网络的布线情况时非常有用。同时,阵列窗口(Array window)则是FPGA构造和逻辑的动态视图。

如果双击Array视图中的任何项目,会显示Block视图,给出所选择项目或逻辑单元的详细情况。

利用FPGA Editor,你可以察看物理实施后的设计并确定是否在FPGA构造一级真正实现了设计意图 – 而这对于任何工程师或现场应用工程师来说都是非常需要的。

为方便浏览或对设计进行编辑,这些窗口可以复制。许多情况下,打开第二个Array窗口会比较方便同时在设计的两个不同部分工作。例如,假设需要在全局时钟缓冲器和芯片底部的触发器之间增加一条布线。如果在一个Array窗口中显示全局时钟缓冲器的输出,另一个Array窗口则显示触发器时钟输入,那么会做起来会更方便。不然的话就必须来回缩放来定位布线的两端,显然这很繁琐。

在FPGA Editor GUI的右侧是一组由20个功能按钮组成的工具条,用于设计察看和编辑。通过编辑$XILINX/data目录下的fpga_editor.ini文件可以增加更多功能按钮。当察看设计时,应当随时使用INFO按钮。该功能会将所选择项目的所有信息转录到控制台(Console)窗口。这一功能非常方便,你可以在控制台窗口中标注数据并将其拷贝到其它地方使用,例如编写UCF约束。一旦了解了最基本的概念和操作,就可以开始察看FPGA构造。通常我都从时钟逻辑开始。这包括数字时钟管理器(DCM)、锁相环(PLL)、全局时钟缓冲器(BUFG)、区域时钟缓冲器(BUFR)、I/O缓冲器(BUFIO)以及不同的时钟区域。(要想按字母列出项目表,可以到LIST窗口点击 Type来排序。)点击一个DCM并按F11。ARRAY窗口会定位到选择的DCM并放大显示它。继续点击DCM并观察GUI底部的Console窗口,其中会显示与下面类似的内容:

comp “DCM_BASE_inst_star”, site “DCM_ADV_X0Y9”, type = DCM_ADV

(RPM grid X73Y202)

这是有用的数据。 拷贝并粘贴上述内容到UCF文件中,并作如下更改以锁定这一DCM逻辑:

INST “DCM_BASE_inst_star”

LOC=DCM_ADV_X0Y9;

利用这一方法,几乎可以锁定FPGA中的任何项目。 下面是BUFG锁定的另一个例子: comp “BUFG_inst_star”, site “BUFGCTRL_X0Y20”, type = BUFG (RPM grid X73Y124) INST “BUFG_inst_star”

LOC=BUFGCTRL_X0Y20;

再次回到List窗口并标注同一DCM。双击之后将会在Block视图中显示该DCM以及所有设置和参数。这是一项非常强大的功能,可用于FPGA构造中的任何逻辑项目。如果选择一个逻辑片并双击它,就可以看到逻辑片是如何布线连接的,以及是否使用了进位链或本地触发器。

Block视图的按钮条包含许多其它选项。值得一提的是 F= button按钮,其功能是显示逻辑片中使用的项目的完整配置。例如,如果使用了一个LUT6和一个触发器,按下F= 按钮将会给出LUT的布尔议程以及触发器的配置模式。

阅读赛灵思用户指南是一回事,而从计算机屏幕上展开的视图上探察所有逻辑、开关和参数则是另一回事。一旦熟悉了FPGA构造及所有资源,那么在编写和验证设计时获得的帮助将会令人感到惊奇。在设计流程中记录

生成补丁脚本

当用户在GUI环境中编辑设计时,FPGA Editor能够记录用户动作。用户不仅可以保存记录动作流程,还可在以后重新使用记录的脚本并加以重复。当无法更改RTL,但又需要在设计过程中对设计进行修改时,这一功能特别有用。假设设计采用了第三方IP或赛灵思加密IP,其中包括一个全局时钟和一个DCM来生成称为 interface_clk的时钟。然后再假设接口所连接的ASIC出现问题,无法在预定的interface_clk的上升沿接收数据。如何修正这一问题?

当然,你可以改变PCB,更换出现问题的ASIC或者让第三方IP小组来修改时钟输出逻辑以提供90度相移的interface_clk。所有这些解决方案都既耗费时间又成本高昂。一个更简单的建议是利用FPGA Editor来记录修改动作,对interface_clk逻辑进行必要的更改,从而为出现问题的ASIC提供正确的时钟相位。一旦有了相关修改的 FPGA Editor脚本,就可以回放这些命令行脚本记录的修改步骤,而你也可以正常继续你的FPGA设计流程。当出现问题的ASIC修复正常以后,你只需要将 FPGA Editor脚本从编译脚本中移除就可以,而interface_clk也会恢复其正常的行为。

要想对设计进行手动编辑,首先需要在FPGA Editor中开启读/写(read/write)权限。在菜单条中点击File → Main Properties。在此菜单下,可以调整编辑模式(从No logic Change到Read/Write)。点击Apply,现在就可以开始对设计进行编辑了。在下一步利用FPGA Editor记录对设计进行的所有修改时,只需要简单地从菜单条中点击Tools → Scripts →Begin Recording。FPGA Editor将会提示输入一个脚本名字(如patch.scr)。输完脚本名字,就可以对设计进行必要的修改了。

在设计中运行设计规则检查(DRC)来看一下是否有规则冲突的红色标志是一个很好的方式。在我的设计例子中,有14条警告,但都可以忽略。下一步我们将需要定位interface_clk使用的DCM,并为此DCM的90度相移输出创建另一个称为DCM_clk90_out的时钟。这需要利用全局时钟布线资源将时钟连接到BUFG。要增加一个BUFG,先在FPGA构造中找到一个未用的BUFG位置,右击并选择 Add(添加)。然后,工具会提醒你为BUFG命名(clk90_bufg)并确定其类型:BUFG(参见图1)。

图1:属性窗口允许用户配置并命名选定的逻辑项目

创建了新的BUFG,就需要将其输入和输出连接到适当的位置。在本例中,DCM的90度相移输出将驱动BUFG。在窗口Array1中,点击DCM 的90度输出端衰减器,在窗口Array2中,点击BUFG的输入端衰减器,同时按住Ctrl键,可实现连接。然后释放Ctrl键,点击鼠标右键并选择 Add。工具会提示为新网络连接输入名字。这样就将DCM 和 BUFG通过新网络连接到一起了(参看图2)。

图2:在两个逻辑项目中手动布线时,如红色三角所示,使用两个Array窗口可以轻松选择源头和目标

clk90_bufg的输出要代替由原interface_clk驱动的IOB上的时钟。要将IOB从原来的时钟域中移开,需要定位IOB,标注时钟输入端衰减器并按下Delete键移除这一连接。这样我们就可以将新的clk90_bufg时钟连接到这儿,从而完成整个补丁。要连接BUFG (clk90_bufg)的输出,按住Ctrl键不放,在窗口Array2中标注BUFG的输出端衰减器并在Array1窗口中选择IOB的时钟输入。松开Ctrl键,点击鼠标右键显示选项菜单并选择Add。这样就最终

完成了BUFG输出和IOB之间的连接,而IOB则用来驱动下游ASIC的新建接口,利用interface_clk90时钟就可以正确地捕获传输的数据。

这样就完成了ASIC的补丁。现在重新运行设计规则(DRC)检查器,确保没有引入任何新的错误。在菜单条中点击Tools →DRC →Run。

脚本完成并且没有错误的情况下,就可以回到菜单选择Tool →Script →End Recording。这将停止并关闭脚本记录过程,下次需要这一ASIC补丁时你还可以重新利用这一脚本。一个不错的方法是在文本编辑器中打开脚本文件,将所有GUI Post 和 Unpost命令去除。这些命令并不是必要的,而且留着它们还让脚本难于阅读。下面的文本就是我们ASCI补丁的脚本。如前面所述,内容非常直接,易于读取。

unselect -all

setattr main edit-mode Read-Write

add -s “BUFGCTRL_X0Y28” comp

clk90_bufg ;

setattr comp clk90_bufg type BUFG

unselect -all

select pin ?BUFGCTRL_X0Y28.I0?

select pin ?DCM_ADV_X0Y11.CLK90?

add

post attr net $NET_0

setattr net $NET_0 name

DCM_clk90_out

unselect -all

select pin ?OLOGIC_X0Y2.CLK?

delete

unselect -all

select pin ?ILOGIC_X0Y3.CLK?

delete

unselect -all

select pin ?ILOGIC_X0Y3.CLK?

select pin ?OLOGIC_X0Y2.CLK?

select pin ?BUFGCTRL_X0Y28.O?

add

post attr net $NET_1

setattr net $NET_1 name

clk90_bufg_out

unselect -all

drc

FPGA试题
篇二:fpga,排序

1.一个项目的输入输出端口是定义在

A. 实体中 B. 结构体中 C. 任何位置 D. 进程体

2. 描述项目具有逻辑功能的是

A. 实体 B. 结构体 C. 配置 D. 进程

3.关于1987标准的VHDL语言中,标识符描述正确的是。

A. 下划线可以连用 B. 下划线不能连用 C. 不能使用下划线 D. 可以使用任何字符

4.VHDL语言中变量定义的位置是语言中信号定义的位置是fpga,排序。

A. 实体中中任何位置 B. 实体中特定位置 C. 结构体中任何位置 D. 结构体中特定位置

5.变量和信号的描述正确的是。

A. 变量赋值号是:= B. 信号赋值号是:= C. 变量赋值号是<= D. 二者没有区别

6.变量和信号的描述正确的是

A. 变量可以带出进程 B. 信号可以带出进程 C. 信号不能带出进程 D. 二者没有区别

6.关于VHDL数据类型,正确的是

A. 数据类型不同不能进行运算 B. 数据类型相同才能进行运算

C. 数据类型相同或相符就可以运算 D. 运算与数据类型无关

7.关于VHDL数据类型,正确的是

A. 用户不能定义子类型 B. 用户可以定义子类型

C. 用户可以定义任何类型的数据 D. 前面三个答案都是错误的

8.可以不必声明而直接引用的数据类型是。

A. STD_LOGIC B. STD_LOGIC_VECTOR C. BIT D. 前面三个答案都是错误的

9.使用STD_LOGIG_1164使用的数据类型时

A.可以直接调用 B.必须在库和包集合中声明 C.必须在实体中声明 D. 必须在结构体中声明

10.VHDL运算符优先级的说法正确的是

A. 逻辑运算的优先级最高 B. 关系运算的优先级最高

C. 逻辑运算的优先级最低 D. 关系运算的优先级最低

11.VHDL中顺序语句放置位置说法正确的是

A.可以放在进程语句中 B. 可以放在子程序中 C. 不能放在任意位置 D. 前面的说法都正确

12.不属于顺序语句的是。

A. IF语句 B. LOOP语句 C. PROCESS语句 D. CASE语句

13.现场可编程门阵列的英文简称是

A. FPGA B. PLA C. PAL D. PLD

14.可编程逻辑器件的英文简称是

A. FPGA B. PLA C. PAL D. PLD

15.在EDA中,IP的中文含义是

A. 网络供应商 B. 在系统编程 C. 没有特定意义 D. 知识产权核

16.如果a=1,b=1,则逻辑表达式(a XOR b) OR( NOT b AND a)的值是。

A. 0 B. 1 C. 2 D. 不确定

17.执行下列语句后Q的值等于。

??

SIGNAL E: STD_LOGIC_VECTOR (2 TO 5);

SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2);

??

E<=(2=>’1’, 4=>’0’, OTHERS=>’1’);

Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E (5), OTHERS=>E (4));

??

A.“11011011” B. “00101101” C.“11011001” D. “00101100”

18.在VHDL语言中,下列对时钟边沿检测描述中,错误的是。

A.ifclk’event and clk = ‘1’ thenB.iffalling_edge(clk) then

C.ifclk’event and clk = ‘0’ thenD.ifclk’stable and not clk = ‘1’ then

19.下面对利用原理图输入设计方法进行数字电路系统设计的描述中,那一种说法是不正确的。。

A.原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;

B.原理图输入设计方法一般是一种自底向上的设计方法;

C.原理图输入设计方法无法对电路进行功能描述;

D.原理图输入设计方法也可进行层次化设计。

20.下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程:

A.原理图/HDL文本输入→功能仿真→综合→适配→编程下载→硬件测试

B.原理图/HDL文本输入→适配→综合→功能仿真→编程下载→硬件测试;

C.原理图/HDL文本输入→功能仿真→综合→编程下载→→适配硬件测试;

D.原理图/HDL文本输入→功能仿真→适配→编程下载→综合→硬件测试

21.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确的是。

A.PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。 B.敏感信号参数表中,应列出进程中使用的所有输入信号;

C.进程由说明部分、结构体部分、和敏感信号参数表三部分组成;

D.当前进程中声明的信号也可用于其他进程。

22.对于信号和变量的说法,哪一个是不正确的:。

A.信号用于作为进程中局部数据存储单元 B.变量的赋值是立即完成的

C.信号在整个结构体内的任何地方都能适用 D.变量和信号的赋值符号不一样

23.VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库:。

A.IEEE库 B.VITAL库 C.STD库 D.WORK工作库

24.下列语句中,不属于并行语句的是:。

A.进程语句 B.CASE语句 C.元件例化语句 D.WHEN?ELSE?语句

25.在VHDL的CASE语句中,条件句中的“=>”不是操作符号,它只相当与

A. IF B. THEN C. AND D. OR

26.下列关于信号的说法不正确的是A .信号相当于器件内部的一个数据暂存节点。

B.信号的端口模式不必定义,它的数据既可以流进,也可以流出。

C. 在同一进程中,对一个信号多次赋值,其结果只有第一次赋值起作用。

D.信号在整个结构体内的任何地方都能适用。

27.下面哪一个可以用作VHDL中的合法的实体名。

A. OR B.VARIABLE C. SIGNAL D.OUT1

28.下列关于变量的说法正确的是

A. 变量是一个局部量,它只能在进程和子程序中使用。

B. 变量的赋值不是立即发生的,它需要有一个δ延时。

C.在进程的敏感信号表中,既可以使用信号,也可以使用变量。

D. 变量赋值的一般表达式为:目标变量名<= 表达式。

29.下列关于CASE语句的说法不正确的是。

A. 条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。

B. CASE语句中必须要有WHEN OTHERS=>NULL;语句。

C.CASE语句中的选择值只能出现一次,且不允许有相同的选择值的条件语句出现。

D. CASE语句执行必须选中,且只能选中所列条件语句中的一条。

30.在VHDL中,可以用语句clock下降沿。

A. clock’event B. clock’ event and clock=’1’ C. clock=’0’ D. clock’ event and clock=’0’

31.在VHDL的FOR_LOOP语句中的循环变量是一个临时变量,属于LOOP A. 必须 B. 不必 C. 其类型要 D.其属性要

32.在VHDL中,语句”FOR I IN 0 TO 7 LOOP ”定义循环次数为

A. 8 B. 7 C. 0 D.1

33.在VHDL中,PROCESS结构内部是由

A. 顺序 B. 顺序和并行 C. 并行 D.任何

34.在元件例化语句中,用PORT MAP()中的信号

名关联起来。

A. = B. := C. <= D.=>

35.在VHDL中,含WAIT语句的进程PROCESS的括弧中

A. 可以 B.不能 C. 必须 D. 有时可以

36.综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,D是错误的。

A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;

B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;

C. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。

D.综合是纯软件的转换过程,与器件硬件结构无关;

37.关于VHDL中的数字,请找出以下数字中数值最小的一个:

A. 2#1111_1110# B. 8#276# C. 10#170# D. 16#E#E1

38.以下对于进程PROCESS的说法,正确的是:。

A. 进程之间可以通过变量进行通信B. 进程内部由一组并行语句来描述进程功能

C. 进程语句本身是并行语句D.一个进程可以同时描述多个时钟信号的同步时序逻辑

39.进程中的信号赋值语句,其信号更新是。

A.按顺序完成; B.比变量更快完成;

C.在进程的最后完成; D.以上都不对。

40.下列标识符中,

A. State0 B. 9moon C. Not_Ack_0 D. signal

41.在VHDL中,IF语句中至少应有1个条件句,条件句必须由表达式构成。

A. BIT B. STD_LOGIC C. BOOLEAN D. INTEGER

42.在VHDL中,一个设计实体可以拥有一个或多个

A. 设计实体 B. 结构体 C. 输入 D. 输出

43.在VHDL的IEEE标准库中,预定义的标准逻辑位STD_LOGIC的数据类型中是用表示的。

A.小写字母和数字 B.大写字母数字 C.大或小写字母和数字 D. 全部是数字

44.在VHDL中,条件信号赋值语句WHEN_ELSE属于语句。

A.并行和顺序 B.顺序 C. 并行 D. 不存在的

45. 在VHDL的IEEE标准库中,预定义的标准逻辑数据STD_LOGIC有种逻辑值。

A.2 B.3 C. 9 D. 8

46.在EDA工具中,能完成在目标系统器件上布局布线软件称为(C )

A.仿真器 B.综合器 C.适配器 D.下载器

47.大规模可编程器件主要有FPGA、CPLD两类,其中CPLD通过___A__实现其逻辑功能。P42

A. 可编程乘积项逻辑 B. 查找表(LUT)

C. 输入缓冲 D. 输出缓冲

48.VHDL常用的库是(A )

A. IEEE B.STD C. WORK D. PACKAGE

49.下面既是并行语句又是串行语句的是( C )

A.变量赋值 B.信号赋值 C.PROCESS语句 D.WHEN…ELSE语句

50.不完整的IF语句,其综合结果可实现__A__。

A. 时序逻辑电路 B. 组合逻辑电路

C. 双向电路 D. 三态控制电路

fpga,排序。

51.状态机编码方式中,其中__A__占用触发器较多,但其简单的编码方式可减少状态译码组合逻辑资源,且易于控制非法状态。

A. 一位热码编码 B. 顺序编码

C. 状态位直接输出型编码 D. 格雷码编码

52.大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是__C__。

A. FPGA全称为复杂可编程逻辑器件;

B. FPGA是基于乘积项结构的可编程逻辑器件;

C. 基于SRAM的FPGA器件,在每次上电后必须进行一次配置;

D. 在Altera公司生产的器件中,MAX7000系列属FPGA结构。

53.下面对利用原理图输入设计方法进行数字电路系统设计,哪一种说法是正确的:A.原理图输入设计方法直观便捷,很适合完成较大规模的电路系统设计

B.原理图输入设计方法一般是一种自底向上的设计方法

C.原理图输入设计方法无法对电路进行功能描述

D.原理图输入设计方法不适合进行层次化设计

54.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是:___ D __

A.PROCESS为一无限循环语句

B.敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动

C.当前进程中声明的变量不可用于其他进程

D.进程由说明语句部分、并行语句部分和敏感信号参数表三部分组成

二、填空题

EDA设计流程包括 、、和 四个步骤。

EDA设计输入主要包括、和。

VHDL的数据对象包括,它们是用来存放各种类型数据的容器。

VHDL源程序的文件名应与相同,否则无法通过编译。

下列是EDA技术应用时涉及的步骤:

A. 原理图/HDL文本输入; B. 适配; C. 时序仿真; D. 编程下载; E. 硬件测试; F. 综合

请选择合适的项构成基于EDA软件的FPGA / CPLD设计流程:

A → ___F___ → ___B__ → ____C___ → D → ___E____

三、简答

1、信号与变量的区别

信号赋值语句在进程外作为并行语句,并发执行,与语句所处的位置无关。变量赋值语句在进程内或子程序内作为顺序语句,按顺序执行,与语句所处的位置有关。信号赋值符号为<=,变量赋值符号位 := 。信号赋值符号用于信号赋值动作,不立即生效,变量赋值符号用于变量赋值动作,立即生效。

【变量赋值语句与信号赋值语句的区别:变量具有局部特征,它的有效性只局限于所定义的一个进程中,或一个子程序中,它是一个局部的、暂时性数据对象,对于它的赋值是立即发生的。信号具有全局特征,它不但可以作为一个设计实体内部各单元之间数据传送的载体,而且可通过信号与其他的实体进行通信,信号的赋值不是立即发生的,它发生在一个进程结束时。】

【简述信号和变量的区别?

答:

2.WHENELSE条件信号赋值语句和 IF_ELSE顺序语句的异同

* WHENELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。 * IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中

3.在VHDL的端口声明语句中,端口方向包括 in 、out 、buffer 、inout、linkage 。“BUFFER”为缓冲端口,与OUT类似,只是缓冲端口允许实体内部使用该端口信号,它可以用于输出,也可以用于端口信号的反馈。当一个结构体用“BUFFER”说明输出端口时,与其连接的另一个结构体的端口也要用BUFFER说明。以“LINKAGE”定义的端口不指定方向,无论哪个方向的信号都可以连接。

4.函数和过程有什么区别?

子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。它们的区别在于:过程的调用可以通过其界面获得多个返回值,而函数只能返回一个值;在函数入口中,所有参数都是输入参数,而过程有输入参数、输出参数和双向参数;过程一般被看作一种语句结构,而函数通常是表达式的一部分;过程可以单独存在,而函数通常作为语句的一部分调用。

5.什么是元件例化及其作用

元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中指定的端口相连接,从而为当前设计实体引进一个新的低一级的设计层次。

元件例化语句作用:把已经设计好的设计实体称为一个元件或一个模块,它可以被高层次的设计引用.是使VHDL设计构成自上而下层次设计的重要途径.

四、读程序题/改错题

下面程序是1位十进制计数器的VHDL描述,试补充完整。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT10 IS

PORT ( CLK : IN STD_LOGIC ;

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;

END CNT10;

ARCHITECTURE bhv OFCNT10IS

SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS (CLK)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN -- 边沿检测

IF Q1 > 10 THEN

Q1 <= (OTHERS => '0'); -- 置零

FPGA 设计的四种常用思想与技巧
篇三:fpga,排序

FPGA 设计的四种常用思想与技巧

FPGA/CPLD 的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操作和数据接口的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果!

1、 乒乓操作

“ 乒乓操作 ” 是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图 1 所示。

乒乓操作的处理流程为:输入数据流通过 “ 输入数据选择单元 ” 将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口 RAM(DPRAM) 、单口 RAM(SPRAM) 、 FIFO 等。在第一个缓冲周期,将输入的数据流缓存到 “ 数据缓冲模块 1” ;在第 2 个缓冲周期,通过 “ 输入数据选择单元 ” 的切换,将输入的数据流缓存到 “ 数据缓冲模块 2” ,同时将 “ 数据缓冲模块 1” 缓存的第 1 个周期数据通过 “ 输入数据选择单元 ” 的选择,送到 “ 数据流运算处理模块 ” 进行运算处理;在第 3 个缓冲周期通过 “ 输入数据选择单元 ” 的再次切换,将输入的数据流缓存到 “ 数据缓冲模块 1” ,同时将 “ 数据缓冲模块 2” 缓存的第 2 个周期的数据通过 “ 输入数据选择单元 ” 切换,送到 “ 数据流运算处理模块 ” 进行运算处理。如此循环。 乒乓操作的最大特点是通过 “ 输入数据选择单元 ” 和 “ 输出数据选择单元 ”

本文来源:http://www.myl5520.com/gerenjianli/113267.html

推荐内容