ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

FPGA应用开发和仿真【2.5】

FPGA应用开发和仿真【2.5】 4.13 有限状态机数字逻辑里最重要的两个东西一个是计数器另一个是状态机。状态机是产生复杂逻辑、时序和工作流程几乎必然的方法。状态机记录当前状态并依据输入和当前状态来切换状态同时依据输入和当前状态来决定输出如图4-36所示。依据输出与输入是否有直接关系分为Mealy型和Moore型一般来说Mealy型经过合理增加状态可转换为Moore型。图4-36 状态机设计状态机一般应先对逻辑功能进行抽象并绘制出状态转换图而后总结输出的关系。状态机的输入信号一般是事件而输出信号可以是状态或事件。状态类型的输出一般与当前状态相关而事件类型的输出一般对应着状态转换。用Verilog描述状态机时一般也按照图4-36所示分为“状态转换”、“状态驱动”和“输出驱动”三段称为“三段式状态机描述”。状态转换段由组合逻辑构成根据当前状态和输入决定下一状态状态驱动段由触发器逻辑构成在时钟驱动下将下一状态锁定到当前状态输出驱动段可以是触发器逻辑也可以是组合逻辑用于描述输出。Moore型状态机较Mealy型状态机易于描述不要担心抽象的状态多只要合理状态越多描述起来越简明。以下通过两个例子来说明状态机的原理和设计。4.13.1 秒表例子考虑具备两个按键k0启停和k1冻结的秒表功能如下1按下k0计时开始再次按下k0计时暂停再次按下k0计时继续。2计时开始后按下k1显示暂停即显示的数字冻结内部仍在计时再次按下k1显示更新为新的计时时间仍然冻结内部仍继续计时。3计时暂停时按下k1计时复位归零。4冻结显示时按下k0恢复正常显示。事实上大多数手持数显秒表的基本功能都是这样的多数还额外有成绩存储回放功能。这里为便于演示状态机的设计过程不考虑成绩存储回放功能。根据上述功能容易知道秒表应具备以下四种状态。1空闲状态不计时显示0。2计时状态计时并实时显示。3计时暂停状态计时暂停。4显示暂停状态计时但显示锁定。状态转换可归纳为1停止状态Stop时按k0转换到计时状态。2计时状态Run时按k0转换到计时暂停状态按k1转换到显示暂停状态。3计时暂停状态Pause时按k0转换到计时状态按k1转换到停止状态。4显示暂停状态Freeze时按k0转换到计时状态按k1保持在显示暂停状态。为了控制计时与否、显示冻结与否需要两个状态输出1计时Timming定义为1计时、0停止。2冻结Freezing定义为1冻结、0实时显示。此外还需要两个事件输出1复位Reset返回停止状态时复位计时器。2更新Update在显示暂停状态按k1时更新显示。以上状态、状态转换、状态和事件输出可以归纳为表4-6。表4-6 秒表状态机的状态转换和输出表4-6还可以绘制成图4-37所示的状态转换图。在状态图中状态由圆圈表示起止状态一般为双线圆圈状态名和此状态下的状态输出在圈内标出状态转换由箭头连接箭头上标出触发此转换的输入事件和发生此转换时应输出的事件。图4-37 秒表的状态转换图代码4-46描述了上述秒表状态机采用三段式描述。对于三段式描述的状态机FPGA编译工具一般都能很好地识别主要是状态转移和状态驱动两段并采用相应的优化措施。代码4-46中状态采用了独热码。对于FPGA独热码适合用作状态编码但在代码中直接写出并不十分必要因为一旦FPGA编译工具识别了状态机会自行转换为合适的编码。代码4-46 秒表状态机整个秒表的实现则可参考图4-38。计数器级联实现计时计时与否由使能控制显示冻结使用触发器实现。图4-38 秒表整体实现的参考框图代码4-47是秒表状态机的仿真平台为了便于观察仿真波形使用了1kHz时钟并且只实现了百分秒和秒计时。其中用到了4.10.1节讲的模拟按键任务和按键处理模块。代码4-47 秒表状态机的仿真平台图4-39是其仿真波形注意观察每次按键事件到来之后状态机的状态变化和计数的情况。图4-39 秒表状态机的仿真波形4.13.2 数字示波器触发采样例子触发系统在示波器中至关重要。对于周期性被测信号信号时基和示波器的时钟一般是不同源的。即使同源。也不太可能与示波器显示的水平范围有着简单的整数比关系。如果没有触发系统控制每屏采集的波形几乎一定是相位错乱的于是在屏幕上形成“一团乱麻”。对于非周期性被测信号如果没有触发系统控制几乎不可能抓取到我们感兴趣的时刻。触发系统实时监测输入信号在输入信号发生特定事件时存储一帧波形并显示到屏幕上。常用的特定事件包括·上升/下降沿输入信号上升穿越某个设定值。·脉冲宽度输入信号持续高于或低于某个设定值的时间长于或短于某个设定值。·斜率输入信号单位时间的变化大于或小于某个设定值。除此之外许多示波器还提供两个或多个通道联合的事件比如建立时间和保持时间违例事件等。采样系统一般持续接收数据。数据量超过设定的一帧数据量时丢弃最早的数据存入最新的数据而在触发事件发生后再持续接收一定量的数据后停止。这个量取决于用户设定的触发事件显示在屏幕上的水平位置。显示功能模块再获取这些数据予以显示。因显示刷新率一般不会太高限于人眼的响应能力两次触发采集之间必然有许多数据未被获取和显示。一段时间内获取并用于显示的数据量与总数据量之比常常称为数字示波器的波形覆盖率。如果触发系统两次触发的时间间隔为tSI数据采样率为fs每次采样数据量为N则波形覆盖率可定义为N/fs·tSI。数字荧光显示的示波器每次屏幕刷新显示的是很多次采样数据的综合信息例如用色温图表达多次触发采集的波形出现在屏幕各处的概率往往可以做到较高的覆盖率。在水平刻度秒每格较大时采样率低持续刷新滚动显示时肉眼也可观察这时也可以不需要触发。这里我们定义一个简化的数字示波器触发采样系统·每次触发采集一帧共DLEN个数据。·上升沿触发功能可预置触发电平level∈-127127。·可预置触发前保留的数据量即用户设定的水平位置hpos∈0DLEN·可预置触发超时时间to∈0100M单位为数据采样周期达到超时时间则无论触发与否都采集一帧。根据以上功能描述可以抽象出四种状态1空闲状态IDLE不采集。2触发前采集状态PRE确保能采满用户设定的需要在触发事件到来前保留的数据量在此状态下还需要对采集的数据计数以便达到数量转换状态。3等待触发状态WAIT等待触发事件到来同时也在采集数据在此状态下也需要对已采集的数据计数以便达到超时时间时转换状态。4触发后采集状态TRIG采集触发事件后需要的数据量。5超时后采集状态TOUT采集超时后需要的数据量。数据采集存储可使用FIFO实现采集与否由FIFO的write信号控制。上升沿触发功能使用比较器实现实用的上升沿触发一般还需要输入滤波和迟滞比较这里从简。表4-7是总结的状态转换和输出。表4-7 数字示波器简易触发采样状态机状态转换和输出其中状态输出图4-40 简易数字示波器触发采样状态机状态图·fifo_write用于控制FIFO写入。·data_cnting用于控制数据计数data_cnt是否计数。·busy输出用于指示触发采样系统是否正忙。事实上三个状态输出可合为一个。事件输出·data_cnt_clr对data_cnt清零。·trigger_flag_clr清除指示是否触发的状态标志。·trigger_flag_set置位指示是否触发的状态标志。可画出状态转换图如图4-40所示。系统如图4-41所示。图4-41中FIFO的数据计数与需要的总数据量比较如果大于则读出可以保证FIFO中永远保持最新的DLEN个数据。图中en用来控制系统采样率。另外虽然数据计数和触发标志严格来说不属于状态机的内容但因只有状态机会用到它们也将它们实现在状态机模块内。代码4-48描述了状态机模块。图4-41 简易数字示波器触发采样系统框图代码4-48 数字示波器简易触发采样状态机代码4-49是测试平台。其中OscopeTrigSmp模块实现了图4-41所示结构测试平台顶层模块再实例化它。代码4-49中大量用到了前面各小节介绍的模块包括生成“被测信号”的SpRamRfSine、用于数据存储的ScFifo2等。代码4-49测试了四种情况正常等到触发、不等触发比如在滚动显示模式下、等不到触发且已存数据量不够而进入S_TOUT状态、等不到触发且已存数据量够而回到S_IDLE状态。代码4-49 数字示波器简易触发采样状态机测试平台图4-42是其仿真波形。图4-42 数字示波器简易触发采样状态机仿真波形第5章 IO规范与外部总线本章前4节介绍常用的单端和差分电平规范并在差分电平规范的基础上介绍高速串行传输同时简单涉及高速信号传输时的信号完整性问题。后4节介绍UART、SPI、I2C和I2S这四种最常用的微处理器外部接口/总线规范并逐个介绍相应的通用收发器/主从机的设计和仿真过程。这些通用收发器/主从机模块均比较完备并都经过实际工程检验不仅可帮助读者理解稍复杂的逻辑功能的设计过程还能直接用于实际工程之中。至于应用于特定型号外设的专用主从机因较为简单读者可参照外设的时序和功能需求专门实现本章不作介绍。本章涉及的代码会大量引用第4章介绍的基础功能模块应在充分理解第4章相关代码的前提下理解和学习。5.1 单端信号和地电子电路中一般使用随时间变化的电压来表达信号。电压即电势是一个相对概念自然界中并没有绝对的电势零点那么信号的电压一般也要有一个相对参考。在电路中大多数信号以同一个节点的电压为参考这个节点称为“地”是电路中人为定义的电势零点。以地为参考的信号只需要一根导线便能传递除了公共的地外称为“单端信号”。数字电路表达二进制时使用高、低电平代表1和0。对于单端信号高电平一般意味着电压接近电源电压而低电平则意味着电压接近地即0V。不过电路系统中往往不止一个电源电压不同的IC可能有不同的供电电压需求随着IC制程越来越小数字IC的供电电压也越来越低从最初的5V甚至12V到现在主流的3.3V、2.5V、1.8V以及更低因而所谓高低电平也不是只有一种标准。除电压区分外不同的工艺下电平标准也不一样目前最常用的是LVCMOS低压互补金属压化物半导体和LVTTL低压晶体管-晶体管逻辑虽然现在已经几乎见不到TTL工艺的数字IC但为了兼容3.3V及以上的TTL电平规范还很常见。在同一标准下对输出的要求较输入也会苛刻一些以便互连时确保电平互认即输出的高电平比输入高电平的要求更高而输出的低电平比输入低电平的要求更低。遵循同一标准的不同器件也可能有不同但互连时应该是兼容互认的。JEDEC固态技术协会定义了不同供电电压的一系列单端电平规范大多数数字IC的IO均兼容此规范图5-1总结了一些常用单端电平规范的输入输出电平范围。因输出电平会受到输出电流由负载决定的影响图中给出输出的高低电平范围均对应于相应的输出电流在输出电流更小时输出电平会更接近电源轨。通常情况下输出高电平时电流方向向外称为“拉电流”定义为负输出低电平时电流方向向内称为“灌电流”定义为正。图5-1 常见单端电平规范中输入输出高低电平范围图5-1中·VOL输出低电平最大值。·VOH输出高电平最小值。·VIL输入低电平最大值。·VIH输入高电平最小值。可以看到TTL电平从3.0V到5V以及LVCMOS的3.3V和3.0V如果低压器件能容忍高压器件的较高输入则它们的电平是完全兼容的。事实上在设计时确实有不少3.3V器件的输入可容忍5V以便可以接收5V器件的输出。TTL-5V器件的输入则可以直接接收3.3V、3.0V器件的输出。1.8V及以下器件的VOL、VIL、VIH和VOH均定义为0.25VCC、0.35VCC、0.65VCC和0.75VCC。FPGA芯片往往会将IO口划分为多组在芯片封装上一般也是一组一块区域每组均有各自的供电以便同一个芯片可以与不同IO电平规范的外部芯片互连这样的组称为“Bank”。当前主流的FPGA IO Bank都能支持1.2V至3.3V电平部分FPGA的高性能IO Bank可能只支持1.8V以下的电平。单端信号以地为参考输出高电平特别是信号上跳时一般电流在信号线上从源端流向末端负载而输出低电平特别是信号下跳时电流在信号线上从末端流向源端但电流必须形成闭合回路回流的电流会从地流回如图5-2和图5-3所示。为使回路电阻和感抗尽量小以便高速信号顺利传递回路圈围成的面积应尽量小一般通过完整的地平面或铺地来实现。图5-2和图5-3中电流回路在电源和地之间的流动路径没有画出电源和地之间的直流电流在电源中流过而高频交流电流则主要在IC附近的电源去耦电容中流过电源去耦是高速数字PCB设计的一个重要议题。这些知识属于PCB设计和信号完整性范畴深入的探讨已超出本书的讨论范围这里不赘述但作为FPGA系统设计者应对这些知识有所了解。图5-2 单端信号输出高电平的电流路径图5-3 单端信号输出低电平的电流路径5.2 传输线与端接信号在导线、PCB中的传输速度是有限的对于相对介电常数ε或分布电感和分布电容分别为l单位H/m和c单位F/m的导线/走线信号传输速度相速度为其中c0为光速。一般在PCB中信号传输速度约为光速的一半。图5-4 信号的上升和下降时间衡量高速数字信号的“高速”除频率外有一个在信号完整性方面更重要的参数称为上升时间。它一般定义为上升沿时电压从总变化即VHLVOH-VOL的10%VOL0.1VHL变化至90%VOL0.9VHL的时间。下降时间与上升时间相同较少提及如图5-4所示。上升时间在很大程度上决定了数字信号中的高频率成分上升越快高频分量越多。上升沿一般不是直线但这里按直线估算那么对于上升时间为Tr的数字信号其斜率又称为摆率Sr0.8VHL/Tr。如有导线的长度为X则信号传输的时间为tX/vpr。上升时间为Tr的数字信号在长度X的导线两端将出现电压差这个电压差将可能造成信号在传输时发生反射形成信号振铃甚至自激振荡造成信号无法较好地由末端接收。关于反射的详细成因不是本书内容这里不介绍。如果ΔVVHL则可以认为反射不会对信号传输造成太大影响比如ΔV0.2VHL时所以如果vprc0/2≈150Mm/s则对于数字IC包括FPGATr一般会在数据手册中给出对于最大翻转频率f的高频数字信号一般也可以估计为1/10f。注意式5-2是一种粗略计算方法的结果有些书籍资料得到的公式可能与之在数值上有些差异这是正常的。如果导线尺度X满足式5-2不必对其做特殊处理即可较为理想地传输信号。而如果不满足则应考虑导线的分布参数以传输线理论进行分析。一般需要导线具备稳定均一的特征阻抗并在源端和末端进行阻抗匹配才能消除反射完好地传输信号。从式5-2中可以看出在信号完整性方面信号的上升时间值应越大越好而在速率和时序方面则又要求它不能太大。许多FPGA支持IO口输出的摆率控制和驱动电流强度控制驱动电流强度也可间接地控制信号摆率在满足速率和时序的前提下应尽量降低摆率以提高信号完整性。如果导线的分布电感l、分布电容c、分布电阻r和分布电导g在整个长度上保持不变则该导线称为均匀传输线定义其特征阻抗它与信号的频率成分有关。在r和g较小时它基本上是一个纯电阻且与信号的频率成分无关。根据传输线理论如果要信号在传输线两端均不发生反射则驱动源的输出阻抗和末端负载的输入阻抗均应等于Z0。图5-5 两端带有匹配电阻的传输线图5-6 带有末端匹配电阻的传输线在PCB上可以用微带线或带状线实现均匀传输线板间连接则常用同轴电缆它们的特征阻抗与其几何参数、导体和介质的性质都有关系最常用的特征阻抗是50Ω。因而高速单端信号的传输应按图5-5所示连接。图5-5中RS称为源端匹配电阻RL称为末端匹配电阻。该连接方式有一个缺点——末端得到的电压只有源端输出的一半对于单端数字信号来说这显然是不能容忍的。在实际应用中如果末端匹配良好可以省略源端匹配电阻如图5-6所示。内容由AI生成
返回列表