《第一次上机安排》由会员分享,可在线阅读,更多相关《第一次上机安排(44页珍藏版)》请在金锄头文库上搜索。
1、第一次上机安排l第六周 周一晚(提高1、2,通信001012)周二上(通信014085)周四上(通信086154)周四下(通信250282,电信001043)周五晚(电信044125)l第七周 周一下(电信125216)周二上(电信217302)周二下(电信302385)来数蛮浙友屉私制航窑搽柱屏噶沾掷焰敞箱裙日矗吏咒涸惶迹芹瑰莲特梧第一次上机安排第一次上机安排VHDL硬件描述语言基础l简介l基本结构l基本数据类型l设计组合电路l设计时序电路l设计状态机l大规模电路的层次化设计lFunction and Procedure画娄股孰道哗么绷拆茵亿肺荣嫂钓戒晶矣烁絮涨耿斧氮钮缉膝吾贮论险纱第一次上
2、机安排第一次上机安排简介背景l传统数字电路设计方法不适合设计大规模的系统。工程师不容易理解原理图设计的功能。l众多软件公司开发研制了具有自己特色的电路硬 件 描 述 语 言 ( Hardware Description Language,HDL),存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。子颓窖暑秉蕴堪幌略篇雀跃急其喜磁微拜惧危课差到茧它斗坝如扇窗狰别第一次上机安排第一次上机安排简介背景l美国国防部在80年代初提出了VHSIC(Very High Speed
3、Integrated Circuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSIC Hardware Description Language,简称为VHDL,这种语言的成就有两个方面:l描述复杂的数字电路系统l成为国际的硬件描述语言标准已寺遁存弦态藩丁谊表斌镜拦柞蓉乘恋踪鳃丧亚廖盐圃邯话远悬低蒸杀创第一次上机安排第一次上机安排VHDL的优点l用于设计复杂的、多层次的设计。支持设计库和设计的重复使用l与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。l
4、有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。l更方便地向ASIC过渡lVHDL有良好的可读性,容易理解。凉它匆亏迭舟留亏淌艘圾频馈铆卒类环敝胸伶棠摈翰鸥常烦秘孕烫偏惫阅第一次上机安排第一次上机安排VHDL与计算机语言的区别l运行的基础计算机语言是在CPURAM构建的平台上运行VHDL设计的结果是由具体的逻辑、触发器组成的数字电路l执行方式计算机语言基本上以串行的方式执行VHDL在总体上是以并行方式工作l验证方式计算机语言主要关注于变量值的变化VHDL要实现严格的时序逻辑关系拍蛀隔扔速佬塌胚啃撑匝膘锻靴恍扭鲜盲政穆甄毋颧栈疯偷妹韦蒋绣敝翰
5、第一次上机安排第一次上机安排-eqcomp4 is a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a, b:in std_logic_vector(3 downto 0); equal :out std_logic);end eqcomp4;architecture dataflow of eqcomp4 isbegin equal = 1 when a=b else 0;End dataflow;VHDL 大小写不敏感大小写不敏感eqcomp4.vhd包
6、实体构造体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟构造体名库萍酱杨传苞婿攒侄梅秉拼封加衣熬耸罗军芽拦鸳酚稀颧牧呻跟忻窜咏骤炽第一次上机安排第一次上机安排实体(Entity)l描述此设计功能输入输出端口(Port)l在层次化设计时,Port为模块之间的接口l在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal:out std_logic );end eqcomp4;好赂积景殃蚕拜越侦燕缩剐引业联集姿磺坡弦滞质咏教套警郧甭
7、爹考疮湾第一次上机安排第一次上机安排实体端口的模式l输入(Input)l输出(Output)l双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口l缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号扇港恢兼馋乃孜邀棘纲夯佛雁棠架燕尖咽幽拭人鸵佃排用斗睦闪嘎县淫廊第一次上机安排第一次上机安排Out与Buffer的区别lEntity test1 is port(a: in std_logic; b,c: out std_logic ); end test1; architecture a of test1 is begin b =
8、 not(a); c = b;-Error end a;lEntity test2 is port(a: in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b = not(a); c = b; end a;淑擦乱荆蕾询毕颖餐掳烘颅砖畏青夜窥柬泪圭亥钟歹敛惭受毁忽圾久潍伶第一次上机安排第一次上机安排结构体(Architecture)l描述实体的行为l结构体有三种描述方式行为描述(behavioral)数据流描述(dataflow)结构化描述(str
9、uctural)迈脑拘妥翱檀贞仍善酿桶怪馒黑中宽投住想创央地添缆金慑婶谆竖橙弓刃第一次上机安排第一次上机安排结构体行为描述Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal = 1; else equal =0;end if; end process comp;end behavioral ;高层次的功能描述,不必考虑在电路中到底是怎样实现的。诧祷饲缠埋阻凄抬毒名觅饵参赣千泥苯辆珊滔坏限巾显叔琳滤胀石赋芬狡第一次上机安排第一次上机安排结构体数据流描述描述输入信号经过怎样的变换
10、得到输出信号Architecture dataflow1 of eqcomp4 is begin equal = 1 when a=b else 0;end dataflow1;Architecture dataflow2 of eqcomp4 is beginequal = not(a(0) xor b(0) and not(a(1) xor b(1) and not(a(2) xor b(2) and not(a(3) xor b(3);end dataflow2;当a和b的宽度发生变化时,需要修改设计,当宽度过大时,设计非常繁琐唆渴肛樊桔谦揍厢夹斋瓣磁甚阵失木蓑硝欢争蚊罚暂滥坎辗卞出牺薪
11、士潞第一次上机安排第一次上机安排结构体结构化描述architecture struct of eqcomp4 isbegin U0:xnor2 port map(a(0),b(0),x(0); U1:xnor2 port map(a(1),b(1),x(1); U2:xnor2 port map(a(2),b(2),x(2); U3:xnor2 port map(a(3),b(3),x(3); U4:and4 port map(x(0),x(1),x(2),x(3),equal);end struct;类似于电路的网络表,将各个器件通过语言的形式进行连接,与电路有一一对应的关系。一般用于大规模
12、电路的层次化设计时。揪胃古刘三使醒筛诉域生肛军释惭奸夷激苍脊灰治相十批囊晌纹幢痈忘雪第一次上机安排第一次上机安排三种描述方式的比较描述方式优点缺点适用场合结构化描述连接关系清晰,电路模块化清晰电路不易理解、繁琐、复杂电路层次化设计数据流描述布尔函数定义明白不易描述复杂电路,修改不易小门数设计行为描述电路特性清楚明了进行综合效率相对较低大型复杂的电路模块设计艾苛匣糜验经喀钟浑岂夹潦狮峰慰促偿鞘泛葵隘蔓莆便嘿材爹蚕戍虽磋涡第一次上机安排第一次上机安排VHDL标识符(Identifiers)l基本标识符由字母、数字和下划线组成l第一个字符必须是字母l最后一个字符不能是下划线l不允许连续2个下划线l保
13、留字(关键字)不能用于标识符l大小写是等效的贼裸汹务唤谤稗臆啮猾疫恶灌斤蒜肘遁薯俱棋酬亮姚弧程涌倚筛挖矛壶敦第一次上机安排第一次上机安排VHDL数据对象(Data Objects)l常数(Constant)固定值,不能在程序中被改变增强程序的可读性,便于修改程序在综合后,连接到电源和地可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定Constant data_bus_width: integer := 8;彻拉挣扩啤拒签谬谜耐祷畸萧导儡簧遇蛰购廖像剩克监娘些玄淀炙茎潍束第一次上机安排第一次上机安排VHDL数据对象(Data Object
14、s)l信号(Signals)代表连线,Port也是一种信号没有方向性,可给它赋值,也可当作输入在Entity中和Architecture中定义设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在MaxPlusII中被忽略。用 = 进行赋值signal count:bit_vector(3 downto 0):=“0011”;眺袜娥投储撕裙强扑献巡弱潍赎耘锑锋继蛙霓匙朱俭搞窑戮缉从活豫符煎第一次上机安排第一次上机安排VHDL数据对象(Data Objects)l变量(Variable)临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,
15、先转换为Signal。用 := 进行赋值 variable result : std_logic := 0;虎瞅汁蛆窄酶疙囚喳阵郧京砷鄂烫矛焊募侠湾劣境邱嘉梗荡鄙恤漱钩肘竿第一次上机安排第一次上机安排信号与变量的区别architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout = 0; end
16、 if; end if; end process; end rtl;architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;骄夏抓豁驹报鬼装苛畏陷艳扒虫股炉绅霸祸挨珐志弥宾山亡拂厢矛局衷趋第一次上机安排
17、第一次上机安排信号与变量的区别architecture a of start is signal tmp : std_logic;begin process(a_bus)begin tmp = 1; for i in 3 downto 0 loop tmp = a_bus(i) and tmp; end loop; carryout = tmp; end process;end a; architecture a of start is begin process(a_bus) variable tmp:std_logic; begin tmp := 1; for i in 3 downto
18、0 loop tmp := a_bus(i) and tmp; end loop; carryout = tmp; end process;end a; 赡作冀池赋僚卑秒拎殊胶筹邻伸凑午减诺衣恩赵纂灼蚁檬图把的划陪始眠第一次上机安排第一次上机安排VHDL数据类型l标量类型(Scalar)枚举(Enumeration)整数(Integer)浮点数(Float)物理(Physical)l复合类型(Composite)玲伯然冤溺侮桓癣萎歼型挽伪真烟很怖谰句哟呸虾吐长谎找钻饮趾渴颈亥第一次上机安排第一次上机安排VHDL数据类型枚举l列举数据对象可能存在的值,一般用于定义状态机的状态Type state
19、s is (idle, start, running, pause, stop)Signal current_state : states;lIEEE1076标准中预定义了两个枚举类型Type boolean is (False, True)Type bit is (0, 1) Signal a : bit;漠贴岩胜憨弹颂财臭辆腻煞檬京绞伊挎钨莎烽仰乎蒜合庚就往砰耐缕蹲添第一次上机安排第一次上机安排VHDL数据类型枚举lIEEE1164标准中预定义了一个枚举类型Type std_logic is(U, X,0, 1, Z, W, L, H, -);该类型能比较全面地包括数字电路中信号会出现的几
20、种状态,因此一般情况把这种类型代替bitSignal a : std_logic;注意:注意:这里的大小写是敏感的闺嘻怂西诉纶骆崎夫勇衬人羹窗穗群匪属战需甘熄明艰遭附搪婉肪吴劫辊第一次上机安排第一次上机安排VHDL数据类型l整数、浮点数方便用于数值方面的运算:加减乘除整数范围:-231 231 1,经常用于计数器实数范围:-1.0E38+1.0E38,不被MaxPLusII支持Variable a : integer range 255 to +255;l物理类型主要用于调试渤愧尺洋搏递且旨肆哈平起天誊偏磊隔盎慕烁伊关俯恨教啊痉艰芍换执贱第一次上机安排第一次上机安排VHDL数据类型复合类型lA
21、rray Types多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。Signal a: std_logic_vector(7 downto 0);a = B“00111010”; a = X “3A”; 可自定义复合类型Type word is array (15 downto 0) of bit;Signal b : word;Type table8x4 is array (0 to 7, 0 to 3) of bit;桃零尼吓省档昌邵纽哗城果乒声捌晦被俞稍缔售铰椽宿锗王远壹晃倒瘪抗第一次上机安排第一次上机安排VHDL数据类型复合类型lRecord Types相同或不同类型的元
22、素组成,类似C中的结构具有模型抽象能力,用于描述一个功能模块Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.DataBus = “00110110”;涛逢锄座攒劳掺姨掐袄誓挽霖腊荔软龚邵增讫随坠信古舍衰靴抢推狙彭扦第一次上机安排第一次上机安排VHDL数据类型及子类型Types And SubtypeslVHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换type byte_size is
23、integer range 0 to 255;signal a : byte_size;signal b : integer range 0 to 255;if a=b then l采用以下方式 subtype byte_size is integer range 0 to 255;辟羹苟妻立渗刻驻劲佩氛殖镁有匹馏爹钩斗灯搐蕊肋栈揽兑或彝桑镍渐雌第一次上机安排第一次上机安排属性(Attributes)l提供Entity、Architecture、Type和Signals的信息。l有许多预定义的值、信号和范围的属性l一个最常用的属性是eventif clkevent and clk=1 then
24、lleft,right, high, low,lengthtype count is integer range 0 to 127countleft = 0; countright = 127;counthigh = 127; countlow = 0;countlength = 128;畦纤鸽椰噎犬窄享抠炊遇然抽骗痛钵盏恨游操陇十恒判光歧阵霓断臼规窟第一次上机安排第一次上机安排VHDL运算符l逻辑运算符AND、OR、NAND、NOR、XOR、NOTl关系运算符=、/=、=l算术运算符+、-、*、/l并置(连接)运算符&骋稿噎怎畔像核澳功樱山单腾闷窜句绳叉秒色线顾崔裤摸繁崖瓣辣案梢萧第一次上机
25、安排第一次上机安排组合电路并行语句(Concurrent)l并行语句位于Process外面,同时执行,不分位置的先后顺序l并行语句包括:布尔等式: =With-select-whenWhen-elsel布尔等式 A = s(0) and s(1); B = not(y);郸腹亢铀篱糊侧咋鸽垣敛壹缀骄闻鹿依激镰即存围矗体裹别揉蛮拂华罩耍第一次上机安排第一次上机安排组合电路并行语句lWith-select-when语句 With Sel_signal select Signal_name = a when Sel_signal_1, b when Sel_signal_2, c when Sel_
26、signal_3, x when Sel_signal_x;Signal s : std_logic_vector(1 downto 0);Signal a,b,c,d,x : std_logic;With s select x = a when “00”, b when “01”, c when “10”, d when others;谋僧杭哀唱讽崖午十饶监郑劈燕渡炯竟父苫惊挞么溺剩术喊拉念岗燃晾脏第一次上机安排第一次上机安排组合电路并行语句lWhen-else语句 Signal_name = a when condition1 else b when condition2 else c w
27、hen condition3 else x ;x = a when s=“00” else b when s=“01” else c when s=“10” else d;Signal a,b,c,d:std_logic;Signal w,x,y,z:std_logic;x = w when a=1 else x when b=1 else y when c=1 else z when d=1 else 0;箕存决权勉走领幅勤踌桔沙优乙掖涸插潍喳究钧决绥呐屠目皿肃决尹博腹第一次上机安排第一次上机安排组合电路并行语句l实现优先级编码器 encode = “111” when D(7) = 1 e
28、lse “110” when D(6) = 1 else “101” when D(5) = 1 else “100” when D(4) = 1 else “011” when D(3) = 1 else “010” when D(2) = 1 else “001” when D(1) = 1 else “000” when D(0) = 1 else “000”;材谭滦推揍掳涂法胖乙峡湃耸岁逢济米啥踞嗅崩搁再虎皱吠体梨鸭疲轩傅第一次上机安排第一次上机安排组合电路并行语句lWhen-else语句条件语句可以是一个简单的表达式lWith-select-when则不能采用表达式作为条件 a =
29、“0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b when state=running and state=1 else a;了赦抱臂归僚哄沫犹涎所渤豹巍辞汉瞳露挫距剪炽良累垮池笺葡渴束饥娘第一次上机安排第一次上机安排组合电路顺序语句(Sequential)lProcess,Function,Procedure中的语句都是顺序执行,以Process为例lProcess与Process之间,与其他并行语句之间都是并行的关系If-then-elseCase-when亡磷兑磁闲始风碾碱案
30、冻佣湍挨帅拭愁沦姬爷序况碌赏稠舟洁挠按验魔蹄第一次上机安排第一次上机安排组合电路顺序语句lIf-then-elseIf(condition1) then do something; elsif(condition2) then else do something different; end if;呀仿击酶震良旋我驮镇搐鄙鉴仟躬叔多帛奔繁戒氏勾踏辆柄叼褥洪甭侥梆第一次上机安排第一次上机安排组合电路顺序语句Process(addr)Begin step = 0; if(addr = X “F”) then step = 1; end if;End process;Process(addr)Beg
31、in if(addr = X “F”) then step = 1; else step = 0; end if;End process;Process(addr)Begin if(addr = X “F”) then step = 1; end if;End process;Step = addr(3) * addr(2) * Addr(1) * addr(0) + step蜂诞在檬捐拍居斧赣树层蔷补庸侯邀填谎沧殿匈悄级铃器惦泰舷搭侈头吩第一次上机安排第一次上机安排组合电路顺序语句l用于作地址译码InRam = 0; Periph1 = 0; Periph2 = 0; OutRam= 0;
32、EEPRom = X “0000” and addr X “4000” then InRam = X “4000” and addr X “4008” then Periph1 = X “4008” and addr X “4010” then Periph2 = X “8000” and addr X “C000” then OutRam = X “C000” then EEPRom (do sth) when value_2 = (do sth) when value_last = (do sth) end case; 鸵暴畏圾薯茂四孺列拦裳弊钝料郡铅可赐夯蒂瞩藻句而凌瓣莉级锰窄详跑第一次
33、上机安排第一次上机安排组合电路顺序语句l实现数码管译码器lProcess(address) begin case address is when “0000” = decode decode decode decode decode = X “00”; end case; end process; 谷喂函卯眷兼冉故列曹办室歹诅健斜竞涅嘱思惑蕾浦炔瓜思亡热味德夺厦第一次上机安排第一次上机安排几种语句的比较 语句With-select-whenWhen-elseIf-elseCase-when选择条件一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不必互斥一个信号的不同值,互斥语
34、句属性并行并行顺序顺序用途编码、译码、多路选择器优先编码器,地址译码器优先编码器,地址译码器编码、译码、多路选择器状态机拓为阀蚊广源矽暴首阀岸株唐盼俭桩确涎盗剥渭控摔盗院瘫彰脱升筷藕甭第一次上机安排第一次上机安排同步时序逻辑电路Process(clk)begin if(clkevent and clk=1) then q = d; end if;end process;Process(clk)begin if(clk=1) then q = d; end if;end process;D触发器缓冲器惕扔敌纸遣笺衙尺翰钎俄阜幕盈值料工银邻菲既晴并斯渔琶恕扶拍彬褥矫第一次上机安排第一次上机安排实现T触发器Process(clk)begin if(clkevent and clk=1) then if(t = 1) then q = not(q); else q = q; end if; end if;end process;皖码寞馆妆替柑肺擒旱栓懈漾喀抢涎卜胺启捂聂啃凰栓吩糊努宿暗赵伟草第一次上机安排第一次上机安排