收藏 分享(赏)

数字电路设计盲点实例与对策new.doc

上传人:dzzj200808 文档编号:2302729 上传时间:2018-09-10 格式:DOC 页数:28 大小:1.05MB
下载 相关 举报
数字电路设计盲点实例与对策new.doc_第1页
第1页 / 共28页
数字电路设计盲点实例与对策new.doc_第2页
第2页 / 共28页
数字电路设计盲点实例与对策new.doc_第3页
第3页 / 共28页
数字电路设计盲点实例与对策new.doc_第4页
第4页 / 共28页
数字电路设计盲点实例与对策new.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、数字电路设计盲点实例与对策时间:2008-01-23 来源: 作者:宇量 点击:1036 字体大小:【大 中 小】介绍有关数字电路设计盲点的内容,将分别针对 Tinning、数据传输、消耗电流、HDL编写等项目,辅以实例进行现象、原因分析以及对策探讨。首先要介绍的是二进制计数器(Binary Counter)的设计。有关 Tinning 的设计盲点【二进制计数器】二进制计数器经常被用来作外部输入脉冲的同步化,此外计数器的输出可负载(Load)到计数器本身,如果某种原因使得同步信号消失,可因为二进制计数器持续维持输出 Tinning,直到同步信号恢复正常再度取得同步为止,而且二进制计数器具有抗噪

2、讯特性,所以是种广被使用的电路 Block。现象图1-1 是典型的二进制计数器电路,该电路是将0 5计数(Count),将6 Counter,不过由于某种原因使得同步信号与计数器(Counter)的输出 Tinning 产生偏差,就会像产生如图1-2所示的电路输出持续偏差现象。原因分析Flip Flop 可 keep 已负载于二进制计数器 LD 的信号,因此若是忘记将Flip FlopReset 就会发生上述现象。为了符合设计规格因此利用图1-3的二进制计数器输出,不过由于图 1-1的电路,负载之前已将 Tinning 译码(Decoder) ,并用 D Flip Flop 将该信号延迟一位(

3、Bit)作成 Load Tinning,因此某种原因使得同步信号与后段 Flip Flop 判定(Assert)Tinning 延迟一位时,Tinning 就会持续维持输出偏差状态。对策根据电路 Block 的动作特性进行延迟计算,通常设计上不会有任何问题,因此采用如图1-4所示的对策,如果因为负载信号的传输延迟造成延迟(delay),祇需在图1-4后面的 D Flip Flop 作 Load 就可解决上述问题。图1-1 的电路原先是与图 1-3的电路相同,不过可能是进行 Bread Board 评鉴测试时发生译码错误(miss),或者是负载信号传输的 Line Delay 无法满足 Set

4、Up 与 Hold Tinning,因此插入 D Flip Flop 作 Careless Miss 对策。【夹杂延迟无法提高 Clock 频率 】现象这是经常发生的典型失败设计实例,主要原因是计数器的 Illegal State 对策不当造成 Clock频率无法提高。在理论合成阶段理论压缩的 PLD,有许多情况虽然不致构成障碍,然而实际上却潜伏许多无法厘清盲点。图2-1是十进制计数器设计实例,图中的 3至8 Line Decoder 相当于74137的 TTL Micro。原因分析如上所述 Clock 频率无法提高,主要原因是不当的 Illegal State 对策所造成。由于 Illega

5、l State 对策上因为某种因,使得必要的 Counter 以外的值插入 State,为了顺利回复原正常状态因此设置 Illegal State,不过该对策却会压迫动作性能,造成本末倒置的反效果。对策将 Illegal State 对策降至最小范围,根据 State Machine 的情况充分检讨,设法使 Clock 数能回复原正常状态,且不会产生其它问题。尤其是二进制计数器(Binary Counter),可以应用过去 Disc Lead IC 设计手法,简化 Illegal Sta te 的 Decoder。图2-2是根据上述方式设计的电路图,如图所示 Illegal State(此时为

6、 Ah 以上)的 Decoder 是由负载条件决定,并刻意使Flip Flop 的输出变成1,再使负载条件能完全成立进行 Decoder(此时为 Bh,Dh,Fh),进而使电路恢复正常状态。【计数器切换造成分布不均】现象为制作时间分析仪因此在输入端分别设置可储存检测中的数据的计数器,以及可将数据记忆至 Memory 的计数器 (Counter),不过由于计数器产生分布不均现象,所以无法正确检测。时间分析仪又称为Multi Channel Analyzer ,它的主要功能是将时间分割作信号分类。图3-1是 2频时间分析仪的 Counter Channel 切换电路,图中的 InO Switch

