颜丽's profile放飞自我PhotosBlog Tools Help
November 12

第一次面试经历--百度

前段时间一直在忙碌,穿梭于各个招聘会,不断地跑工大,不断地经历笔试-面试,不断地被人鄙视,也让自己不断地从打击中继续恢复,只有经历了才不会后悔。终于在我被鄙视第九次的时候,中兴移动给了我信心,让我觉得自己的奔波得到了回报。其实,找工作有很大的偶然性,人生也有很大的偶然性。
第一次面试--百度
这是我经历的第一次面试,投的职位是软件测试工程师,笔试的成绩看样子是还不错的,呵呵!因为没有涉及到编程。
经过了我漫长的等待,决定不再想百度的时候,我的电话响了,通知说3点面试,当时很是激动还有一些紧张。三点的时候,我走进了华融饭店(忘记了哪个房间),看到一个挺年轻的男面试官,挺随和的感觉。首先自我介绍,其实我也没什么好介绍的,就这点经历简历上都写了,我就说看我的简历就知道了。然后问我为什么放弃硬件选择作软件测试,其实我也不知道为什么,也就是想百度这么好的公司能进去的话做什么都行,后来就说了一句:学硬件也是出于偶然,我没有特别强调要从事硬件,只要适合我的都可以。闲话说完了,他就开始攻击我的专业知识了,当然问的全是软件的东西,我一个都不会,都放了两年,全部忘光了,呵呵!问了我几个问题,我都是经过慎重的考虑之后,回答了:我不知道!可能考虑的时间有点长,面试官开始用发短信来打发来时间了。就这样,经过了二十多分钟的煎熬,我出来了,也彻底的跟百度byebye了。
教训:在应聘技术岗时,一定要挑一个与你所学的对口,能有充分把握面对面试官的技术攻击。如果想换的话,那也得做好充分的准备,把专业知识搞扎实了,否则只能是回答:我不知道或我忘了。
August 02

恶搞猪肉涨价了

猪肉,一个百姓再熟悉不过的肉类,可如今猪肉涨价后,我们感觉到猪肉带给我们很多的疑问,这里我要说的不是原因,我要说的是身旁人对猪肉的经典语录。

1.街上卖报纸的三姑说:要是我的报纸能像猪一样贵,我以后就把剩下的报纸留给孙子,告诉他,你奶奶也有钱过!

2.临楼的薛姨妈说:猪肉太贵了,孙子就爱吃肉,可我也不能变成猪给他吃啊!

3.幼儿园的老师告诉刘叔的孩子,猪都长翅膀飞走了,想吃红烧排骨,明年猪飞回来,幼儿园就有红烧排骨吃了!

4.健身房李老板听到来退会员卡的会员说:老婆大人说了,猪都涨价了,你身上的肉也没见少,锻炼个屁!

5.市场卖猪肉的胡屠户对以磨刀为生的徐老头说:磨个屁,老子以后不卖猪了,老子改行卖西瓜,你以后滚远点!

6.市场卖菜的张阿姨对顾客说:多买点蘑菇吧,这东西吃起来不比猪肉差!

7.出租车司机王师傅对老婆说:还买肉吃,老子挣的钱你以为是捡来的?把切肉的刀在锅里涮涮就行了,真是不会过日子的老娘们!

8.楼下麻将社的杜六哥手里拿着二条说:看我这张没?没肉的猪骨头有人要没?牌刚打出去,就听对家的周老板说:正好,和了,骨头现在也抢手啊!哈哈!

9.拉车的赵师傅对坐车的一个胖子说:快?怎么快?我都好多天没吃顿肉了,哪有力气快?凑合吧,要不坐出租车!

10.医院的内科刘大夫对黄医生说:猪肉再涨价,来看血脂高的就没了,这以后又要少份奖金!  

July 20

经典语录

1.人的一生就象在拉屎,有时你已经很努力了可出来的只是一个屁.
    
2.小时侯,我家里很穷,没钱买自行车,我只好每天打的上学。初中的时候,因为我成绩太突出,学校领导留我多读了两年。初中毕业后,高中的校长觉得我很有前途,就多收了我三万。高三的时候,班主任认为我已经有独立生存的能力,于是让我退了学。
    
3.某鲜花店的广告:今日本店的玫瑰售价最为低廉,甚至可以买几朵送给太太。
    
