您的当前位置:首页正文

数字IC设计经典笔试题

2024-10-18 来源:威能网
- -

数字IC设计经典笔试题

戎王舵鹏程王福生袁波

摘要

本文搜集了近年来数字IC设计公司的经典笔试题目,容涵盖FPGA、VerilogHDL编程和IC设计根底知识。

Abstract

This article includes some classical tests which have been introduced into interview by panies in digital IC designing in recent years. These tests are varied from FPGA,verlog HDL to base knowledge in IC designing.

关键词

FPGA VerilogHDL IC设计 引言

近年来,国的IC设计公司逐渐增多,IC公司对人才的要求也不断提高,不仅反映在对相关工程经历的要求,更表达在专业笔试题目难度的增加和广度的延伸。为参加数字IC设计公司的笔试做准备,我们需要提前熟悉那些在笔试中出现的经典题目。

IC设计根底

1:什么是同步逻辑和异步逻辑?

同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入 x 有无变化,状态表中的每个状态都是稳定的。 异步时序逻辑电路的特点:电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的变化直接引起。

2:同步电路和异步电路的区别:

同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。

异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,只有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。

3:时序设计的实质:

时序设计的实质就是满足每一个触发器的建立/保持时间的要求。

4:建立时间与保持时间的概念?

. . word.zl

- -

建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。 保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。

5:为什么触发器要满足建立时间和保持时间?

因为触发器部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。

〔比拟容易理解的方式〕换个方式理解:需要建立时间是因为触发器的D端像一个锁存器在承受数据,为了稳定的设置前级门的状态需要一段稳定时间;需要保持时间是因为在时钟沿到来之后,触发器要通过反响来锁存状态,从后级门传到前级门需要时间。

6:什么是亚稳态?为什么两级触发器可以防止亚稳态传播?

这也是一个异步电路同步化的问题。亚稳态是指触发器无法在某个规定的时间段到达一个可以确认的状态。使用两级触发器来使异步电路同步化的电路其实叫做“一位同步器〞,他只能用来对一位异步信号进展同步。两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。 更确切地说,输入脉冲宽度必须大于同步时钟周期与第一级触发器所需的保持时间之和。最保险的脉冲宽度是两倍同步时钟周期。所以,这样的同步电路对于从较慢的时钟域来的异步信号进入较快的时钟域比拟有效,对于进入一个较慢的时钟域,那么没有作用。

7:对于多位的异步信号如何进展同步?

对以一位的异步信号可以使用“一位同步器进展同步〞〔使用两级触发器〕,而对于多位的异步信号,可以采用如下方法:1:可以采用保持存放器加握手信号的方法〔多数据,控制,地址〕;2:特殊的具体应用电路构造,根据应用的不同而不同;3:异步FIFO。〔最常用的缓存单元是DPRAM〕

8:锁存器〔latch〕和触发器〔flip-flop〕区别? 电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。

有穿插耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器那么决定了保持时间。

9:什么是时钟抖动?

时钟抖动是指芯片的某一个给定点上时钟周期发生暂时性变化,也就是说时钟周期在不同的周期上可能加长或缩短。它是一个平均值为0的平均变量。

10:寄生效应在IC设计中怎样加以克制和利用〔这是我的理解,原题好似是说,IC设计过

. . word.zl

- -

程中将寄生效应的怎样反响影响设计师的设计方案〕?

所谓寄生效应就是那些溜进你的PCB并在电路施破坏、令人头痛、原因不明的小故障。它们就是渗入高速电路中隐藏的寄生电容和寄生电感。其中包括由封装引脚和印制线过长形成的寄生电感;焊盘到地、焊盘到电源平面和焊盘到印制线之间形成的寄生电容;通孔之间的相互影响,以及许多其它可能的寄生效应。

理想状态下,导线是没有电阻,电容和电感的。而在实际中,导线用到了金属铜,它有一定的电阻率,如果导线足够长,积累的电阻也相当可观。两条平行的导线,如果互相之间有电压差异,就相当于形成了一个平行板电容器〔你想象一下〕。通电的导线周围会形成磁场〔特别是电流变化时〕,磁场会产生感生电场,会对电子的移动产生影响,可以说每条实际的导线包括元器件的管脚都会产生感生电动势,这也就是寄生电感。

在直流或者低频情况下,这种寄生效应看不太出来。而在交流特别是高频交流条件下,影响就非常巨大了。根据复阻抗公式,电容、电感会在交流情况下会对电流的移动产生巨大阻碍,也就可以折算成阻抗。这种寄生效应很难克制,也难摸到。只能通过优化线路,尽量使用管脚短的SMT元器件来减少其影响,要完全消除是不可能的。