7、是用来作初期化,图中的下半段是产生频道切换时间的电路,本电路图是美国 Beige Bag Software 公司设计的 Spice A-D 2000 Versi on3.0.2。Sig 主要用意是希望用时间分析仪检测的脉冲, Out1是区分成 Counter U6脉冲,它是用信号 Sel 进行区分,当 Sel 为H 时利用计数器(Count er)U4计数(Count) ,若是L 时则利用计数器(Counter)U6计数 (Count)。此外脉冲在区分成 U4时会读取 U6的数据,脉冲在区分成 U6(Out3)时会读取 U4(Out2)的数据(位图标)。U9与 U10在切换计数器(Counte

8、r)时会将 U4与 U6清除(Clear)。此外从计数器读取数据后会作清除动作,因此利用 U13、 U16、U14产生 Tinning 信号。原因分析输入至 Counter Clock 的 Selector 作异步切换,造成选择(Selector)切换与 Coun ter 的频率特性同时出现,如图3-2所示更恶劣的情况是通过切换时的切换脉冲被分断成 Out 1与 Out2,形成双重计数(Double Count)现象,即使使用正确的时间选择(Selector)做切换,都无法解决上述双重计数的问题。图3-2 图3-1电路的 Time Chart对策由于上述电路是以 Selector 作切换,所以

9、没有简易的对策可供参考,必需将被测信号与系列 Clock 同步化( 图3-3),同时 Counter 也需使用同步 Type,并将 Counter 改成一个,使频道(Channel)切换时前频道的计数数据(Count Data)能被 Latch 同时还能清除 Counter。由图3-3可知它是利用 Master Clock 的 Mck 使 U3、U4、U12、U14同步动作,并利用U3、U4、U12、U14 输出的的结果,使得 Mck 也作能同步动作。在被测 Sig 的脉冲,U2的Q 一旦变成 H 时,与 Mck 同步化的 Out 0就成为 H,在此同时 U3对 Out 0反转,利用输出Q 将

10、 U2清除,其结果使得 Out 0对 Sig 的站立发生反应,输出脉冲信号 Out 0,信号与Mck 同步化而且可使 Clock 成为 H,如此便可在 Mast er Clock 获得同步的被测信号 Out 0,因此用 U4将信号 Out 0 Counter,进而获得输出 Out 2,随着时间切换,利用脉冲 Sel可以获得时间内的计数结果,同时还可清除(Clear)U, ,并开始下个检测动作。不过必需注意的是 Clear 若有 Out 0时会将它作1的初期化。虽然检测脉冲在同步化后,祇检测站立部分并将它计数(Coun t),然而实际上并非祇是单纯的同步化,而是藉由 Flip Flop 的 Cl

11、ock的输入,使得幅宽狭窄的脉冲也无法遗漏,不过作业上存有 Dead Time,因此若是连续性的幅宽狭窄脉冲不断出现时,上述方法就不适用,换句话说被测信号的脉冲幅宽必需是Master Clock 的两倍以上。如图3-4所示的 Tinning,切换时的 Data Latch 与 Clear 是利用 Mast Clock Mck 下降执行,所以不会影响检测动作。Tinning 除了 Counter 之外还具有 Latch 成份,因此会在下个频道检测中记录(Memory) 上个频道的数据并列入计算范围,如此一来理论上频道之间就无任何不协调,此外由于可检测的频率受到限制,因此可以进行正确的量测动作。有