4.我和超人的唯一区别是把内裤穿在里面了!

   
6.我不是随便的人!但随便起来就不是人!
    
7.虽然你是暴牙!别自悲,暴牙很好!暴牙可以刨地瓜,下雨可以遮下巴,喝茶可以隔茶渣,野餐可以当刀*,你说暴牙是不是顶呱呱!
    
8.家庭顺治、生活康熙、人品雍正、事业乾隆、万事嘉庆、前途道光、财富咸丰、内外同治、千秋光绪、万众宣统!
    
9.我是一颗葱,站在风雨中,谁敢拿我沾大酱,X他老祖宗!走过南~闯过北~厕所后面喝过水,火车道上压过腿,还和傻子亲过嘴。上过山、打过虎~少林寺上练过武,左青龙,右白虎,常拿克林顿当二百五,还拿释迦摩尼喂老虎!金字塔上跳过舞,耶稣头上打过鼓.
    
10.我身在江湖,江湖却没有关于我的传说!
      
   
12.走别人的路,让别人无路可走!
    
13.我就像一只趴在玻璃上的苍蝇,前途一片光明,而我却找不到出路.
    
14.浑人落魄江湖行,东西南北分不清。撞到墙角浑不觉,躺在地上数星星!
    
15.聽說女人如衣服,兄弟如手足。回想起來,我竟然七手八腳的裸奔了19年!
    
16.什么是压力
  老婆孩子是压力
  什么是动力
  老婆孩子就是动力
    
17.宿舍的弟兄决定对张舍监实施以下惩罚:
   让其抱着贴满老中医广告的电线杆,饱含热泪充满深情的大声呐喊:我的病终于有救了啊!
    
18..我,论智商,10个脑筋急转弯马上能答对8个;论学识,10岁时,我已经读了8年的书;论文才,10分钟内,我可以口述一篇美文,照录下来,最多改8个字,就可以拿去发表;论记忆力,10个电话号码只报一遍我就能记住8个;论耐力,上午10点钟的尿,我可以坚持到第二天晚上8点才撤......
    
19.老鼠从不浪费晚上的时间,而我们人类却浪费了每天的三分之一
    
20.“什么叫乐观派的人?”“这个……就像茶壶一样,屁股都烧得红红的,他还有心情吹口哨!”
    
21.宁愿相信世间有鬼,也不相信男人那张破嘴!
    
22.现在最“损”人的一句话是:“你真***是个小日本”
23.没有人值得你流泪,值得你流泪的人不会让你流泪!
    
24.故意学习,故意工作,故意生活,故意活得像个人!
    
25.放下你大学生的架子,找碗饭吃先!
    
26.没什么事不要找我,有事更不用找我!
  
July 18

消除FPGA设计中的毛刺问题

FPGA(Field Programmable Gate Array)以其容量大、功能强以及可靠性高等特点,在现代数字通信系统中得到广泛的应用。采用FPGA设计数字电路已经成为数字电路系统领域的主要设计方式之一。在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。因此,克服和解决毛刺问题对现代数字系统设计尤为重要。本文从FPGA的原理结构的角度探讨了产生毛刺的原因及产生的条件,在此基础上,总结了多种不同的消除方法,在最后结合具体的应用对解决方案进行深入的分析。

1 毛刺产生的原因
 
以图1的例子分析毛刺产生的起因:1是一个3位同步加法计数器,当使能端为高电平时,在每个时钟上升沿时刻QAQBQC000逐步变到111,进入到全1状态后,进位输出端输出半个时钟脉冲宽度的高电平,但从图2仿真结果中可以看到在011变化到100时刻ROC出现了尖脉冲,即毛刺。

1 3位计数器

2 仿真结果

XilinxFPGA为例分析其内部结构,如图3所示。

3 FPGA的内部结构

