第5讲VHDL编程基础(3)

Download Report

Transcript 第5讲VHDL编程基础(3)

讲授:伍宗富
EDA技术
《 E D A 技 术》 课 程 教 学
讲授:伍宗富
湖南文理学院电气与信息工程学院
2015年4月8日星期三
EDA技术
讲授:伍宗富
第 五 讲 VHDL编程基础(3)
 教学目的:使学生掌握VHDL子程序、库、程序包及描述风格。
 教学重点: VHDL子程序、库、程序包及描述风格。
 教学难点:子程序、程序包。
 教学方法:讲授法、计算机辅助法。
 课时计划:2学时
 使用教材:EDA技术及应用.谭会生等.西安:西安电子科技大学出版社
 主要参考文献:
[1] 徐光辉等.CPLD/FPGA的开发和应用[M].北京:电子工业出版社
[2] 侯伯亨等.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社
[3] http://www.altera.com
[4] 周立功等.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社
讲授:伍宗富
EDA技术
课题: VHDL编程基础(3)
一、子程序
二、库、程序包及其他
三、 VHDL描述风格
四、 VHDL实际应用步骤
五、课堂小结
六、作业
EDA技术
讲授:伍宗富
一、子程序(SUBPROGRAM )
子程序是一个VHDL程序模块。子程序不能从所在的结构体的其他块或
进程结构中直接读取信号值或者向信号赋值,只能通过子程序调用及与子
程序的界面端口进行通信。VHDL子程序具有可重载性的特点,即允许有
许多重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的。
1. 函数(FUNCTION)
定义格式:
FUNCTION 函数名(参数表) RETURN 数据类型;--函数首
FUNCTION 函数名(参数表) RETURN 数据类型 IS --函数体开始
[说明部分];
BEGIN
顺序语句;
END FUNCTION 函数名;--函数体结束
注:如果要将一个已编制好的函数并入程序包,函数首必须放在程序包的
说明部分,而函数体需放在程序包的包体内。如果只是在一个结构体中定
义并调用函数,则仅需函数体即可。由此可见,函数首的作用只是作为程
序包的有关此函数的一个接口界面。
EDA技术
讲授:伍宗富
一、子程序(SUBPROGRAM )
1. 函数(FUNCTION)
【例】三个不同的函数首,放在某一程序包的说明部分。
FUNCTION FOUC1(A,B,C:REAL) RETURN REAL;
FUNCTION “*” (A,B:INTEGER) RETURN INTEGER;
--注意函数名是运算符必须加上双引号
FUNCTION AS2(SIGNAL IN1,IN2:REAL) RETURN REAL;
--注意信号参量的写法
【例】结构体中定义并调用函数,仅需函数体即可
ARCHITECTURE ART OF FUNC IS
FUNCTION SAM(X,Y,Z:BIT)RETURN BIT IS
BEGIN
RETURN (X AND Y) OR Y;
END FUNCTION SAM;
BEGIN
PROCESS(A)
BEGIN
M(0)<=SAM (A(0),A(1),A(2)); --当A的3个位输入元素A(0)、A(1)和A(2)中的
M(1)<=SAM (A(2),A(0),A(1)); --任何一位有变化时,将启动对函数SAM的
M(2)<=SAM (A(1),A(2),A(0)); --调用,并将函数的返回值赋给M输出
END PROCESS;
END ARCHITECTURE ART;
EDA技术
讲授:伍宗富
一、子程序(SUBPROGRAM )
2.重载函数( OVERLOADED FUNCTION)
重载函数是指 VHDL允许以相同的函数名定义函数,允许不同的数据类型之间进行运算。
【例】 4位二进制加法计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --打开不同的数据类型之间进行运算程序包
ENTITY CNT4 IS
PORT(CLK :IN STD_LOGIC;
Q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END CNT4;
ARCHITECTURE ONE OF CNT4 IS
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK=‘1’ THEN
IF Q=15 THEN -- Q两边的数据类型不一致, 程序自动调用了重载函数
Q<=“0000”;
ELSE
Q<=Q+1; --这里,程序自动调用了加号“+”的重载函数
END IF;
END IF;
END PROCESS;
END ARCHITECTURE ONE;
EDA技术
讲授:伍宗富
一、子程序(SUBPROGRAM )
3.过程(PROCEDURE )
语句格式:
PROCEDURE 过程名(参数表);
--过程首
PROCEDURE 过程名(参数表) IS
--过程体开始
[说明部分];
BEGIN
顺序语句;
END PROCEDURE 过程名;
--过程体结束
过程由过程首和过程体两部分组成,过程首不是必须的,
过程体可以独立存在和使用。
【例】参量如果只定义了IN模式而未定义目标参量类型, 【例】双向模式变量的值作数据转换运算
PROCEDURE PRG1(VARIABLE VALUE:INOUT
则默认为常量;若只定义了INOUT或OUT,则默认目标
BIT_VECTOR(0 TO 7)) IS
参量类型是变量。
BEGIN
PROCEDURE PRO1(VARIABLE A,B:INOUT REAL);
CASE VALUE IS
PROCEDURE PRO2 (SIGNAL SIG:INOUT BIT);
WHEN“0000” => VALUE:=“0101”;
PROCEDURE PRO3 (CONSTANT A1:IN INTEGER;
WHEN“0101” => VALUE:=“0000”;
VARIABLE B1:OUT INTEGER);
WHEN OTHERS => VALUE:=“1111”;
END CASE;
END PROCEDURE PRG1;
EDA技术
讲授:伍宗富
一、子程序(SUBPROGRAM )
4.重载过程( OVERLOADED PROCEDURE )
两个或两个以上有相同的过程名和互不相同的参数数量及数
据类型的过程称为重载过程。对于重载过程,也是靠参量类型
来辨别究竟调用哪一个过程。
【例】
PROCEDURE CAL(V1,V2:IN REAL;
SIGNAL OUT1:INOUT INTEGER);
PROCEDURE CAL(V1,V2:IN INTEGER;
SIGNAL OUT1:INOUT REAL);
…
CAL(20.15,1.42,S1);
- -调用第一个重载过程CAL,S1为INOUT式的整数信号
CAL(23,320,S2);
- -调用第二个重载过程CAL,S2为INOUT式的实数信号
…
EDA技术
讲授:伍宗富
二、库、程序包及其他
1. 库(LIBRARY)
库是一种用来存储预先完成的程序包和数据集合体的仓库。
1) IEEE库
IEEE库是VHDL设计中最为常见的库,它包含有IEEE标准的程序包和
其他一些支持工业标准的程序包。一般基于大规模可编程逻辑器件的数字
系统设计,IEEE库中的4个程序包STD_LOGIC_1164、
STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED
已经足够使用,在使用VHDL设计实体的前面必须以显式表达出来。
2) STD库
VHDL语言标准定义了两个标准程序包,即STANDARD和TEXTIO程
序包,它们都被收入在STD库中。只要在VHDL应用环境中,可随时调用这
两个程序包中的所有内容,即在编译和综合过程中,VHDL的每一项设计都
自动地将其包含进去了。由于STD库符合VHDL语言标准,在应用中不必如
IEEE库那样以显式表达出来。
3) WORK库
WORK库是用户的VHDL设计的现行工作库,用于存放用户设计和定
义的一些设计单元和程序包。因此自动满足VHDL语言标准,在实际调用中,
不必以显式预先说明。
4)VITAL库
使用VITAL库,可以提高VHDL门级时序模拟的精度,因而只在VHDL
仿真器中使用。基于实用的观点,在FPGA/CPLD设计开发过程中,一般并
不需要VITAL库中的程序包。
讲授:伍宗富
EDA技术
二、库、程序包及其他
1. 库(LIBRARY)
LIBRARY语句格式:
LIBRARY 库名;
USE使用格式:
USE 库名.程序包名.项目名;
- -向本设计实体开放指定库中的特定程序包内所选定的项目
USE 库名.程序包名.ALL;
- -向本设计实体开放指定库中的特定程序包内所有的内容
【例】
【例】
LIBRARY IEEE;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.STD_ULOGIC ;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_1164.RISING_EDGE; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
讲授:伍宗富
EDA技术
二、库、程序包及其他
2. 程序包(PACKAGE)
为了使已定义的常数、数据类型、元件调用说明以及子程
序能被更多的VHDL设计实体方便地访问和共享,可以将它们
收集在一个VHDL程序包中。多个程序包可以并入一个VHDL
库中,使之适用于更一般的访问和调用范围。这一点对于大系
统开发,多个或多组开发人员并行工作显得尤为重要。
 程序包的内容主要由如下四种基本结构组成,因此一个程序