12、关数据传输的设计盲点【传输波形歪斜,通信不稳】现象传输波形歪斜、通信状况不稳等问题,通常是发生在数据传输率极高的数字数据传输线路,例如 Line Drive 与 Receive 等电路。该电路是经由系统主机进行因特网数据传输,因此一般是利用包覆型电缆(Twist Pair Cable)以差动电压作数据的收发。电压规格则是根据 EIA-485的规范,在同一传输线路作复数 Node 连接。Topology 是属于包裹式 Bus 联机,它的两端是利用与 Cable 特性阻抗(Impedance)相同的 Impedance Terminate 作终端。由于传输距离在 Net Work 可能高达数公尺,

13、机器内部可能会遭受马达、 Solenoid 等电洞(Surge)电压的侵袭,连接器(Connector)必需承受反复插拔,基于保护 Line Drive 与 Receive 等考虑,因此插入如图4-1所示的二极管 (Diode)Clump 电路,由于该二极管具备耐电洞冲击特性,因此经常被应用于 Switching Power Supply 的电源整流。原因分析二极管一旦被施加逆电压时,二极管内部的 PN 接合处会产生静电容量,进而造成 Line Drive 与 Receive 的阻抗(Impedance)受到影响。对策理论上利用 Pulse Transformer 作绝缘是最佳对策,不过事实上

14、却不易达成,因此改用 PN接合处静电容量较低的二极管作对策。由于 Data Sheet 并未记载有关二极管的静电容量相关数据,因此祇能依靠反复的实验才能决定二极管的的型号。一般而言顺电流的最大绝对定格值越大,相对的二极管的 PN 接合处面积也越大,静电容量也随着增大,换句话说基本上祇要选用最大绝对定格值较小的二极管即可,不过必需注意的是最大绝对定格值如果太小时,二极管较易受到电洞电压的破坏,因此本对策采用 ST Micro Electronics 的DA112S1 Diode Array。【信号泄漏至邻近频道】现象随着电路低电压、高速化,使用传统74LS 系列 TTL IC 的机会逐年降低,不

15、过未来仍有可能将72LS244 IC 当作输出入的缓冲器(Buffer)。图5-1是将72LS244 IC 当作 Switch 的 Input使用,该电路为了减低外部噪讯混入 Switch A,因此72LS244 IC 附近插入防噪讯用电容(Condenser),不过当该 Switch A ON 的瞬间,邻近电路也会同时出现 Output 现象,最后变成设计失败例。原因分析原先怀疑是 Switch A ON 时,短暂(Transient)电流流成为 Cross Talk,流入邻近的 Input Line,造成邻近电路误动作,然而确认噪讯 Margin 并无任何不妥,因此调阅 Data Book

16、 检讨内部等价电路,认为 LS-TTL 的设计才是问题的根源,所以采取如图5-2的对策,利用负的输入电压产生寄生 Transistor,不过 Pattern 的电感(Inductance)与噪讯去除用电容所形成的 LC 共振电路,却因 Switch ON 的动作增加额外的 Step 电压变化,进而发生衰减振动造成 IC 的输入电压变化负的时间,内部的寄生 Transistor 引进邻近 Gate 内部的寄生Transistor,最后导致邻近电路误动作。对策追加衰减(Damping)电阻就可以解决 Switch A ON 时的误动作问题,换言之设计数字电路时除了理论计算之外,更应充分阅读相关的

17、Data Book。有关消耗电流的设计盲点【CMOS 标准 IC 构成的电路,消耗电流偏高】现象为了使电池能长时间动作,因此采用74HC 系列的 CMOS 标准逻辑 IC 设计电路,不过实际上电路的消耗电流却比预期值高。原因分析如图6-1 所示1个 Package 具有复数个电路,由于未使用的电路 Input Pin 呈开放状,造成开放状的 Input Pin 受到邻近 Pin 与噪讯的影响产生误动作。主要原因是 CMOS 逻辑 IC 的输入阻抗(Impedance) 非常高,加上设计者误认为 CMOS 逻辑 IC 的消耗电流很低,当输出由ON 变成 OFF 或是由 OFF 变成 ON 时,会