FPGA芯片是由可构造的输入输出块(Input/OutputBlock,IOB)、可构造逻辑块(Cinfigurable Logic Block,CLB)和可编程连线资源(Programmable Interconnect Array,PIA)3种可构造单元构成的。IOB位于芯片内部四周,在内部逻辑阵列与外部芯片封装引脚之间提供一个可编程接口,他主要由逻辑门、触发器和控制元组成。CLB组成了FPGA的核心阵列,能完成用户指定的逻辑功能;每个CLB主要有一个组合逻辑、几个触发器、若干个多选一电路和控制单元组成;PIA位于芯片内部的逻辑块之间,经编程后形成连线网络,用于芯片内部逻辑间的相互连接,并在他们之间传递信息。从图3中可以看出,对于不同的输入12,到逻辑块(M)的走线可能是不同的,这就造成了输入信号的延迟,假设12同时变化,由于延迟的存在,到达M时就有先有后(这种现象称为竞争),在逻辑输出端就可能会有险象(也称冒险),即产生了毛刺。在上述例子中的011状态,假设QAQB同时从1变化到0,QC提前了2ns0变到1,产生一个2ns的高电平,这就是毛刺。也就是说,FPGA设计中,毛刺产生的根本原因是信号在芯片内部走线时产生的延迟。

2 毛刺产生的条件
 
借助同样的例子来分析毛刺产生的条件。QA,QB,QC在每一个时钟上升沿同时发生翻转,但实际中由于延迟的存在,并不能保证QA,QB,QCD触发器的布线长短一致。如果QCQA,QB提前了2ns,这就形成了2ns的全1状态,称为“假象全1,进而导致进位输出产生一个尖脉冲。值得注意的是,3变到4011100,3位中有2位同时发生翻转,即在同一时刻有大于一个的信号发生改变。由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺。所以,毛刺发生的条件就是在同一时刻有多个信号输入发生改变。

3 消除毛刺的方法

知道了毛刺产生的条件,就可以通过改变设计,破坏其条件来减少毛刺的发生。例如,利用格雷码计数器每次输出只有一位跳变的特性,代替普通的二进制计数器,避免了毛刺的产生。还可以对电路进行改进,以消除毛刺对系统的影响。下面对各种方法做分别介绍:

3.1 利用冗余项法
利用冗余项消除毛刺有2种方法:代数法和卡诺图法,两者都是通过增加冗余项来消除险象,只是前者针对于函数表达式而后者针对于真值表。以卡诺图为例,若两个卡诺圆相切,其对应的电路就可能产生险象。因此,修改卡诺图,在卡诺图的两圆相切处增加一个圆,以增加多余项来消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。

3.2 采样法
由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,因此,在输出信号的保持时间内对其进行采样,就可以消除毛刺信号的影响,常用的采样方法有2:一种使用一定宽度的高电平脉冲与输出相与,从而避开了毛刺信号,取得输出信号的电平值。这种方法必须保证采样信号在合适的时间产生,并且只适用于对输出信号时序和脉冲宽度要求不严的情况。另一种更常见的方法叫锁存法,是利用D触发器的输入端D对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号。由于在时钟的上升沿时刻,输出端Q=D,当输入的信号有毛刺时,只要不发生在时钟的上升沿时刻,输出就不会有毛刺。这种方法类似于将异步电路转化为同步电路,实现简单,但同样会涉及到时序问题。

3.3 吸收法
由于产生的毛刺实际上是高频窄脉冲,故增加输出滤波,在输出端接上小电容C就可以滤除毛刺。但输出波形的前后沿将变坏,在对波形要求较严格时,应再加整形电路,该方法不宜在中间级使用。

3.4 延迟法
因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,而且,当温度变化,所加的电压变化或要增加逻辑门时,所加的延迟是不同的,必须重新设计延迟线,因而这种方法也是有局限性的。而且采用延迟线的方法产生延迟会由于环境温度的变化而使系统可靠性变差。

3.5 硬件描述语言法
这种方法是从硬件描述语言入手,找出毛刺产生的根本原因,改变语言设计,产生满足要求的功能模块,来代替原来的逻辑功能块。在图1电路中,一个3位计数器可能会在011100101110发生跳变时产生毛刺,究其原因是因为一次有2位发生跳变,可以采用VHDL语言对计数器编写如下,产生的计数模块代替原来普通的计数器。
subdesignmodcount
 (clk,reset:input;q[2110]:output;)
variable
counter3
:MACHINEOFBITS(r[2110])
 WITHSTATES(r0=B"101",
r1=B"100",
r2=B"000",
r3=B"001",
r4=B"011",
r5=B"010",
r6=B"110",
r7=B"111");
 begin
  q[ ]=rr[ ];
