购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第一回
独家秘方孟婆汤 复位信号及其重建

“有多少爱可以重来,有多少人值得等待?当爱情已经桑田沧海,是否还有勇气去爱?谁知道又和你相遇在人海,命运如此安排总教人无奈。”

贫僧今天带着各位,“出了城,吃着火锅还唱着歌”,突然就……没有麻匪来做“一点技术含量都没有”的打劫,大家一起来唠唠复位信号的事情。

人生之中总是充满遗憾的。别告诉我,您老不想回到十年前去买房。“给我一杯忘情水,叫我一夜不伤悲”。即使大家有“大不了是从头再来”的气魄,很多事情也是“我这张旧船票”不能“登上你的客船”了。用俗话说是:天下没有卖后悔药的;显得有文化一点,用李后主的词就是:“自是人生长恨水长东”。

回到贫僧的本行,佛在《地藏菩萨本愿经》里面说:“然诸众生脱获罪报。未久之间又堕恶道。有一生受福有十生受福。有百生千生受大福利者。”换句话说,除了佛,万物都逃不开六道轮回。传说中,等老僧“眼一闭,不再睁眼”了,过了奈何桥,便是喝孟婆汤的所在。一旦喝了孟婆汤,就再也记不得今世的事情了。用游戏术语来说,就是被清零了。

人被清零是困难的,要生生死死的折腾。大伙设计的系统的清零就简单多了。或者重新上电,或者按一个按钮,或者在远程发一个命令,哗啦啦,系统就回到原始状态了。这个术语叫做复位。

今天方丈不在,不会挨“棒喝”,贫僧可以多卖卖嘴皮子。对于复位这个问题,一般的处理招数是“软硬兼施”、双管齐下。“硬的”来处理上电和按键消抖,“软的”进行按键消抖和远程复位。这两手一起来,方可见到奇效。

1.复位就是定盘星

“天地之间有杆秤,那秤砣是老百姓,秤杆子挑江山,咿呀咿儿哟,你就是定盘的星”,这是说刘罗锅的。下一段,“数字芯片是杆秤,那秤砣是时钟呦,秤杆子挑系统,咿呀咿儿哟,复位就是定盘星”,这是贫僧新填的歌词。

歌德说:“人在旅途,难免迷茫”;洒家云:“芯片在转,难免跑飞”。虽然不是故意为之,但是数字系统在工作过程中,也会出现程序跑飞的情况或程序跳转。这个时候,可用手动或自动的方法,发给硬件特定接口信号,使软件的运行恢复到特定的程序段运行,这一过程就是复位过程。而在这一过程中,手动或自动的方法发给硬件特定接口的信号,就是复位信号。

H公司盛传于江湖的“用服三招”:重启、(重新)上电、换板子。其中除了换板子是针对硬件故障之外,另外两招都造成复位过程。可见复位对于系统的重要了。复位的主要作用在于,使系统重新进入初始状态,就是所谓的“重打锣鼓新开张”。值得指出的是,这些方法对于故障修复而言,是治标不治本的,也就是俗话说的“猫盖屎”。跑飞的机制和原因并没有找到并且得到修正,所以跑飞的可能还是存在。

复位根据时间和操作的不同,分为上电复位、按键复位和远端复位等多种情况。上电复位,顾名思义,就是在PCB板上电的时候,对于系统进行复位。按键复位,是通过PCB板子上的复位按键进行操作,使得系统复位。远端复位是针对无法接近系统的情况,通过远端的命令(如串口)操作系统复位。这三种机制,前两种是一般系统所必须的。最后一种需要看情况设置。最后提一句,对于现在大多数的FPGA芯片,都具有上电复位功能。但是考虑到可靠性,以及按键复位的需要,建议还是在PCB上也实现上电复位的功能。

根据复位信号与时钟信号的关系,复位又分为同步复位与异步复位两种。两者的区别是在于复位信号起作用的时间是否与时钟沿对齐。对齐的就叫同步,不对齐的就叫异步,天下同理。

要讨论哪种复位好,就必须先了解复位中的亚稳态问题。要想了解亚稳态问题,就必须先了解一下信号完整性的基本知识。这就是一个坑,不跳下去还不成。

在教科书里面,数字电路里面的信号都是直上直下的,呈完全垂直的态势。包括本书里面的图,也是这样。这是一种简化,为了画图方便。那么,实际电路上的波形是什么样子呢?请诸位看图2.1,这就是用示波器抓获的一个信号的下降沿。“不看不知道,世界真奇妙”,原来这些沿都是需要一个变化过程的。说实话,这个图还算长相好的,还有更加奇形怪状的沿。这里不多说,记住信号变化需要一定的时间就够了。

图2.1 实际电路中的下降沿