18、因 Switching 产生极大电流。为了检讨上述推论因此利用图6-2电路作测试,该电路是由 74HC00 CMO S 逻辑 IC 所构成,NAND Gate 具有四个电路,并由电池提供 Vcc=3.0V 的电压,其中一个电路的输入端呈开放状,输出 Pin的电压波形 (ch1)是利用插入 Vcc 的100 电阻的压降 (ch2)特性观测,图6-3 是观测波形的结果,由图可知输出 Pin (ch1)的 Ham 出现高频波噪讯重迭形状,此时74HC00 IC 内的电流值利用100 电阻两端的电压 (ch2) 计算约为40mA,换言之由以上的检测结果可知,Ham 对电路具有强大影响,使的电路产生各种

19、变化。对策为了让未使用的 Input Pin 电压 Level 能维持一定 Level,因此将 Input Pin 与 GND 连接,如此便可解决上述问题。【噪讯混入模拟 CMOS 逻辑混载电路,耗电量偏高】现象图7-1是利用电池驱动的感测 (Sensor)电路的部分电路图,基本上它是利用 OP 增幅器(Amplifier)使传感器传来的信号( 正弦波)增幅,再用74HC04逻辑 IC 进行感测信号同步处理,然而实际上该电路却面临噪讯与耗电量偏高的困扰。原因分析主要原因是设计者误将逻辑 IC 当作是以临界(Threshold)电压动作的 Comparator,如果仔细查阅74HC04 IC 的

20、输出特性就可发现,事实上输入电压通过74HC04 IC 的临界值附近时会产生 Chattering。图7-2是将10kHz 正弦波施加于74HC04 In put 端时的耗电量特性,图中上半段是耗电量特性的波形,下半段是输出的波形,正弦波的中央附近亦即74HC04 IC 的临界值附近,电源电流呈脉冲状(3s,20mA)增加,而该脉冲状电源电流就是造成耗电量过大与发生噪讯的主要原因,值得一提的是该状态时的74HC04 IC 的电源电流平均值为0.6mA。主要原因是设计者误将逻辑 IC 当作是以临界(Threshold) 电压动作的 Comparator,如果仔细查阅74HC04 IC 的输出特性

21、就可发现,事实上输入电压通过74HC04 IC 的临界值附近时会产生 Chattering。图7-2 是将10kHz 正弦波施加于 74HC04 In put 端时的耗电量特性,图中上半段是耗电量特性的波形,下半段是输出的波形,正弦波的中央附近亦即74HC04 IC 的临界值附近,电源电流呈脉冲状(3s,2 0mA)增加,而该脉冲状电源电流就是造成耗电量过大与发生噪讯的主要原因,值得一提的是该状态时的74HC04 IC 的电源电流平均值为0.6mA。对策模拟信号必需通过 Comparator 才能输入至74HC04 IC,不过却不可使 High 或是 Low 以外的信号流入逻辑电路内。图7-1

22、 的电路更换两个 OP 增幅器(Amplifier) 替代品,其中一个使用 Comparator,类似如此的设计可能是基于用途上的考虑。在一个封装 Package 设有两个OP 增幅 IC,可使用 MAX951之类 OP 增幅器与 Comparator 合成的标准组件,也可以利用Schmidt Trigger Input 组件,不过这类组件具备两种临界(Threshold)电压,因此对要求精密Tinning 的场合,必需考虑图7-3 的 信号延迟问题。【Schmidt Input IC 耗电量过高】现象基本上它是使用多颗74HC 系列的 IC 进行 Tinning 电路测试,不过实际上却发生耗

