逻辑设计工程技术基础
给出部分对逻辑系统设计质量有影响的主要实际工程技术包括逻辑系统稳 定性认识、逻辑系统中的竞争和冒险俗称“毛刺问题”、程序的可读性和可扩展性设计、 Vivado工具常用辅助功能等内容进行介绍目录数字电路稳定性数字电路稳定性定义竞争与冒险时间抖动数字系统亚稳态组合逻辑与毛刺毛刺的产生毛刺的分类毛刺的处理增加冗余项增加小电容选通法异步设计与毛刺异步时序电路中的毛刺现象异步时序电路中的毛刺的处理延迟元件法插入延迟避免竞争多次转换法状态跳转避免竞争非临界竞争赋值法状态编码安全同步电路改造法Verilog HDL设计中的编码风格Xilinx开发环境中的其它逻辑设计辅助工具数字电路稳定性数字电路稳定性定义系统稳定性指当去掉系统干扰后系统能以足够的精度恢复到初始平衡状态系统可靠性需要系统正常工作时候它能正常工作可表达为时间的数字函数R(t)系统在时刻仍能正常工作的概率数字系统的稳定性有很多影响因素。有时候即使设计正确该系统仍不能正常工作影响因素数字电路中的竞争与冒险、时间抖动jitter、亚稳态等因素都会影响数字系统的稳定性和可靠性竞争与冒险在逻辑电路中某个输入变量或不同信号通过两条或两条以上的途径传到输出端由于途径上的延迟时间不同到达输出门的时间就有先有后这种现象称为竞争因此而导致输出干扰脉冲险象的现象称为冒险如上图F产生“毛刺”非临界竞争不会产生错误输出的竞争现象临界竞争产生暂时性的或永久性错误输出的竞争现象时间抖动抖动信号的定时事件与其理想位置之间的偏差在理想情况下一个频率固定的完美的脉冲信号以1MHz为例的持续时间应该恰好是1us每500ns有一个跳变沿。但是这种理想信号并不存在实际的信号周期长度总会有一定差异从而导致下一个沿的到来时间不确定这种不确定就是抖动jitter抖动是对信号时域变化的测量结果它从本质上描述了信号周期距离其理想值偏离了多少数字系统亚稳态亚稳定状态在同步系统中如果触发器的建立时间和保持时间不满足就可能进入亚稳态此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于状态1和状态0之间的不确定状态即亚稳定状态当其他门电路或触发器接收到亚稳定的输入信号之后有些不见会把这个信号当成0而另一些则把它当成1还有一些部件本身也可能产生亚稳定的输出信号从而导致电路工作出现稳定性错误组合逻辑与毛刺毛刺的产生延时信号在器件内部通过逻辑单元和连线时都有一定的延时分别称为器件延时和路径延时用软件预估除a、b到c的两条最差路径的延时分别是7.567ns和5.436ns这个总延时等于互连线路径延时加上与门的延时由于延时的影响加之高低电平转换也需要一定的过渡时间在信号变化的瞬间组合逻辑的输入信号并不是同时变化由此往往会使得组合逻辑的输出出现一些不正确的尖峰信号这些尖峰信号称为“毛刺”a和b两条路径存在时间差b比a提前2ns左右因此虽然a、b两个信号只在1ns内为同高但是c输出的高电平持续时间达到了2.2ns左右毛刺的分类按输出信号是否应该变化可分为静态险象和动态险象静态险象如果在输入变化而输出不应发生变化的情况下输出端产生了短暂的错误输出则称为静态险象动态险象如果在输入变化而输出应该发生变化的情况下输出在比那花过程中产生了短暂的输出错误则称为动态险象按错误输出脉冲信号的极性可分为“0”型险象与“1”型险象“0”型险象错误输出信号为负脉冲“1”型险象错误输出信号为正脉冲按险象出现的原因可分为逻辑险象与功能险象逻辑险象由于某个变量与其反变量作用时间不一致出现瞬时同态造成的险象功能险象由于两个或两个以上输入信号同时变化时出现的险象毛刺的处理增加冗余项增加冗余项的方法是1.“或”上冗余的“与”项2.“与”上冗余的“或”项可以消除可能产生的险象但是此法只能用于消除逻辑险象功能险象无法消除如图在原来表达式基础上加上“B*C”项可消除BC1所产生的冒险module hazard_redundant( input a, b, c, output f ); // 原逻辑f ab ~bc // 存在险象增加冗余项 bc assign f (a b) | (~b c) | (b c); endmodule增加小电容在组合逻辑芯片的管脚输出端增加小电容由于竞争引起的险象都是一些频率很高的尖脉冲信号在电路的输出端加一个小电容如图所示利用电容对电压变化延迟的特性来过滤掉宽度极窄的毛刺信号但由于电容将使得输出波形的边沿加宽降低了电路的速度输出加小电容滤窄脉冲FPGA 中用延迟 寄存器模拟module hazard_cap_filter( input clk, input din, output reg dout ); reg din_r; always (posedge clk) begin din_r din; dout din_r; // 两级寄存器 等效滤波 end endmodule选通法真正在设计中对于消除毛刺常用的是这个选通法。通过选通脉冲对电路的输出门加以控制令选通脉冲在电路稳定后出现可使输出避开险象脉冲送出稳定输出信号分类对输入信号选通、对输出信号选通采用此方法后门网络的输出不再是连续的它只在选通信号作用器件有效如果选通信号采用系统全局的时钟能够使得系统各部分同步工作用时钟选通脉冲只在稳定后输出module hazard_gate( input clk, input din, output reg dout ); reg [1:0] sync; always (posedge clk) begin sync {sync[0], din}; dout sync[1]; end endmodule异步设计与毛刺异步时序电路中的毛刺现象当异步时序电路在态度瞬变期间若存在多于一个的状态变量同时发生改变则说此电路处于竞争之中临界竞争若电路所趋向的最终稳态与状态变量的变化次序有关则此电路的竞争使临界的非临界竞争若电路所趋向的最终稳态与状态变量的变化次序无关此电路的竞争是非临界的如果异步时序电路存在临界竞争输出状态会出现“毛刺”现象影响电路的稳定性异步时序电路中的毛刺的处理延迟元件法插入延迟避免竞争在输入信号x1 x201情况下电路的状态从q1 q200到11的转换中含有临界竞争通过对组合电路插入一个适当量的延迟使q2值从0到1的变化总比q1从0到1的变化快这样临界竞争就变成非临界竞争从而得到正确的结果module hazard_delay( input x1, x2, output q1, q2 ); assign #1 q1 x1; // 延迟 1 单位 assign q2 x2; endmodule多次转换法状态跳转避免竞争假定 (A→C)含有一个临界竞争如果可以找到一个多次转换(A→D→C)那么若能使D和A相邻则用状 态D代替C后, 将消除转换中的临界竞争并且维持“外部性能不变”例如表中在(01)输入下(11)与(10)有相同的次态且(11)与(10)相邻则可用(10)代替(11)并不影响外 部性能从而使存在临界竞争的转换(00) → (11) 变为无竞争的转换(00) →(10)module hazard_safe_fsm( input clk, rst_n, input x1, x2, output reg out ); localparam A2b00, B2b01, C2b10, D2b11; reg [1:0] curr, next; always (posedge clk or negedge rst_n) begin if(!rst_n) curr A; else curr next; end always (*) begin case(curr) A: next (x10x21) ? D : A; D: next C; C: next C; default: next A; endcase end assign out (curr C); endmodule非临界竞争赋值法状态编码安全即允许状态编码有非临界竞争出现。例如左边表格中给定的四个状态, 利用临界竞争编码得到的编码表 如右边表格。当增加E、G、F三个新状态后,就可以使它们之间的竞争全部化为非临界竞争module hazard_safe_code( input clk, rst_n, output reg [1:0] q ); always (posedge clk or negedge rst_n) begin if(!rst_n) q 2b00; else q q 1b1; // 顺序编码无竞争 end endmodule同步电路改造法同步电路优点a. 能够有效地避免毛刺的产生提高设计的稳定性b. 能够简化时序分析过程。同步电路便于电路错误分析加快设计进度c. 可以减少工作环境对设计的影响。同步电路受工作温度、电压等影响器件时延变化小。对于时钟 和数据沿相对稳定的电路时序要求较为宽松因此对环境的依赖性较小同步设计时钟信号的质量和稳定性决定了同步时序电路的性能而在FPGA内部有专用的时钟资源如全 局时钟布线资源、专用的时钟管理模块DUL、PLL等同步设计时钟信号的质量和稳定性决定了同步时序电路的性能而在FPGA内部有专用的时钟资源如全 局时钟布线资源、专用的时钟管理模块DUL、PLL等Verilog HDL设计中的编码风格Xilinx开发环境中的其它逻辑设计辅助工具