硬件描述语言及器件 VHDL基本语句学习PPT.ppt

上传人:laozhun 文档编号:2364463 上传时间:2023-02-15 格式:PPT 页数:52 大小:280.03KB
返回 下载 相关 举报
硬件描述语言及器件 VHDL基本语句学习PPT.ppt_第1页
第1页 / 共52页
硬件描述语言及器件 VHDL基本语句学习PPT.ppt_第2页
第2页 / 共52页
硬件描述语言及器件 VHDL基本语句学习PPT.ppt_第3页
第3页 / 共52页
硬件描述语言及器件 VHDL基本语句学习PPT.ppt_第4页
第4页 / 共52页
硬件描述语言及器件 VHDL基本语句学习PPT.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《硬件描述语言及器件 VHDL基本语句学习PPT.ppt》由会员分享,可在线阅读,更多相关《硬件描述语言及器件 VHDL基本语句学习PPT.ppt(52页珍藏版)》请在三一办公上搜索。

1、VHDL的基本语句,1.顺序语句2.并发语句,顺序语句,VHDL语句是并发语言,大部分语句是并发执行的。但是在进程、过程、块语句和子程序中,还有许多顺序执行语句。顺序语句有两类:一类是真正的顺序语句(IF语句),一类是可以做顺序语句、又可以做并发语句、具有双重特性的语句(赋值语句、process语句)。,顺序语句:,1.PROCESS语句2.WAIT 语句3.赋值语句4.IF 语句5.CASE 语句6.LOOP语句7.NULL语句,WAIT 语句,进程在仿真运行中总是处于执行状态或挂起状态。除了受敏感信号的控制外,进程状态的变化还受等待语句的控制,当进程执行到等待语句时,就将被挂起,并设置好再

2、次执行的条件。Wait语句的4种不同的条件:wait-无限等待wait on-敏感信号变化wait until-条件满足wait for-时间到,WAIT,未设置停止挂起条件的表达式,表示永远挂起。,WAIT ON 信号表,又称为敏感信号等待语句,在信号表中列出的信号是等待语句的敏感信号,当处于等待状态时,敏感信号的任何变化将结束挂起,再次启动进程,signal s1,s2:std_logic;.processbeginwait on s1,s2;end process;,未列出敏感量,wait与敏感量不兼容,Wait on 语句示例,例6-1process(a,b)beginy=a and

3、b;end process;,processbeginy=a and b;wait on a,b;end process;,例6-2process(a,b)beginy=a and b;wait on a,b;end process;,既使用敏感信号,又使用wait on语句,程序错误。,两种程序写法不同,功能相同,WAIT UNTIL 条件表达式,相比wait on 多了一种重新启动的条件,需同时按顺序满足以下两个条件,才能脱离挂起状态:1.表达式中所含信号发生改变;2.信号改变后,满足所设条件。,signal s1:std_logic;.processbeginwait until s1=

4、1;end process;,WAIT UNTIL 条件表达式,一般的,只有wait until语句可以被综合器接受,其它格式只能在仿真其中使用。,wait until语句表达方式:1.wait until 信号=value;2.wait until 信号event and 信号=value;,例:1.wait until clk=1;2.wait until clockevent and clk=1;3.wait until rising_edge(clk);以上都表示等待上升沿,具有相同的硬件结构,WAIT FOR 时间表达式,又称为超时等待语句,此语句中定义了一个时间段,从执行到wait

