龙空技术网

FPGA高级编程语言VHDL学习--结构体(Architecture)部分

学个习 212

前言:

当前咱们对“vhdl语言简介”都比较看重,咱们都想要学习一些“vhdl语言简介”的相关资讯。那么小编在网摘上网罗了一些对于“vhdl语言简介””的相关知识,希望同学们能喜欢,大家快快来学习一下吧!

VHDL语言是指超高速集成电路硬件描述语言。

VHDL(Very High Speed Integrated Circuit Hardware Description Language)

是一种比较常用的FPGA高级编程语言。

而VHDL程序一般是由以下五部分组成的:

库(Library)包(Package)实体(Entity)结构体(Architecture)配置(Configuration)

其中,实体和结构体两大部分组成程序设计的最基本单元。

实体与结构体关系

实体比较简单,只是定义了输入输出端口,与相应的FPGA芯片引脚对对应,也相当于提供一个与外部环境动态交互的通道。

而结构体(Architecture)则比较复杂,要是把实体比作一个黑盒子的话,则结构体可以理解为黑盒子的内部构造。

实体

结构体具体指明了相对应的设计实体的行为,定义了实体的逻辑功能和行为,规定了内部模块与模块之间的连接关系。

结构体定义格式如下:

Architecture 结构体名 of 实体名 is声明语句(声明结构体中用到的信号、数据等)Begin功能描述语句(5种语句结构)End Architecture 结构体名

结构体构成图如下图所示,结构体的功能描述语句主要有5种结构组成,在实际应用中不是每一种都要用到,只是根据需要选择相应的语句结构即可。

结构体的组成

结构体的描述方法

结构体描述有下面三种方法:

Structure(结构)描述:描述设计单元的硬件结构,即该硬件是如何构成的,类似于数字电路中的逻辑图描述。Date Flow(数据流):类似于寄存器传输级的方式描述数据的传输和变换,以规定设计中的各个寄存器形式为特征,然后在寄存器之间插入组合逻辑。Behavior Process(行为描述):只描述电路的功能或者电路行为,不指明或涉及实现这些行为的硬件结构,与数字电路中的逻辑表达式描述相似。

下面通过使用这三种描述方法,描述同一个二选一选择器,输入为a,b,选择信号为s,输出为y。

1、二选一选择器的Structure(结构)描述:

结构图

例1:VHDL代码如下所示:

architecture one of mux21 issignal d,e:bit;begind<=a and (not)s;e<=b and s;y<=d or e;end architecture one;

2、二选一选择器的Date Flow(数据流)描述:

例2:VHDL代码如下所示:

architecture one of mux21 isbeginy<=a when s='0' elseb;end architecture one;

3、二选一选择器的Behavior Process(行为描述)描述:

例3:VHDL代码如下所示:

architecture one of mux21 isbeginy<=(a and (not s) or (b and s);end architecture one

下面主要讲解功能描述语句中的五种语句结构的具体用法,以及他们之间的区别。

功能描述的五种语法结构

1、块语句(block):

块语句是将一系列并行描述语句进行组合,目的是改善并行语句及其结构的可读性,可以使结构层次鲜明,结构更加明确。

例4:结构举例VHDL代码如下所示:

a: out1<='1' after 2 ns;blok1: blockbeginb: out2<='1' after 2 ns;c: out3<='1' after 2 ns;end block blok1

上面例4的代码等价于下面例5所示的代码,可以看出,块不影响代码的执行顺序。

例5:VHDL代码如下所示:

a: out1<='1' after 2 ns;b: out2<='1' after 2 ns;c: out3<='1' after 2 ns;

2、进程(Process)语句

首先,进程是定义顺序语句的模块,用从外部接收的信号值,或者使用内部的运算数据向其它的信号进行赋值。

注意:一个结构体可以又多个进程,进程之间是并行关系,而进程内部是顺序执行的。

使用例6程序进行说明:还是二选一电路

例6:VHDL代码如下所示:

architecture rt1 of mux21 is beginprocess(a,b,sel)beginif (sel ='1') theny<=a;elsey<=b;end ifend processend rt1

process后面括号内的(a,b,sel)属于敏感列表,也就是说,只要a,b,sel三个信号,任意一个变化process都会被执行。其实,除了使用敏感列表这种方式,还有一种使用wait on的办法,他们是完全等效的,并且只能二选一,不能同时使用。看下面的例7,与上面例6完全等效。

例7:VHDL代码如下所示:

architecture rt1 of mux21 is beginprocessbeginwait on a,b,sel;if (sel ='1') theny<=a;elsey<=b;end ifend processend rt1

其中用到了wait语句,在以后的文章会专门进行讲解,例程中的wait on是指等待a,b,sel这三个信号中的任何一个发生变化。

3、信号赋值语句

之前文章《FPGA高级语言编程VHDL中数据对象介绍》中关于信号(signal)章节讲的非常清楚了,这里不再过多重复。有需要的可以翻看。

4、子程序调用语句

主要用于调用函数或者过程,并且将结果赋值给信号。这个跟其它语言是一样的,不再介绍。

5、元件例化语句

主要是用来调用另外一个实体所描述的电路,元件例化前需要进行说明,再进行例化,结构如下所示:可以看出元件说明与实体说明的编写方法是一样的。

architecture str of entity_name iscomponent 元件名 isgeneric 说明port(端口名: 模式 信号类型; 端口名: 模式 信号类型);end componnet 元件名

举例说明,例8为已有电路的实体程序,例9为调用例8实体进行元件说明。

例8:VHDL代码如下所示:

library ieee;use ieee.std_logic_1164.all;entity and2 isport(a,b: in std_logic; y: out std_logic);end entity and2;architecture rtl of and2 isbeginy<=a and b;end architecture rtl;

例9:VHDL代码如下所示:

component and2 isport(a,b: in std_logic; y: out std_logic);end component and2;

元件例化语句书写格式:

元件编号:元件名 port map(信号对应表);

信号对应有两种方法:位置映射和名称映射

位置映射要求按已有元件的各个端口顺序排列连接点,例如:

u1: and2 port map(d0,sel,aa);

名称映射对于位置没有要求,要求名称逐一连接即可。例如:

u2: and2 port map(a=>d0,b=>sel,y=>aa);

关于元件例化完整的举例实现下图所示功能(X先与Y再取反通过Z输出):

Z=not(X and Y)

VHDL代码如下例9所示,主要通过例化调用例8中定义的实体 and2与取反函数not来实现,首先对两个实体进行了例化说明,然后进行例化调用,实现上图结构的功能。

例9:VHDL代码如下所示:

library ieee;use ieee.std_logic_1164.all;entity knand2 isport(X,Y:in std_logic; Z:out std_logic);end entity knand2architecture str of knand2 iscomponent and2 isport(a,b: in std_logic; y: out std_logic);end component and2;component not isport(a: in std_logic; b: out std_logic);end component not signal temp: std_logic;begina1: and2 port map(X,Y,temp);a2: not port map(temp,Z);end architecture str
总结

关于VHDL中结构体(Architecture)的讲解到此完结,其实,结构体是VHDL中一个非常重要的概念,只要掌握好它的5种功能描述语句,才能学好VHDL编程。

感谢您的阅读,相关问题请留言讨论。

标签: #vhdl语言简介 #fpga语句 #fpga两大编程语言