sv语言中的过程语句和子程序_FPGA高级编程语言VHDL学习--结构体(Architecture)部分...

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

VHDL(Very High Speed Integrated Circuit Hardware Description Language)

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

9b798037-ef2b-4a1e-af64-55192e0d6d21

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

  1. 库(Library)
  2. 包(Package)
  3. 实体(Entity)
  4. 结构体(Architecture)
  5. 配置(Configuration)

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

实体与结构体关系

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

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

60a26163cefc472880563875ae80d537

实体

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

结构体定义格式如下:

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

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

4bf27b28d7c748a8946b390f674a4052

结构体的组成

结构体的描述方法

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

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

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

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

4f7112ee124d4053adefd34042512c8b

结构图

例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输出):

600ac470a5c8404c9840857657980ebb

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编程。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值