版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5第5 VHDL基本结构与语第5 VHDL基本结构与语VHDLVHDLVHDLLIBRARYPACKAGE:库用于存储预先完成的程序包和数据集合ARCHITECTURE:定义实体的实现,即电路的具体描述。可有多个个结构体。11个结构体对实体起作用,其他结构1个结构体时不要实体。5-1】215-1。功能描述为S=0AY,S=1BYVHDLENTITYmux21a mux21a OUTEND
AABYS图5-1例5-1功能示意AABYS图5-2例5-1实体定ARCHITECTUREoneOFmux21a s=’0’ ENDone5-3实体定义本设计的输入输出端口/约定:[]
例
1ENTITY实体名IS ];] --端口定义(端口1:端口模 端口类型…端口n:端口模 端口类型--最后一个无分 ENDENTITYARCHITECTUREIEEESTDl076_1993版的语法要求,不带为IEEESTD107619872ENTITY实体名 --此处无分 端口名:端口模 端口类型的子集,但不是由外部驱动, 图5-4端口模式示意图integerBOOLEANBIT、标准逻辑位数据类型std_logic、std_logic_vector5.2第5第5 VHDL基本结构与语PAGEPAGE3PAGEPAGE412VHDL3、格式:ARCHITECTUREOFISEND4ARCHITECTUREARCHITECTUREOFENDCONPONENTINSTANTIATIONS:元件调用,调用另一实体的BLOCK例题5-1注意:为“<=时间δay。在此不妨将δ看成是实际电路存在的固有延时量。VHDL2、条件判断格式:位信号=注意:非“==。常用的关系操作符(Relational Operator)有“=”等于“/=”不等于“<”小于“<=”小于或等于“>”大于“>=”大于或等于。=、/=大即为大数。例位矢“1011”>"101011”1”>“011"。改进:对以上判断错误可用STD_LOGIC_ARITH的UNSIGNED解决,如: “011”,结果将判为TRUE。3WHEN-格式1:变量<=值1WHEN条件1 值2;当满足条件1,变量=值1,否则变量=值2。格式2:变量=值1WHEN条件 值2WHEN条件 …值n-1WHEN条件n- 5-2ARCHITECTUREarchmuxOFmux4ISy<=a0WHENs=“00”ELSEa1WHENs=“01”ELSEa2WHENs=“10”
s图5-5例5-4功第5第5 VHDL基本结构与语PAGEPAGE5PAGEPAGE6 b。z<=aWHENPl='1'bWHENP2='1'ELSEWHEN-ELSEVHDLVHDL进程语句[标号:]PROCESS(敏感信号表[声明区 [顺序语句END [标号 进程结束‘0‘1)5-35-1IFTHEN-ELSE-ENDIF OF IFS='O' ENDIF;ENDENDWAIT6.2WAIT*2.块语句 ENDBLOCK[块名5-4】8ENTITYCOMPIS(a,b:ININTEGERRANGE0T0aequalb,agreatb,alessb:OUTEND p1:aequalb<=‘1’WHENa=bELSE‘0’;agreatb<=‘1’WHENa>bELSE‘0’;alessb<=‘1’WHENa<bELSE‘0’;END 第5第5 VHDL基本结构与语PAGEPAGE7PAGEPAGE83.35.15.1WITH-SELECT-WITH选择表达式赋值目标信号〈=表达式WHEN表达式WHEN…表达式WHEN5-55-2WITH-SELECT-WHEN ss注意:句未全 而不 sOTHERS- 4.生成语句(参6.1节NULLIFTHEN-ELSE-ENDIFIF语句只能在进程中使用,它根据一个或一组条件的布尔运算而选择某特定的执行格式:IF 条件1 赋值语句1; 赋值语句2; 5-3IF语句可嵌套。1(IF后嵌套): 条件 2THEN…ELSE…END 嵌套格式2(在ELSE后嵌套): 条件1 2THEN…ELSE…END 注意:每一个“IF”语句都必须有一个对应的“ENDIF”语句。3(ELSEELSE):IF1THEN…ELSIF2THEN…ELSE…END注意:ELSIFIFENDIF【例5-6】例5-2的四选一数据选择器的IF实现。实体略。 s=“00”THENELSIFs=“01”THENy<=a1; --ELSEIFELSIFELSIFs=“10”THENy<=a2; y<=a3;END CASE_WHEN语句程序的可读性比较好。CASE_WHENCASE属于顺序语句,必须放在进程中,格式是:CASE表达式ISWhen选择 …When选择 第5第5 VHDL基本结构与语PAGEPAGE9END的含义相当于“THEN”(或“于是“)。CASEWHEN条件句中的选择值必须在表达式的取值范围内OTHERS表示以上己列的所有条件句中未能列出的其他可能的取值;OTHERS,且只能作为最后一种条件取值CASE【例5-7】例5-2的四选一数据选择器的CASE实现。实体略。 PROCESS(s,a0,a1,a2,a3) WHEN“00”=> THEN的作用,WHEN“01”=>WHEN“10”=>y<=a2; OTHERS=>y<=a3; CASE语句中条件句的次序是不重要的,其执行过程接近于并行方式。一般地,对完CASEIF语句描述耗用更多的硬件资源。LOOPFOR_LOOP[LOOP标号 FOR循环变量IN循环次数范围ENDLOOP[LOOP标号【例5-8】奇偶测试电路 GENERIC(bussize:integer:=8); --8; std_logic_vector(bussize-1 0);even_num,odd_num : OUT PROCESS(databus) tmp:std_logic;tmp:= INdatabus’low --循环变量i是一个临时变量,tmp:= databus --odd_flag奇标志 tmp;--even_flag偶标志 NULLNULL标识符
VHDL可以是常数、变量、信号、端口、子程序或参数的名字统称为标识符。由英文字母“a”到“z”、“A”到“Z”、数字“O”到“9”以及下划线“_”组成。使用时应注意以下几点:1、不区分大小写;2、须以字母开头,如20040516错误:3、下划线只能在中间,不能以它开头或结尾,如DEcoder_和_Decoder4、下划线不能连用,如 5、不能用关键词,如IN*6、取名最好有实际意义。如a_h_l、show_new_state、COUNTER_A等是有效的短标识符,而a%b_1、show-new-state等是非法标识符。5-1VHDL的常用保留字(又称关键字),它们在VHDL中有特殊的含义,不能作为标识符出现。此外,不同的综合系统还定义了各自的子程序,子程序名也不能作为标识符出现。对于逻辑综合而言,并不是所有的保留字都有意义。5-1常用保留字第5第5 VHDL基本结构与语DataVHDL种参数)必须严格限定其类型和取值范围,相同类型才能相互传递。VHDL1、位类型‘0BIT、位矢量()位矢量是基于BITSIGNALa:bit_vector(7 SIGNALb:bit_vector(0 TO7);排列指示关键词“TO'’b(1)、b(2)…b(7)。 a(0)<=’0’;a(7)<=’1’a07a(7downto1)<=a(6downto0);a、布尔类取值是:true(false(VHDL‘1’和‘O’truefalse。(FALSE,TRUE;、整数(Integer):在VHDL中,整数可取值范围从-(231-1)到(231-1。要用TYPE数据类型名ISRANGE约束范围;如:TYPEintISRANGE-10TO10;INTEGER作为无符号数处理。 - 十进制整数- 2*103=2000,E10 10101*5、正整数(Positive):正整数是整数的一个子类型,包括整数中的非零和非负的数值。*6*7(Real:在VHDL1.0E+38到1.0E+38的实现相当复杂,目前在电路规模上难以承受。通常情况下,实数类型仅能在VHDL仿真器中使用,综合器中不支持实数。其格式同整数类型。实数常量的书写必须含小数。如1.0十进制浮点0.0十进制浮点 43.6E- *81ps第5第5 VHDL基本结构与语STANDARD程序包中也定义了时间。定义如下:TYPEtimeISRANGE ps=1000ns=1000us=1000ms=1000--min=60--hr=60--end *9‘A*10d;*112、IEEEIEEE的程序包std_logic_1164中定义了两个非常重要的数据类型std_logic和‘0(0‘1(1‘Z(‘X(‘W(‘L(0‘H(1(‘U(IFCASE语句部分。5-95-2CASE --std_logic必须声明库及程序包 ENTITY PORT(s:INstd_logic_vector(1DOWNTOa0,a1,a2,a3:INstd_logic_vector(7DOWNTO0);y:OUTstd_logic_vector(7DOWNTO0));END PROCESS(s,a0,a1,a2,a3) WHEN“00”=>WHEN“01”=>WHEN“10”=>WHEN“11”=>y<=a3; OTHERS=>NULL;--Sstd_logic9种取值,281--OTHERS用于剩余取值的处理。 3枚举类型(Enumerated除了上述一些标准的预定义数据类型外,如整数类型、Boolean类型、标准逻辑位类TYPEIS(枚举文字,枚举文字…….;如:TYPEcolorIS(red,green,yellow,STD_LOGIC一样使用。TYPEcolorIS(red,green,yellow,TYPElevelISSIGNALb:第5第5 VHDL基本结构与语…VARIABLE采用枚举法,在编译时取数范围自动编码,如上例中类型a的四个值red、green、VHDL综合器综合。TYPEISARRAY(索引范围OF类型名称TYPEaISARRAY(integer0TO9)OF5.4.95-27。*3) 子类型 基本数据类 约束范围SUBTYPETYPE所定义的原数据类型的一个子集,它满足原数据类型的所 *4)记录类型(RecodeTYPEIS… RECODE记录类型名CONSTANTLEN:TYPEarraylogicISARRAY(99DOWNTO0)OFstd_logic_vector(7DOWNTOTYPEtableISa:integerRANGE0TOLEN;c:std_logic_vector(7DWNTOEND操作符 参6.1算术操作符(Arithmetic+-*/**乘方MOD求模REMABSSLL逻辑左移、SRL逻辑右移SLA算术左移、SRA算术右移ROL循环左移、ROR关系操作符(RelationOperators):参5.1.3关系操作符的作用是将相同数据类型的数据对象进行数值比较,并将结果以BOOLEANTRUEFALSE逻辑操作符(Logic7AND(与)、OR(或)、NAND(与非)、NOR(或非),XOR(异或)、XNOR(NOT(取反)。3BIT、BOOLEANSTDLOGICXOR这三个算符中的一种,则不需使用括号;【例5-10】逻辑操作符使用注意事项:不加括号的条件和数据类型、长度。 STD_LOGIC_VECTOR(3 STD_LOGIC_VECTOR(1 DOWNTO 0); …a<=bANDc; --b、ca赋值,a、b、c4位长的位矢量d<=eORfORg;--AND、OR、XOR1个,不需括号h<=(iNANDj)NANDk;--NANDAND、OR、XOR,虽相同也要括号。l<=(mXORn)AND(oXORp);--操作符不同,须加括号a<=bAND --be的位矢h<=iORl;--iSTD_LOGIClBoolean第5第5 VHDL基本结构与语 s)) (b END 连接操作符(Concatenation”01如:o1<’0’&a(7downto1); --a右移1位给o1o2<=o1(6downto0)&‘0’; --o1左移1位给o2o3<=o1&o2; --o1、o2合并a<='1’&'0'&d(1)&'1';--元素与元素并置,并置后的数组长度为4IFa&d=“101011” .——在IF条件句中可以使用并置符在逻辑综合中,VHDL常用的数据对象(DataObjects)信号当表达式太长或为便于理解,也可设中间信号变量或中间变量5-de【例5-12】ARCHITECTURE OFmux21a de
b图5-6例5-11综合后的门电SIGNAL信号名:数据类型[:=初始值如:SIGNAL DOWNTO0)目标信号名<=表达式;如:q<=count;变量=VARIABLE变量名:数据类型[:=初始值];如:VARIABLEa:integer:=0;常量CONSTANT常数名:数据类型:=表达式;如:CONSTANTmod:integer:=6;5-2BCD【例5-13】一位BCD码的加法器。 (op1,op2 :IN 0TO9; :OUT 0TO31); adjustnuminteger --SIGNALbinaddintegerRANGE0TO -- tmpinteger:= -- tmp --第5第5 VHDL基本结构与语tmp:= 信号与变量声明的形式与位置不同:信号声名为SIGNAL…,变量声明为变量赋值为“:=VHDL设计中,可以使用信号和变量。考虑到信号的行为更接近于硬件,需要到5-14 PORT(a,b,c x, STD_LOGIC d:std_logic_logic;sig:PROCESS(a,b, --ignored!! --overrides
C图5-7例5-13的电路实 5-7所示。5-15 PORT(a,b,c: x, VAR:PROCESS(a,b, d:d:= d:=b; 5-8所示。VHDL
AX B图5-8例5-14的电路实*1.sdown:INstd_logic_vector(8downto0); outstd_logic_vector(0to8);sdown’left=8;sdown’right=0;sdown’low=0;sdown’high=8;sdown’length=9; 第5第5 VHDL基本结构与语果刚好有事件发生在该属性所附着的信号上(即信号有变化TRUE,否则为clk’eventandclk=’1’ 时钟clk的上升沿。即时钟变化了,且其值为1(从0变1。clk’eventand 时钟clk的下降沿。即时钟变化了,且其值为0(从1变0rising_edge(clk)clk的上升沿,clk’eventandclk=’1’等效;falling_edge(clk)clk的下降沿,clk’eventandclk=’0’等效。STD_LOGIC*3.’RANGE属性,其生成一个限制性数据对象的范围。如:SIGNALdata:std_logic_vector(15DOWNTO0);data’RANGE=15DOWNTO0注意:maxplusII常用电路VHDLD触发5-16DLIBRARYUSEENTITYDFF1 CLK:IN :INSTD_LOGIC; ARCHITECTUREbhvOFDFFl1S CLK’EVENTANDCLK=‘1’THENENDIF;ENDEND语句的描述引进寄存器元件,从而构成时序电路VHDL描述时序电路最重要的途LIBRARYieee;USE (a,b: std_logic;c: PROCESS(a,b)IF(a=‘1’ANDb=‘1’) --无ELSE,其他时为0的表达 END
a ELSEC<=C5-9。MAX+plusIIA、B1之前,CA、1A、B如何变化,C1【例5-18】1位数据比较器的错误描述。 第第5 VHDL基本结构与语
OUT a1>bl
ELSIFal<blTHEN ql<=’0’a1=b1时,q1作何操作EHDIF; 5-105-18原意是设计一个纯组合电路的比较器,但是由于在条件语句中漏掉了给出当ENTITYCOMP_GOODISPORT(al:INBIT;b1:INq1:OUTBIT <=’1’ <=’O’END
图5-11例5-18综合后的门电5-20】8 PORT(data1,data2:IN std_logic_vector(7 0);ci:IN result:OUTstd_logic_vector(7 co:OUT halfadd,fulladd:std_logic_vector(8 halfadd<=data1+data ci=‘0’ result<=fulladd(7 5-21】HEX-LED std_logic_vector(3 0); : OUTstd_logic_vector(6 WHEN"0000"=>led<=WHEN"0001"=>led<=WHEN"0010"=>led<=WHEN"0011"=>led<=第5第5 VHDL基本结构与语WHEN"0100"=>led<=WHEN"0101"=>led<=WHEN"0110"=>led<=WHEN"0111"=>led<=WHEN"1000"=>led<=WHEN"1001"=>led<=WHEN"1010"=>led<=WHEN"1011"=>led<=WHEN"1100"=>led<=WHEN"1101"=>led<=WHEN"1110"=>led<=WHEN"1111"=>led<="1110001";WHENOTHERS=>NULL; encoder PORT(d: std_logic_vector(7 q OUTstd_logic_vector(2 1xxxxxx11101xxxxx1xxxxxx11101xxxxx110001xxxx1010001xxx10000001xx011000001x010000000100100000000000000000000q<=d(7)=d(6)=d(5)=d(4)=d(3)=d(2)=d(1)=d(0)=“000” encoder d(7)=‘1’THENq<=“111”;ELSIFd(6)=‘1’THENq<=“110”;ELSIFd(5)=‘1’THENq<=“101”;ELSIFd(4)=‘1’THENq<=“100”;ELSIFd(3)=‘1’THENq<=“011”;ELSIFd(2)=‘1’THENq<=“010”;ELSIFd(1)=‘1’THENq<=“001”;ELSEq<=“00”;ENDIF;END 5-24 GENERIC(bussize:integer:=8); std_logic_vector(bussize-1 0); : IN std_logic;第5第5 VHDL基本结构与语 std_logic_vector(bussize-1 0)); oe_en= (OTHERS=>--注意此处的“Z” 5-255-12 (sin,clk
图5-12 q1,q0 :std_logic --q1,q0不可为变量。PROCESS(clk) clk=‘1’ (NOT(q1)); (RES=1(MODE=11(MODE=10,(MODE=00 std_logic_vector 0sl_in,sr_in,reset,clk : IN std_logic; --sl_in左移数据输入,sr_in右移数据输入 std_logic_vector(1 0); std_logic_vector(7 0)); PROCESS(clk) clk=‘1’) (reset=‘1’) qout<=(OTHERS=> -- “01”=>qout<=sr_in&qout 1 -- “10”qout<=qout 0)& -- “11” -- --“NULL”表示无操作 M=605-27600,进位输入/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习主题单元4第9课时力与运动课件
- 磴口县三完小三年级手工教案
- 北师大版二年级语文上册教案(高效课堂模式)
- 火力发电电焊施工协议
- 西师版五年级语文下册教案
- 广告创意总监租赁合约
- 社会组织复印机租赁协议
- 财务人员绿色办公倡导承诺书
- 农业科技园区招投标申请表
- 生产线设备故障应对规范
- 部编语文五上《父爱之舟》说课:聚焦场景抓细节-探究真心品真情
- 《数字身份辩设备》课件+2024-2025学年人教版(2024)初中信息科技七年级全一册
- 劳动一年级上册(人民版)第十课《我帮爸妈择择菜》(教学设计)
- 2024小学数学义务教育新课程标准(2022版)必考题库附含答案
- 申请失业保险金承诺书
- 2024年黑龙江龙江森工集团招聘笔试参考题库含答案解析
- 2024年通用技术集团招聘笔试参考题库含答案解析
- 中英文旅游合同范本
- 课程思政示范课程—课程思政矩阵图(示例)
- 拜人蓝芩牙膏(JM)
- 广东建筑省统表验收报告
评论
0/150
提交评论