11:什么是\"线与\"逻辑,要实现它,在硬件特性上有什么具体要求?

线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用oc门来实现,由于不用oc门可能使灌电流过大,而烧坏逻辑门. 同时在输出端口应加一个上拉电阻。oc门就是集电极开路门。od门是漏极开路门。

12:什么是竞争与冒险现象?怎样判断?如何消除? 在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一集合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误的现象叫做冒险。〔也就是由于竞争产生的毛刺叫做冒险〕。

判断方法:代数法〔如果布尔式中有相反的信号那么可能产生竞争和冒险现象〕;卡诺图:有两个相切的卡诺圈并且相切处没有被其他卡诺圈包围,就有可能出现竞争冒险;实验法:示波器观测;

解决方法:1:加滤波电容,消除毛刺的影响;2:加选通信号,避开毛刺;3:增加冗余项消除逻辑冒险。

门电路两个输入信号同时向相反的逻辑电平跳变称为竞争;

由于竞争而在电路的输出端可能产生尖峰脉冲的现象称为竞争冒险。

如果逻辑函数在一定条件下可以化简成Y=A+A’或Y=AA’那么可以判断存在竞争冒险现象〔只是一个变量变化的情况〕。

消除方法,接入滤波电容,引入选通脉冲,增加冗余逻辑

13:你知道那些常用逻辑电平?TTL与S电平可以直接互连吗?

常用逻辑电平:TTL、CMOS、LVTTL、LVCMOS、ECL〔Emitter Coupled Logic〕、PECL〔Pseudo/Positive Emitter Coupled Logic〕、LVDS〔Low Voltage Differential Signaling〕、GTL〔Gunning Transceiver Logic〕、BTL〔Backplane Transceiver Logic〕、ETL〔enhanced transceiver logic〕、GTLP〔Gunning Transceiver Logic Plus〕;RS232、RS422、RS485〔12V,5V,3.3V〕; 也有一种答案是:常用逻辑电平:12V,5V,3.3V。 TTL和CMOS 不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS那么是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到 CMOS需要在输出端口加一

. . word.zl

- -

上拉电阻接到5V或者12V。

用CMOS可直接驱动TTL;加上拉电阻后,TTL可驱动CMOS.

上拉电阻用途:

a、当TTL电路驱动S电路时,如果TTL电路输出的高电平低于S电路的最低高电平〔一般为3.5V〕,这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 b、OC门电路必须加上拉电阻,以提高输出的高电平值。

c、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。

d、在S芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供泄荷通路。

e、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。

f、提高总线的抗电磁干扰能力。管脚悬空就比拟容易承受外界的电磁干扰。

g、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。

上拉电阻阻值的选择原那么包括:

a、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。 b、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。

c、对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑以上三点,通常在1k到10k之间选取。对下拉电阻也有类似道理。

OC门电路必须加上拉电阻,以提高输出的高电平值。

OC门电路要输出“1〞时才需要加上拉电阻不加根本就没有高电平

在有时我们用OC门作驱动〔例如控制一个 LED〕灌电流工作时就可以不加上拉电阻 总之加上拉电阻能够提高驱动能力。

14:IC设计中同步复位与异步复位的区别?

同步复位在时钟沿变化时,完成复位动作。异步复位不管时钟,只要复位信号满足条件,就完成复位动作。异步复位对复位信号要求比拟高,不能有毛刺,如果其与时钟关系不确定,也可能出现亚稳态。

15:MOORE 与 MEELEY状态机的特征?

Moore 状态机的输出仅与当前状态值有关, 且只在时钟边沿到来时才会有状态变化。 Mealy 状态机的输出不仅与当前状态值有关, 而且与当前输入值有关。

16:多时域设计中,如何处理信号跨时域?

不同的时钟域之间信号通信时需要进展同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响。

信号跨时钟域同步:当单个信号跨时钟域时,可以采用两级触发器来同步;数据或地址总线跨时钟域时可以采用异步FIFO来实现时钟同步;第三种方法就是采用握手信号。

17:说说静态、动态时序模拟的优缺点?

静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和

. . word.zl

- -

最小路径延时的分析,找出违背时序约束的错误。它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用存较少,不仅可以对芯片设计进展全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。

动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题;

18:一个四级的Mux,其中第二级信号为关键信号如何改善timing.?

关键:将第二级信号放到最后输出一级输出,同时注意修改片选信号,保证其优先级未被修改。

19:给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入, 使得输出依赖于关键路径?

关键路径就是输入到输出延时最大的路径,找到了关键路径便能求得最大时钟频率。

