硬件工程师手册(全)(8)

2019-02-26 10:40

硬件工程师手册

属性是附到VHDL对象上的数据或者是有关VHDL对象的预定义数据,如在FPGA设计中,可通过属性定义某信号的pin number。 5、进程(process):

进程是VHDL中最重要最基本的概念之一,在VHDL中进程是基本的执行单元,仿真时将把所有的运算都划分为单个或多个进程。关于进程的概念在后面详述。

四 VHDL的语句 1、元件具体安装语句:

在第一节的mux2_arch结构体中,有三个元件具体安装语句,现以其中一个为例作出说明:

U1:and2 PORT MAP(i0=>cnt,i1=>i1,o=>temp);

元件and2具有两个输入端i0、i1和一个输出端o,上例表明,该元件在具体装配时,其元件标号为U1,而将信号cnt映射(连接)到该元件的i0端,将信号i1映射到该元件的i1端,信号temp映射到o端。 2、语句的并行性与并行信号赋值语句:

第一节中结构体mux2_arch的BEGIN和END之间的四个语句为并行语句。并行语句不象C或PASCAL语言一样是按照语句的排列顺序依次执行的,而是具有并行性,即语句执行的先后次序与其排列的先后次序无关,而只跟其敏感表中的信号变化的情况有关。 为了进一步说明这个问题,让我们再来分析下面的例子:输入信号为a、b、c、d,输出信号为e,我们构造逻辑表达式e=ab+c/d的VHDL语言描述。为了给读者一个关于VHDL语言的较完整的概念,此处给出一个完整的VHDL程序:

-- This is an example of combinational logic; -- Version 1.0 , 20/5/1997;

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY comb_test0 IS PORT(a:IN std_logic; b:IN std_logic; c:IN std_logic; d:IN std_logic; e:OUT std_logic);

- 36 -

硬件工程师手册

END comb_test0;

ARCHITECTURE comb_test0_behav OF comb_test0 IS SIGNAL temp0:std_logic; SIGNAL temp1:std_logic; SIGNAL temp2:std_logic; BEGIN

temp0<=NOT d; temp1<=c AND temp0; temp2<=a AND b; e<=temp1 OR temp2; END comb_test0_behav;

CONFIGURATION comb_test0_config OF comb_test0 IS FOR comb_test0_behav END FOR;

END comb_test0_config;

本例的结构体中BEGIN和END之间有四个并行信号赋值语句,但由于语句的并行性,它与按如下顺序排列的语句等效: BEGIN

e<=temp1 OR temp2; 语句1 temp2<=a AND b; 语句2 temp1<=c AND temp0; 语句3 temp0<=NOT d; 语句4 END comb_test0_behav;

由此可见,并行信号赋值语句是不按排列顺序执行的。现以信号d的变化为例说明上例并行信号赋值语句的执行顺序:当信号d变化时,由于temp0对信号d敏感,故d的变化将引发信号temp0的变化,此时语句4被执行;而信号temp1又对temp0敏感,因此temp0的变化会导致temp1的变化,此时执行语句3;同理,temp1的变化导致输出信号e的变化,因此语句1被执行。 3、进程语句(process):

除了并行语句以外,VHDL中亦有顺序语句,进程process中的语句就是顺序语句,现以一例说明。该例中给出一个用D触发器实现的二分频器的VHDL语言描述,其中nrd为D触发器的异步清除信号,cp为脉冲触发信号,q为输出信号:

- 37 -

硬件工程师手册

-- This VHDL module devides frequence by two . -- Version 1.0 , 5/4/1997 .

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY fdiv2 IS PORT(cp:IN std_logic; nrd:IN std_logic; q:BUFFER std_logic); END fdiv2;

ARCHITECTURE fdiv2_behav OF fdiv2 IS BEGIN

PROCESS(nrd,cp) BEGIN

IF nrd=?0? THEN q<=?0?;

ELSIF rising_edge(cp) THEN q<=NOT q; END IF; END PROCESS; END fdiv2_behav;

让我们来看PROCESS和END PROCESS之间的语句部分,该部分为进程语句。第一节中提到过,进程语句是VHDL中最基本的执行单元,因而是一个非常重要的概念。