23、电量过高问题,耗电量过高对电源为3V 定格锂离子电池而言,可说是致命性的困扰,然而简讨导线 Layout 却未发现任何不妥,因而怀疑是 IC 初期特性不良所造成,然而更换 IC 后情况并未改善。原因分析主要原因是该电路内设有使用 Schmidt Input Gate IC 所构成的低频振荡电路 (图8-1),因此祇要将该 Gate IC 拔除,耗电量立即大幅下降。换句话说利用单一的 Gate 制作振荡电路,如何避免频率与 Duty 比的变化不会造成问题,成为设计上的重点。由于该振荡电路的复归阻抗为1M,因此即使作短路处理理论上祇能获得3V ,3A 的电流,不过经过电路振荡后上述电流会提高近10

24、0倍左右。对策为了要验证该振荡电路是造成耗电量增加的推论,因此另外组装电路作测试,该电路使用74HC14与4584 IC,复原阻抗为1M ,输入 Pin 的 Tinning 电容为0.1F。表8-1 是电源电压变化时的振荡频率变化特性。由于输入 Pin 的电压非常接近临界 (Threshold)电压 Level,因此输出反转之前的电流会变大,换句话说以往 CMOS 低消耗电流的观念,在类似振荡电路等具有模拟要素的电路上未必适用,有鉴于此利用4000号系列标准 CMOS 临界(Threshold)Input IC4093,取代 74HC 132 IC 构成的振荡电路,虽然 4000号系列标准 C

25、MOS 逻辑 IC 的最低动作电压为3V,不过即使该 IC 的电气特性恶化,电压低于3V 也能动作。事实上并非祇有利用临界(Threshold)Input IC 构成的振荡电路消耗电流会增加,例如附有大 CR 时定数的 Chartering 去除电路,或是将临界 (Threshold)Input IC 当作无法确定 H/L 的模拟信号转换成数字信号的 Comparator 使用时更需注意上述问的题。 23个 Inverter 直列并排,再用电阻与电容施加于复归振荡电路,如此一来在振荡的同时就可作模拟性的动作,且74HC 系列的 IC 电流值往往大于预期值。有关 HDL 编写的盲点【异步信号输入

26、 State Machine,信号就迁移至 Illegal State】现象利用 PDL 设计 State Machine 时,如果未将 State Machine 的信号与 Clock 作同步直接连接的话,当 Input 信号的迁移接近 Clock 的有效 Edge 时,Input 信号经常会迁移至 Illegal State。例如根据 List 9-1设计成图9-1 的电路,图9-2就成为该电路的状态迁移图,在图 9-2以 State 名称叙述值是程序编写器(Compiler)将 Sta te Encoding 转写的结果。上述设计由于两个 Resistor 都成为 1的状态无法使用,因此

27、该状态成为 Illegal State。原因分析图9-1 的电路中具有复数个 sw 输入信号传输至 Resistor 的路径,各路径的传输延迟时间即使是极微小差异,Resistor 的 Set Up 时间就会产生极大的不同。例如图9-1的电路,当 sw信号为1 (H Level)时,假设某个 Tinning 的 Clock 的有效 Ed ge 可使上方的 Resistor 保持0,使下方的 Resistor 保持1,如此一来1 会传输至上方的 Resistor,0会传输至下方的Resistor,理论上在下个 Clock 的有效 Edge ,Resistor 会将该值 Keep 住,不过若在这之

28、前如果 sw 信号变成 0(L Level ),上方 Register 输入端子的信号会从 1变成0 ,下方 Resistor 输入端子的信号则从0变成1 ,此时如果上方 Resistor 输入端子的信号变化,因 Clock 的有效Edge 发生微小的延迟,则上方 Resistor 会维持1 ,使的上、下方的 Resistor 都变成1,这种现象称为Illegal State ,直到 sw 信号回复成为1 为止持续维持 Illegal State 状态。对策上述现象是因为输入信号与 Clock 变化非常接近所造成,因此对策上必需使输入信号与Clock 同步,其结果如 List9-2所示。实际上

29、这种现象并非祇有 State Mac hine 才会发生,一般而言同步电路都有可能发生相同问题,换句话在说同步电路中如何使输入信号与 Clock同步化是同步设计的基本原则(Rule)。【利用 PLD 制作 One Shot Timer 的输出,在 PLD 内部再利用时发生 Tinning 偏差】 现象List10-1是将电阻与电容器连接于 PLD 的外部,作成 One Shot Timer 时,利用 ABEL 编写的程序部份摘要,图10-1是根据该程序合成的电路。该电路可以检测 CLK 端子的站立Edge,再输出一定时间的脉冲,由于 CLK 端子的站立,D Flip F lop 的输出变成 H