counter31reset=reset;
counter31clk=clk;
CASEcounter3IS
  whenr0=>counter3=r1;
  whenr1=>counter3=r2;
  whenr2=>counter3=r3;
  whenr3=>counter3=r4;
  whenr4=>counter3=r5;
  whenr5=>counter3=r6;
   whenr6=>counter3=r7;
  whenr7=>counter3=r0;
ENDCASE;
end;

注意在新的计数器中,每次状态发生改变时

如图1(c)所示,如果在不加任何的去除毛刺的措施的时候,我们可以看到结果c中含有大量的毛刺。产生的原因就是在时钟的上升沿,每个输入(a和b)的各个数据线上的数据都不可能保证同时到达,也就是说在时钟读取数据线上的数据的时候,有的数据线上读取的已经是新的数据,而有的数据线上读取的仍然是上一个数据,这样无疑会产生毛刺信号,而当数据完全稳定的时候,毛刺信号也就自然消失了。


输出加D触发器

这是一种比较传统的去除毛刺的方法。原理就是用一个D触发器去读带毛刺的信号,利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。这种方法在简单的逻辑电路中是常见的一种方法,尤其是对信号中发生在非时钟跳变沿的毛刺信号去除效果非常的明显。

但是对于大多数的时序电路来说,毛刺信号往往发生在时钟信号的跳变沿,这样D触发器的效果就没有那么明显了(见图2,加D触发器以后的输出q,仍含有毛刺)。另外,D触发器的使用还会给系统带来一定的延时,特别是在系统级数较多的情况下,延时也将变大,因此在使用D触发器去除毛刺的时候,一定要视情况而定,并不是所有的毛刺都可以用D触发器来消除。

点击看大图
图2 加D触发器后的运算电路及结果

信号同步法

