IC公司数字前端笔试面试知识点总结

发布 2019-07-26 15:15:40 阅读 3496

1. cmos电路结构,包括静态cmos电路,latch还有flip flop的门级与cmos级的结构。

2. 基本逻辑化简与变换;基本状态机;计数器。

3. 时序参数与静态时序分析:必考。

setup/hold time及violation fix

false path

multi-cycle path

各种时序优化技巧和dc/pt技巧。

4. clocking:时钟频率推倒,skew,jitter原因及影响,cts等。

5. 跨时钟域处理和异步fifo:(几乎必考)

亚稳态概念;

各种情况下的分析:异步fifo设计;fifo size的确定;size为非2的幂次的处理,等等;可以有各种变种,强烈推荐cummings的那篇经典的关于异步电路的文章;

6. 常用的电路技巧:分频电路(奇数分频),时钟切换,reset(如何避免removal/recovery问题),门控时钟等等;

7. arithmetic/algorithm mapping: 一些简单的算术和算法要用硬件高速实现,没什么规律,主要靠积累经验,当然学习一些vlsi-dsp方面的课程应该会有所帮助。

(比如:8个1bit相加,判断8bit数是否为3的倍数,固定系数滤波器的设计等等)

8. 低功耗技巧/功耗分析等。

9. 后端基础知识。

10. dft基本概念:扫描链,fault model等等。

11. domain specific: computer architecture/dsp/communication

12. perl/shell或其他脚本语。参考资料。

参考资料。

状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。现状态机特别适合描述那些有发生有先后顺序,或者有逻辑规律的事情。

状态机的基本要素有3个:状态、输出和输入。

根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(moore)型状态机和米勒(mealy)型状态机。

摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。

米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状态的输入条件。

逻辑设计中,状态机的基本描述方式有3种,分别是:状态转移图,状态转移列表,hdl 语言描述。

好的rtl 级fsm 的评判标准如下:

1) fsm 要安全,稳定性高。

所谓fsm 安全是指fsm 不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义,第一:要求该fsm 的综合实现结果**刺等异常扰动;第二:

要求状态机要完备,即使收到异常扰动进入非设计状态,也能很快恢复到正常状态。

2) fsm 速度快,满足设计的频率要求。

任何rtl 设计都应该满足设计的频率要求。

3) fsm 面积小,满足设计的面积要求。

同理任何rtl 设计都应该满足设计的面积要求。

4) fsm 设计要清晰易懂、易维护。

不规范的fsm 写法很难让其他人解读,甚至过一段时间后设计者也发现很难维护。

需要说明的是以上所列的各项标准,特别是前3项标准绝不是割裂的,它们直接有紧密的内在联系,那就是fpga/cpld 设计评判的两个基本标准:面积和速度。这里“面积”是指一个设计所消耗fpga/cpld 的逻辑资源数量;“速度”指设计在芯片上稳定运行所能够达到的最高频率。

两者是对立统一的矛盾体,要求一个设计同时具备设计面积最小,运行频率最高,这是不现实的。科学的设计目标应该是:在满足设计时序要求(包含对设计最高频率的要求)的前提下,占用最小的芯片面积,或者在所规定的面积下,使设计的时序余量更大,频率更高。

另外,如果要求fsm 安全,则很多时候需要使用“full case”的编码方式,即将状态转移变量的所有向量组合情况都在fsm 中有相应的处理,这经常势必意味着要多花更多的设计资源,有时也会影响fsm的频率。所以,各条标准要综合考虑,根据设计的要求进行权衡。但是如果各条评判标准发生冲突时,请按照标准的罗列顺序考虑,前文标准的罗列顺序是根据这些标准在设计中的重要性排列的,也就是说第一条“fsm 要安全,稳定性高”的优先级最高,最重要;第四条“fsm 设计要清晰易懂、易维护”的优先级最低,是相对次要的标准。

推荐的状态机描述方法。

状态机描述时关键是要描述清楚前面提到的几个状态机的要素,即如何进行状态转移;每个状态的输出是什么;状态转移是否和输入条件相关等。具体描述时方法各种各样,有的设计者习惯将整个状态机写到1 个always 模块里面,在该模块中即描述状态转移,又描述状态的输入和输出,这种写法一般被称为一段式fsm 描述方法;还有一种写法是将用2 个always 模块,其中一个always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律,这种写法被称为两段式fsm 描述方法;还有一种写法是在两段式描述方法基础上发展出来的,这种写法使用3 个always 模块,一个always模块采用同步时序描述状态转移;第二个采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always 模块使用同步时序电路描述每个状态的输出,这种写法本书称为三段式写法。

一般而言,推荐的fsm 描述方法是后两种,即两段式和三段式fsm 描述方法。其原因为:fsm 和其他设计一样,最好使用同步时序方式设计,以提高设计的稳定性,消除毛刺。

状态机实现后,一般来说,状态转移部分是同步时序电路而状态的转移条件的判断是组合逻辑。两段式之所以比一段式编码合理,就在于两段式编码将同步时序和组合逻辑分别放到不同的always 程序块中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化**,利于用户添加合适的时序约束条件,利于布局布线器实现设计。

而一段式fsm 描述不利于时序约束、功能更改、调试等,而且不能很好的表示米勒fsm 的输出,容易写出latches,导致逻辑功能错误。

在一般两段式描述中,为了便于描述当前状态的输出,很多设计者习惯将当前状态的输出用组合逻辑实现。但是这种组合逻辑仍然有产生毛刺的可能性,而且不利于约束,不利于综合器和布局布线器实现高性能的设计。因此如果设计运行额外的一个时钟节拍的插入(latency),则要求尽量对状态机的输出用寄存器寄存一拍。