30、 Level,如此一来由于 CR 端子变成高阻抗(High Impedance),因此电容器通过电阻进行充电,当电容的电位上升后 D Flip Flop 的 ACLR 成为 Active,D Flip Flop 被 Reset 输出 Q 成为 H Level,R 端子也成为 H Level,电容器(Capacitor)开始放电。虽然电路单独状态时的动作都很正常,不过该电路的 Output 信号在内部再使用时就发生困扰(Trouble) 。PLD 的 Macro cell 的 Output 信号经常会在内部再度被使用时,而实际上到底使用多少的 Product Term,若不详阅程序编写器(Com

31、piler)的 Report 根本无法清楚掌握重点。正因如此上述 Trouble 是因为再度使用 Output 信号的各电路,针对 Output 信号动作的 Tinning 产生偏差所造成。原因分析10-1是根据程序编写器(Compiler)合成的复数电路,是造成上述 Trouble 主要原因,具体而言由于 Source Code 并非叙述单一程序,而且还将 Output 信号应用于复数电路,再将这些电路跨越其它逻辑 Block,最后当然会形成如图10-1 所示的复数电路。由于 CR 端子祇有一个,与外部连接的电阻与电容也都祇有一个,也就是说 CR 端子的 Feed Back 必需与复数个 D

32、 Flip Flop 的 ACLR 连接, CR 端子的电压是属于缓慢变化的信号,因此被各 D Flip Flop Reset 的 Tinning 就产生差异。对策最简单的对策就是不将 Out 信号当作 Feed Back 应用于内部,在外部与其它 Input Pin 连接,如此一来 Out put 信号祇对外部输出,进而形成一个合成电路。【利用 CPLD 设计的 Port 执行位操作指令时,机器发生误动作】现象利用 PLD 设计如图11-1所示的 Micro Computer 外部扩充 I/O Port,PLD 的内部电路是用VHDL 编写,List11-1是部份程序摘要,图11-2是是根据

33、该程序合成的电路,Output Port 是用 Clock 同步方式设计,相当于第6行到第6 行的 Process 叙述,同步 Clock 主要是应用于CPU 周边电路的 Output System,因此信号的名称又称为 CLK。该 Output Port 被设计成可作 Lead Back,相当于第20行到第 41行的 Process 叙述。上述设计主要是针对机器的控制器,因此输出入信号的名称直接使用机器的驱动器(Actuator)名称,例如第9行的 DCM1CW_fb 信号名称,是使 DC 马达初始朝时钟方向(CW)旋转的信号。不过实际上电路动作时,DC 马达初始动作却经常发生问题 (Tro

34、uble)。原因分析主要原因是利用 CPLD 制成的 Lead Back 电路的程序叙述有瑕疵(Bug)。具体而言在第9行Output Port 的 Data 位0 ,分配有 DCM1CW_fb 信号,然而在第31行 Input Port 的的 DATA 的位0,却又分配 DCM1CCW_fb 信号,也就是说 Output Port 与 Inp ut Port 的位0与位1信号名称分配不一致,所以当 MicroComputer 执行位操作指令时便发生问题,因为位操作指令会从指定的地址(Address)将数据读入 Resistor,接着针对 Resistor 的数据将指定的位 Set 至指定值,

35、之后便执行将 Resistor 的数据写入原地址的动作,亦即进行与 Memory 的位操作相同的 Lead Modify Light 动作 。对策最根本的对策是修改 Source Code,将第31行的 DCM1CW_fb 与 DCM1CCW_fb 两者对调使动作恢复正常。为了防范未然 HDL(Hardware Description Language)的叙述方式尽可能单纯化,具体实例如下: 信号名称不要太复杂以上述的例子而言尽量避免使用与机器组件相关的名称,改用地址与位等单纯的信号名称。 尽量避免将 std_logic 连结代入 std_logic_vector,不得以时则用元方式替代,就可

