收藏 分享(赏)

基础电路设计(8)数字电路设计盲点实例与对策new.doc

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

1、基础电路设计(八)数字电路设计盲点实例与对策有关数字电路设计盲点的内容,将分别针对 Tinning、数据传输、消耗电流、HDL 编写等项目,辅以实例进行现象、原因分析以及对策探讨。首先要介绍的是二进制计数器(Binary Counter)的设计。有关 Tinning 的设计盲点【二进制计数器】二进制计数器经常被用来作外部输入脉冲的同步化,此外计数器的输出可负载(Lo ad)到计数器本身,如果某种原因使得同步信号消失,可因为二进制计数器持续维持输出 Tinning,直到同步信号恢复正常再度取得同步为止,而且二进制 计数器具有抗噪讯特性,所以是种广被使用的电路 Block。现象图 1-1 是典型的

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

3、使得同步信号与后段 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 Up 与 Hold Tinning,因

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

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

6、coder 是由负载条件决定,并刻意使 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 在切换计数器(Counter)时会将

8、 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 对 O

10、ut 0 反转,利用输出 Q 将 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),然而实际上并非祇是单纯

11、的同步化,而是藉由 Flip Flop 的 Clock 的输入,使得幅宽狭窄的脉冲也无法遗漏,不过作业上存有 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 Terminat

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

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

15、低电压、高速化,使用传统 74LS 系列 TTL IC 的机会逐年降低,不过未来仍有可能将 72LS244 IC 当作输出入的缓冲器(Buffer)。图 5-1 是将 72LS244 IC 当作 Switch 的 Input 使用,该电路为了减低外部噪讯混入 Switch A,因此 72LS24 4 IC 附近插入防噪讯用电容(Condenser) ,不过当该 Switch A ON 的瞬间,邻近电路也会同时出现 Output 现象,最后变成设计失败例。原因分析原 先怀疑是 Switch A ON 时,短暂(Transient)电流流成为 Cross Talk,流入邻近的 Input Line

16、,造成邻近电路误动作,然而确认噪讯 Margin 并无任何不妥,因此调阅 Data Book 检讨内部等价电路,认为 LS-TTL的设计才是问题的根源,所以采取如图 5-2 的对策,利用负的输入电压产生寄生 Transistor,不过 Pattern的电感(Inductance) 与噪讯去除用电容所形成的 LC 共振电路,却因 Switch ON 的动作增加额外的 Step 电压变化,进而发生衰减振动造成 IC 的输入电压变化负的时间,内部的寄生 Transistor 引进邻近 Gate 内部的寄生 Transistor,最后导致邻近电路误动作。对策追加衰减(Damping)电阻就可以解决 S

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

18、CMOS 逻辑 IC 的 消耗电流很低,当输出由 ON 变成 OFF 或是由 OFF 变成 ON 时,会因 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

19、电阻两端的电压 (ch2) 计算约为 40mA,换言之由以上的检测结果可知,Ham 对电路具有强大影响,使的电路产生各种变化。对策为了让未使用的 Input Pin 电压 Level 能维持一定 Level,因此将 Input Pin 与 GND 连接,如此便可解决上述问题。【噪讯混入模拟 CMOS 逻辑混载电路,耗电量偏高】现象图 7-1 是利用电池驱动的感测(Sensor)电路的部分电路图,基本上它是利用 OP 增幅器(Amplifier)使传感器传来的信号(正弦波)增幅,再用 74HC04 逻辑 IC 进行感测信号同步处理,然而实际上该电路却面临噪讯与耗电量偏高的困扰。原因分析主要原因是

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

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

22、6mA。对策模拟信号必需通过 Comparator 才能输入至 74HC04 IC,不过却不可使 High 或是 Low 以外的信号流入逻辑电路内。图 7-1 的电路更换两个 OP 增幅器(Amplifier)替代品,其中一个使用 Comparator,类似如此的设计可能是基于用途上的考虑。在一个封装 Package 设有两个 OP 增幅 IC,可使用 MAX951 之类 OP 增幅器与 Comparator 合成的标准组件,也可以利用 Schmidt Trigger Input 组件,不过这类组件具备两种临界(Threshold)电压,因此对要求精密 Tinning 的场合,必需考虑图 7-