但是很多实际情况不允许插入一个寄存节拍,此时则可以通过三段式描述方法进行解决。三段式与两段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。

一段式描述方法将状态转移判断的组合逻辑和状态寄存器转移的时序逻辑混写在同一个always 模块中,不符合将时序和组合逻辑分开描述的coding style(**风格),而且在描述当前状态时要考虑下个状态的输出,整个**不清晰,不利于维护修改,并且不利于附加约束,不利于综合器和布局布线器对设计的优化。

另外,这种描述相对于两段式描述比较冗长。本例为了便于初学者掌握,选择了一个非常简单的米勒型状态机,不能很好的反应一段式比较冗长的缺点,但是如果状态机相对复杂些,一般来说,一段式**长度会比两段式冗长大约80%到150%左右。所以一段式fsm 描述是不推荐的fsm 描述方式,请读者一定要避免。

推荐在敏感表下的默认状态为不定状态x,这样描述的好处有两个:第一在**时可以很好的考察所设计的fsm 的完备性,如果所设计的fsm 不完备,则会进入任意状态,**很容易发现;第二个好处是综合器对不定态x 的处理是“don’t care”,即任何没有定义的状态寄存器向量都会被忽略。这里赋值不定态的效果和使用casez 或ca*** 替代case 的效果非常相似。

组合逻辑容易产生毛刺,因此如果时序允许,请尽量对组合逻辑的输出插入一个寄存器节拍,这样可以很好的保证输出信号的稳定性。

三段式状态机描述方法(推荐写法)

两段式fsm 描述方法虽然有很多好处,但是它有一个明显的弱点就是其输出一般使用组合逻辑描述,而组合逻辑易产生毛刺等不稳定因素,并且在fpga/cpld 等逻辑器件中过多的组合逻辑会影响实现的速率(这点与asic 设计不同)。所以在上节我们特别提到了在两段式fsm 描述方法中,如果时序允许插入一个额外的时钟节拍,则尽量在在后级电路对fsm 的组合逻辑输出用寄存器寄存一个节拍,则可以有效地消除毛刺。但是很多情况下,设计并不允许额外的节拍插入(latency),此时,解决之道就是采用3 段式fsm 描述方法。

三段式描述方法与两段式描述方法相比,关键在于使用同步时序逻辑寄存fsm 的输出。

对比一下上节两段式fsm 的描述,读者可以清晰发现三段式与两段式fsm 描述的最大区别在于两段式采用了组合逻辑输出,而三段式巧妙地根据下一状态的判断,用同步时序逻。

辑寄存fsm 的输出。

有的读者可能会问,一段式写法也是用寄存器同步了fsm 的输出,为什么前面介绍一段式的输出**容易混淆,不利于维护呢?

使用一段式建模fsm 的寄存器输出的时候,必须要综合考虑现态在何种状态转移条件下会进入哪些次态,然后在每个现态的case 分支下分别描述每个次态的输出,这显然不符合思维习惯;而三段式建模描述fsm 的状态机输出时,只需指定case 敏感表为次态寄存器,然后直接在每个次态的case 分支中描述该状态的输出即可,根本不用考虑状态转移条件。本例的fsm 很简单,如果设计的fsm 相对复杂,三段式的描述优势就会凸显出来。

另一方面,三段式描述方法与两段式描述相比,虽然**结构复杂了一些,但是换来的优势是使fsm 做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在fpga/cpld 等可编程逻辑器件上的综合与布局布线效果更佳。

请读者注意,在三段式fsm 描述方法中,判断状态转移的always 模块的case 语句判断的条件是当前状态“cs”而在同步时序fsm 输出的always 模块的case 语句判断的条件是下一状态“ns”。

一般来说,笔者推。

荐使用后两种结构建模。这是因为:两段式思路建模结构清晰,描述简洁,便于约束,而且如果允许输出逻辑允许插入一个节拍,就可以通过插入输出寄存器改善输出逻辑的时序并避免组合逻辑的毛刺;三段式思路建模结构清晰,格式化的结构,解决了不改变时序要求的前提下用寄存器做状态输出的问题。

三段式与一段式的最大区别在于:使用一段式建模fsm 的寄存器输出的时候,必须要综合考虑现态在何种状态转移条件下会进入哪些次态,然后在每个现态的case 分支下分别描述每个次态的输出,这显然不符合思维习惯;而三段式建模描述fsm 的状态机输出时,只需指定case 敏感表为次态寄存器,然后直接在每个次态的case 分支中描述该状态的输出即可,根本不用考虑状态转移条件。对于简单的fsm,三段式建模的寄存器输出的优势还不是十分明显,但是对于复杂一些的fsm,三段式建模的优势就会十分显著。

英语数字前缀

英语拉丁语希腊语 one uni mono two du bi dis dy dithree tritri four quadr quart tetrafive quint penta six sex t hexa seven sept hept a eight octo octo nine nov...

科技英语数字前缀

1.one 一 希腊前缀mono monologue独白monogamy一夫一妻制monochrome单色的。2.two 二 拉丁前缀bi bilingual双语的bilateral双边的bimonthly两月一次的。希腊前缀di dioxide二氧化物disyllable双音节词digraph双字...

电信公司市场前端营销岗位竞聘方案

为加强市场前端营销分析工作,打造专业 高效 精干专业人才队伍,有效支撑公司全业务经营的快速发展,经州分公司研究决定开展州分公司市场前端部分岗位竞聘工作,具体事宜如下 一 组织领导。州分公司成立竞聘工作领导小组,由州分公司分管领导 人力资源部 市场部负责人组成竞聘工作领导小组,负责此次竞聘工作的监督 ...