EDA 第二章VHDL语言应用基础2(描述语句)

上传人:guoc****ang 文档编号:243095780 上传时间:2024-09-15 格式:PPT 页数:88 大小:1.05MB
返回 下载 相关 举报
EDA 第二章VHDL语言应用基础2(描述语句)_第1页
第1页 / 共88页
EDA 第二章VHDL语言应用基础2(描述语句)_第2页
第2页 / 共88页
EDA 第二章VHDL语言应用基础2(描述语句)_第3页
第3页 / 共88页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,PART 4,The Basic Statements in VHDL Code,一、,Sequential Assignment Statements,顺序语句,在进程(,PROCESS,)或子程序(,PROCEDURE),、函数(,FUNCTION,)中使用,按程序书写的顺序自上而下、一个一个语句地执行;,并行语句,出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。,1. IF Statement,顺序语句用于进程过程或函数之中,为算法描述提供了,IF,语句、,CASE,语句、,LOOP,语句。,可以用于实现两种或两种以上的条件分支判断。,The form,:,IF Boolean expression THEN,statement;,ELSIF Boolean expression THEN,statement; ,END IF,1,),IF expression THEN statement;,END IF,The general form:,2,),IF expression THEN,statement;,ELSE,statement,END IF,3,),IF expression THEN,statement,ELSIF expression THEN,statement ,END IF,4,),IF expression THEN,IF expression THEN,statement ,END IF,END IF,【,f.e,】,IF statement defines the 2-to-1 multiplexer,IFs =,0THEN,y= a0;,ELSIFs =,1 THEN,y= a1;,ENDIF,exercise,Write VHDL code for a 4-to-1 multiplexer, using IF statement.,IF s=,00 THEN,y=,a,;,ELSIF s=,01THEN,y=,b,;,ELSIF s=,10THEN,y=,c,;,ELSE,y=,d,;,END IF;,Mux_41,a,b,s,y,c,d,Ex: Design a positive-edge-triggered D flip-flop with clear and preset:,dffrs,port(sset,rreset,d,clk:in,bit;,q,qb:out,bit),;,The clear and preset are asynchronous signals, and while “0” have effect.,ENTITY,dffrs,IS,PORT(sset,rreset,d,clk,: IN BIT;,q,qb,: OUT BIT);,END,dffrs,;,ARCHITECTURE ex OF,dffrs,IS,BEGIN,PROCESS(sset,rreset,clk,),BEGIN,ASSERT,NOT(sset,=0) AND (,rreset,=0),REPORT “Control Error”,SEVERITY Error;,IF (,sset,=0) AND (,rreset,=1) THEN,q=1;,qb,=0;,ELSIF (,rreset,=0) AND (,sset,=1)THEN,q=0;,qb,=1;,ELSIF(clkEVENT,AND,clk,=1) THEN,q=d;,qb,所指的顺序处理语句。条件表达式的值可以是一个值;或者是多个值的“或”关系;或者是一个取值范围;或者表示其它的缺省值。,WHEN value=,顺序语句;,WHEN value1|value2|value n=,顺序语句;,WHEN value1 to value n =,顺序语句;,WHEN OTHERS =,顺序语句;,使用,CASE,语句时应注意,:,条件句的选择值应在表达式的取值范围内,.,除非所有条件句中的选择值能完全覆盖,case,语句中表达式的取值,否则最后一个条件句中的选择必须用,“,others,”,表示,.,case,语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现,.,case,语句执行中必须选中且只能选中所列条件语句中的一条,.,【,f.e,】 An example of a CASE statement used to describe combinational logic is,Process(s,),Begin,Case s Is,WHEN00=dddd=0;,-,当,s=,其他时,,d=0,End Case;,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL,ENTITY,mux41 IS,PORT,( s1, s2 : in,std_logic,;,a,b,c,d,: in,std_logic,;,z: out,std_logic,);,END,mux41;,ARCHITECTURE,activ,OF mux41 IS,SIGNAL s :std_logic_vector(1,downto,0);,BEGIN,S z z z z z=x;,END CASE;,END PROCESS;,END,activ,;,ARCHITECTURE,activ,OF mux41 IS,SIGNAL s :std_logic_vector(1,downto,0);,BEGIN,Sz;,ELSIF,s=“01” then b=z;,ELSIF,s=“10” then c=z;,ELSE,d=z;,END,IF,;,END PROCESS;,END,activ,;,ARCHITECTURE,activ,OF mux41 IS,SIGNAL s :std_logic_vector(1,downto,0);,BEGIN,S z z z z z=x;,END,CASE,;,END PROCESS;,END,activ,;,exercise,Use CASE statement to describe a 3-to-8 binary decoder.,ym_38,A0,A1,EN,Y7:0,A2,元件外观,输入输出逻辑关系,LIBRARY IEEE ;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY coder IS,PORT(A : IN STD_LOGIC_VECTOR(1 TO 3),Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);,END coder ;,Entity design,功能:设计元件外观,ARCHITECTURE a1 or coder IS,Begin,IF A=“000” THEN Y=“00000001”;,ELSIF A=“001” THEN Y=“00000010”;,ELSIF A=“010” THEN Y=“00000100”;,ELSIF A=“011” THEN Y=“00001000”;,ELSIF A=“100” THEN Y=“00010000”;,ELSIF A=“101” THEN Y=“00100000”;,ELSIF A=“110” THEN Y=“01000000”;,ELSE Y=“10000000”;,END a1;,Architecture Design,功能:描述输入和输出之间的逻辑关系,END IF;,PROCESS (a),BEGIN,END PROCESS;,exercise,1.Use VHDL code to describe a 8-to-3 binary encoder.,2.Use VHDL code to describe a 8-to-3 priority encoder.,LIBRARY IEEE ;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY coder IS,PORT(I : IN STD_LOGIC_VECTOR(0 TO 7),Y: OUT STD_LOGIC_VECTOR(1 TO 3);,END coder ;,Entity Design,功能:设计元件外观,ARCHITECTURE a1 or coder IS,Begin,IF (I(7)=1) THEN Y=“111”;,ELSIF (I(6)=1) THEN Y=“110”;,ELSIF (I(5)=1) THEN Y=“101”;,ELSIF (I(4)=1) THEN Y=“100”;,ELSIF (I(3)=1) THEN Y=“011”;,ELSIF (I(2)=1) THEN Y=“010”;,ELSIF (I(1)=1) THEN Y=“001”;,ELSE Y=“000”;,END a1;,Architecture Design,功能:描述输入和输出之间的逻辑关系,END IF;,PROCESS (I),BEGIN,END PROCESS;,IF,与,CASE,比较,IF,语句中条件句之间是相与的关系,,CASE,语句中条件句之间是相或的关系。,2. CASE,条件语句必须将所有情况列出而,IF,则不必。,3. IF,语句可实现优先级,,CASE,语句则不可以。,3. LOOP Statement,用于,循环控制,,,loop,语句有,3,中格式:,(,1,),循环标号,: FOR,循环变量,IN,循环次数范围,LOOP,顺序语句;,END LOOP,循环标号,;,(,2,),循环标号,: WHILE,条件,LOOP,顺序语句;,END LOOP,循环标号,;,(,3,),循环标号,:,LOOP,顺序语句;,END LOOP,循环标号,;,(,4,),NEXT,语句:在,LOOP,语句中,用来,跳出当前循环,。其格式为:,NEXT ,循环标号, WHEN,条件,;,(,5,),EXIT,语句:用来,结束,LOOP,语句,的执行。其格式为:,EXIT ,循环标号, WHEN,条件,;,利用,LOOP,语句可以简化同类顺序语句表达式,.,如,:,Signal a,b,c:std_logic_vector(1 to 3),For n IN 1 to 3 LOOP,a(n,),=,b(n,),AND,c(n,),END LOOP,等效于:,a(1,),= b(1,),AND c(1,),a(2,),= b(2,),AND c(2,),a(3,),= b(3,),AND c(3,),EX:,试设计一个奇偶校验电路,要求输入一组,8,位的二进制数,当输入有偶数个“1”时输出“1”。,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY,parity_check,IS,PORT(a,: IN STD_LOGIC_VECTOR(7 DOWNTO 0);,y: OUT STD_LOGIC);,END,parity_check,;,ARCHITECTURE,rtl,OF,parity_check,IS,BEGIN,PROCESS(a,),VARIABLE,tmp,: STD_LOGIC;,BEGIN,tmp,:=0;,FOR i IN 0 TO 7 LOOP,tmp,:=,tmp,XOR,a(i,);,END LOOP;,y=,tmp,;,END PROCESS;,END,rtl,;,通用奇偶校验器,Library,ieee,;,Use ieee.std_logic_1164.all;,Entity,even_parity_checker,is,Port(x,: in,std_logic_vector,;,y: out,std_logic,);,Ent,even_parity_checker,;,Architecture,iteractive,of,even_parity_checker,is,Begin,process (x),variable even :,std_logic,;,begin,even:=0;,for i in,xrange,loop,if,x(i,)=1 then,even:=not even;,end if;,end loop;,y=even;,End process;,End iterative;,-,当,Y,为,0,时表示有偶数个,1,8,位奇偶校验电路用其它几种,LOOP,语句来描述:,用,WHILE,条件的,LOOP,语句描述:,Use NEXT statement:,PROCESS(a,),Variable tmp,tmp1:std_logic;,begin,tmp,:=0;,For i in 0 to 7 loop,tmp1:=0;,If,a(i,)=0 then,NEXT;,Else,tmp1:=1;,END IF;,tmp,:=,tmp,xor,tmp1;,END LOOP;,yddd,NULL,;,End Case;,End Process;,空语句,5. Assert Statement,断言语句是面向仿真的语句,用于在仿真、调试程序时进行人机对话。,assert,可以是并发语句(在,process,外),此时,assert,后面的任何变量变化都会引起,assert,语句判断一次。,assert,还可以是顺序语句,此时,assert,存在于,process,中,ASSERT,条件,REPORT,报告信息,SEVERITY,出错级别,;,当判断条件为,False,时报告错误。,Note:,用在仿真时传递信息。,Warning:,用于非平常情形,仿真仍继续,结果不可预知。,Error:,仿真不能继续。,Failure:,致命错误,必须立即停止。,错误级别为四级:,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,USE,ieee.std_logic_arith.ALL,;,USE,ieee.std_logic_unsigned.ALL,;,ENTITYrs_1IS,PORT(s,,,r:IN,std_logic,;,q,,,nq,:OUT,std_logic,);,ENDrs_1;,ARCHITECTURE ar_11 OF rs_1 IS,BEGIN,PROCESS,VARIABLE blh_1:bit:=0;,BEGIN,ASSERT,NOT(s,=1AND r=1),REPORTBOTH s AND r EQUAL TO1!“,SEVERITY ERROR;,断言语句,IF s =0AND r=0 THEN,blh_1:=blh_1;,ELSIF s=0AND r=1THEN,blh_1:=0;,ELSE,blh_1:=1;,END IF;,q=blh_1 after 2 ns;,nq,=NOT blh_1,WAIT ON r,,,s;,END PROCESS;,END ar_11;,并行语句与一般软件程序的最大区别就是在结构体中的执行都是,同时进行,的,,既它们的执行顺序与语句的书写顺序无关,。这种并行性是由硬件本身的并行性决定的,一旦电路接通电源,各部分就会按照事先设计好的方案同时工作。,并行语句主要有进程语句(,PROCESS,)、块语句(,BLOCK,)、并行信号赋值语句,(concurrent signal assignment, conditional signal assignment, selective signal assignment ),、生成语句(,GENERATE,)、元件例化语句,(component instantiations),。,二、,Concurrent Assignment Statements,1. Process statement,进程语句是一段复合语句,由一段程序构成,,各个进程之间是并行进行的,而进程的内部语句都是顺序执行的,。一个结构体中可以包括多个进程语句,多个进程之间依靠信号(,SIGNAL,)来传递。,进程语句,PROCESS1,PROCESSn,signal,signal,ARCHITECTURE,一个构造体可以有多个进程语句,进程和进程之间是并行的,进程和进程之间的数据交换通过信号完成,进程内部是顺序语句,进程语句的格式如下:,标号,: PROCESS,(,敏感信号表,),说明语句,;,-,定义一些局部变量,BEGIN,顺序语句,;,END PROCESS ,标号:,;,Sensitivity List,When the value of a signal in the sensitivity list changes, the process becomes active. Once active, the statements made inside the process are “evaluated” in sequential order.,一些,VHDL,综合器,综合后对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人敏感表中,.,The sensitivity list includes all input signals used inside the process.,LIBRARY,ieee,;,USE,ieee.std_logic_1164.all;,ENTITY,if_case,IS PORT,( a, b, c, d :,IN,Std_Logic,;,sel,:,IN,Std_Logic_Vector(1,downto,0);,y, z :,OUT,Std_Logic,);,END,if_case,;,ARCHITECTURE,logic,OF,if_case,IS,BEGIN,if_label,:,PROCESS,(a, b, c, d,sel,),BEGIN,IF,sel,=00,THEN,y = a;,ELSIF,sel,=01,THEN,y = b;,ELSIF,sel,=10,THEN,y = c;,ELSE,y z z z z z = 0;,END,CASE,;,END,PROCESS,case_label,;,END,logic;,Using a process for a combinational circuit,The two processes are concurrent,Processes depend on the signals in the sensitivity list,Example for the sensitivity list,if_ label:,PROCESS,(oe),BEGIN,IF,oe=1,THEN,y = a;,END IF,;,END PROCESS,if_label;,error,if_label:,PROCESS,(oe,a),BEGIN,IF,oe=1,THEN,y = a;,END IF,;,END PROCESS,if_label;,correct,进行进程设计时应注意以下问题:,1,、进程为一个独立的无限循环语句。它只有两种状态:执行状态和等待状态。满足条件进入执行状态,当遇到,end process,语句后停止执行。,2,、进程中的顺序语句具有明显的顺序,/,并行运行双重性。,3,、进程必须由一个敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一个显示的,WAIT,语句来激励。,4,、进程语句本身是并行语句。即同一结构体中的不同进程是并行运行的,后者是根据敏感信号独立运行的。,5,、信号是多个进程间的通信线。,6,、在同一进程中只能放置一个含有时钟边沿检测语句的条件语句。,Example:,2. Block Statement,块语句将结构体中的并行语句结合在一起,其主要目的是改善并行语句极其结构的可读性,一般用于较复杂的,VHDL,程序。,其格式如下:,块名称:,BLOCK (,表达式,),块声明项,;,BEGIN,并行语句;,END BLOCK ,块名称,;,例,用,BLOCK,语句描述,2,选,1,电路,ENTITY,mux2_1,IS,PORT,(d0, d1,sel,:,IN,STD_LOGIC;,q:,OUT,STD_LOGIC);,END,mux2_1;,ARCHITECTURE,amux,OF,mux2_1,IS,SIGNAL,tmp1,tmp2,tmp3 : STD_LOGIC;,BEGIN,cale,:,BLOCK,BEGIN,tmp1=d0,AND,sel,;,tmp2=d1,AND,(,not,sel,);,tmp3=tmp1,OR,tmp2;,q=tmp3;,END BLOCK,cale,;,END,amux,;,上述结构体中只有一个,BLOCK,块,若电路复杂时可由几个,BLOCK,块组成。,2,选,1,数据选择器,d1,d0,q,sel,u2,u1,u3,tmp1,tmp2,tmp3,3. Concurrent Assignment Statement,(,1,),Simple Signal Assignment,form,:,signal_name,=expression,;,f.e,: q =,b+c,;,(,2,),Conditional Signal Assignment,form,:,signal_name,=expression WHEN logic_expression1 ELSE,expression WHEN logic_expression2 ELSE,expression WHEN,logic_expression,n ELSE,expression,;,f.e,: f=1 WHEN x1=x2 ELSE 0;,注意:,由于条件测试的顺序性,第一句具有最高赋值优先级,,第二句次之,以此类推。,(,3,),Selected Signal Assignment,Form,:,WITH,condition_expression,SELECT,signal_name,=expression WHEN constant_value1,,,expression WHEN,constant_value,n,expression WHEN OTHERS;,选择信号赋值语句不允许有条件重叠的现象,也不允许存在条件涵盖不全的情况。,ARCHITECTURE ar_6 OF fzh_1 IS,BEGIN,y= aWHENq=,00ELSE,bWHENq=,01ELSE,cWHENq=,10ELSE,d;,ENDar_6;,【,例,1,】,条件信号赋值语句的用法,ARCHITECTURE ar_7 OF fzh_2 IS,BEGIN,W,ITH,qSELECT,ya(1),y=b(1),ci,=c(1),sum=s(1), co=c(2);,yj2:adde_1 PORT MAP(a(2), b(2), c(2), sum=s(2),,,co=c(3);,yj3:adde_1 PORT MAP(a(3), b(3), c(3),s(3), co);,ENDar_9;,混合关联方式,名字关,联方式,位置关联方式,元件定义,*,one-bit adder*,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,ENTITY add_1 IS,PORT(x,,,IN,std_logic,;,y:IN,std_logic,;,ci,:IN,std_logic,;,sum:OUT,std_logic,;,co:OUT,std_logic,);,END add_1;,ARCHITECTUREar_10 OF add_1 IS,BEGIN,sum=x XOR y XOR,ci,;,co=( x AND y )OR( x AND,ci)OR,( y AND,ci,);,END ar_10;,Ex: the figure1 shows a four-bit shift register, please write the VHDL codes use component instantiations.,f. 1,D,Q,clk,din,d0,D,Q,clk,d1,D,Q,clk,d2,D,Q,clk,d3,d4,dout,U0,U1,U2,U3,clk,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,ENTITY shifter IS,PORT(,din,clk,:IN,std_logic,;,dout,:OUT,std_logic,);,END shifter;,ARCHITECTUREa OF shifter IS,COMPONENT,dff,PORT(D,,,clk,:IN,std_logic,;,Q:OUT,std_logic,);,END COMPONENT;,SIGNAL d:,std_logic,_vector (4 DOWNTO 0);,Answer,BEGIN,d(0)d(2),clk,=,clk, Q =d(3);,U3:dff,PORT MAP (D=d(3),clk,=,clk, Q =d(4);,dout, X, C1=Z, B1 = Y);,END a;,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,ENTITY yf2 IS,PORT(A1,B1:IN,std_logic,;,C1:OUT,std_logic,);,END yf2;,ARCHITECTUREb OF yf2 IS,BEGIN,C=A NAND B,;,END b;,5. Generate Statement,生成语句具有复制作用,可以生成与某个元件或设计单元电路完全相同的一组并行元件或设计单元电路结构。,格式,1,:,标号:,FOR,循环变量,IN,取值范围,GENERATE,并行语句;,END GENERATE,标号;,格式,2,:,标号:, IF,条件,GENERATE,并行语句;,END GENERATE,标号;,Exam:4-12 design a,n_bit,adder using generate,statment,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,ENTITY,addern,IS,GENERIC(n,: Integer);,PORT(x,,,y:IN,std_logic_vector,(n DOWNTO1);,ci:IN,std_logic,;,s:OUT,std_logic_vector(n,DOWNTO 1);,co:OUT,std_logic,);,END,addern,;,Generic statement,ARCHITECTUREar_8OF,addern,IS,COMPONENT adder_1,PORT (x,,,y,,,cin,:IN,std_logic,;,sum,,,cout,:OUT,std_logic,);,END COMPONENT;,SIGNAL c:,std_logic,_Vector(n+1 DOWNTO 1);,BEGIN,mah,: FOR i IN 1 TO n GENERATE,blsc_1: adder_1 PORT,MAP(x(i,),y(i,),c(i,),s(i,), c(i+1);,END GENERATE,mah,;,END ar_8;,c(1) =,Ci,;,Co=c(n+1);,Ex,:,用,D,触发器构成,4,位移位寄存器,用生成语句进行设计。,LIBRARY,ieee,;,USEieee.std_logic_1164.ALL;,ENTITY shifter IS,PORT(,din,clk,:IN,std_logic,;,dout,:OUT,std_logic,);,END shifter;,ARCHITECTUREa OF shifter IS,COMPONENT,dff,PORT(D,,,clk,:IN,std_logic,;,Q:OUT,std_logic,);,END COMPONENT;,SIGNAL d:,std_logic,_vector (0 TO 4);,D,Q,clk,din,d0,D,Q,clk,d1,D,Q,clk,d2,D,Q,clk,d3,d4,dout,U0,U1,U2,U3,clk,BEGIN,d(0)=din;,G:For,i IN 0 TO 3 GENERATE,U:dff,PORT MAP (d(i),clk,d(i+1);,END,GENERATE G;,dout,=d(4);,END a;,生成,4,个相同的,D,触发器,在,FORGENERATE,语句中,,FOR,的作用和一般顺序语句中的,FORLOOP,相像,变量,i,不需要事先定义,,i,在,GENERATE,语句中是不可见的,而且在,GENERATE,语句内部也是不能赋值的。,FORGENERATE,语句只能处理规则的构造体。但是在大多数情况下,电路的两端(输入和输出)总是具有不规则性,无法用同一种结构表示。为解决这种不规则电路的统一描述方法,就可以采用,IFGENERATE,语句。,Example:,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!