5、语句开始,在此时间段内,进程处于挂起状态,当超过这一时间段后,进程自动回复执行。如:wait for 20ns wait for(a(b+c)a,b,c 为时间量,其它wait语句,多条件wait语句 例:Wait on nmi,interrupt until(umi=true)or(interrupt=true)for 5us;,wait语句大部分情况适用于仿真,而仿真需要与实际硬件(芯片)相结合,故在工程实际中,较少使用wait语句。,如需表示等待多少时间,则大部分情况可使用if语句。,赋值语句,功能:将一个值或一个表达式的运算结果传递给某一个数据对象。赋值语句有两种:信号赋值(代入)语句

6、和变量赋值语句。每个赋值语句由三部分组成:1.赋值目标2.赋值符号3.赋值源VHDL规定,赋值目标与赋值源必须严格一致,IF语句,IF语句根据指定的条件来确定语句执行顺序,共有3种类型:(1)用于门闩控制的IF语句(2)用于二选一控制的IF语句(3)用于多选择控制的IF语句,(1)用于门闩控制的IF语句,这种类型的IF语句一般书写格式为:IF 条件 THENEND IF;,例6-6:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entit

7、y dff isport(clk:in std_logic;d:in std_logic;q:out std_logic);end entity dff;,Architecture a of dff isbeginp1:process(clk)beginif clkevent and clk=1 thenq=d;end if;end process p1;end a;,(2)用于二选一控制的IF语句,这种类型的语句书写格式为:IF 条件 THEN;ELSE;END IF;,二选一电路VHDL语言实现,例6-7:library ieee;use ieee.std_logic_1164.all;u

8、se ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux2 isport(a,b,sel:in std_logic;c:out std_logic);end entity mux2;,可写为:process(sel)If 语句条件表达式中出现的信号必为敏感信号,其它可忽略。,Architecture rtl of mux2 isBeginprocess(a,b,sel)beginif sel=1 thenc=a;elsec=b;end if;end process;End rtl;,(3)用于多选择控制的IF语

9、句,这种类型的IF语句书写格式为:IF 条件1 THEN;ELSIF 条件2 THEN;ELSIF 条件n THEN;ELSE;END IF;,(3)用于多选择控制的IF语句,例6-8:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux isport(sel:in std_logic_vector(1 downto 0);input:in std_logic_vector(3downto 0);y:out std_logi

10、c);end entity mux;Architecture a of mux isbegin,Process(sel)beginif sel=00 theny=input(0);elsif sel=01 theny=input(1);elsif sel=10 theny=input(2);else y=input(3);end if;end process;end a;,CASE 语句,case语句常用来描述总线行为、编码器和译码器的结构。case语句可读性好,非常简洁。case语句的一般格式为:case 选择信号 iswhen 条件选择值1=顺序语句1;when 条件选择值2=顺序语句2;

11、when others=顺序语句n;end case;,使用case语句的VHDL程序,case s iswhen 00=yyyy=d;end case;,仿真结果,CASE 语句与IF语句区别,IF语句是有序的,先处理最起始、最优先的条件,后处理次优先的条件。case语句是无序的,所有表达式值都并行处理。case语句中的条件表达式的值必须举穷尽,又不能重复。不能穷尽的条件表达式的值用OTHERS表示。,使用case语句实现状态机,process(reset,clk)variable state:integer range 0 to 3;beginif reset=0 thenstate:=0

12、;elsif clkevent and clk=1 thencase state iswhen 0=q q q q state:=0;end case;end begin,LOOP 语句,LOOP语句使程序能进行有规则的循环,循环次数受迭代算法控制。LOOP语句常用来描述位片逻辑及迭代电路的行为。FOR循环变量形成的LOOP语句这种形式的LOOP语句的书写格式为:标号:FOR 循环变量 IN 离散范围 LOOP END LOOP 标号;上述格式中:循环变量的值在每次循环中都会发生变化。离散范围表示循环变量在循环过程中的取值范围。,使用for-loop语句的VHDL程序,architecture

13、 behave of fuzhi issignal q:std_logic_vector(3 downto 0);beginprocess(clk)beginif clkevent and clk=1 thenfor i in 3 downto 0 loopq(i)=a(3-i);end loop;end if;end process;y=q;end behave;,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fuzhi

14、isport(clk:in std_logic;a:in std_logic_vector(3 downto 0);y:out std_logic_vector(3 downto 0);end entity fuzhi;,WHILE条件下的LOOP语句,书写形式为:标号:WHILE 条件 LOOP END LOOP 标号;,例pari:WHILE(i 8)LOOP tmp:=tmp XOR a(i);i:=i+1;END LOOP pari;,NULL语句,表示一个空操作,它不发生任何动作,null语句的格式为:null;null语句常用在case语句中,表示所剩条件选择值下的操作行为,满足了

15、case语句对条件选择值全部列举的要求。例case s iswhen 0=q qnull;end case;,其它顺序语句,NEXT语句EXIT语句子程序调用语句RETURN语句,VHDL语言是并行处理语言,能够进行并行处理的语句有:(1)进程(Process)语句(2)并发信号代入(Concurrent Signal Assignment)语句(3)条件信号代入(Conditional Signal Assignment)语句(4)选择信号代入(Selective Signal Assignment)语句(5)并发过程调用(Concurrent Procedure Call)语句(6)块(B

16、lock)语句,并发描述语句,进程语句是并行处理语句,即各个进程是同时处理的,在一个结构体中多个Process语句是同时并发运行的。Process语句具有如下特点:(1)进程内部的所有语句都是顺序执行的。(2)多进程之间,是并行执行的,并可访问构造体或实体中所定义的信号。(3)进程的启动是由进程标识符Process后的敏感信号来触发,也可用WAIT语句等待一个触发条件的成立。(4)各进程之间的通信是由信号来传递的。,进程语句,代入语句(信号代入语句)可以在进程内部使用,此时它作为顺序语句形式出现;代入语句(并发信号代入语句)也可以在构造体的进程之外使用,此时它作为并发语句形式出现。一个并发信号

17、代入语句实际上是一个进程的缩写。并发信号代入语句可以仿真加法器、乘法器、除法器、比较器及各种逻辑电路的输出。因此,在代入符号“=”的右边可以用算术运算表达式,也可以用逻辑运算表达式,还可以用关系操作表达式来表示。,并发信号代入语句,ARCHITECTURE behav OF a_var IS BEGIN output=a(i);END behav;,ARCHITECTURE behav OF a_var IS BEGIN PROCESS(a(i))BEGINoutput=a(i);END PROCESS END behav;,两者相同等待a(i)变化,条件信号代入语句属于并发描述语句的范畴,可

18、以根据不同的条件将不同的表达式的值代入目的信号量。条件信号代入语句书写的一般格式为:目的信号量=表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE 表达式n-1 WHEN 条件n-1 ELSE 表达式n;,条件信号代入语句,在执行条件信号代入语句时,赋值条件按书写顺序逐项测试,一旦发现某一赋值条件得到满足,即将相应表达式的值赋给目标信号,并不再测试下面的赋值条件。换言之,各赋值子句有优先级的差别,按书写顺序从高到低排序。因为各赋值子句有优先级的差别,所以各赋值条件可以重叠。,条件信号代入语句的执行过程,ARCHITECTURE rt

19、l OF mux4 ISSIGNAL sel:STD_LOGIC_Vector(1 DOWNTO 0);BEGIN Sel=b,例6-17:利用条件信号代入语句来描述的四选一逻辑电路,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux4 isport(a,b:in std_logic;i0,i1,i2,i3:in std_logic;q:out std_logic);end entity mux4;,IF语句只能在进程内部

20、使用,因为它们是顺序的。条件信号代入语句中的ELSE是一定要有的,而IF语句则可以有也可以没有。条件信号代入语句不能进行嵌套,而IF语句可以。用条件信号代入语句所描述的电路,与逻辑电路的工作情况比较贴近。组合逻辑电路用条件信号代入语句,时序逻辑电路用IF语句。,条件信号代入语句与IF语句的比较,选择信号代入语句对选择条件表达式进行测试,当选择条件表达式取值不同时,将使信号表达式不同的值代入目的信号量。选择信号代入语句类似于CASE语句。选择信号代入语句的书写格式如下:WITH 选择条件表达式 SELECT 目的信号量=信号表达式1 WHEN 选择条件1,信号表达式2 WHEN 选择条件2,信号

21、表达式n WHEN OTHERS;,选择信号代入语句,当“选择条件表达式”满足某一个“选择条件”时,就将其对应的表达式的值赋给目的信号量;若“选择条件表达式”与所有“选择条件”均不相符时,就将OTHERS前的表达式的值赋给目的信号量。选择条件要覆盖所有可能的情况,若不可能一一指定,则要借助OTHERS 为其他情况找一个“出口”。选择条件必须互斥,不能出现条件重复或重叠的情况。,选择信号代入语句说明,ARCHITECTURE rtl OF mux4 IS SIGNAL sel:INTEGER RANGE 0 TO 4;BEGIN WITH sel SELECT q=i0 WHEN 0,i1 WH

22、EN 1,-选择信号代入语句 i2 WHEN 2,i3 WHEN 3,X WHEN OTHERS;sel=0 WHEN a=0AND b=0 ELSE 1 WHEN a=1AND b=0 ELSE 2 WHEN a=0AND b=1 ELSE 3 WHEN a=1AND b=1 ELSE 4;-条件信号代入语句END rtl;,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux4 isport(a,b:in std_log

23、ic;i0,i1,i2,i3:in std_logic;q:out std_logic);end entity mux4;,例6-18:利用选择信号代入语句来描述的四选一逻辑电路,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux4 isport(input:in std_logic_VECTOR(1 downto 0);i0,i1,i2,i3:in std_logic;q:out std_logic);end entit

24、y mux4;,例6-19:利用case语句来描述的四选一逻辑电路,ARCHITECTURE rtl OF mux4 ISBEGINPROCESS(input)BEGIN CASE input IS WHEN 00=q q q q q=X;END CASE;END PROCESS;END rtl;,并发过程调用语句,调用规则如下:(1)并发过程调用语句是个完整的语句,独立的行为表现形式,在语句前面可以加标号。(2)并发过程调用语句应带IN,OUT,INOUT参数,列于过程名后跟的括号内。(3)并发过程调用可以有多个返回值,这些值通过过程中所定义的输出参数带回。,过程调用举例:ARCHITECT

25、URE结构体名OF实体名IS BEGIN Bitvector_to_integer(z,X_ftag,q);-过程参数定义.END在构造体中的并发过程调用语句是由过程信号敏感量的变化得到启动的。过程调用语句可以出现在进程语句中,如果一个进程的作用就是进行过程调用,那么与并发过程调用语句完全等效。,在VHDL语言中除了顺序描述语句和并发描述语句之外,还有一些说明语句,定义语句和一些具体的规定。,其它语句和有关规定的说明,在VHDL语言中使用的名字,如信号名、实体名、结构体名、变量名、各种进程标记、块标记等命名时,应遵守如下规则:(1)构成名字的符号有英文字母,数字和_连字符。(2)名字的最前面应

26、该是英文字母。(3)不能连续使用连字符“_”,名字最后一个符号也不能用连字符。,命名规则和注解的标记,命名规则,SIGNAL sel:INTEGER;SIGNAL PCI_BUS:STD_LOGIC_VECTOR(31 DOWNTO O);SIGNAL 8_BUS:.-数字开头,是错误的名字SIGNAL PCI_BUS:.-是非法符号SIGNAL PCI_ _ BUS:.-连字符在名称中不能连着使用SIGNAL PCI_BUS_:.-结尾不能用连字符,命名规则举例:,程序注释,为了提高VHDL语言设计程序的可读性,像其他高级语言那样,在每一程序行后可以增加注释。注释从“-”符号开始,到该行末尾

27、结束。注释文字不作EDA工具进行逻辑综合的依据。不产生硬件电路结构,不描述电路行为,在综合、仿真、验证过程中,EDA工具对注释行不进行处理。注释不是设计描述的有效部分,编译后存入数据库中的部分不含注释部分。举例:TrantFrame idle irdy devsel;-PCI总线数据传输译码逻辑之一,元件例化语句(component),component是结构体中基本的描述语句。此语句指定了本结构体中所调用的是哪一个现成的逻辑描述模块。component 元件名 generic 参数说明;port(信号1:端口模式 数据类型;信号2:端口模式 数据类型;);end component;,端口映

28、射语句(PORT MAP),端口映射语句将现成元件的端口信号映射成高层次设计电路中的信号。各模块之间、各元件之间的信号连接关系就是用这种语句来实现连接的。其一般的书写格式为:标号名:元件名 PORT MAP(信号,);U0:and2 PORT MAP(D0,D1,U0-q);标号名U0在层次化设计中是唯一的。元件名and2在元件库中是存在的。下层元件的信号名通过映射与上层信号联接起来。,生成语句(GENERATE),GENERATE语句用来产生多个相同的结构。用来描述规则结构,如块阵列,元件例化或进程。GENERATE语句的两种形式分别为:标号:FOR变量IN不连续区间GENERATEEND

29、GENERATE 标号名;FOR-GENERATE形式的生成语句用于描述多重模式,结构中所列举的是并发处理语句。这些语句并发执行,而不是顺序执行的,因此结构中不能使用EXIT语句和NEXT语句。,生成语句(GENERATE),标号:IF 条件 GENERATEEND GENERATE标号名;IF-GENERATE形式的生成语句用于描述结构的例外情况,比如边界处发生的特殊情况。IF-GENERATE语句在IF条件为“真”时,才执行结构体内部的语句,因为是并发处理生成语句,所以与IF语句不同。在这种结构中不能含有ELSE语句。,X(0)=a;dff1:dff PORT MAP(X(0),clk,X(1);dff2:dff PORT MAP(X(1),clk,X(2);dff3:dff PORT MAP(X(2),clk,X(3);dff4:dff PORT MAP(X(3),clk,X(4);B=X(4);BEGINX(0)=a;-输入信号代入语句register1:FOR i IN 0 TO 3 GENERATE dffx:dff PORT MAP(X(i),clk,X(i+1);-端口映射END GENERATE;B=X(4);,4位移位寄存器GENERATE语句举例,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号