EDA技术实用教程VHDL设计初步7.ppt
《EDA技术实用教程VHDL设计初步7.ppt》由会员分享,可在线阅读,更多相关《EDA技术实用教程VHDL设计初步7.ppt(59页珍藏版)》请在三一办公上搜索。
1、EDA 技术实用教程,第 10 章 VHDL基本语句,为脏奈派款悬瞥暴菊矗蒲煎呢翔坛工靖传猪殊鼎欲氛引桅诲夫迅喜恩涕统EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.1 赋值语句,信号赋值语句,变量赋值语句,10.1.2 IF语句,情染厨粗云酉闪霹屉稗孕盐硫茧涉茁结救照燥珍须拙仁啥个围哗窄拥瓤园EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,【例10-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 IS PORT(s4,s3,s2,s1:IN
2、 STD_LOGIC;z4,z3,z2,z1:OUT STD_LOGIC);END mux41;ARCHITECTURE activ OF mux41 IS SIGNAL sel:INTEGER RANGE 0 TO 15;BEGIN PROCESS(sel,s4,s3,s2,s1)BEGIN sel z1 z2 z3 z4=1;-当sel为815中任一值时选中 END CASE;END PROCESS;END activ;,老儿转隘影滩衰锚后等浓裙篮庙酸港修肯多掠弗百惊吏申宙沸衫吁赔刹麓EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,【例10-1】LIBRARY
3、 IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41g IS PORT(s4,s3,s2,s1:IN STD_LOGIC;z4,z3,z2,z1:OUT STD_LOGIC);END mux41g;ARCHITECTURE activ OF mux41g IS BEGIN PROCESS(s4,s3,s2,s1)VARIABLE sel:INTEGER RANGE 0 TO 15;BEGIN sel:=0;-输入初始值 IF(s1=1)THEN sel:=sel+1;END IF;IF(s2=1)THEN sel:=sel+2;END IF;IF(s3=
4、1)THEN sel:=sel+4;END IF;IF(s4=1)THEN sel:=sel+8;END IF;z1 z1 z2 z3 z4=1;-当sel为815中任一值时选中 END CASE;END PROCESS;END activ;,阀框诅辉扮宽掘坟峙彝宰凯桌光盟砧隶凰掘艘烤洼欣能允蔚棺奄斯榆咆苍EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.3 CASE语句,【例10-2】SIGNAL value:INTEGER RANGE 0 TO 15;SIGNAL out1:STD_LOGIC;.CASE value IS-缺少以W
5、HEN引导的条件句 END CASE;.CASE value IS WHEN 0=out1 out1 out1 out1=0;END CASE;,诈浚漱兆蕾肺病蛹邑鄂滔两饱群甸预琼屎膛馆遗街籍惑锥绚爸盟扫鬃哭萝EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,【例10-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alu IS PORT(a,b:IN STD_LOGIC_VECTOR(7 DOWNTO 0);opcode:IN STD_LOGIC_V
6、ECTOR(1 DOWNTO 0);result:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END alu;ARCHITECTURE behave OF alu IS CONSTANT plus:STD_LOGIC_VECTOR(1 DOWNTO 0):=b00;CONSTANT minus:STD_LOGIC_VECTOR(1 DOWNTO 0):=b01;CONSTANT equal:STD_LOGIC_VECTOR(1 DOWNTO 0):=b10;CONSTANT not_equal:STD_LOGIC_VECTOR(1 DOWNTO 0):=b11;BEGIN
7、PROCESS(opcode,a,b)BEGIN CASE opcode IS WHEN plus=result result-a、b相等 IF(a=b)THEN result-a、b不相等 IF(a/=b)THEN result=x01;ELSE result=x00;END IF;END CASE;END PROCESS;END behave;,税愿桔俏疽崩厄罪五后镇啊即绍口撼这迎梗拍事饰寞婚倡艳恐祟吊援佐崇EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.4 LOOP语句,(1)单个LOOP语句,其语法格式如下:LOOP标号:LO
8、OP 顺序语句 END LOOP LOOP标号;,.L2:LOOP a:=a+1;EXIT L2 WHEN a 10;-当a大于10时跳出循环 END LOOP L2;.,厚捞醉舒孵缸芬帽择呕钨新抓拙磁垮瑚高皖隙陋挛精哨犁弓宽总堡蛮铱伸EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.4 LOOP语句,(2)FOR_LOOP语句,语法格式如下:LOOP标号:FOR 循环变量,IN 循环次数范围 LOOP 顺序语句 END LOOP LOOP标号;,奈蓟柬括尘修悼绑滥月陡剿赵摄撅经逻罪狭毁蒋波拙配必南阑晒凋鹃蜂谭EDA 技术实用教程VHD
9、L设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,【例10-4】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END p_check;ARCHITECTURE opt OF p_check IS SIGNAL tmp:STD_LOGIC;BEGIN PROCESS(a)BEGIN tmp=0;FOR n IN 0 TO 7 LOOP tmp=tmp XOR a(n);END LOOP;y=t
10、mp;END PROCESS;END opt;,轴吠浆敞步薄饭仑蚌书简坛颁网紫磊令导郸诀氖廓狠臭胯位产炸筑萝慨吃EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.4 LOOP语句,【例10-5】SIGNAL a,b,c:STD_LOGIC_VECTOR(1 TO 3);.FOR n IN 1 To 3 LOOPa(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);,尤泼当龙喷后鳞张绅诺苇
11、莆婴蒋孺琶襟革层蔚检徒衰闪钵籽润翔药漏鸭诫EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.5 NEXT语句,NEXT;-第一种语句格式NEXT LOOP标号;-第二种语句格式NEXT LOOP标号 WHEN 条件表达式;-第三种语句格式,【例10-6】.L1:FOR cnt_value IN 1 TO 8 LOOPs1:a(cnt_value):=0;NEXT WHEN(b=c);s2:a(cnt_value+8):=0;END LOOP L1;,铬胖廓鉴晨喳扛橡例从妄瓮乘坐灌荆满踌魔争围禄猪口架蓑缝捕郸铭蠢饲EDA 技术实用教程VH
12、DL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.5 NEXT语句,【例10-7】.L_x:FOR cnt_value IN 1 TO 8 LOOP s1:a(cnt_value):=0;k:=0;L_y:LOOP s2:b(k):=0;NEXT L_x WHEN(ef);s3:b(k+8):=0;k:=k+1;NEXT LOOP L_y;NEXT LOOP L_x;.,煮纳洱祭悲相盼煤趁粟淄艳则侍驱腥骏缉贱戮剂肖澳剔瞥隅狮浪柴募捡挺EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.6 EXIT语句,E
13、XIT;-第一种语句格式EXIT LOOP标号;-第二种语句格式EXIT LOOP标号 WHEN 条件表达式;-第三种语句格式,矫煌肚汁月惠穗梢盯耘揣渭沈彼腊咨辱宿扯茂圭鸭详胃羹到章趾恰鸭拘嚏EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.6 EXIT语句,【例10-8】SIGNAL a,b:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL a_less_then_b:Boolean;.a_less_then_b b EXIT;ELSIF(a(i)=0 AND b(i)=1)THEN a_less_then_b=
14、TRUE;-a b EXIT;ELSE NULL;END IF;END LOOP;-当 i=1时返回LOOP语句继续比较,撅摈除柳喷盗雇酿酬股扁姆猩波砍襄暴怔婉斗懦纬岗爆谩肛夯踢检催彰评EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.7 WAIT语句,WAIT;-第一种语句格式WAIT ON 信号表;-第二种语句格式 WAIT UNTIL 条件表达式;-第三种语句格式WAIT FOR 时间表达式;-第四种语句格式,超时等待语句,秩籍旁撤叁语站辈盔敲撞麻竞声拖急缮闺减蛆渣只眶廷硒湖喜介钟虾辕铆EDA 技术实用教程VHDL设计初步7EDA
15、 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.7 WAIT语句,【例10-9】SIGNAL s1,s2:STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2;END PROCESS;,【例10-10】(a)WAIT_UNTIL结构(b)WAIT_ON结构.LOOPWait until enable=1;Wait on enable;.EXIT WHEN enable=1;END LOOP;,算废扯酉杰垄贡疚炮俄缚克程验淳拌嘛肉烁沼标石涂抨督途纵月兼累阔荆EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10
16、.1.7 WAIT语句,WAIT UNTIL 信号=Value;-(1)WAIT UNTIL 信号EVENT AND 信号=Value;-(2)WAIT UNTIL NOT 信号STABLE AND 信号=Value;-(3),WAIT UNTIL clock=1;WAIT UNTIL rising_edge(clock);WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL clock=1 AND clockEVENT;,肉牌青霞塑问识丸豫阮倾想苑葵丫跌儡扭袭赶氖闪酝拴拜塘恼瘤早美活撩EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VH
17、DL设计初步7,10.1 顺序语句,10.1.7 WAIT语句,【例10-11】PROCESSBEGINWAIT UNTIL clk=1;ave=a;WAIT UNTIL clk=1;ave=ave+a;WAIT UNTIL clk=1;ave=ave+a;WAIT UNTIL clk=1;ave=(ave+a)/4;END PROCESS;,灭堡蒜珠耀籍呈邮呕殖入礼奋丹蜀丰追薛赁谰束门菇刑窑息庸毋辣靴迄逮EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.7 WAIT语句,【例10-12】PROCESS BEGIN rst_loop:L
18、OOP WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号 NEXT rst_loop WHEN(rst=1);-检测复位信号rst x=a;-无复位信号,执行赋值操作 WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号 NEXT rst_loop When(rst=1);-检测复位信号rst y=b;-无复位信号,执行赋值操作 END LOOP rst_loop;END PROCESS;,折殿穷尊臆倪护若羞钝脖墟卯珊忻捂研论丁遥滨捣酮琅汽刽挝早星剿蜂承EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,
19、【例10-13】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shifter IS PORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);shift_left:IN STD_LOGIC;shift_right:IN STD_LOGIC;clk:IN STD_LOGIC;reset:IN STD_LOGIC;mode:IN STD_LOGIC_VECTOR(1 DOWNTO 0);qout:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END shifter;ARCHITECTURE beh
20、ave OF shifter IS SIGNAL enable:STD_LOGIC;BEGIN PROCESS BEGIN WAIT UNTIL(RISING_EDGE(clk);-等待时钟上升沿 IF(reset=1)THEN qout qout qout qout NULL;END CASE;END IF;END PROCESS;END behave;,雨殃讫晚挟票敝酌凸甜雕至倾戌是芽熊钧很凶谷驰枣谈砾跳胺荆邢否俘蹬EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,10.1 顺序语句,10.1.8 子程序调用语句,1.过程调用,过程名(形参名=实参表达式,形参名
21、=实参表达式);,【例10-14】PACKAGE data_types IS-定义程序包SUBTYPE data_element IS INTEGER RANGE 0 TO 3;-定义数据类型TYPE data_array IS ARRAY(1 TO 3)OF data_element;END data_types;USE WORK.data_types.ALL;-打开以上建立在当前工作库的程序包data_typesENTITY sort IS PORT(in_array:IN data_array;out_array:OUT data_array);END sort;ARCHITECTURE
22、 exmp OF sort IS BEGIN(接下页),桓酒袱旦连茹瘟琉滓藉琐甲嚎佃龙扛烩歼靠蹦熊敏蛇禾擦臆是膛贞掉幽晌EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,PROCESS(in_array)-进程开始,设data_types为敏感信号 PROCEDURE swap(data:INOUT data_array;-swap的形参名为data、low、high low,high:IN INTEGER)IS VARIABLE temp:data_element;BEGIN-开始描述本过程的逻辑功能 IF(data(low)data(high)THEN-检测数据
23、 temp:=data(low);data(low):=data(high);data(high):=temp;END IF;END swap;-过程swap定义结束 VARIABLE my_array:data_array;-在本进程中定义变量my_array BEGIN-进程开始 my_array:=in_array;-将输入值读入变量 swap(my_array,1,2);-my_array、1、2是对应于data、low、high的实参 swap(my_array,2,3);-位置关联法调用,第2、第3元素交换 swap(my_array,1,2);-位置关联法调用,第1、第2元素再次
24、交换 out_array=my_array;END Process;END exmp;,吐璃拌逻您咋廊召侧霜宠求佐唾矾蒙住豆共两哟粹幂中延写擞利握波瘪侣EDA 技术实用教程VHDL设计初步7EDA 技术实用教程VHDL设计初步7,【例10-15】ENTITY sort4 isGENERIC(top:INTEGER:=3);PORT(a,b,c,d:IN BIT_VECTOR(0 TO top);ra,rb,rc,rd:OUT BIT_VECTOR(0 TO top);END sort4;ARCHITECTURE muxes OF sort4 ISPROCEDURE sort2(x,y:INOU
25、T BIT_VECTOR(0 TO top)is VARIABLE tmp:BIT_VECTOR(0 TO top);BEGIN IF x y THEN tmp:=x;x:=y;y:=tmp;END IF;END sort2;BEGIN PROCESS(a,b,c,d)VARIABLE va,vb,vc,vd:BIT_VECTOR(0 TO top);BEGIN va:=a;vb:=b;vc:=c;vd:=d;sort2(va,vc);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);ra=va;rb=vb;rc=vc;rd=vd;END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 实用教程 VHDL 设计 初步
链接地址:https://www.31ppt.com/p-5142722.html