硬件描述语言与数字系统开发(第4章).ppt

上传人:牧羊曲112 文档编号:5293962 上传时间:2023-06-23 格式:PPT 页数:53 大小:329.50KB
返回 下载 相关 举报
硬件描述语言与数字系统开发(第4章).ppt_第1页
第1页 / 共53页
硬件描述语言与数字系统开发(第4章).ppt_第2页
第2页 / 共53页
硬件描述语言与数字系统开发(第4章).ppt_第3页
第3页 / 共53页
硬件描述语言与数字系统开发(第4章).ppt_第4页
第4页 / 共53页
硬件描述语言与数字系统开发(第4章).ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《硬件描述语言与数字系统开发(第4章).ppt》由会员分享,可在线阅读,更多相关《硬件描述语言与数字系统开发(第4章).ppt(53页珍藏版)》请在三一办公上搜索。

1、硬件描述语言与数字系统开发,第4章 VHDL语言要素,VHDL 的标识符 VHDL 的数据对象 VHDL 的数据类型 VHDL 的运算操作符 VHDL 的关键字 EDA技术常用术语,标识符(identifiers):可用来为设计实体、构造体、端口及内部信号、变量、常量等参数命名,由英文字母、数字、下划线组成。书写规则:标识符中首字母必须是英文字母。标识符中末字母不能是下划线。标识符中不允许出现两个连续的下划线。标识符中不区分字母、数字的大小写。VHDL语言中的关键保留字不能用作标识符。VHDL语言中的分隔符由分号“;”构成。VHDL语言中的注释符由双横线“-”构成。,4.1 标识符,_Deco

2、der_1-起始为非英文字母2FFT,74HC245-起始为数字Sig_#N,CLR/RST-符号“#”“/”不能成为标识符的构成Not-Ack,D10%-符号“-”“%”不能成为标识符的构成RyY_RST_-标识符的最后不能是下划线“_”data_ _BUS-标识符中不能有双下划线return,BLOCK-标识符不能为关键字,Decoder_1,FFT3,Sig_N_8,State0,I2d_8le6,合法标识符:,非法标识符:,library ieee;use ieee.std_logic_1164.all;use;entity rglight_cotrl isport(clk1,clk2

3、:in std_logic;timh,timl:out std_logic_vector(3 downto 0);r,g,y:out std_logic);end rglight_cotrl;architecture rtl of rglight_cotrl issignal yy:std_logic;type rgy is(red,green,yellow);beginprocess(clk1)variable a:std_logic;variable state:rgy;variable th,tl:std_logic_vector(3 downto 0);,数据对象(Data Objec

4、ts):VHDL语言中的数据对象是一个可以赋值的客体,类似于一种容器,可以接受各种数据类型的赋值。常用的数据对象有常量、变量、信号三大类。顾名思义,常量用来存放仿真/综合过程中的不变值。变量位于进程和子程序内部,主要用来暂时存放中间数据,即对中间计算结果或临时数据进行局部贮存。变量只在进程内部是可视的。信号是VHDL中最具硬件特色语言要素,是内部硬件相互连接的主要机制,它表示把元件的装配端口连在一起的互连线,信号在整个实体内部存放数据、传递信息。,4.2 数据对象,数据对象-常量,常量(关键字constant)常量在设计描述中保持某一规定类型的特定值不变 常量必须在实体、构造体或进程的说明区域

5、加以说明常量在定义时赋初值,赋值符号为“:=”常量说明、赋值语句的一般格式:constant name:=value;,例:constant allis1:std_logic_vector(2 downto 0):=“111”;constant buswidth:integer:=8;,变量(关键字variable)仅用于进程和子程序变量的赋值符号为“:=”必须在进程和子程序的说明性区域说明不能表达连线和存储元件变量说明、赋值语句的一般格式:variable name:;name:=value;,例:variable va,vb:std_logic_vector(7 downto 0);va:

