您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iProcess 课程 角色 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
     
   
 订阅
  捐助
VHDL基本点【精解】
 
219 次浏览     评价:  
 2019-6-19
 
编辑推荐:
本文来自于博客园,本文主要通过图例对顺序执行语句和并行处理语句总结,希望对您的学习有所帮助。

结构

举例

Entity()实体

Enitiy 实体名 is

PORT(端口名1,端口名N:方向:类型)

[端口说明]

End Entity;

Port的方向有: IN , OUT, INOUT, BUFFER, LINKAGE

In 信号只能被引用,不能被赋值;不可以出现在<= 或 : = 的左边

out 信号只能被赋值,不能被引用;不可以出现在<= 或 : = 的右边

buffer 信号可以被引用,也可以被赋值;可以出现在<= 或 : = 的两边

Entity的内部结构将由Architecture来描述

Arcthitecture(构造体)

Arcthitecture 构造体名 of 实体名 is

[定义语句] 内部信号、常数、元件、数据类型、函数等的定义

begin

[并行处理语句和block、process、function、procedure]

end 构造体名;

例如:

下面让我们来看一看如何将一个实体(FULLADD)构造为一个内部能实

 

现功能的构造体(STRUCT):

其他设计单元

除了entity(实体)和architecture(构造体)外还有另外三个可以独立进行编译的设计单元

Package(包集合)属于库结构的一个层次,存放信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。

Package Body: 具有独立对端口(port)的package

configuration(配置)描述层与层之间的连接关系以及实体与构造体之间关系

4、Library(库)

库: 数据的集合。内含各类包定义、实体、构造体等

STD库 --VHDL的标准库

IEEE库 -- VHDL的标准库的扩展

面向ASIC的库 --不同的工艺

不同公司自定义的库

普通用户自己的库 --当VHDL文件被编译后,编译的结果储存在特定的目录下,这个目录的逻辑名称即Library,此目录下的内容亦即是这个Library的内容。

Package(包)

这些结构之间的关系

VHDL对象、操作符、数据类型

1、VHDL中的对象(对客观实体的抽象和概括)有:

Constant(常量)在程序中不可以被赋值

Variable(变量)在程序中可以被赋值(用": ="),赋值后立即变化为新值。

Signal(信号)在程序中可以被赋值(用"<=") ,但不立即更新,当进程挂起后,才开始更新。

例如:

variable

x,y:integer;--定义了整数型的变量对象x,y

constant

Vcc:real;--定义了实数型的常量对象Vcc

signal

clk,reset:bit;--定义了位类型的信号对象clk,reset

注意:

1、variable只能定义在process和subprogram(包括function和procedure)中,不可定以在其外部。

2、signal不能定义在process和subprogram(包括function和procedure)中,只可定以在其外部。

对象的属性(类似于其它面向对象的编程语言如VB、VC、DELPHI):

用法格式:对象 ' 属性

例子:clk'event --表明信号clk的event属性

常用的属性:

Signal 对象的常用属性有:

event : 返回boolean值,信号发生变化时返回true

last_value:返回信号发生此次变化前的值

last_event:返回上一次信号发生变化到现在变化的间隔时间

delayed[(时延值)]: 使信号产生固定时间的延时并返回

stable[(时延值)]: 返回boolean, 信号在规定时间内没有变化返回true

transaction: 返回bit类型,信号每发生一次变化,返回值翻转一次

例子:A<=B'delayed(10 ns); --B延时10ns后赋给A;