23、3 的 信号延迟问题。【Schmidt Input IC 耗电量过高】现象基本上它是使用多颗 74HC 系列的 IC 进行 Tinning 电路测试,不过实际上却发生耗电量过高问题,耗电量过高对电源为 3V 定格锂 离子电池而言,可说是致命性的困扰,然而简讨导线 Layout 却未发现任何不妥,因而怀疑是 IC 初期特性不良所造成,然而更换 IC 后情况并未改善。原因分析主要原因是该电路内设有使用 Schmidt Input Gate IC 所构成的低频振荡电路(图 8-1),因此祇要将该 Gate IC 拔除,耗电量立即大幅下降。换句话说利用单一的 Gate 制作振荡电路,如何避免频率与 D

24、uty 比的变化不会造成问题,成为设计上的重点。由于该振荡电 路的复归阻抗为 1M,因此即使作短路处理理论上祇能获得 3V,3A 的电流,不过经过电路振荡后上述电流会提高近 100 倍左右。对策为 了要验证该振荡电路是造成耗电量增加的推论,因此另外组装电路作测试,该电路使用 74HC14 与4584 IC,复原阻抗为 1M,输入 Pin 的 Tinning 电容为 0.1F。表 8-1 是电源电压变化时的振荡频率变化特性。由于输入 Pin 的电压非常接近临界 (Threshold)电压 Level,因此输出反转之前的电流会变大,换句话说以往 CMOS 低消耗电流的观念,在类似振荡电路等具有模拟

25、要素的电路上未 必适用,有鉴于此利用4000 号系列标准 CMOS 临界(Threshold)Input IC4093,取代 74HC 132 IC 构成的振荡电路,虽然 4000 号系列标准 CMOS 逻辑 IC 的最低动作电压为 3V,不过即使该 IC 的电气特性恶化,电压低于 3V 也能动作。事实上并非祇 有利用临界(Threshold)Input IC 构成的振荡电路消耗电流会增加,例如附有大 CR 时定数的Chartering 去除电路,或是将临界 (Threshold)Input IC 当作无法确定 H/L 的模拟信号转换成数字信号的Comparator 使用时更需注意上述问的题。

26、 23 个 Inverter 直列并排,再用电阻与电容施 加于复归振荡电路,如此一来在振荡的同时就可作模拟性的动作,且 74HC 系列的 IC 电流值往往大于预期值。有关 HDL 编写的盲点 【异步信号输入 State Machine,信号就迁移至 Illegal State】现象利用 PDL 设计 State Machine 时,如果未将 State Machine 的信号与 Clock 作同步直接连接的话,当 Input信号的迁移接近 Clock 的有效 Edge 时,Input 信号经常会迁移至 Illegal State。例如根据 List 9-1 设计成图9-1 的电路,图 9-2

27、就成为该电路的状态迁移图,在图 9-2 以 State 名称叙述值是程序编写器(Compiler)将Sta te Encoding 转写的结果。上述设计由于两个 Resistor 都成为 1 的状态无法使用,因此该状态成为Illegal State。 原因分析图 9 -1 的电路中具有复数个 sw 输入信号传输至 Resistor 的路径,各路径的传输延迟时间即使是极微小差异,Resistor 的 Set Up 时间就会产生极大的不同。例如图 9-1 的电路,当 sw 信号为 1 (H Level)时,假设某个 Tinning 的 Clock 的有效 Ed ge 可使上方的 Resistor

28、保持 0,使下方的 Resistor 保持 1,如此一来 1 会传输至上方的 Resistor,0 会传输至下方的 Resistor,理论上在下个 Clock 的有效 Edge ,Resistor 会将该值 Keep 住,不过若在这之前如果 sw 信号变成 0(L Level ),上方 Register 输入端子的信号会从 1 变成 0,下方 Resistor 输入端子的信号则从 0 变成 1,此时如果上方 Resistor 输入端子的信号变 化,因 Clock 的有效 Edge 发生微小的延迟,则上方 Resistor 会维持 1,使的上、下方的 Resistor 都变成 1,这种现象称为

