1k likes | 1.21k Vues
数字系统与 VHDL 程序设计语言. 课程简介. 引例 :. VHDL 原理 :. VHDL 语言. 非常高速硬件描述语言 , 也就是一种硬件 ( 数字电路 ) 设计语言 . 其 最大特点 是对电路的行为与结构进行高度抽象化规范化,并对设计进行模拟验证与综合优化,使分析和设计高度自动化。. 支持 VHDL 语言的软件平台. Max+PlusII. 由软件设计到硬件实现之间的媒介. CPLD / FPGA ( 可编程器件 ). 由软件设计到硬件实现的流程. 在 Max+PlusII 编写 VHDL 程序. 存盘
E N D
数字系统与VHDL程序设计语言 课程简介
引例 : VHDL原理 :
VHDL语言 非常高速硬件描述语言, 也就是一种硬件(数字电路)设计语言. 其最大特点是对电路的行为与结构进行高度抽象化规范化,并对设计进行模拟验证与综合优化,使分析和设计高度自动化。 支持VHDL语言的软件平台 Max+PlusII 由软件设计到硬件实现之间的媒介 CPLD / FPGA (可编程器件)
由软件设计到硬件实现的流程 在Max+PlusII编写VHDL程序 存盘 (文件名为实体名,后缀为 .VHD) 编译 软件仿真 管脚安排 下载
基本的并行语句 (1)直接赋值语句 (2) Process语句 (3)When-Else (4)With-Select-When (5)元件例化语句 (6)For-Generate 基本顺序语句 (1)Process语句 (2)If-Else语句 (3)Case-When语句 (4)Null语句 (5)Wait until语句 (6)变量赋值语句 (7)For-Loop语句 (8)过程调用语句
常用数字电路回顾 (1)编码器 输出信号 输入信号 使能端口
举例 参看EWB辅助电路
(2)译码器 译码器 1 1 1 1 × ×
VHDL与数字电路设计 引言VHDL简介 一、由来 VHDL是Very High speed Integrated Circuit Hardware Description Language (非常高速集成电路硬件描述语言)的英文缩写。它是由美国国防部支持的一项研究计划,于1983年创建,目的是以文字化方法描述电子电路与系统。至今VHDL约有40年的发展历史,1987年,VHDL成为IEEE标准,即IEEE1076标准,1993年修改为IEEE1164标准,1996年,IEEE又将电路合成的标准程序与规格加入到VHDL语言中,称为1076.3标准。之后,又有1076.4标准和1076.6标准。
第一章VHDL的程序结构和软件操作 1-1 VHDL程序的基本结构 1-2软件操作—Max+plusⅡ的操作
第一章VHDL的程序结构和软件操作 1-1 VHDL程序的基本结构 (1)LIBRARY和PACHAGE的声明部分 作用:库(Library)是用于存放预先编译好的程序包 (Package),程序包中定义了数据集合体、逻 辑操作和元件等。主要是声明在设计或实体中 将用到的常数,数据类型,元件及子程序等。 使用格式:LIBRARY 库名; USE 库名. 程序包名. All;
(2)ENTITY定义 作用:定义本设计的输入/出端口,即定义电路的外观, 即I/O接口的类型和数量使用格式: 格式: ENTITY实体名Is Port ( 端口名:端口模式 数据类型; … 端口名:端口模式数据类型;); End 实体名;
(3)ARCHITECTURE定义 作用:定义实体的实现。即电路的具体描述,说明电路执 行什么动作或实现功能。 使用格式: ARCHITECTURE结构体名 Of 实体名 Is Begin 描述语句; End结构体名;
在Max+plusⅡ系统中有4个库能支持VHDL语言,它们分在Max+plusⅡ系统中有4个库能支持VHDL语言,它们分 别是Std库、IEEE库、Altera库和Lpm库。Std库和IEEE库 提供基本的逻辑运算函数及数据类型转换函数等。IEEE 库中的程序包std_logic_1164定义了std_logic和 std_logic_vector等数据类型。
举例: 设计一个与门电路 真值表 逻辑符号
实体定义: Library IEEE; Use std.standard.all; Entity and2 is Port( A:in bit; B:in bit; Y:out bit); End and2; --首先定义输入输出端口名字, 模式(Mode),信号类型 --注意最后语句的分号在括号外
结构体定义: Architecture Na of and2 is Begin Y<=’0’ when a=’0’ and B= ‘0’ else’0’ when A=’1’ and B = ‘0’ else ’0’ when A=’0’ and B = ‘1’ else ‘1’; End Na 端口模式有以下几种类型:IN ;OUT;INOUT;BUFFER。
Architecture Nb of and2 is Begin c <=’1’ when a=’1’ and b = ‘1’ else ‘0’; End Nb; 以上结构体表达何种电路? 结论: 一个实体可以有几个结构体,即结构体的定义可以有不同的形式
1-2软件操作—Max+plusⅡ的操作 1-2-1 建立和编写一个VHDL语言的工程文件 1-2-2 VHDL程序的编译 1-2-3 VHDL语言程序的仿真 1-2-4 芯片的时序分析 1-2-5 安排芯片脚位
1-2软件操作—Max+plusⅡ的操作 1.Max+plusⅡ开发工具是美国Altera公司自行设计的一种软 件工具,其全称为Multiple Array Matrix and Programmable Logic User System。它具有原理图输入和文本输入(采用 硬件描述语言)两种输入手段,利用该工具所配备的编 辑、编译、仿真、综合、芯片编程等功能,将设计电路 图或电路描述程序变成基本的逻辑单元写入到可编程的 芯片中(如FPGA芯片),作成ASIC芯片。它是EDA设 计中不可缺少的一种工具。 2. 软件安装
我们通过范例介绍:利用Max+plusⅡ系统 (1)如何编写VHDL程序(使用Text Editor); (2)如何编译VHDL程序(使用Compiler); (3)如何仿真验证VHDL程序(使用Waveform Editor,Simulator); (4)如何进行芯片的时序分析(使用Timing Analyzer); (5)如何安排芯片脚位(使用Floorplan Editor); (6)如何下载程序至芯片(使用Programmer)。
1-2-1 建立和编写一个VHDL语言的工程文件 首先启动Max+plusⅡ系统,启动后系统进入主菜单画面,在主菜单 上有5个选项,分别是:Max+plusⅡ、File、Assign、Options和Help。 (1)打开文本编辑器;用鼠标点击File选项,点击子菜单中的 New选项,接着屏幕会出现New的对话框。在对话框内有4 种编辑方式:图形编辑、符号编辑、文本编辑和波形编辑。 VHDL文件属于文本,那么应该选择文本编辑方式,点击 OK按钮,屏幕上将出现一个无名的编辑窗口,则系统进入 文本编辑状态。
(2)在编辑窗口中进行编辑输入,输入相应的描述语句。(2)在编辑窗口中进行编辑输入,输入相应的描述语句。 (3)存盘。(a 我们编辑的VHDL文件扩展名为vhd;b 保存的文 件名必须和所定义的实体名相同。c 文件存盘的目录不应是 根目录或桌面,建议存放在Max2work或Maxplus2目录,或 其子目录。) 以与门的设计为例讲述具体过程
1-2-2 VHDL程序的编译 (1)若文件没有打开,需首先打开要编译的VHDL文件; (2)将目前的文件设置成工程文件;点击File选项,光标移到子菜单的 Project项停留几秒钟,屏幕上会出现下一级菜单,点击Set Project to Current File (3)打开编译器;点击主菜单MAX+plusⅡ/Compiler选项,屏幕上就出现编译 对话框。 (4)开始编译;完成了上述编译前的准备及必要的设置工作,点击编译对话框 中的Start按钮,编译即开始。 以与门的设计为例讲述具体过程
1-2-3 VHDL语言程序的仿真 仿真是为了验证我们所编写的VHDL程序的功能是否正确。 (1)首先生成仿真波形文件 (a)打开波形编辑器;点击主菜单的MAX+plusⅡ/Waveform Editor选项,就 可在屏幕上显示波形编辑器窗口。在未输入信号名以前,整个窗口是空 白的。 (b)确定仿真持续时间(File/End Time)。 (c)选则输入输出端口名; (d)编辑输入信号波形; (e)信号波形编辑完成后,需存盘为仿真使用,文件名采取默认方式即可。
(2)打开仿真器;点击主菜单MAX+plusⅡ\Simulator项,此时弹出Simulator(2)打开仿真器;点击主菜单MAX+plusⅡ\Simulator项,此时弹出Simulator 对话框。点击对话框的Start按钮,仿真即开始。在仿真结束后打开仿真波 形文件(点击右下角的Open SCF按钮)即可以显示仿真结果。 (以与门的设计为例讲述具体过程)
1-2-4 芯片的时序分析 仿真结果从波形上来看,很难给出定量的信号延迟关系,这一点时序分析却能 直观地用表来进行显示。 (1)选择要下载的器件型号; (点击主菜单的Assign/Device项得到Device对话框) (2)需要再编译一次。 (3)打开时序仿真器; (点击Timing Analyzer选项) (4)最后点击Start按钮后,时序分析器开始启动。 (以与门的设计为例讲述具体过程)
1-2-5 安排芯片脚位 为了将程序下载到芯片,需安排芯片脚位。 (1)打开芯片脚位设置器; (MAX+plusⅡ/Floorplan Editor) (2)将实体定义的端口名字和下载芯片的管脚进行具体对应; (3)最后再进行一次编译。 教学演示片
第二章 VHDL语言要素 §2.1 VHDL语言规则 数字型文字、字符串文字、标识符、下标名、段名
§ 2-2 数据类型 数据类型分类:逻辑信号类型和数值信号类型。 § 2-2-1逻辑数据类型 (1)布尔代数(Boolean)型 定义位置:在std库的standard程序包中进行定义。 信号形式:FALSE,TRUE (2)位(Bit) 定义位置:在std库的standard程序包中进行定义。 信号形式:0,1 (低电位,高电位 )
编码器 : 输出信号 输入信号
(3)位数组类型(Bit_Vector) 定义位置:在std库的standard程序包中进行定义。 例 : Signal A: bit_vector(0 to 7); Signal B: bit_vector(2 downto 0); 输出信号 输入信号
(4)标准逻辑型(Std_Logic ) 定义位置:在IEEE库的std_logic_1164程序包中进行定义
可以看出,这个“标准逻辑”信号定义,比“位即bit”信号对于数字逻辑电路的可以看出,这个“标准逻辑”信号定义,比“位即bit”信号对于数字逻辑电路的 逻辑特性描述更完整、更真实。所以在VHDL的程序里,对于逻辑信号的定 义,通常都是采用这个“标准逻辑”信号形式。 使用这类数据信号,必须包含下面两条声明语句: Library IEEE; Use IEEE.std_logic_1164.all; (5)标准逻辑数组类型(Std_Logic_vector) 定义位置:在ieee库的std_logic_1164程序包中进行定义。 Bit_Vector与Std_Logic_vector的区别在于数组的 每一位前者为BIT型(0,1)后者为Std_Logic型
§ 2-2-2 数值数据类型 (1)整数(Integer) 定义位置:在std库的standard程序包中进行定义。即数值范 围为-231~231。 (2)无符号(Unsigned)和有符号(Signed)类型 定义位置:有符号(Signed)和无符号(Unsigned)逻辑信号定义在 库IEEE的程序包std_logic_arith中。
无符号类型数据代表无符号数值,即代表0或正数;最左边的位无符号类型数据代表无符号数值,即代表0或正数;最左边的位 为最高位。如:Unsigned(“0110”)代表 ; +6 Unsigned(“1010”)代表 + 10 有符号类型数据代表有符号数值,即可以是正数,0,负数;编 译器将有符号数类型作为一个补码的二进制数,最左边的位为 符号位。 -2。 如:signed(“0110”)代表+6;signed(“1010”)代表
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entitydatais port(a,b: in unsigned(3 downto 0); --相应改为a,b: in signed(3 downto 0); c: out std_logic); end data; architecturem1of data is begin c<='1' when a<b else '0'; end m1; use ieee.std_logic_1164.all; ??? use ieee.std_logic_arith.all; ??? 列举a、b具体值 ???
当定义成无符号数据类型时,若a<=”1000”,b=’0001’,即a=8,b=1则结果当定义成无符号数据类型时,若a<=”1000”,b=’0001’,即a=8,b=1则结果 c=’0’; 当定义成有符号数据类型时,若a<=”1000”,b=’0001’,a=-8,b=1,则结果 c=’1’。 另外:还有其他positive ,natural,real数据类型以及用户自定义数据 类型等。这些数据类型各有 特点,以后用到再行讲解
§2.3 VHDL数据对象 数据对象(Data Objects): 凡是可以被赋予一个值的对象称为数据对象, 数据对象用于传递信号。 例 : 数据对象类型 数据对象名 数据对象值的类型
2-3-1 信号 信号数据对象,代表电路内部传输线路线路,其在元件之间起互连作用 信号数据对象的定义格式为: Signal 信号名:数据类型[:=设定值]; 如: Signal A : Std_logic_vector(3 Down to 0) := “0000”; 信号赋值语句的语法格式为: 目标信号名<=表达式(设定值); A <=“1010” 注意:由于Maxplus II系统往往会忽略信号对象定义时所赋初始值,建议在结 构体中用赋值语句完成对信号的赋值。
2-3-2 变量 它用于对中间数据的临时存储,并不一定代表电路的某一组件。 变量数据对象的定义格式为:Variable 变量名:数据类型[:=设定值]; 如:Variable a: integer := 0; 变量赋值语句的语法格式为:目标变量名 := 表达式(设定值); 如: a := b+c; 注意:由于MAXPLUSII系统往往会忽略变量对象定义时所赋初始值,建议在结 构体中用赋值语句完成对变量的赋值。
2-3-3 常数 常数的定义格式为:Constant 常数名:数据类型:=表达式; 如:Constant D1: Integer:=3; Constant D2: Std_Logic_Vector(D1 Down to 0) := ”0000”; 注意:常数数据对象定义的同时进行赋值。赋值符号为“:=”
2-3-4 信号、变量、常数对比 一、定义 Signal A: std_logic; Variable A: std_logic_vector(7 downto 0); Constant A: integer :=6 ; 二、赋值及赋值时刻 A<=“1010”;(延时) A := “1010”; (立刻) 三、定义区域 信号:实体、结构体、程序包 变量:进程、子程序 常数:实体、结构体、程序包、块、进程、子程序
四、适用范围 信号:实体、结构体、程序包 变量:定义了变量的进程、子程序的顺序语句中 常数:视其定义的位置而定 若常数定义在实体中,适用范围是实体所对应的 有结构体。 若常数定义在结构体中,适用范围就是本结构体。
执行结果为: x<=c xor b, y<=c xor b
执行结果为: x<=c xor a, y<=c xor b
练习: 1.定义信号 A1,A2,A3,A4,A5,A6,A7,A8 其中每一位信号均为标准逻辑型 2. 定义信号B,其数据类型为标准逻辑型。 3.定义信号C,数据类型为整数型。 4. 给A、B赋值,其中A的值为11001101;B的值为0。
Library IEEE Library Std Use ieee.std_logic_1164.all Use std.standard.all Signal A: std_logic_vector(1 to 8) Signal B: std_logic Signal C: integer A<=“11001101” B<=‘0’