包中至少应包含以下结构中的一种。
● 常数说明:主要用于预定义系统的宽度。
例如数据总线通道的宽度。
● 数据类型说明:主要用于说明在整个设计中通用的数据类型。
例如通用的地址总线数据类型定义等。
● 元件定义:主要规定在VHDL设计中参与元件例化的文件
(已完成的设计实体)对外的接口界面。
● 子程序说明:用于说明在设计中任一处可调用的子程序。
EDA技术
讲授:伍宗富
二、库、程序包及其他
2. 程序包(PACKAGE)
定义程序包的一般语句结构:
--程序包首
PACKAGE 程序包名 IS
--程序包首开始
程序包首说明部分
END 程序包名; --程序包首结束
--程序包体
PACKAGE BODY 程序包名 IS --程序包体开始
程序包体说明部分以及包体内容
END 程序包名;
--程序包体结束
程序包首:程序包首的说明部分可收集多个不同的VHDL设计所需的公
共信息,其中包括数据类型说明、信号说明、子程序说明及元件说明等。
程序包结构中,程序包体并非是必须的,程序包首可以独立定义和使用。
程序包体:程序包体用于定义在程序包首中已定义的子程序的子程序体。
程序包体说明部分的组成可以是USE语句(允许对其他程序包的调用)、子程序
定义、子程序体、数据类型说明、子类型说明和常数说明等。对于没有子程序
说明的程序包体可以省去。程序包常用来封装属于多个设计单元分享的信息,
程序包定义的信号、变量不能在设计实体之间共享。如: STD_LOGIC_1164
程序包、STD_LOGIC_ARITH程序包、STD_LOGIC_UNSIGNED和
STD_LOGIC_SIGNED程序包、 STANDARD和TEXTIO程序包
讲授:伍宗富
EDA技术
二、库、程序包及其他
2. 程序包(PACKAGE)
【例】程序包首应用
PACKAGE PAC1 IS
--程序包首开始
TYPE BYTE IS RANGE 0 TO 255; -- 定义数据类型 BYTE
SUBTYPE BYTE1 IS BYTE RANGE 0 TO 15; - -定义子类型 BYTE1
CONSTANT C1 :BYTE :=255;
- -定义常数 C1
SIGNAL S1 : BYTE1;
- -定义信号 S1
COMPONENT BYTE_ADDER
- -定义元件
PORT(A,B:IN
BYTE;
C:OUT BYTE;
OVERFLOW:OUT BOOLEAN);
END COMPONENT ;
FUNCTION MY_FUNCTION(A:IN BYTE ) RETURN BYTE;
--定义函数
- - 程序包首结束
END PAC1;
--使用这个程序包中的所有定义,可用USE语句访问此程序包:
LIBRARY WORK; - -此句可省去
USE WORK.PAC1.ALL;
ENTITY…
ARCHITECTURE…
…
EDA技术
讲授:伍宗富
2. 程序包(PACKAGE)
【例】 在现行WORK库中定义程序包并立即使用的示例。
PACKAGE SEVEN IS
--定义程序包
SUBTYPE SEGMENTS IS BIT_VECTOR(0 TO 6);
TYPE BCD IS RANGE 0 TO 9;
END SEVEN;
USE WORK.SEVEN.ALL;
--打开程序包,以便后面使用
ENTITY DECODER IS
PORT(INPUT:BCD;DRIVE:OUT SEGMENTS);
END DECODER;
ARCHITECTURE ART OF DECODER IS
BEGIN
WITH INPUT SELECT - -4位BCD数向7段译码显示码转换
DRIVE<=B“1111110” WHEN 0,
B“0110000” WHEN 1,
B“1101101” WHEN 2,
B“1111001” WHEN 3,
B“0110011” WHEN 4,
B“1011011” WHEN 5,
B“1011111” WHEN 6,
B“1110000” WHEN 7,
B“1111111” WHEN 8,
B“1111011” WHEN 9,
B“0000000” WHEN OTHERS;
END ARCHITECTURE ART;
EDA技术
讲授:伍宗富
二、库、程序包及其他
3.配置( CONFIGURATION )
 配置可以把特定的结构体指定给一个确定的实体。通常在