20:为什么一个标准的倒相器中P管的宽长比要比N管的宽长比大?

和载流子有关,P管是空穴导电,N管是电子导电,电子的迁移率大于空穴,同样的电场下,N管的电流大于P管,因此要增大P管的宽长比,使之对称,这样才能使得两者上升时间下降时间相等、上下电平的噪声容限一样、充电放电的时间相等。

21:用一个二选一mux和一个inv实现异或?

其中:B连接的是地址输入端,A和A非连接的是数据选择端,F对应的的是输出端,使能端固定接地置零(没有画出来). Y=BA’+B’A

利用4选1实现F(x,y,z)=xz+yz'

F(x,y,z)=xyz+xy’z+xyz'+x’yz’=x’y’0+x’yz’+xy’z+xy1 Y=A’B’D0+A’BD1+AB’D2+ABD3 所以D0=0,D1=z’,D2=z,D3=1

22:latch与register的区别,为什么现在多用register.行为级描述中latch如何产生的?

latch是电平触发,register是边沿触发,register在同一时钟边沿触发下动作,符合同步电路的设计思想,而latch那么属于异步电路设计,往往会导致时序分析困难,不适当的应用latch那么会大量浪费芯片资源。

23:SRAM,FALSH MEMORY,DRAM,SSRAM及SDRAM的区别?

SRAM:静态随机存储器,存取速度快,但容量小,掉电后数据会丧失,不像DRAM 需要不停的REFRESH,制造本钱较高,通常用来作为快取(CACHE) 记忆体使用。 FLASH:闪存,存取速度慢,容量大,掉电后数据不会丧失

DRAM:动态随机存储器,必须不断的重新的加强(REFRESHED) 电位差量,否那么电位差将降低至无法有足够的能量表现每一个记忆单位处于何种状态。价格比SRAM廉价,但速度较慢,耗电量较大,常用作计算机的存使用。

SSRAM:即同步静态随机存取存储器。对于SSRAM的所有都在时钟的上升/下降沿启动。地址、数据输入和其它控制信号均于时钟信号相关。

. . word.zl

- -

SDRAM:即同步动态随机存取存储器。

24:如何防止亚稳态?

亚稳态是指触发器无法在某个规定时间段到达一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

解决方法:

a 降低系统时钟频率 b 用反响更快的FF

c 引入同步机制,防止亚稳态传播〔可以采用前面说的加两级触发器〕。 d 改善时钟质量,用边沿变化快速的时钟信号

25:基尔霍夫定理的容

基尔霍夫定律包括电流定律和电压定律:

电流定律:在集总电路中,在任一瞬时,流向某一结点的电流之和恒等于由该结点流出的电流之和。

电压定律:在集总电路中,在任一瞬间,沿电路中的任一回路绕行一周,在该回路上电动势之和恒等于各电阻上的电压降之和。

26:描述反响电路的概念,列举他们的应用。

反响,就是在电路系统中,把输出回路中的电量〔电压或电流〕输入到输入回路中去。 反响的类型有:电压串联负反响、电流串联负反响、电压并联负反响、电流并联负反响。 负反响的优点:降低放大器的增益灵敏度,改变输入电阻和输出电阻,改善放大器的线性和非线性失真,有效地扩展放大器的通频带,自动调节作用。 电压负反响的特点:电路的输出电压趋向于维持恒定。 电流负反响的特点:电路的输出电流趋向于维持恒定。

27:有源滤波器和无源滤波器的区别

无源滤波器:这种电路主要有无源元件R、L和C组成

有源滤波器:集成运放和R、C组成,具有不用电感、体积小、重量轻等优点。 集成运放的开环电压增益和输入阻抗均很高,输出电阻小,构成有源滤波电路后还具有一定的电压放大和缓冲作用。但集成运放带宽有限,所以目前的有源滤波电路的工作频率难以做得很高。

FPGA

1:系统最高速度计算〔最快时钟频率〕和流水线设计思想:

同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间处理的数据量就愈大。假设Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco=Tsetpup+Thold);Tdelay是组合逻辑的延时;Tsetup是D触发器的建立时间。假设数据已被时钟打入D触发器,那么数据到达第一个触发器的

. . word.zl

- -

Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,那么时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。FPGA开发软件也是通过这种方法来计算系统最高运行速度Fmax。因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用一样的时钟,就可以防止在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是所谓\"流水线\"技术的根本设计思想,即原设计速度受限局部用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上参加延时,另外硬件面积也会稍有增加。

2:时序约束的概念和根本策略?

