1 / 100

 课程简介

数字系统与 VHDL 程序设计语言.  课程简介. 引例 :. VHDL 原理 :.  VHDL 语言. 非常高速硬件描述语言 , 也就是一种硬件 ( 数字电路 ) 设计语言 . 其 最大特点 是对电路的行为与结构进行高度抽象化规范化,并对设计进行模拟验证与综合优化,使分析和设计高度自动化。.  支持 VHDL 语言的软件平台. Max+PlusII.  由软件设计到硬件实现之间的媒介. CPLD / FPGA ( 可编程器件 ).  由软件设计到硬件实现的流程. 在 Max+PlusII 编写 VHDL 程序. 存盘

bonnie
Download Presentation

 课程简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数字系统与VHDL程序设计语言  课程简介

  2. 引例 : VHDL原理 :

  3. VHDL语言 非常高速硬件描述语言, 也就是一种硬件(数字电路)设计语言. 其最大特点是对电路的行为与结构进行高度抽象化规范化,并对设计进行模拟验证与综合优化,使分析和设计高度自动化。 支持VHDL语言的软件平台 Max+PlusII 由软件设计到硬件实现之间的媒介 CPLD / FPGA (可编程器件)

  4. 由软件设计到硬件实现的流程 在Max+PlusII编写VHDL程序 存盘 (文件名为实体名,后缀为 .VHD) 编译 软件仿真 管脚安排 下载

  5. 基本的并行语句 (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)过程调用语句

  6. 常用数字电路回顾 (1)编码器 输出信号 输入信号 使能端口

  7. 注:EN为1时编码器工作

  8. 举例 参看EWB辅助电路

  9. (2)译码器 译码器 1 1 1 1 × ×

  10. 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标准。

  11. 第一章VHDL的程序结构和软件操作 1-1 VHDL程序的基本结构 1-2软件操作—Max+plusⅡ的操作

  12. 第一章VHDL的程序结构和软件操作 1-1 VHDL程序的基本结构 (1)LIBRARY和PACHAGE的声明部分 作用:库(Library)是用于存放预先编译好的程序包 (Package),程序包中定义了数据集合体、逻 辑操作和元件等。主要是声明在设计或实体中 将用到的常数,数据类型,元件及子程序等。 使用格式:LIBRARY 库名; USE 库名. 程序包名. All;

  13. (2)ENTITY定义 作用:定义本设计的输入/出端口,即定义电路的外观, 即I/O接口的类型和数量使用格式: 格式: ENTITY实体名Is Port ( 端口名:端口模式 数据类型; … 端口名:端口模式数据类型;); End 实体名;

  14. (3)ARCHITECTURE定义 作用:定义实体的实现。即电路的具体描述,说明电路执 行什么动作或实现功能。 使用格式: ARCHITECTURE结构体名 Of 实体名 Is Begin 描述语句; End结构体名;

  15. 在Max+plusⅡ系统中有4个库能支持VHDL语言,它们分在Max+plusⅡ系统中有4个库能支持VHDL语言,它们分 别是Std库、IEEE库、Altera库和Lpm库。Std库和IEEE库 提供基本的逻辑运算函数及数据类型转换函数等。IEEE 库中的程序包std_logic_1164定义了std_logic和 std_logic_vector等数据类型。

  16. 举例: 设计一个与门电路 真值表 逻辑符号

  17. 实体定义: Library IEEE; Use std.standard.all; Entity and2 is Port( A:in bit; B:in bit; Y:out bit); End and2; --首先定义输入输出端口名字, 模式(Mode),信号类型 --注意最后语句的分号在括号外

  18. 结构体定义: 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。

  19. Architecture Nb of and2 is Begin c <=’1’ when a=’1’ and b = ‘1’ else ‘0’; End Nb; 以上结构体表达何种电路? 结论: 一个实体可以有几个结构体,即结构体的定义可以有不同的形式

  20. 1-2软件操作—Max+plusⅡ的操作 1-2-1 建立和编写一个VHDL语言的工程文件 1-2-2 VHDL程序的编译 1-2-3 VHDL语言程序的仿真 1-2-4 芯片的时序分析 1-2-5 安排芯片脚位

  21. 1-2软件操作—Max+plusⅡ的操作 1.Max+plusⅡ开发工具是美国Altera公司自行设计的一种软 件工具,其全称为Multiple Array Matrix and Programmable Logic User System。它具有原理图输入和文本输入(采用 硬件描述语言)两种输入手段,利用该工具所配备的编 辑、编译、仿真、综合、芯片编程等功能,将设计电路 图或电路描述程序变成基本的逻辑单元写入到可编程的 芯片中(如FPGA芯片),作成ASIC芯片。它是EDA设 计中不可缺少的一种工具。 2. 软件安装

  22. 我们通过范例介绍:利用Max+plusⅡ系统 (1)如何编写VHDL程序(使用Text Editor); (2)如何编译VHDL程序(使用Compiler); (3)如何仿真验证VHDL程序(使用Waveform Editor,Simulator); (4)如何进行芯片的时序分析(使用Timing Analyzer); (5)如何安排芯片脚位(使用Floorplan Editor); (6)如何下载程序至芯片(使用Programmer)。

  23. 1-2-1 建立和编写一个VHDL语言的工程文件 首先启动Max+plusⅡ系统,启动后系统进入主菜单画面,在主菜单 上有5个选项,分别是:Max+plusⅡ、File、Assign、Options和Help。 (1)打开文本编辑器;用鼠标点击File选项,点击子菜单中的 New选项,接着屏幕会出现New的对话框。在对话框内有4 种编辑方式:图形编辑、符号编辑、文本编辑和波形编辑。 VHDL文件属于文本,那么应该选择文本编辑方式,点击 OK按钮,屏幕上将出现一个无名的编辑窗口,则系统进入 文本编辑状态。

  24. (2)在编辑窗口中进行编辑输入,输入相应的描述语句。(2)在编辑窗口中进行编辑输入,输入相应的描述语句。 (3)存盘。(a 我们编辑的VHDL文件扩展名为vhd;b 保存的文 件名必须和所定义的实体名相同。c 文件存盘的目录不应是 根目录或桌面,建议存放在Max2work或Maxplus2目录,或 其子目录。) 以与门的设计为例讲述具体过程

  25. 1-2-2 VHDL程序的编译 (1)若文件没有打开,需首先打开要编译的VHDL文件; (2)将目前的文件设置成工程文件;点击File选项,光标移到子菜单的 Project项停留几秒钟,屏幕上会出现下一级菜单,点击Set Project to Current File (3)打开编译器;点击主菜单MAX+plusⅡ/Compiler选项,屏幕上就出现编译 对话框。 (4)开始编译;完成了上述编译前的准备及必要的设置工作,点击编译对话框 中的Start按钮,编译即开始。 以与门的设计为例讲述具体过程

  26. 1-2-3 VHDL语言程序的仿真 仿真是为了验证我们所编写的VHDL程序的功能是否正确。 (1)首先生成仿真波形文件 (a)打开波形编辑器;点击主菜单的MAX+plusⅡ/Waveform Editor选项,就 可在屏幕上显示波形编辑器窗口。在未输入信号名以前,整个窗口是空 白的。 (b)确定仿真持续时间(File/End Time)。 (c)选则输入输出端口名; (d)编辑输入信号波形; (e)信号波形编辑完成后,需存盘为仿真使用,文件名采取默认方式即可。

  27. (2)打开仿真器;点击主菜单MAX+plusⅡ\Simulator项,此时弹出Simulator(2)打开仿真器;点击主菜单MAX+plusⅡ\Simulator项,此时弹出Simulator 对话框。点击对话框的Start按钮,仿真即开始。在仿真结束后打开仿真波 形文件(点击右下角的Open SCF按钮)即可以显示仿真结果。 (以与门的设计为例讲述具体过程)

  28. 1-2-4 芯片的时序分析 仿真结果从波形上来看,很难给出定量的信号延迟关系,这一点时序分析却能 直观地用表来进行显示。 (1)选择要下载的器件型号; (点击主菜单的Assign/Device项得到Device对话框) (2)需要再编译一次。 (3)打开时序仿真器; (点击Timing Analyzer选项) (4)最后点击Start按钮后,时序分析器开始启动。 (以与门的设计为例讲述具体过程)

  29. 1-2-5 安排芯片脚位 为了将程序下载到芯片,需安排芯片脚位。 (1)打开芯片脚位设置器; (MAX+plusⅡ/Floorplan Editor) (2)将实体定义的端口名字和下载芯片的管脚进行具体对应; (3)最后再进行一次编译。 教学演示片

  30. 第二章 VHDL语言要素 §2.1 VHDL语言规则 数字型文字、字符串文字、标识符、下标名、段名

  31. § 2-2 数据类型 数据类型分类:逻辑信号类型和数值信号类型。 § 2-2-1逻辑数据类型 (1)布尔代数(Boolean)型 定义位置:在std库的standard程序包中进行定义。 信号形式:FALSE,TRUE (2)位(Bit) 定义位置:在std库的standard程序包中进行定义。 信号形式:0,1 (低电位,高电位 )

  32. 编码器 : 输出信号 输入信号

  33. (3)位数组类型(Bit_Vector) 定义位置:在std库的standard程序包中进行定义。 例 : Signal A: bit_vector(0 to 7); Signal B: bit_vector(2 downto 0); 输出信号 输入信号

  34. (4)标准逻辑型(Std_Logic ) 定义位置:在IEEE库的std_logic_1164程序包中进行定义

  35. 可以看出,这个“标准逻辑”信号定义,比“位即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型

  36. § 2-2-2 数值数据类型 (1)整数(Integer) 定义位置:在std库的standard程序包中进行定义。即数值范 围为-231~231。 (2)无符号(Unsigned)和有符号(Signed)类型 定义位置:有符号(Signed)和无符号(Unsigned)逻辑信号定义在 库IEEE的程序包std_logic_arith中。

  37. 无符号类型数据代表无符号数值,即代表0或正数;最左边的位无符号类型数据代表无符号数值,即代表0或正数;最左边的位 为最高位。如:Unsigned(“0110”)代表 ; +6 Unsigned(“1010”)代表 + 10 有符号类型数据代表有符号数值,即可以是正数,0,负数;编 译器将有符号数类型作为一个补码的二进制数,最左边的位为 符号位。 -2。 如:signed(“0110”)代表+6;signed(“1010”)代表

  38. 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具体值 ???

  39. 当定义成无符号数据类型时,若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数据类型以及用户自定义数据 类型等。这些数据类型各有 特点,以后用到再行讲解

  40. §2.3 VHDL数据对象 数据对象(Data Objects): 凡是可以被赋予一个值的对象称为数据对象, 数据对象用于传递信号。 例 : 数据对象类型 数据对象名 数据对象值的类型

  41. 2-3-1 信号 信号数据对象,代表电路内部传输线路线路,其在元件之间起互连作用 信号数据对象的定义格式为: Signal 信号名:数据类型[:=设定值]; 如: Signal A : Std_logic_vector(3 Down to 0) := “0000”; 信号赋值语句的语法格式为: 目标信号名<=表达式(设定值); A <=“1010” 注意:由于Maxplus II系统往往会忽略信号对象定义时所赋初始值,建议在结 构体中用赋值语句完成对信号的赋值。

  42. 2-3-2 变量 它用于对中间数据的临时存储,并不一定代表电路的某一组件。 变量数据对象的定义格式为:Variable 变量名:数据类型[:=设定值]; 如:Variable a: integer := 0; 变量赋值语句的语法格式为:目标变量名 := 表达式(设定值); 如: a := b+c; 注意:由于MAXPLUSII系统往往会忽略变量对象定义时所赋初始值,建议在结 构体中用赋值语句完成对变量的赋值。

  43. 2-3-3 常数 常数的定义格式为:Constant 常数名:数据类型:=表达式; 如:Constant D1: Integer:=3; Constant D2: Std_Logic_Vector(D1 Down to 0) := ”0000”; 注意:常数数据对象定义的同时进行赋值。赋值符号为“:=”

  44. 2-3-4 信号、变量、常数对比 一、定义 Signal A: std_logic; Variable A: std_logic_vector(7 downto 0); Constant A: integer :=6 ; 二、赋值及赋值时刻 A<=“1010”;(延时) A := “1010”; (立刻) 三、定义区域 信号:实体、结构体、程序包 变量:进程、子程序 常数:实体、结构体、程序包、块、进程、子程序

  45. 四、适用范围 信号:实体、结构体、程序包 变量:定义了变量的进程、子程序的顺序语句中 常数:视其定义的位置而定 若常数定义在实体中,适用范围是实体所对应的 有结构体。 若常数定义在结构体中,适用范围就是本结构体。

  46. 执行结果为: x<=c xor b, y<=c xor b

  47. 执行结果为: x<=c xor a, y<=c xor b

  48. 练习: 1.定义信号 A1,A2,A3,A4,A5,A6,A7,A8 其中每一位信号均为标准逻辑型 2. 定义信号B,其数据类型为标准逻辑型。 3.定义信号C,数据类型为整数型。 4. 给A、B赋值,其中A的值为11001101;B的值为0。

  49. 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’

More Related