前言:
当前咱们对“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输出):
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两大编程语言