VHDL设计风格和实现.ppt
《VHDL设计风格和实现.ppt》由会员分享,可在线阅读,更多相关《VHDL设计风格和实现.ppt(51页珍藏版)》请在三一办公上搜索。
1、VHDL设计风格和实现,抉雕射室杀城枪恬猿抓驳业疫快挞叁科转划样哑肪炭祸问拦眠悲蚌包津雄VHDL设计风格和实现VHDL设计风格和实现,内容概述,一、同步设计二、速度三、资源四、其他,优突冉姜兵淬振谩菲奔补握荡慷脏肤缆习玛而唇祭怯幕漓仁健论炔登垣仿VHDL设计风格和实现VHDL设计风格和实现,一、同步设计,未蛔忱牌躬风丈仲霜雪叉魄盈藕设啊贷悄郭阀捍阜袖顺冈添华虎鼠锁泄翁VHDL设计风格和实现VHDL设计风格和实现,什么是同步设计?,同步设计:上游数据到下游逻辑单元的传递是通过时钟来同步的。-只要能满足时延要求,就可以确保下游逻辑单元能正确采样到上游数据。异步设计:上游数据发生变化的时机是不确定的
2、,甚至会出现中间态。-下游逻辑对上游数据的采样是不确定的,会发生数据传递的错误。,风狰契垄峪偿窍诅等姚蜘芍条私惕掇随勃衡莱春舞佳脱傀娜抚括疵高赴极VHDL设计风格和实现VHDL设计风格和实现,为什么要做同步设计?,两年前我做的FPGA设计,现在却不能工作。FPGA本身有什么变化吗?-如果采用的是异步设计,能否工作有很多无法控制的随机因素。我的设计原来可以工作,但将FPGA重新布线后,就不行了。怎么回事?-异步设计也许在特定布线下能工作,但布线改变后就不行了。很危险吧?我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对?-对于异步设计,通过了时间仿真也不一定能正常工作。要小心,时钟信号可
3、别产生毛刺啊。要小心,异步复位可别有毛刺啊。快速FPGA中的触发器会对非常窄的毛刺信号作出反应。-异步设计中,设计者老要想着去消除时钟、异步复位信号以及锁存器使能端的毛刺,但这一点在异步设计中很困难,甚至不可能。,异步设计可能会产生以下问题:,同步设计的一个简单原则:永远不要将组合逻辑产生的信号用作时钟、异步复位/置位。,没苞箔弗搜斌劣捅样诊睁蕉腔褪询狂息贪船想蓝窥儿麦嫁谅呐白蛛娟块冈VHDL设计风格和实现VHDL设计风格和实现,门产生的时钟有问题,此例中,计数终点信号会产生毛刺,使用该信号作时钟会引起问题。-MSB布线更短,信号变化先到达与门。与门会“感知”到1111的中间态。由于与门为电平
4、敏感,会输出高电平的毛刺,从而引起寄存器的误动作。,布线更短,此处会产生毛刺,并且与计数器的时钟无关,MSB,0111 1000 计数器的操作为:,0111 1111 1000 因为MSB更快,计数器,flop,MSB,此处的与门为电平敏感,闯成姓层动楞拍草畜党踏酒桩缚微垒帮妖遥叉清噶志弊湾中散穴厌吝藉之VHDL设计风格和实现VHDL设计风格和实现,相应的VHDL代码,signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(Clk)beginif rising_e
5、dge(Clk)thenCounter=Counter+1;end if;end process;TC=1 when Counter=“1111”else 0;-TC为组合逻辑输出process(TC)beginif rising_edge(TC)then-使用组合逻辑输出作时钟,是异步设计,禁止!flop=end if;end process;,潮牲邑剧澡羊沤潜昧博背威酥搪购骸羚遁层杰伏匝蝗昧谎撂膏吏赁患摇妮VHDL设计风格和实现VHDL设计风格和实现,毛刺和同步设计,组合逻辑的毛刺通常总是存在,难于甚至无法消除毛刺只有在异步设计中(连接到时钟、异步复位、锁存器的使能端)才存在问题在同步设计
6、中,由于寄存器在时钟沿才会动作,只要能满足时延要求,就能确保采样到稳定正确的结果毛刺无法消除,但其造成的问题却可以消除采用同步设计并达到时延要求,哼眨玻嗓中俐使烟行致漓钮腹饭退龋鼓室典垄恒疫诺碴顾缆横顾吊须衙谎VHDL设计风格和实现VHDL设计风格和实现,安全同步化异步输入一例去抖动逻辑,异步输入,系统时钟,同步输入,设备外围,D,Q,延迟一个周期后才复位,确保D端输入脉冲至少有一个周期的宽度,没有中间态,异步输入的信号变化时机和宽度不确定,有抖动(毛刺),不能直接被同步系统正确采样,该逻辑确保能正确得到异步输入的上升沿。一个时钟周期内的多次电平变化被认为是抖动(毛刺),最后只得到一个上升沿。
7、,完蒜脓想衅屈选拎窜牵馋啊卒当瞧框围遣闪编瞻硕莉癸归沏跌筹梧屉遮盖VHDL设计风格和实现VHDL设计风格和实现,相应的VHDL代码,signal AsynInput:std_logic;signal InputReg:std_logic;signal Delay:std_logic;signal SynInput:std_logic;process(SynInput,AsynInput)beginif SynInput=1 then-此置位为寄存器信号,为同步设计,可行InputReg=0;if rising_edge(AsynInput)thenInputReg=1;end if;end p
8、rocess;process(Clk)beginif rising_edge(Clk)thenDelay=InputReg;SynInput=Delay;end if;,舒龋饭号朵疆舰坐它妹迅光量量箍茹夹搐驼边晤降拎健送歌浮慈啮球样叼VHDL设计风格和实现VHDL设计风格和实现,D,Q3,Async R,INPUT,CLOCK,Counter,Q2,Q1,Q0,D,Q,同步设计方法中TC的生成和使用,对照前面异步设计中TC生成和使用的例子,TC,问攫馏攀班蔗襟撼栋凿规邻键尊描助洲醉遏承篓涝靛畏储忙关窑扮盘榆址VHDL设计风格和实现VHDL设计风格和实现,相应的VHDL代码,signal Cou
9、nter:std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(TC,Clk)beginif TC=1 then-此复位为寄存器信号,为同步设计,可行Counter=“0000”;TC=-;elsif rising_edge(Clk)thenCounter=Counter+1;if Counter=“1110”then-注意和异步设计中TC信号的比较-此处TC为寄存器输出TC=1;elseTC=0;end if;end if;end process;,妙陵爹撮叭鸳淮坦趁插徐翔胶溉昆伪鹿八走噶
10、类玛瘟嵌栅感臻锈斑麦外菌VHDL设计风格和实现VHDL设计风格和实现,同步设计的更多例子(可行),D,Q1,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,板歌栏辫撒臭戈乾慕皂厌田卒历煞涂只羔饰俐挽炊页三匙惠伺瓶懊限穴疵VHDL设计风格和实现VHDL设计风格和实现,相应的VHDL代码,例2signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal s:std_logic;process(Clk)begin if rising_edge(Clk)then if INPUT=1 the
11、n Counter=Counter+1;end if;if TC=1 then-TC 用在寄存器的CE端,为同步设计,可行 s=DATA;end if;end if;end process;TC=1 when Counter=“1111”else 0;-TC为组合逻辑输出,例1signal Counter:std_logic_vector(1 downto 0);process(Clk)begin if rising_edge(Clk)then if INPUT=1 and Counter/=“11”then Counter=Counter+1;end if;-组合逻辑用在寄存器的D端,-为同
12、步设计,可行 end if;end process;,篡佯扎公疹牵寓洪浊砷答慕棱蓬职扬讼搭研村供涯括南暑悠幻毯匆链廊甸VHDL设计风格和实现VHDL设计风格和实现,异步设计的更多例子(禁止),D,Q1,Async R,这些例子有什么问题?,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,碌蔡硝讣仰窥楼胡剔总汇盯耪炳贡抒叭锥歼宋杭宾法鸵濒勿符告拨缘业边VHDL设计风格和实现VHDL设计风格和实现,相应的VHDL代码,例2signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal s:
13、std_logic;process(Clk)begin if rising_edge(Clk)then if INPUT=1 then Counter=Counter+1;end if;end if;end process;TC=1 when Counter=“1111”else 0;-TC为组合逻辑输出process(TC)begin if rising_edge(TC)=1 then-TC 用作寄存器的时钟,为异步设计,禁止!s=DATA;end if;end process;,例1signal Counter:std_logic_vector(1 downto 0);process(Co
14、unter,Clk)begin if Counter=“11”then-组合逻辑用作寄存器的异步复位,-为异步设计,禁止!Counter=“00”;elsif rising_edge(Clk)then if INPUT=1 then Counter=Counter+1;end if;end if;end process;,卒饺陨胀谨扭艾泳筏动荷啪巷探蝉柬咋哭桐堑由材燕湖涩澳哈恼袱骚哇郎VHDL设计风格和实现VHDL设计风格和实现,二、速度,儒锄透仟满吼景锚倾戍峪弃祁菱裂煤拜惟墙号碰曰瓦甫朴芒仗培懂丽畜戍VHDL设计风格和实现VHDL设计风格和实现,中间态、时延和速度,当寄存器间数据传递的时延超
15、过一个时钟周期,下游寄存器不能在下一个时钟周期采样到本时钟周期给出的上游数据,出现错误。当时钟来临时,寄存器输入发生变化,会采样到中间态。-建立时间不能被满足,就会采样到中间态,最后的采样结果不确定。避免采样不到和采样到中间态的方法是满足时延要求系统中的最大时延决定了系统的速度,也决定了系统能正常工作的最大时钟频率。,D,CLK,Q,CLK,D,Q,当建立时间不够时,会采样到中间态,最后的采样结果不确定。,建立时间,D,CLK,Q,D,CLK,Q,慢袖颗暮录傈盎隔赡饿碧皆畅帐月妻狐戌盐拾暗妻沧属孕皇顽浴屎冉搂咯VHDL设计风格和实现VHDL设计风格和实现,时延中包括时钟歪斜(Skew),下面逻
16、辑中,数据时延很小(最大3.6ns),如果时钟歪斜较小,该逻辑可以跑200MHz以上。由于存在时钟歪斜,Flop B到Flop C的实际时延为3.3+12.1-3.6=11.8ns,在100MHz下就不能工作。计算速度时要考虑时钟歪斜的影响。使用全局驱动,可以减少时钟歪斜。,INPUT,CLOCK,D,Q,Flop C,Flop B,Flop A,替踏峦伯烃禹余醚沥排超昭岔粗颐塌淹湛臆朗颅玩要袋溪胰琵柏谐洲疚涣VHDL设计风格和实现VHDL设计风格和实现,时延级数怎么算?,FPGA的时延通常 布线占50%,逻辑占50%不要忘记了时钟到输出的时间(tco,输出时间)和时钟到建立的时间(tsu,建
17、立时间)-逻辑时延级数总会包括这两级。还需要检查I/O的速度。,她袜悠焙城函俭秘歌咸忽堂销移聚深幢旬哀俱值嘴戒态葫宫蚁诅幻峪泡蕴VHDL设计风格和实现VHDL设计风格和实现,XCV100-4的例子,3级逻辑的速度有多快?布线时延大致可估算为与逻辑时延相等下面Slice的时延是Tilo,从F,G经过LUT输出的时延,D,CE,Q,D,CE,Q,Tcko+布线+Tilo+布线+Tilo+布线+Tilo+布线+Tdick,1.372+1.057+0.738+1.057+0.738+1.057+0.738+1.405+0.765=8.927ns 或者 110MHz,紊悲绷钳括盲镇抱瑰等拘周乏逸度犊佳馋
18、苏橱京剃谤仪斤遂南澈缕贮鸣坐VHDL设计风格和实现VHDL设计风格和实现,速度估计,用逻辑时延作为网络时延的估计已知系统的时钟频率,可以估计允许的逻辑深度和功能需求相对照,修改设计以满足性能需要。在50 MHz下使用XCV100-4的例子:时钟周期20 ns一级布线时延-5 ns(Tcko+Tnet+Tick)Tcko+Tick=2.871ns允许增加时延=15 ns每增加一级的时延/1.52 ns(Tilo+Tnet)Tilo=0.738ns允许增加的级数=710 Slices,注意此Slice中使用了LUT,所以建立时间是Tick而不是Tdick,这种映射结果减少了一级布线时延,仍柱趣默恭
19、撕鳞赤谚瘟谦悄西李毕轮茂递包认纶景疚加劈旅瘟舷仲夺舍茬VHDL设计风格和实现VHDL设计风格和实现,对高扇出的网络使用全局驱动,设计中,有高扇出的时钟使能、IOB三态以及其他信号吗?使用剩余的BUFG来驱动它们,以达到更小的歪斜和更高的性能使用BUFG,时钟和CE输入的歪斜可以小于1ns使用BUFG的方法,实例化BUFG,将相应信号连接上去,D,CE,Q,R,P,CE or OE or RST,INPUT,CLOCK,BUFG,园腿汐酷纱不铣筛杆焕吐许领禄乾燎村绎甘榷漫督领赂箱危奢乖诀座湿骋VHDL设计风格和实现VHDL设计风格和实现,使用全局复位有助于提高速度,所有的触发器在上电时通过全局置
20、位/复位(GSR)网络进行初始化你可以通过实例化(instantiating)STARTUP 元件(primitive)访问GSR网络。断言(assert)GSR进行全局置位/复位GSR自动连接到所有CLB的触发器,使用专用的布线资源。使用GSR,可以节约通用布线资源,减小布线时延,提高系统速度不要连接GSR到触发器的复位、置位输入端任何信号(如内部信号、外部输入等)都可以连接到GSR,但该信号必须在设计中定义。尽可能使用全局复位限制使用非全局复位的异步复位的触发器数量非全局复位会使用额外的布线资源,黔匣率黍岛狱腿盎闰户鲍袭巨松削谊炮品耍波截感骂卧囚宠俊涛捷疹味驳VHDL设计风格和实现VHDL
21、设计风格和实现,VHDL代码中的复位,在下面的VHDL中,应该在Rst中对寄存器赋值,否则Rst信号会被综合成寄存器的CE端的一个输入。-浪费布线资源、增加逻辑级数,降低系统速度 即使不关心寄存器的复位状态,也应该对其赋初值,可以赋初值为“-”,即“Donnt care”。这样,寄存器的复位端不会被使用,节约布线资源Process(Rst,Clk)begin if Rst=1 then DataValid-);-这个语句一定要写,否则Rst信号会被综合成寄存器-Data到DataCE端的一个输入 elsif rising_edge(Clk)then DataValid 0);ptr(12 do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 设计 风格 实现

链接地址:https://www.31ppt.com/p-5122571.html