36、避免发生上述的错误。【Clock 同步式的 Latch 经常发生怪异值,如何 Latch】现象List12-1是利用 ABEL 设计 PLD 的程序产生 Clock 同步式 Latch 的实例,理论上根据该 List应该可以合成如图12-1所示的电路,然而实际上电路却不动作。原因分析List12-1的叙述中第 19行代入式右边 Q0信号名称却未添加扩充子,造成未明示到底是Register Feed Back 或是 Pin Feed Back 的困扰。由于程序编写器(Compi le)解释成 Pin Feed Back,依此合成图12-1的电路是造成问题的主要原因。List12-2是 Theri

37、nks 公司的WebPackISE,经过程序编写(Compile) 时的部份 Report File,由该 List 可知 Q0.D 的代入式右边使用 Q0.PIN。在图12-2的电路为0(L Level)时,Resistor Feed Back 与 Pin Feed Back的值不一致,因此即使 LE 变成 1(H Level),Resistor 的值无法被 Latch,因为随着与 Q0连接的外部电路电压 Level 变化,Resistor 的值也跟着改变。List12-2 Therinks 公司的 WebPackISE 经过对策正确的叙述方法如 List12-3所示,添加扩充子明示 Res

38、istor Feed Back,具体内容是在第19行代入式右边 Q0的信号名称, .fb就是该信号名称。图 12-2是根据该程序合成的电路,List12-4是用 WebPackISE 将 List12-3 Compile 时的部份 Re port File,由该 List 可知 Q0.D的代入式右边使用 Q0.Q,所谓的 .Q 是明示 Resistor Feed Back 的扩充子,这种方式经常出现在 ABEL 的 Source Code。.Q 与.fb 最大差异是.Q 祇能用于 Resistor Output 的 Feed Back,而.fb 却可用 Combina tion Output

39、的 Feed Back,所谓的 Combination 是指组合理论电路的输(Output) ,例如 List12-1的第12行的 istypereg虽然是表示 Resistor Output,然而Combination Output 的场合却变成 istypecom【算数演算 Package 变成 Compile】现象利用 VHDL 设计 PDL 将 List13-1的 Source Code Compile 时发生错误(Error) 。List13-2 是Therinks 公司的 WebPackISE,经过程序编写(Compile) 时的部份 Rep ort File,由该 List 可知

40、错误的原因可能是利用第25 ,26 ,31,32行的程序进行算数演算时出现 Error,不过第3行却可叫出算数演算 Package std_logic_ arith。List13-2 用 WebPackISE 将 List13-1 Compile 时的部份 Report File原因分析虽然 std_logic_arith 是属于可以演算 signed 与 unsigned 两者的算数演算 Package,不过却无法直接处理 std_logic_vector 的数据形式(Data Type),是发生问题的主要原因。对策最简单的对策是在第3行将呼叫 Package,变更成 std_logic_u

41、nsigned 或是 std_ logic_signed。以 List13-1为例如果要将 Input 的 A 与 B、Output 的 C 以无码方式处理,祇需将第3 行的叙述更改成如下所示即可。Use IEEE.std_logic_unsigned.all;另一种对策是将算数演算的信号从 std_logic_vector 的数据形式变更成 signed 或是unsigned。以 List13-3而言是在第17行以 unsigned 宣示算数演算的信号,接着在第 21行与第22行代入 A 与 B,由于无法直接将 std_logic_vector 直接代入 unsigned,所以连结 std_

42、logic后才代入。实际上进行算数演算时是使用第28,29 ,34,35右边 unsigned 的信号,此时未作数据形式转换直接将 unsigned 代入 std_logic_vector,不过由于进行理论演算的30 33行无法使用 unsigned,因此改用 std_logic_vector。还有一种对策是使用 Type 变换关数法,List13-4就是使用变换关数法的例子,具体方法是利用25, 26,31,32行所谓的 unsigned Type 变换关数,将 std_lo gic_vector 变换成unsigned,由于这些关数包含在 std_logic_arith Package 内