大而复杂的VHDL工程设计中,配置语句可以为实体指定或
配置一个结构体。如可利用配置使仿真器为同一实体配置不
同的结构体以使设计者比较不同结构体的仿真差别,或者为
例化的各元件实体配置指定的结构体,从而形成一个所希望
的例化元件层次构成的设计实体。
 VHDL综合器允许将配置规定为一个设计实体中的最高
层设计单元,但只支持对最顶层的实体进行配置。
配置语句格式:
CONFIGURATION 配置名 OF 实体名 IS
配置说明
END 配置名;
 每个实体可以拥有多个不同的结构体,而每个结构体的地
位是相同的,在这种情况下,可以利用配置说明为这个实体
指定一个结构体。
EDA技术
讲授:伍宗富
3.配置( CONFIGURATION )
【例】配置应用
CONFIGURATION SECOND OF NAND IS
LIBRARY IEEE;
FOR ART2
USE IEEE.STD_LOGIC_1164.ALL;
END FOR;
END SECOND;
ENTITY NAND IS
CONFIGURATION FIRST OF NAND IS
PORT(A:IN STD_LOGIC;
FOR ART1
B:IN STD_LOGIC;
END FOR;
C:OUT STD_LOGIC);
END FIRST;
END ENTITY NAND;
ARCHITECTURE ART1 OF NAND IS
BEGIN
C<=NOT (A AND B );
END ARCHITECTURE ART1;
ARCHITECTURE ART2 OF NAND IS
BEGIN
C<= ‘1’ WHEN (A=‘0’) AND(B=‘0’) ELSE
‘1’ WHEN (A=‘0’) AND(B=‘1’) ELSE
‘1’ WHEN (A=‘1’) AND(B=‘0’) ELSE
‘0’ WHEN (A=‘1’) AND(B=‘1’) ELSE
‘0’;
END ARCHITECTURE ART2;
EDA技术
讲授:伍宗富
3.配置( CONFIGURATION )
【例】配置应用
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
CONFIGURATION SEL OF RS1 IS
ENTITY RS1 IS
FOR RSF
PORT ( R:IN STD_LOGIC;
FOR U1,U2:NAND
S:IN STD_LOGIC;
USE ENTITY WORK.NAND(ART2);
Q:OUT STD_LOGIC;
QF:OUT STD_LOGIC);
END FOR;
END RS1;
END FOR;
ARCHITECTURE RSF OF RS1 IS
END SEL;
COMPONENT NAND
--这里假设与非门的设计实体已进入工作库WORK
PORT (A:IN STD_ LOGIC;
B:IN STD_LOGIC;
C:OUT STD_LOGIC);
END COMPONENT;
BEGIN
U1:NAND PORT MAP (A=>S,B=>QF,C=>Q);
U2:NAND PORT MAP (A=>Q,B=>R,C=>QF);
END RSF
EDA技术
讲授:伍宗富
三、 VHDL描述风格
在结构体中用不同的语句类型和描述方式来表达所希望的电路功能
1.行为描述
【例】 带异步复位功能的8位二进制加法计数器的行为描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT8B IS
PORT(RESET,CLOCK:IN STD_LOGIC;
Q8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END CNT8B ;
ARCHITECTURE ART OF CNT8B IS
SIGNAL S1:UNSIGED(7 DOWNTO 0);
BEGIN
PROCESS(CLOCK,RESET,S1)
BEGIN
IF RESET=‘1’ THEN S1<=X“00";
ELSIF (CLOCK=‘1’AND CLOCK'EVENT) THEN
S1 <= S1 +1;
END IF;
END PROCESS;
Q8<=STD_LOGIC_VECTOR(S1);
END ARCHITECTURE ART;
程序中,不存在任何
与硬件选择相关的语
句,也不存在任何有
关硬件内部连线方面
的语句。整个程序中,
从表面上看不出是否
引入寄存器方面的信
息,或是使用组合逻
辑还是时序逻辑方面
的信息,只是对所设
计的电路系统的行为
功能作了描述,不涉
及任何具体器件方面
的内容,这就是所谓
的行为描述方式,或
行为描述风格。
EDA技术
讲授:伍宗富
三、 VHDL描述风格
2.数据流描述
数据流描述,也称RTL描述,它是以类似于寄存器传输级的方式描述
数据的传输和变换,以规定设计中的各种寄存器形式为特征,然后在寄
存器之间插入组合逻辑。
【例】 一位全加器的数据流描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADDER1B IS
PORT(A,B,CIN:IN BIT
SUM,COUT:OUT BIT);
END ADDER1B;
ARCHITECTURE ART OF ADDER1B IS
SUM<= A XOR B XOR CIN;
COUNT<=(A AND B)OR (A AND CIN) OR (B AND CIN);
END ARCHITECTURE ART;
EDA技术
讲授:伍宗富
三、 VHDL描述风格
3.结构描述
描述该设计单元的硬件结构,即该硬件是如何构成的。其主要使用元件
例化语句及配置语句来描述元件的类型及元件的互连关系。
architecture hav of adder8 is
component adder42
port(a4: in std_logic_vector(3 downto 0);
b4: in std_logic_vector(3 downto 0);
c4:in std_logic;
co4: out std_logic;
s4: out std_logic_vector(3 downto 0));
end component;
signal carr : std_logic;
begin
library ieee;
use ieee.std_logic_1164.all;
entity adder8 is
port(a8: in std_logic_vector(7 downto 0);
b8: in std_logic_vector(7 downto 0);
c8:in std_logic;
co8: out std_logic;
s8: out std_logic_vector(7 downto 0));
end adder8 ;
u1: adder42 port map (a4=>a8(3 downto 0),b4=>b8(3 downto 0),c4=>c8,s4=>s8(3 downto 0),co4=>carr);
u2: adder42 port map (a4=>a8(7 downto 4),b4=>b8(7 downto 4),c4=>carr,s4=>s8(7 downto 4),co4=>co8);
end hav;
EDA技术
讲授:伍宗富
四、 VHDL实际应用步骤
在此我们以Alter公司的MAX+plusⅡ高度集成化的可编程
逻辑器件开发系统进行学习,它可以开发Alter公司的MAX
系列和FLEX系列的可编程器件。
1.MAX+plusⅡ10.2的安装
可根据软件的提示进行安装。注意:要将Altera公司的授
权文件license.dat复制到MAX+plusII的安装目录,打开
MAX+plusII,选择菜单命令Option/License Setup,则弹出
License Setup对话框,在“License File or Server Name”对话
框中填入license.dat文件的路径及文件名,单击OK按钮。至
此,MAX+plusII安装完毕。
EDA技术
四、 VHDL实际应用步骤
2.VHDL实际应用步骤
1)设计输入
①创建VHDL设计工程(建立工程文件夹)
②编辑VHDL源程序文件
③将当前设计文件设置成工程文件
2)选择目标器件
3)引脚锁定
4)编译文件
5)设计校验
6)器件配置与编程下载
讲授:伍宗富
讲授:伍宗富
EDA技术
课堂小结
一、子程序
(函数、重载函数、过程、重载过程)
二、库、程序包及其他
三、 VHDL描述风格
(行为描述、数据流描述、结构描述)
四、 VHDL实际应用步骤
(设计输入、选择目标器件、引脚锁定、
编译文件、 设计校验 、器件配置与编程下载 )
讲授:伍宗富
EDA技术
课外作业:
教材P210
3.29、3.32 、3.33