29、Illegal State ,直到 sw 信号回复成为 1 为止持续维持 Illegal State 状态。对策上述现象是因为输入信号与 Clock 变化非常接近所造成,因此对策上必需使输入信号与 Clock 同步,其结果如 List9-2 所示。 实际上这种现象并非祇有 State Mac hine 才会发生,一般而言同步电路都有可能发生相同问题,换句话在说同步电路中如何使输入信号与 Clock 同步化是同步设计的基本原则(Rule)。【利用 PLD 制作 One Shot Timer 的输出,在 PLD 内部再利用时发生 Tinning 偏差】 现象List10-1 是将电阻与电容器连接于

30、 PLD 的外部,作成 One Shot Timer 时,利用 ABEL 编写的程序部份摘要,图 10-1 是根据该程序合成的电路。该电路可以检测 CLK 端子的站立 Edge,再输出一定时间的脉冲,由 于 CLK 端子的站立,D Flip F lop 的输出变成 H Level,如此一来由于 CR 端子变成高阻抗(High Impedance),因此电容器通过电阻进行充电,当电容的电位上升后 D Flip Flop 的 ACLR 成为 Active,D Flip Flop 被 Reset 输出 Q 成为 H Level,R 端子也成为 H Level,电容器(Capacitor)开始放电。虽

31、然电路单独状态时的动作都很正常,不过该电路的 Output 信号在内部再使用时就发生困扰 (Trouble)。PLD的 Macro cell 的 Output 信号经常会在内部再度被使用时,而实际上到底使用多少的 Product Term,若不详阅程序编写器(Compiler)的 Report 根本无法清楚掌握重点。正因如此上述 Trouble 是因为再度使用Output 信号的各 电路,针对 Output 信号动作的 Tinning 产生偏差所造成。原因分析10-1 是根据程序编写器(Compiler)合成的复数电路,是造成上述 Trouble 主要原因,具体而言由于Source Code

32、并非叙述单一程序,而且还将 Output 信号应用于复数电路,再将这些电路跨越其它逻辑Block,最后当然会形成如图 10-1 所示的复数电路。 由于 CR 端子祇有一个,与外部连接的电阻与电容也都祇有一个,也就是说 CR 端子的 Feed Back 必需与复数个 D Flip Flop 的 ACLR 连接,CR 端子的电压是属于缓慢变化的信号,因此被各 D Flip Flop Reset 的 Tinning 就产生差异。对策最简单的对策就是不将 Out 信号当作 Feed Back 应用于内部,在外部与其它 Input Pin 连接,如此一来Out put 信号祇对外部输出,进而形成一个合成

33、电路。【利用 CPLD 设计的 Port 执行位操作指令时,机器发生误动作】现象利用 PLD 设计如图 11-1 所示的 Micro Computer 外部扩充 I/O Port,PLD 的内部电路是用 VHDL 编写,List11-1 是部份程序摘要,图 11-2 是是根据该程序合成的电路,Output Port 是用 Clock 同步方式设计,相当于第 6 行到第 6 行的 Process 叙述,同步 Clock 主要是应用于 CPU 周边电路的 Output System,因此信号的名称又称为 CLK。该 Output Port 被设计成可作 Lead Back,相当于第 20 行到第

34、41 行的 Proc ess叙述。上述设计主要是针对机器的控制器,因此输出入信号的名称直接使用机器的驱动器(Actuator)名称,例如第 9 行的 DCM1CW_fb 信号名称,是使 DC 马达初始朝时钟方向(CW)旋转的信号。不过实际上电路动作时,DC 马达初始动作却经常发生问题(Trouble)。原因分析主要原因是利用 CPLD 制成的 Lead Back 电路的程序叙述有瑕疵(Bug)。具体而言在第 9 行 Output Port的 Data 位 0,分配有 DCM1CW_fb 信号,然而在第 31 行 Input Port 的的 DATA 的位 0,却又分配DCM1CCW_fb 信号