43、,所以并不需要呼叫其它的Package。【利用16进位叙述 Counter 值就发生错误】现象接着要介绍利用 VHDL 设计逻辑电路经常发生的错误。 List14-1是叙述 Counter 的实例,由于 Counter 的位数非常多,如果用2进位叙述 Counter 相当烦琐,所以改用16进位叙述,例如 List14-1的第 31行 ADD_fb 信号是 16位 std_logic_vect or,如果用2进位叙述则多达16 行,而16进位祇有 4行,不过将 List14-1Compile 会因用 Compiler 会产生 Error。原因分析主要原因是 std_logic_vector 祇允

44、许2进位叙述,虽然某些程序编写器(Compil er)允许这种方式,不过却很容易发生错误(Error)。std_logic_vector 祇允许 2进位主要原因是 std_logic 的抓取值是0 与1 之外的数字, List14-1表示 std_logi c 的抓取值,由 List 可知该值表示逻辑电路信号线的状态,例如 Z 表示高阻(High Impedance)状态,而 High Impedance 状态却对该值不具任何意义,因此不论是2 进位或是16进位都无法叙述。 2进位允许的叙述会被当作一次元配列处理,例如所谓的”ZZZ ”的 std_logic_vector(0到3),事实上是表

45、示4位信号全部都是高阻抗(High Impedance)状态。表14-1 std_logic 的抓取值抓取值定义U 初期值X 不定义0 01 1Z 高阻抗W 弱信号不定义L 弱信号的0H 弱信号的1- Dont care对策最简单的对策是将数据形式(Data Type)变更成 bit_vector,所的 Data Type 的抓取值祇有0与1,所以允许 2进位以外8进位、16进位的叙述,不过某些情况却不适用,例如 List14-1的第42行欲作 ADDR_fb-)时,就无法将 AD DR_fb 作成 bit_vector,此时必需使用Type 关数变换作以下的叙述:ADDR_fb=To_std

46、logicvector)x”FFFC”);所谓的 To_stdlogicvector 关数,是将位 bit_vector 转换成 std_logic_vector 的关数,值得一提的是关数名称会因 Compiler 有所不同,因此必需事先确认 Com piler 的使用说明(Manual)避免会产生错误(Error) 。【bit_vector 的数据形式变成 Compile Error】现象利用 VHDL 叙述作 List15-1的 8位 Counter 设计时,使用所谓的 bit_vector数据形式(Data Type),然而事实上 bit_vector 的 bit 数据形式抓取值为0 与

47、1, 。本设计的 BX bit_vector 是企图设计2 进位(Binary)Counter ,期待 BX 的表示值能被当作 2进位处理,在第18行该2进位祇用一个加算合成电路,不过该电路 Com pile 时却发生错误(Error)。原因分析主要原因是未呼叫 bit_vector 的算术演算 Package 造成上述错误(Error) 。因为在第18行是作bit_vector 的 BX_fb 与 integer 1的算术演算,因此必需叫出算术演算 Package,虽然第3行有呼叫 st_logic_unsigned,不过该 Package 却无法支持(Support)bit_vector

48、的算术演算。对策最简单的对策是呼叫可支持(Support) bit_vector 的算术演算 Package,具体方法是变更List15-1第3行的叙述:userk.bit_arith.all;必需注意的是关数名称会因 Compiler 有所不同,因此必需事先确认 Compiler 的使用说明(Manual)避免会产生错误(Error)。例如 List15-2第1行至第20行就是叙述将bit_vectorInclement的关数,第23行至第44 行也是使该关数叙述 Counter,它相当于List15-2的第40行。除了使用所谓的 bitinc 关数之外,如果延用 Source Code 时,可将第1行至第20行复制 (Copy)置于 Source Code 的前端,再以其它檔(File)读入制同一个 Project,之后祇要如第25 行将 User Package 叫出就可使用。

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报