6、=“00101110”;vb(7 downto 4):=va(3 downto 0);,数据对象-变量,变量的赋值,VARIABLE temp:STD_LOGIC_VECTOR(7 downto 0);整体赋值:temp:=“10101010”;temp:=x”AA”;(1076-1993)逐位赋值:temp(7):=1;多位赋值temp(7 downto 4):=“1010”;,信号(关键字signal)信号用于声明内部信号,而非外部信号(in,out,inout,buffer)信号在元件之间起互联作用,可代表连线。信号赋值符号为“signal name:;name value;,例:sig

7、nal x,y:integer range 0 to 100;signal halfsum:std_logic_vector(7 downto 0);X=15;Y=x+10;Halfsum=“00001111”;,数据对象-信号,信号的赋值,SIGNAL temp:STD_LOGIC_VECTOR(7 downto 0);整体赋值:temp=“10101010”;temp=x”AA”;逐位赋值:temp(7)=1;多位赋值:temp(7 downto 4)=“1010”;,注意:信号与变量的赋值符号是不同的。信号与变量的作用范围是不同的。信号与变量的综合效果是不同的。,数据对象中的信号与变量,

8、例:variable v_abc:std_logic_vector(2 downto 0);signal s_abc:std_logic_vector(2 downto 0);v_abc:=“000”;s_abc=“000”;,ARCHITECTURE,SIGNAL 描述,label1:PROCESS1,VARIABLE 描述,label2:PROCESS2,VARIABLE 描述,信号与变量的作用范围,library ieee;use ieee.std_logic_1164.all;use;entity rglight_cotrl isport(clk1,clk2:in std_logic;

9、timh,timl:out std_logic_vector(3 downto 0);r,g,y:out std_logic);end rglight_cotrl;architecture rtl of rglight_cotrl issignal yy:std_logic;type rgy is(red,green,yellow);beginprocess(clk1)variable a:std_logic;variable state:rgy;variable th,tl:std_logic_vector(3 downto 0);,LIBRARY IEEE;USE IEEE.STD_LOG

10、IC_1164.ALL;ENTITY DFF3 IS PORT(CLK,D1:IN STD_LOGIC;Q1:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B:STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN A=D1;B=A;Q1=B;END IF;END PROCESS;END;,B,A,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK,D1:IN STD_LOGIC;Q1:

11、OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS(CLK)VARIABLE A,B:STD_LOGIC;BEGIN IF CLKEVENT AND CLK=1 THEN A:=D1;B:=A;Q1=B;END IF;END PROCESS;END;,信号与变量的区别,数据类型(Data Types):规定数据对象的特征和取值范围,用它们可建立简单的或者复杂的数据对象。,4.3 数据类型,常用数据类型,标准数据类型(10种)整数类型、实数类型、位、位矢量等用户定义类型枚举类型、数组类型等,VHDL是与类型高度相关的语言,不允

12、许将一种数据类型赋予另一种数据类型,若对不同类型的信号进行赋值需使用类型转换函数。VHDL含有很宽范围的数据类型,常用数据类型分为:,标准-整数类型,关键字:INTEGER范围为:-214783647到214783647(231-1)需要综合时,要对范围加以限制例如:VARIABLE Tmp:Integer:=255,SIGNAL count:integer range 0 to 255 count=count+1,标准-实数类型,关键字:REAL范围为:-1.0E38到1.0E38很多综合器不支持该类型,标准-自然数类型,关键字:NATURAL范围为:0到到214783647(231-1)大

13、于等于0的正整数,是整数的一个子集,标准-位类型,关键字:BIT范围为:只有2种取值:0和1,表示2种状态与整数类型中的0、1不同与布尔类型中的0、1不同,标准-位矢量类型,关键字:BIT_VECTOR位矢量是用双引号括起来的一组位数据,可用来表示总线状态位矢量需后跟范围说明指定矢量长度(TO、DOWNTO)位矢量前可加符号标记进制(B、O、X)位矢量可分段操作,标准-布尔类型,关键字:BOOLEAN范围为:只有2种状态:0和1,表示“真”和“假”,用于关系运算和逻辑判断(IF)与整数类型中的0、1不同,没有数值的含义与位类型中的0、1也不同,标准-字符类型,关键字:CHARACTER字符是用

14、单引号括起来的一个字母、数字、空格或特殊符号字符区分大小写,B与b不同字符1与整数1不同,没有数值的含义字符1与位类型中的1也不同,关键字:STRING字符串是用双引号括起来的一个字符序列,用于程序提示或结果说明字符串区分大小,写“RANGE”与“range”不同,标准-字符串类型,关键字:TIME范围为:-214783647到214783647(231-1)时间类型可用来指定延时时间和标定仿真时刻一个完整的时间类型包含整数和单位两部分,且整数和单位间应留有一个空格位时间是一物理量数据,单位为:fs,ps,ns,us,ms,sec,min,hr,标准-时间类型,标准-错误等级,关键字:SEVE

15、RITY LEVEL范围为:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)错误等级用于提示系统当前的工作状态及严重等级,自定义-枚举类型,关键字:TYPE一般格式:TYPE 数据类型名 IS(元素1,元素2.);枚举类型常用于定义状态机的状态,例如:TYPE States IS(S1,S2,S3,S4);type traffic is(red,green,blue);signal present_state,next_state:traffic;,例如:TYPE Std_logic IS(U,X,0,1,Z,W,L,H,_);而 Std_logic_Vec