时序约束主要包括周期约束,偏移约束,静态时序路径约束三种。通过附加时序约束可以综合布线工具调整映射和布局布线,使设计到达时序要求。 附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。附加全局约束时,首先定义设计的所有时钟,对各时钟域的同步元件进展分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD路径附加约束。附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。

3:附加约束的作用?

提高设计的工作频率〔减少了逻辑和布线延时〕;2:获得正确的时序分析报告;〔静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具可以正确的输出时序报告〕3:指定FPGA/CPLD的电气标准和引脚位置。

4:FPGA设计工程师努力的方向:

SOPC,高速串行I/O,低功耗,可靠性,可测试性和设计验证流程的优化等方面。

随着芯片工艺的提高,芯片容量、集成度都在增加,FPGA设计也朝着高速、高度集成、低功耗、高可靠性、高可测、可验证性开展。芯片可测、可验证,正在成为复杂设计所必备的条件,尽量在上板之前查出bug,将发现bug的时间提前,这也是一些公司花大力气设计仿真平台的原因。另外随着单板功能的提高、本钱的压力,低功耗也逐渐进入FPGA设计者的考虑围,完成一样的功能下,考虑如何能够使芯片的功耗最低,据说altera、xilinx都在根据自己的芯片特点整理如何降低功耗的文档。高速串行IO的应用,也丰富了FPGA的应用围,象xilinx的v2pro中的高速链路也逐渐被应用。

5:FPGA芯片有哪两种存储器资源? FPGA芯片有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的部存储器〔也就是分布式RAM〕。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK

. . word.zl

- -

RAM资源是其块大小的整数倍。

6:FPGA设计中对时钟的使用?〔例如分频等〕

FPGA芯片有固定的时钟路由,这些路由能有减少时钟抖动和偏差。需要对时钟进展相位移动或变频的时候,一般不允许对时钟进展逻辑操作,这样不仅会增加时钟的偏差和抖动,还会使时钟带上毛刺。一般的处理方法是采用FPGA芯片自带的时钟管理器如PLL,DLL或DCM,或者把逻辑转换到触发器的D输入〔这些也是对时钟逻辑操作的替代方案〕。

7:FPGA设计中如何实现同步时序电路的延时? 首先说说异步电路的延时实现:异步电路一半是通过加buffer、两级与非门等来实现延时〔我还没用过所以也不是很清楚〕,但这是不适合同步电路实现延时的。在同步电路中,对于比拟大的和特殊要求的延时,一半通过高速时钟产生计数器,通过计数器来控制延时;对于比拟小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。

8:FPGA中可以综合实现为RAM/ROM/CAM的三种资源及其考前须知? 三种资源:BLOCK RAM,触发器〔FF〕,查找表〔LUT〕; 考前须知: a:在生成RAM等存储单元时,应该首选BLOCK RAM 资源;其原因有二:第一:使用BLOCK RAM等资源,可以节约更多的FF和4-LUT等底层可编程单元。使用BLOCK RAM可以说是“不用白不用〞,是最大程度发挥器件效能,节约本钱的一种表达;第二:BLOCK RAM是一种可以配置的硬件构造,其可靠性和速度与用LUT和REGISTER构建的存储器更有优势。

b:弄清FPGA的硬件构造,合理使用BLOCK RAM资源; c:分析BLOCK RAM容量,高效使用BLOCK RAM资源; d:分布式RAM资源〔DISTRIBUTE RAM〕

9:查找表的原理与构造?

查找表〔look-up-table〕简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进展逻辑运算就等于输入一个地址进展查表,找出地址对应的容,然后输出即可

10:IC设计前端到后端的流程和EDA工具?

设计前端也称逻辑设计,后端设计也称物理设计,两者并没有严格的界限,一般涉及到与工艺有关的设计就是后端设计。

a:规格制定:客户向芯片设计公司提出设计要求。

b:详细设计:芯片设计公司〔Fabless〕根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。目前架构的验证一般基于systemC语言,对价后模型的仿真可以使用systemC的仿真工具。例如:CoCentric和Visual Elite等。 c:HDL编码:设计输入工具:ultra ,visual VHDL等 d:仿真验证:modelsim e:逻辑综合:synplify

. . word.zl

- -

f:静态时序分析:synopsys的Prime Time g:形式验证:Synopsys的Formality.

Verilog

1:HDL语言的层次概念?

HDL语言是分层次的、类型的,最常用的层次概念有系统与标准级、功能模块级,行为级,存放器传输级和门级。

系统级,算法级,RTL级(行为级),门级,开关级

2:设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零, a.画出fsm〔有限状态机〕