35、,也就是说 Output Port 与 Inp ut Port 的位 0 与位 1 信号名称分配不一致,所以当Micro Computer 执行位操作指令时便发生问题,因为位操作指令会从指定的地址(Address)将数据读入Resistor,接着针对 Resistor 的 数据将指定的位 Set 至指定值,之后便执行将 Resistor 的数据写入原地址的动作,亦即进行与 Memory 的位操作相同的 Lead Modify Light 动作 。对策最根本的对策是修改 Source Code,将第 31 行的 DCM1CW_fb 与 DCM1CCW_fb 两者对调使动作恢复正常。为了防范未然

36、HDL(Hardware Description Language)的叙述方式尽可能单纯化,具体实例如下:*信号名称不要太复杂以上述的例子而言尽量避免使用与机器组件相关的名称,改用地址与位等单纯的信号名称。*尽量避免将 std_logic 连结代入 std_logic_vector,不得以时则用元方式替代,就可避免发生上述的错误。【Clock 同步式的 Latch 经常发生怪异值,如何 Latch】现象List12-1 是利用 ABEL 设计 PLD 的程序产生 Clock 同步式 Latch 的实例,理论上根据该 List 应该可以合成如图 12-1 所示的电路,然而实际上电路却不动作。原因

37、分析List12-1 的叙述中第 19 行代入式右边 Q0 信号名称却未添加扩充子,造成未明示到底是 Register Feed Back 或是 Pin Feed Back 的困扰。由于程序编写器(Compi le)解释成 Pin Feed Back,依此合成图 12-1的电路是造成问题的主要原因。 List12-2 是 Therinks 公司的 WebPackISE,经过程序编写(Compile)时的部份 Rep ort File,由该 List 可知 Q0.D 的代入式右边使用 Q0.PIN。在图 12-2 的电路 为 0(L Level)时,Resistor Feed Back 与 Pi

38、n Feed Back 的值不一致,因此即使 LE 变成 1(H Level),Resistor 的值无法被 Latch,因为随着与 Q0 连接的外部电路电压 Level 变化,Resistor 的值也跟着改变。List12-2 Therinks 公司的 WebPackISE 经过对策正确的叙述方法如 List12-3 所示,添加扩充子明示 Resistor Feed Back,具体内容是在第 19 行代入式右边 Q0 的信号名称, .fb就是该信号名称。图 12-2 是根据该程序合成的电路,List12-4 是用 WebPackISE 将 List12-3 Compile 时的部份 Re p

39、ort File,由该 List 可知 Q0.D 的代入式右边使用Q0.Q,所谓的.Q 是明示 Resistor Feed Back 的扩充子,这种方式经常出现在 ABEL 的 Source Code。.Q与.fb 最大差异是.Q 祇能用于 Resistor Output 的 Feed Back,而.fb 却可用 Combina tion Output 的Feed Back,所谓的 Combination 是指组合理论电路的输(Output),例如 List12-1 的第 12 行的 istypereg虽然是表示 Resistor Output,然而 Combination Output 的场

40、合却变成 istypecom【算数演算 Package 变成 Compile】现象利用 VHDL 设 计 PDL 将 List13-1 的 Source Code Compile 时发生错误(Error)。List13-2 是 Therinks 公司的 WebPackISE,经过程序编写(Compile)时的部份 Rep ort File,由该 List 可知错误的原因可能是利用第 25,26,31,32 行的程序进行算数演算时出现 Error,不过第 3 行却可叫出算数演算 Package std_logi c_ a rith。原因分析虽然 std_logic_arith 是属于可以演算 s

41、igned 与 unsigned 两者的算数演算 Packag e,不过却无法直接处理 std_logic_vector 的数据形式(Data Type),是发生问题的主要原因。List13-2 用 WebPackISE 将 List13-1 Compile 时的部份 Report File对策最简单的对策是在第 3 行将呼叫 Package,变更成 std_logic_unsigned 或是 std_ logic_signed。以List13-1 为例如果要将 Input 的 A 与 B、Output 的 C 以无码方式处理,祇需将第 3 行的叙述更改成如下所示即可。Use IEEE.std