一般资料里面是这样说的“由于时序预留不够,电路的输入没有能够上升到所需要的逻辑电平高度,导致逻辑器件内部不得不花费额外的时间使得输出达到所需的稳定逻辑状态,这个额外的时间,我们也叫做决断时间。例如,逻辑器件的逻辑电平是用电容来维持的,如果时序不够,就好像给电容充电不足”。贫僧喜欢一句话总结:亚稳态就是寄存器时钟正好使得寄存器采到了信号变化的过程中,或者说沿上。这样寄存器就郁闷了:到底是“0”还是“1”呢?结果,两个都有可能。在时序仿真里面,亚稳态的行内切口叫“全国江山一片红”。

图 2.2 是一个典型的亚稳态的情况。系统的时钟正好位于信号上升沿的中间,所谓“高不成低不就”。如此,系统的输出就不确定了。至于,里面的内容还有很多。书贵简要,在此不一一说明。有兴趣的读者可以找一本信号完整性的书来,慢慢相参。

图2.2 亚稳态的一个例子

有很多资料讨论两者的优缺点,对于这个话题,贫僧的说法是“存在即合理”。同步复位的好处在于它只在时钟信号沿触发,进行系统是否复位的判断,这降低了亚稳态出现的概率,而且它需要消耗更多的器件资源,这是我们不希望看到的。一般寄存器都有支持异步复位专用的端口,采用异步复位的端口无须额外增加器件资源的消耗,但是异步复位也存在着隐患。异步时钟域的亚稳态问题同样存在,与异步复位信号和系统时钟信号之间的时序有关。

“我今没有好茶饭呦,唯有知识敬亲人”。下面是重点了,贫僧的建议是利用异步复位的模块重构全局的拟同步复位信号。见图2.3,通过专门的复位管理模块实现同步化复位信号,再用这个同步化的复位信号,走全局的复位布线资源,完成拟同步的全局复位。诸位莫急,莫急。在本讲的后面,某家会用大量篇幅讨论这个复位管理模块,保证价格实惠量又足。

话说,复位信号与时钟信号还真是有几分神似:它们都需要在低时延抖动前提下到达几乎所有的寄存器。所以呢,复位信号也会占用很多的布线资源。在很多 FPGA 中,可以采用全局的复位/置位信号(Global Set/Reset,GSR),通过全局复位管脚引入PCB上的复位信号,因为它是芯片内部的信号。如果所有的触发器都使用这一全局复位信号,则GSR信号将形成一个高扇出的网络。在ASIC里面,一般也有类似的布线资源的设计。

图2.3 建议的芯片复位管理模式

非要说两者不同的地方呢,就是复位信号的变化频率远低于时钟。

2 . 先来“硬的”杀威棒

“……一不是响马并贼寇,二不是歹人把城偷。杨林与我来争斗,因此上发配到登州。”不是演唱会吗,怎么还有京剧啊?列位听我说从头,这一节的内容还真是属于硬件工程师的领域。但是,如果不知道输入信号的形式,大伙儿的设计就无所适从了。因此上,现在老朽客串一把,与各位唠唠这个硬件的问题。在座的列位老兄,也就姑且听听热闹。愿意上洗手间的,现在正是恰当的时机。速去速归,过时不候。

图 2.4 是一个典型的低电平有效的复位电路的原理图。里面各个器件的作用,就不多讲了。这个在您老遇到低水平的硬件工程师的时候,可以和他去显摆一下下。假如遇到高手,您去找死了,可别埋怨贫僧没告诫你。

图2.4 复位电路原理图

(此处略去一万字,主要是电路理论分析)大伙儿再瞧瞧热闹,图2.5至图2.7是电路上电(假设1秒时刻上电)、按键按下(假设1秒时刻发生)和按键松开(假设6秒时刻发生)过程,复位信号的样子。这里的按键为理想按键,没有抖动。

图2.5 电路上电的复位信号

图2.6 理想按键按下过程的复位信号

图2.7 理想按键松开过程的复位信号

说点闲话,诸位发现没有?大多数电路上的复位信号都是低电平有效的,这是为什么呢?这又是可以去吹牛的资本了,列位听真切了。这是为了统一电路处理,使得上电过程和按键按下过程处理电路一致。一个板子在没有上电的时候,各个管脚的信号都可以认为是低电平的。并且,电路上电与按键被按下时刻,数字电路的行为应该是一样的。因此,把复位信号设计成低电平有效,是有实际意义的。如此,上电自然可以复位一下下。然后,有一个接高电平的模拟延时电路,保证时钟比复位信号早到。如此,芯片就开始工作前复位了,保证芯片内部寄存器都处于希望的初始状态。

按照这个说法,复位电路的特性应该是一个低通滤波器。事实也正是如此,见图2.8,这是复位电路的频域特性。

图2.8 复位电路的频域特性

实际中的按键是一个机械结构,在按下/松开按键的过程中,会存在 10~20 毫秒的抖动。实际的按键松开过程与芯片的输入复位信号,如图2.9和图2.10所示。按键按下过程也是类似的,书不重表。