b.用verilog编程,语法要符合FPGA设计的要求 c.设计工程中可使用的工具及设计大致过程? 设计过程:

a、首先确定输入输出,A=1表示投入10分,B=1表示投入5分,Y=1表示弹出饮料,Z=1表示找零。

b、确定电路的状态,S0表示没有进展投币,S1表示已经有5分硬币。 c、画出状态转移图。

module sell(clk,rst,a,b,y,z); input clk,rst,a,b; output y,z;

parameter s0=0,s1=1; reg state,next_state;

always(posedge clk) begin if(!rst) state<=s0; else

state<=next_state; end

always(a or b or cstate) begin

y=0;z=0; case(state)

s0: if(a==1&&b==0) next_state=s1; else if(a==0&&b==1) begin

next_state=s0; y=1; end else

next_state=s0;

. . word.zl

- -

s1: if(a==1&&b==0) begin

next_state=s0;y=1; end

else if(a==0&&b==1) begin

next_state=s0; y=1;z=1; end else

next_state=s0;

default: next_state=s0; endcase end

endmodule

2:用D触发器做个二分频的电路?画出逻辑电路? module div2(clk,rst,clk_out); input clk,rst;

output reg clk_out; always(posedge clk) begin if(!rst)

clk_out <=0; else

clk_out <=~ clk_out; end

endmodule

现实工程设计中一般不采用这样的方式来设计,二分频一般通过DCM来实现。通过DCM得到的分频信号没有相位差。

或者是从Q端引出加一个反相器。

3:用你熟悉的设计方式设计一个可预置初值的7进制循环计数器,15进制的呢? module counter7(clk,rst,load,data,cout); input clk,rst,load; input [2:0] data;

output reg [2:0] cout;

always(posedge clk) begin if(!rst)

cout<=3’d0; else if(load)

. . word.zl

- -

cout<=data;

else if(cout>=3’d6) cout<=3’d0; else

cout<=cout+3’d1; end

endmodule

4:用Verilog或VHDL写一段代码,实现消除一个glitch〔毛刺〕? 将传输过来的信号经过两级触发器就可以消除毛刺。〔这是我自己采用的方式:这种方式消除毛刺是需要满足一定条件的,并不能保证一定可以消除〕 module(clk,data,q_out) input clk,data; output reg q_out; reg q1;

always(posedge clk) begin

q1<=data; q_out<=q1; end

endmodule

5、画出DFF的构造图,用verilog实现之。 module dff(clk,d,qout); input clk,d; output qout; reg qout;

always(posedge clk) begin if(!reset) qout<=0; else

qout<=d; end

endmodule

6、请用HDL描述四位的全加法器、5分频电路。 module adder4(a,b,ci,s,co); input ci;

input [3:0] a,b; output co; output [3:0] s;

assign {co,s}=a+b+ci; endmodule

. . word.zl

- -

module div5(clk,rst,clk_out); input clk,rst; output clk_out; reg [3:0] count; always(posedge clk) begin if(!rst) begin

count<=0; clk_out=0; end

else if(count==3’d5) begin

count<=0;

clk_out=~clk_out; end else

count<=count+1; end

endmodule

实现奇数倍分频且占空比为50%的情况: module div7 ( clk, reset_n, clkout ); input clk,reset_n; output clkout;

reg [3:0] count; reg div1; reg div2;

always ( posedge clk ) begin

if ( ! reset_n )

count <= 3'b000; else

case ( count )

3'b000 : count <= 3'b001; 3'b001 : count <= 3'b010; 3'b010 : count <= 3'b011; 3'b011 : count <= 3'b100; 3'b100 : count <= 3'b101; 3'b101 : count <= 3'b110; 3'b110 : count <= 3'b000; default :

count <= 3'b000;

. . word.zl

- -

endcase end

always ( posedge clk ) begin

if ( ! reset_n )

div1 <= 1'b0;

else if ( count == 3'b000 ) div1 <= ~ div1; end

always ( negedge clk ) begin

if ( ! reset_n )

div2 <= 1'b0;

else if ( count == 3'b100 ) div2 <= ~ div2; end

assign clkout = div1 ^ div2; endmodule

7、用VERILOG或VHDL写一段代码,实现10进制计数器。 module counter10(clk,rst,count); input clk,rst;

output [3:0] count; reg [3:0] count;

always(posedge clk) begin if(!rst) count<=0;

else if(count>=4’d9) count<=0; else

count<=count+1; end

endmodule

完毕语

对以上问题反复演练必将在今后的数字IC设计公司的笔试中获得好成绩。

参考文献 百度百科

. . word.zl

因篇幅问题不能全部显示,请点此查看更多更全内容