42、_logic_unsigned.all;另 一种对策是将算数演算的信号从 std_logic_vector 的数据形式变更成 signed 或是 unsigned。以List13-3 而言是在第 17 行 以 unsigned 宣示算数演算的信号,接着在第 21 行与第 22 行代入 A 与 B,由于无法直接将 std_logic_vector 直接代入 unsigned,所以连结 std_logic 后才代入。实际上进行算数演算时是使用第 28,29,34,35 右边 unsigned 的信号,此时未作数据 形式转换直接将 unsigned 代入std_logic_vector,不过由于进行

43、理论演算的 3033 行无法使用 unsigned,因此改用 std_logic_vector。还有一种对策是使用 Type 变换关数法,List13-4 就是使用变换关数法的例子,具体方法是利用 25, 26,31,32 行所谓的 unsigned Type 变换关数,将 std_lo gic_vector 变换成 unsigned,由于这些关数包含在 std_logic_arith Package 内,所以并不需要呼叫其它的 Package。【利用 16 进位叙述 Counter 值就发生错误】现象接 着要介绍利用 VHDL 设计逻辑电路经常发生的错误。List14-1 是叙述 Count

44、er 的实例,由于 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 祇允许 2 进位叙述,虽然某些程序编写器(Compil er)允许这种方式,不过却很容易发生错误(Error)。std_logic_vector 祇允许 2 进位主要

45、原因是 std_logic 的抓取值是 0 与 1 之外的数字,List14-1 表示 std_logi c 的抓取值,由 List 可知该值表示逻辑电路信号线的状态,例如Z 表示高阻(High Impedance) 状态,而 High Impedance 状态却对该值不具任何意义,因此不论是 2 进位或是 16 进位都无法叙述。2 进位允许的叙述会被当作一次元配列处理,例如所谓的”ZZZ ”的 std_logic_vector(0 到 3),事实上是表示 4 位信号全部都是高阻抗(High Impedance)状态。表 14-1 std_logic 的抓取值对策最简单的对策是将数据形式(Da

46、ta Type)变更成 bit_vector,所的 Data Type 的抓取值祇有 0 与 1,所以允许2 进位以外 8 进位、16 进位的叙述,不过某些情况却不适用,例如 List14-1 的第 42 行欲作 ADDR_fb-)时,就无法将 AD DR_fb 作成 bit_vector,此时必需使用 Type 关数变换作以下的叙述:ADDR_fb=To_stdlogicvector)x”FFFC”);所 谓的 To_stdlogicvector 关数,是将位 bit_vector 转换成 std_logic_vector 的关数,值得一提的是关数名称会因 Compiler 有所不同,因此必

47、需事先确认 Com piler 的使用说明(Manual)避免会产生错误(Error)。【bit_vector 的数据形式变成 Compile Error】现象利 用 VHDL 叙述作 List15-1 的 8 位 Counter 设计时,使用所谓的bit_vector数据形式(Data Type),然而事实上 bit_vector 的 bit 数据形式抓取值为 0 与 1, 。本设计的 BX bit_vector 是企图设计 2 进位(Binary)Counter,期待 BX 的表示值能被当作 2 进位处理,在第 18 行该 2 进位祇用一个加算合成电路, 不过该电路 Com pile 时却

48、发生错误(Error)。抓取值 定义U 初期值X 不定义0 01 1Z 高阻抗W 弱信号不定义L 弱信号的 0H 弱信号的 1- Dont care原因分析主要原因是未呼叫 bit_vector 的算术演算 Package 造成上述错误(Error)。因为在第 18 行是作 bit_vector 的 BX_fb 与 integer 1 的算术演算,因此必需叫出算术演算 Package,虽然第 3 行有呼叫st_logic_unsigned,不过该 Package 却无法支持 (Support)bit_vector 的算术演算。对策最简单的对策是呼叫可支持(Support) bit_vector

49、 的算术演算 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营业执照举报