16、tor 是 std_logic的组合,属工业标准的逻辑类型 如:data:in std_logic_vector(7 downto 0);则data表示8根数据线。如给data赋值5AH可写为:data=“01011010”;或data=X“5A”(X表示16进制)。,自定义-枚举类型,初值,不定,高阻,弱不定,弱低,弱高,不可能,STD_LOGIC_VECTOR类型定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;,自定义-物理类型,关键字:TYPE一般格式:TYPE 数据类型名 IS 范围;例如:TYPE T IS

17、 RANGE 1E18 TO 1E18;UNITS fs;ps=1000fs;ns=1000ps;us=1000ns;ms=1000us;sec=1000ms;min=60sec;hr=60min;END UNITS;,不同数据类型间的转换,VHDL语言对数据类型有着极为严格的分类和定义,不同类型的数据、对象不能随意赋值、代入,必要时,应进行类型转换。常用的数据类型转换方法有二:类型标记法与函数转换法,如:a=real(b)-将integer转换为real;如:to bit(a)/bit_vector(a)-将std_logic(矢量)转换为bit(矢量);如:to std_logic(a)/

18、std_logic_vector(a)-将bit(矢量)转换为 std_logic(矢量);如:conv std_logic_vector(a,位长)-将integer,unsigned转换为std_logic_vector;如:conv integer-将std_logic_vector,unsigned转换为integer。前3个转换函数在ieee库的std_logic_1164程序包中;后2个转换函数在ieee库的std_logic_arith及std_logic_unsigned程序包中。,std库/ieee库中的程序包,library ieee;USE ieee.std_logic_

19、1164.all;USE;USE;ENTITY add_arith_4 ISPORT(A,B:IN std_logic_vector(3 downto 0);cin:IN std_logic;S:OUT std_logic_vector(3 downto 0);cout:OUT std_logic);END add_arith_4;ARCHITECTURE behave OF add_arith_4 ISbegin,process(a,b,cin)variable a_v,b_v:integer range 0 to 15;variable s_v:integer range 0 to 31;

20、variable cin_v:integer range 0 to 1;beginif(cin=1)then cin_v:=1;else cin_v:=0;end if;a_v:=conv_integer(a);b_v:=conv_integer(b);s_v:=a_v+b_v+cin_v;if(s_v=16)thens_v:=s_v-16;cout=1;elsecout=0;end if;s=conv_std_logic_vector(s_v,4);end process;END behave;,4.4 运算操作符,VHDL为构造计算数值的表达式提供的预定义算符。预定义算符可分为四种类型:算

21、术运算符关系运算符逻辑运算符连接运算符,算术运算符,关系运算符,逻辑运算符,其他运算符,VHDL操作符列表1,VHDL操作符列表2,VHDL操作符列表3,运算优先级,*ABSNOT*/MODREM+正-负+-&SLLSLASRLSRAROLROR=AND ORNAND NOR XOR XNOR,高,低,逻辑运算举例,std_logic_vector是按位运算的。例:A=“10101”;B=“10011”则 A and B=“10001”;A or B=“10111”;not A=“01010”;,【例】SIGNAL a,b,c:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGN

22、AL d,e,f,g:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL h,I,j,k:STD_LOGIC;SIGNAL l,m,n,o,p:BOOLEAN;.a=b AND c;-b、c 相与后向a赋值,a、b、c的数据类型同属4位长的位矢量 d=e OR f OR g;-两个操作符OR相同,不需括号 h=(i NAND j)NAND k;-NAND不属上述三种算符中的一种,必须加括号 l=(m XOR n)AND(o XOR p);-操作符不同,必须加括号 h=i AND j AND k;-两个操作符都是AND,不必加括号 h=i AND j OR k;-两个操作符不

23、同,未加括号,表达错误 a=b AND e;-操作数b 与 e的位矢长度不一致,表达错误 h=i OR l;-i 的数据类型是位STD_LOGIC,而l的数据类型是.-布尔量BOOLEAN,因而不能相互作用,表达错误,逻辑运算举例,连接运算符举例,连接符&可将两个对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如,为表达a=1 and b=0 and c=1的概念,可定义一个变量:v_abc=a&b&c;则可用 v_abc=“101”表达上述内容。,VHDL关键字一览,4.5 VHDL的关键字,4.6 EDA技术常用术语(一),SSIC:Small Scale Integrated

24、CircuitMSIC:Middle Scale Integrated CircuitLSIC:Large Scale Integrated CircuitASIC:Application Specific Integrated CircuitSPLD:Simple Programmable Logic DeviceCPLD:Comlex Programmable Logic DeviceFPGA:Field Programmable Gate ArraySOPC:System on Programmable chipEDA:Electronic Design LanguageHDL:Hard

25、ware Description Language PLA:Programmable Logic ArrayPAL:Programmable Array LogicGAL:Generic Array LogicOLMC:Output Logic Macro CellJTAG:Joint Test Action Group,4.6 EDA技术常用术语(二),ISP:In System ProgrammableRTL:Register Transport LevelPIA:Programmable Interconnect ArrayLAB:Logic Array BlockLUT:Look Up

26、 TableLE:Logic Elementtop_down/bottom_up:attribute description/type declaration:generic parameter/sensitive signal:concurrent/sequential statement:compile/simulate/assignment:default/binary value:multi drives/value:,正确编写VHDL程序需要注意哪几大要素?VHDL中标识符的书写规则?其功能作用?VHDL包括哪几种数据对象?其赋值语句的一般格式?VHDL中常用的数据类型有哪几种?分别

27、被定义在哪几个程序包中?VHDL支持哪几种运算操作?哪一种运算优先级最高?常用的VHDL关键字及EDA术语有哪些?解释其含义。用两种方法设计8位比较器,比较器输入是两个待比较的8位数A=A7.A0和B=B7.B0,输出是 D、E、F。当A=B时D=1;当AB时E=1;当AB时F=1。第一种设计方案是常规的比较器设计方法,即直接利用关系操作符进行编程设计;第二种设计方案是利用减法器来完成,通过减法运算后的符号和结果来判别两个被比较值的大小。对两种设计方案的资源耗用情况进行比较,并给以解释。,第 4 章 习题,实验内容:熟悉Quartus2集成开发环境:窗口界面、菜单命令、工具按钮。熟悉Quart

28、us2文本编辑器,编写输入8-1多路选择VHDL源程序。熟悉Quartus2编译综合器,进行VHDL程序综合并查看结果。熟悉Quartus2波形仿真器,进行VHDL程序仿真并分析时序。编写输入下列源程序,修改其中的语法错误,编译通过后进行仿真,分析并说明该VHDL程序的功能。,实验一 VHDL程序开发入门,-library ieee-use ieee.std_logic_1164.all;entity 3_8ymq isport(a,b,c,g1,g2,g3:in std_logic;y:out std_logic_vector(7 downto 0);end 3_8ymq;architecture rtl of 3_8ymq issignal cba:std-logic-vector(2 to 0);begincbayyyyyyyyy=XXXXXXXX“;end case;elsey=“11111111”end if;end process;end;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号