if(B'Stable(10 ns)); --判断B在10ns中是否发生变化

应用:

信号的event和last_value属性经常用来确定信号的边沿

例子:

判断clk的上升沿

if ( (clk'event)and (clk='1') and(clk'last_value='0')) then

判断clk的下降沿

if ( (clk'event)and (clk='0') and(clk'last_value='1')) then

2、VHDL的基本(数据)类型

bit(位): `0` 和`1`

bit-Vector(位矢量): 例如:``00110``

Boolean " ture"和"false"

time 例如:1 us、100 ms,3 s

character 例如:'a'、'n'、'1'、 '0'

string 例如:"sdfsd"、"my design"

integer 32位例如:1、234、-2134234

real 范围-1.0E38~+1.0E38 例如:1.0、2.834、3.14、0.0

natural 自然数 和 positive 正整数

senverity level (常和assert语句配合使用)包含有:note、warning、error、failure

以上十种类型是VHDL中的标准类型,在编程中可以直接使用。使用这十种以外的类型,需要自行定义或指明所引用的Library(库)和Package(包)集合

例子:

(1)

(2)

(3)

信号Z有两个驱动A和B;Z必须定义为一种新的数据类型,否则Z将无法决定取值,语句视为非法。

(4)

(5)

要点:赋值语句中的方向应和声明中的方向一样

3、常用操作

连接操作符---&

集合操作---()

集合操作---序号

集合操作--采用others

定义自己的类型

通用格式

TYPE 类型名 IS 数据类型定义

用户可以定义的数据类型:

枚举类型enumberated、整数型integer、

实数型real、数组类型array、

纪录类型record、时间类型time、

文件类型file、存取类型access

(1)

枚举类型enumberated

格式

type 数据类型名 is (元素,元素…...);

例子

type week is (sun,mon,tue,thu,fri,sat);

type std_logic is ('1','0','x','z');

(2)

整数类integer和实数类real

格式

type 数据类型名 is 数据类型定义 约束范围;

例子

type week is integer range 1 to 7;

type current is real range -1E4 to 1E4

(3)

数组类型array

格式

type 数据类型名 is array 范围 of 元数据类型名

例子

type week is array (1 to 7) of integer;

type deweek is array (1 to 7) of week;

(4)

时间类型time

格式

type 数据类型名 is 范围

units 基本单位;

单位;

end units

例子

type time is range -1E18 to 1E18

units

us;

ms=1000 us;

sec=1000 ms;

min=60 sec;

end units

注意:引用时间时,有的编译器要求量 与单位 之间应有一个空格如:1 ns;不能写为1ns

(5)

纪录类型record

格式

type 数据类型名 is record

元素名:数据类型名;

元素名:数据类型名;

….

end record;

例子

type order is record

id:integer;

date:string;

security:boolean;

end record;

引用:signal flag:boolean;

signal order1:order;

order1<=(3423,"1999/07/07",true);

flag<=order1.security;

IEEE 1164中定义的类型

(1)std_ulogic 是对位(bit)类型的扩展,只允许一个驱动源

(2)Std_logic同std_ulogic 一样有九个状态,允许一个或多个驱动源

与std_ulogic的区别

(3)Std_unlogic_vector和std_logic_vector

Std_unlogic、std_ulogic_vector

std_logic_vector和 std_unlogic_vector 类型

均定义在package(包) standard_logic_1164中

在使用这四种类形时应加以说明,

例如:library ieee;

use ieee.std_logic_1164.all;

VHDL中的操作符

(1)逻辑操作符有:

(2)逻辑操作符的应用例子

(3)关系运算符有

(4)关系运算符的应用

(5)数学运算符

注意:上述运算符应用于 integer,real,time 类型,不能用于vector(如果希望用于vector,可以使用库IEEE的std_logic_unsigned包,它对算术运算符进行了扩展)

(6)VHDL中的操作符应用要点

VHDL属于强类型,不同类型之间不能进行运算和赋值,可以进行数据类型转换

vector不表示number

array 不表示number

VHDL中的控制语句及模块

基本概念

并行处理(concurrent):语句的执行与书写顺序无关,并行块内的语句时同时执行的

顺序处理(sequential): 语句的执行按书写的先后次序,从前到后顺序执行。这种方式和其他普通编程语言(如c,pascal)是一样的。

2、并行和顺序处理在vhdl中的应用

(1)Architecture 中的语句及子模块之间是并行处理的

(2)子模块block中的语句是并行处理的

(3)子模块process中的语句是顺序处理的

process例子-值的更新

分析:

当A、B、C、D中任一信号发生变化时,进程将开始执行,当执行 Z <= A and B 后, Z 的值不会立即变化 ;同理执行 Z <= C and D 后Z 的值也不会立即变化。当执行end process后, Z 的值才开始更新,同时系统挂起开始等待敏感信号。

Process中敏感信号列表的普遍原则是:

在process中,其值被引用的信号应当出现在敏感信号列表中

反例:

可见不符和设计要求

(4)子模块subprogram中的function和procedure是顺序处理的

顺序执行语句(sequential statement)

Wait语句

assert语句

If 语句

case语句

for loop语句

while 语句

并行处理语句(concurrent statement)

并行操作中的信号赋值

信号赋值操作

符号"<="进行信号赋值操作的,

它可以用在顺序执行语句中,

也可以用在并行处理语句中

注意

*用在并行处理语句中时,符号<=右边的值是此条语句的敏感信号,即符号<=右边的值发生变化就会重新激发此条赋值语句,也即符号<=右边的值不变化时,此条赋值语句就不会执行。如果符号<=右边是常数则赋值语句一直执行。

*用在顺序执行语句中时,没有以上说法。

选择信号带入语句格式

with 表达式 select

目的信号量 <= 表达式1 when 条件1,

表达式2 when 条件2,

…..

表达式n when 条件n;

选择信号带入语句例子

顺序执行语句和并行处理语句总结

1、顺序执行语句 wait、assert、if -else 、case、for-loop、while语句只能用在process、function 和 procedure 中;

2、并行处理语句(条件信号带入和选择信号带入)只能用在architecture、block中;

其它语句

例子:

entity testand2 is

port(ain,bin: in nit ; cout:out bit);

end testand2;

architecture behav of testand2 is

component and2

generic(rise:time); port(a,b: in nit ; c:out bit);

end component;

begin

c<=(a xor b) after (rise);

u0:and2 generic map(20 ns) port map(ain,bin,cout);

end behav

 

   
219 次浏览  评价: 差  订阅 捐助
 
相关文章

UML建模之时序图
UML状态图
区分UML类图中的几种关系
UML建模之活动图介绍
 
相关文档

UML统一建模语言参考手册
网上商城UML图
UML建模示例:JPetStor
UML序列图编写规范
 
相关课程

UML与面向对象分析设计
UML + 嵌入式系统分析设计
业务建模与业务分析
基于UML和EA进行系统分析设计
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号