在很多文章中都提到,设计数字电路的时候采用同步电路可以大大减少毛刺。另外,由于大多数毛刺都比较短(大概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此很多人认为,只要在整个系统中使用同一个时钟就可以达到系统同步的目标了。但是这里面有一个非常严重的问题,就是时钟信号和其他所有的信号一样,在FPGA器件中传递的时候是有延时的,这样根本就无法预知时钟跳变沿的精确位置。也就是说我们无法保证在某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突出了。因此,做到真正的"同步"就是去除毛刺信号的关键问题。我认为这里同步的关键就是保证在时钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以这个思想为出发点,提出了以下几种具体的信号同步方法。

信号延时同步法

首先,我们给出了一个两级乘法(c=a b;q=d c)的运算结果(如图3所示,这里不再给出运算电路)。可以看到,在没加任何处理过程的时候,两级结果c和q中都含有大量的毛刺信号。其中毛刺信号产生的原因就是在计算时钟跳变时刻,数据信号同时发生了跳变。另外,第一级信号c中含有大量的毛刺,在经过第二次乘法运算以后被明显放大了,从图3可以看出q中毛刺更加严重了。但在很多实际工作中,我们最关心的往往是最后的输出结果(q),只要中间信号的毛刺对后面的输出没有什么影响我们就不需要对它们作任何处理了。因此,这里所提出的信号同步的核心思想就是消除这些中间毛刺信号的影响。

点击看大图
图 3 两级乘法运算的结果仿真

信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。由于篇幅的关系,这里我们主要以对时钟信号的延时来说明信号延时法的原理。对上述计算过程加时钟信号延时的原理及结果如图4所示。

点击看大图
图4 加了时钟延时的两级乘法运算及结果

图4中的clkdelay就是时钟延时环节。在加这个环节以前的时钟信号是直接连到模块b上的,这样两个模块使用同一时钟,好像已经做到了同步,但是如图3所示,结果中含有大量的毛刺,其原因就是产生毛刺的根本原因--“竞争冒险"现象没有得到根本性的消除。加时钟延时环节的作用就是要从根本上消除“竞争冒险”,其过程是将控制模块b的时钟延时一段时间,使得模块b的控制时钟在上跳变化时数据c已经达到了稳定,即不含毛刺信号的数据,而这时数据d也已达到稳定,这样竞争冒险现象消除了,从而毛刺信号也得到了有效的抑制,如图4 (c) 所示。

与时钟延时法的原理相同,我们也可以在数据信号加延时环节来消除竞争冒险的现象,达到真正的同步。这里的延时环节可以使用Quartus Ⅱ提供的lcell实现,也可以使用D触发器和一个高频的计数脉冲灵活实现。另外我们也可以从综合结果(图4 (c)所示)看到,所加的延时环节占用的芯片资源是很少的,是一种简单有效而且节约资源的方法。

时钟信号的灵活使用

和上述方法的原理相似,灵活使用时钟信号的目的也是尽可能的消除竞争冒险。比如在时钟的第一个跳变沿触发模块a,下一个跳变沿控制触发模块b,这样时钟的交替控制也在一定程度上消除了竞争冒险,从而抑制了毛刺信号。还比如分别使用时钟的上升沿或者下降沿控制不同的模块。但是这些方法不适合使用在比较复杂的设计中,否则会使设计的条理非常的混乱,给以后的阅读修改带来很大的困难。因此,在选用这种方法的时候一定要慎重。

状态机控制

对于大型的数字电路设计,状态机是一种非常理想的选择,能使运行性能和硬件资源的占用达到最佳的优化,另外灵活的使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。原理如图5所示。

点击看大图
图 5 状态机控制原理

限于篇幅的原因,这里我们只讲述状态机控制的原理,提出一种新的思路。


总结

由于毛刺信号对FPGA器件的运行有很大的影响,如何有效抑制毛刺信号就成了一个非常突出的问题。但是必须强调的一点就是,我们首先必须对程序设计本身进行优化和改进,使毛刺信号的产生降低到最小,比如将一些信号用变量代替来减小延时等。另外,在实际应用中如何选用适合的方法也非常的重要,一定要慎重考虑。比如延时环节的加入会使整个系统的延时增大,加入太多时就会影响系统的运行

July 16

超级郁闷

忙忙碌碌了两个多礼拜,好不容易憋出了一篇小论文,打算投我们学校的英文版,结果今天打电话竟然说如果跟海洋和船舶无关的不能投英文版。气死了,我算是白忙乎一场了,看样子多余的事还是不要做得好。本来就不用发什么论文,我写它干吗?吃饱了没事做的话,可以看看动画片嘛,多享受呀!哎呀,看看有没有什么补救的措施,看看有没有别的地方可以投,我真的不想就这样白白浪费了我的文采呀。------郁闷死了,天呀,给我条出路吧,不然的话我可要拿石头砸你了,别怪我不客气哦,哼!
July 15

挖掘自己

古语说得好,当局者迷,旁观者清。相对自身我们每个人都是自己的当局者,对自己的认识也就自然的会有些迷茫和不清晰。跟自己相处了24年了,也在逐渐的经历不同的事情,在经历的过程中才能不断认识自己的各个方面。
以前觉得自己够洒脱,够当即立断,可是在经历事情的过程中,发现自己的其实很犹豫,很不潇洒。对有些事情总是犹豫不决,不知道是放不下呢,还是自欺欺人,又或者是自己的RP有问题,不把别人的痛苦放在心上,一心只在乎自己的快乐与痛苦。一个去伤害别人感情的人肯定不是好人,不管你伤害的是什么人。我不知道自己是出于什么心理,明知道有些事情不能做,明知道一开始就是个绝对的错误,可是还是让它发生了。这时候真的认为自己就是个坏人,原本的善良已经消失得无影无踪了。我很想控制我自己,可是事情总是在我觉得简单的时候其实已经很复杂了,而且更超出了我的控制范围。
 
July 13

超肉麻的话--琼瑶e剧

我知道他爱你爱得好痛苦好痛苦,我也知道你爱他爱得好痛苦好痛苦。---<海鸥飞处彩云飞>
他走的第一天,想他;他走的第二天,想他想他;他走的第三天,想他想他想他.---<情深深雨蒙蒙>
你不能恨我,你不能因为我这么爱你而恨我.---<还珠格格>
我真的好喜欢你,不管是那个刁蛮任性的你,活泼可爱的你,还是现在这个楚楚可怜的你,我都好喜欢好喜欢。---<还珠格格>
---待续

 

 
Updated 7/3/2007
Updated 7/3/2007
Updated 7/3/2007
Updated 12/18/2006
Updated 6/21/2006

放飞自我

There are no music lists on this space.

颜丽