图2.9 时间按键的抖动

图2.10 实际中的复位信号

3.再来“软的”棉花糖

“想带你一起流浪沐浴阳光,去完成温暖的想象,喜欢你任性时候可爱模样,好像失意时投下的阳光。”(放个歌曲,热热场)迅速地、麻溜地回来了,现在进入正题了。

看了那么多热闹了,到了“闲言少叙,言归正传”的时候了。

数字逻辑系统里面关心的是 PCB 板上复位信号的上升/下降沿的情况,具体对应于板子上电和按键松开两个时刻。首先,抽象出一个信号模型,见图 2.11。在首次电平达到高电平“1”之后,会有一个若干时间的不确定期。在不确定期内,信号在高电平“1”和低电平“0”之间跳动。之后,复位信号会稳定在高电平“1”上。为了安全,一般认为“不确定期”的长度是20毫秒。下降沿的情况类似,后面就以上升沿的处理作为例子,下降沿的处理请列位依葫芦画瓢好了。

图2.11 抽象的复位信号模型

有人说了,干嘛这么复杂啊,就不能一次上去?这个,您老去和上帝商量吧。鄙人无能,没本事改变物理定律,只能这样的。对应于这种骨感的现实,我们工程师只有直面,然后想出对策来。

多说一句,多处理这个抖动也不是不成。大不了系统会多次启动复位,不大会影响系统稳定后的工作。在抖动过程里面,为了避免系统中“亚稳态”大奖,适当的处理还是建议的。

严格按照开发过程,先设计时序。分析输入的复位信号的问题主要在于,由于抖动带来的不确定期的处理。处理思想很简单,一旦检测到电平变化,在一个周期内(对应“不确定期”的长度),不再检测电平变化。

对应高电平部分的时序图,如图2.12所示。设计中利用上升沿检测电路,检测到板上复位信号的变化,检测信号触发定时器定时。如果定时时间到达之后,板上信号是高电平,则说明按键松开有效,芯片内恢复的复位信号输出为高电平“1”。

图2.12 上升沿消抖-恢复时序

相应地,原理图如图2.13所示。其中,各个部分都是标准单元,不一一细表。

图2.13 上升沿消抖-恢复原理图

听到这里,一定有人感觉贫僧虎头蛇尾,对吧?我感觉到了强烈的反感的味道。贫僧啰嗦一句,岂不闻:台上一分钟,台下十年功的道理。《孙子兵法》有云:“上战伐谋……不战而屈人之兵,善之善者也。”前面那么多似乎无关的硬件部分的描述绝非无用功,没有这些信号性质上面的分析,如何消抖和恢复就无从谈起。“旗开得胜,我们一起唱;世界沸腾,我们一起唱。”

4.复位于千里之外

“我送你离开千里之外,你无声黑白……”接下来介绍一下远程复位这个话题。

在很多情况下,系统可能位于比较远的地方。例如,一个自动温度检测设备,就可能被放在一个很高的山的山顶。这种情况下,就很难通过人工到设备处按复位按键或者重新上电的手段对于系统进行复位了。对于这种系统,需要设计远程复位的功能。

具体的设想是,通过某种通信方式(例如以太网)建立控制台与具体设备之间的联系。换句话说,在控制台与设备上都存在一个特定的通信协议。然后通过命令集,通过控制台来遥控远端的设备。系统大体如图2.14所示。

图2.14 远端控制系统结构图

别的芯片,例如上位机等,内部的处理和讲座无关,不去讨论。简单说一下数字逻辑里面的设计。这个也不难,就是用一个命令检测模块,检测到设计中定义的复位命令。这个“复位命令”可能是通信网络传递过来的一串比特,也可能是上位机对于一个特定地址的读写操作。然后,逻辑就把恢复的复位信号拉低若干时间。

最后再唠叨几点,别人叫“tips”。首先,对于复位恢复信号里面的寄存器的复位,不能使用恢复的复位信号。这里只能采用板子上的复位信号了,赌运气吧。最多是多次复位了,幸好这部分的电路不大,消耗相对也小。其次,关于恢复复位信号的操作,必须要在一个always里面完成。这是Verilog的基本语法,但是发现好像很多新学者不注意。最后,鉴于复位可能有“板上上升沿”、“板上下降沿”、“远端上升沿”和“远端下降沿”四种可能的状态,而且,每个状态的逻辑不尽相同,因此,建议这四个逻辑分别设计;然后,输出四个使能信号来控制最终输出的复位信号。

这正是:“任尔状态千千万,初始复位总不变;上电按键并远端,信号恢复才圆满。板上滤波逻辑算,削去抖动片内全;控制命令来源远,照样拉低无困难。” 5maTG2TTR3GwVYOHhGTd7u31E4b8xwR5wBLecBMTxLffsdHh3EvH5g1LCCDg9Wbh

点击中间区域
呼出菜单
上一章
目录
下一章
×