进程语句一般由三个部分组成:1)敏感表区(Sensitivity list):关键字PROCESS后面括号中的信号清单称为敏感表,该表严格地枚举将引起进程语句执行的信号,在本例中为信号nrd与cp,只有当这些信号变化时,进程才被执行。2)进程说明区:进程说明部分由敏感表的结尾和关键字BEGIN之间的部分组成,该区域用来说明局部变量和一些仅在进程内部用的内容。本例中该部分为空。3)进程语句部分:进程语句部分从关键字BEGIN开始并在END PROCESS行结束,进程内包含的所有语句都是顺序语句。 4、顺序语句:

- 38 -

硬件工程师手册

我们以上例的进程为例来说明顺序语句。顺序语句的执行顺序是严格按照语句的书写顺序排列的,这种风格和C或PASCAL语言的编程风格完全一致。上例中,首先判断信号nrd是否为0,如果为0,则输出信号q被清零;否则在信号cp的上升沿,D触发器的d端的状态(在二分频器中d端状态应为/q,即程序中的NOT q)被锁存到q端,即q<=NOT q。 5、语句的并行性与顺序性小结:

综合本节内容可知,在并性信号赋值语句、元件具体安装语句与进程语句之间,各语句为并行关系,语句的执行由敏感表中的变量触发;而在进程语句内部,各语句为顺序关系,语句的执行严格按照其书写顺序排列。

五 VHDL程序综述

通过上两节的叙述,我们对VHDL语言的一些基本概念、编程风格与规范有了一些初步的了解,为了深入理解更复杂一些的VHDL设计,有必要对VHDL的程序再作一些细致的说明。 1、VHDL语言的程序格式:

首先我们仍以第二节中的实体fdiv2为例来对VHDL语言的格式作出说明。该程序段中开头两行为程序的注释行,所有的注释行前都由符号“--”打头。注释行可位于VHDL程序中的任何位置。

IEEE-1164是为VHDL定义的一个标准,在ieee.vhd程序中定义了一个标准程序包(package)std_logic_1164,该程序包中定义了VHDL语言的一些标准逻辑状态、标准函数和标准数据类型等,如上面用到的数据类型std_logic、buffer与标准函数rising_edge()等,在std_logic_1164程序包中均有定义。为了使用该程序包,应在每个实体说明前加上如下两句: LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

用户亦可定义自己的程序包,经USE语句说明后即可用于VHDL程序中。如果在构造一个实体时,要将本project中已定义好的另一个实体作为其中的一个底层元件,则用户应给出如下说明:

USE work.ALL;

其中work代表了当前的project。

VHDL语言中接下来的部分为实体说明部分,该部分可视为与原理图中的器件相对应,它定义实体的信号端及其方向、类型、属性等。可在同一文件中定义多个实体,并把其它的实体作为其中某个顶层实体的组成元件。

实体说明之后为结构体说明,可认为结构体说明部分大致与传统设计方法中的电原理图相对应。在结构体中BEGIN之前,应先定义结构体中需用的信号、元件及子类型等。BEGIN与END之间为结构体描述部分,如前所述,可采用功能型描述,亦可采用结构型描述。如有

- 39 -

硬件工程师手册

必要,还可在结构体说明之后加上相应的配置说明。 2、信号与变量:

信号与变量是有区别的,模块间的逻辑关系均通过信号来传递,而变量只能在模块内起到信息暂存的作用。另外,信号要占用系统的存储量,而变量只有在模块需要时才占用存储量,程序一旦退出本模块,则相应变量占用的存储区将被释放,变量随之消失。

在VHDL语言中,信号用关键词SIGNAL定义,在前述例子中已出现过。而变量用关键词VARIABLE定义,如下例所示:

-- This VHDL module provides a four_to_one MUX . -- Version 1.0 , 3/4/1997 .

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY mux4 IS

PORT(i0:IN std_logic; i1:IN std_logic; i2:IN std_logic; i3:IN std_logic; contr0:IN std_logic; contr1:IN std_logic; o:OUT std_logic); END mux4;

ARCHITECTURE mux4_behav OF mux4 IS BEGIN

PROCESS(contr0,contr1,i0,i1,i2,i3)

VARIABLE temp_vec:std_logic_vector(1 DOWNTO 0); BEGIN

temp_vec(0):=contr0; temp_vec(1):=contr1; CASE temp_vec IS WHEN “00” => o<=i0; WHEN “01” => o<=i1;

- 40 -


硬件工程师手册(全)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:鄂教版四年级品德与社会上册教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: