9.19 verilog学习

断情绝性 同时被 2 个专栏收录
13 篇文章 2 订阅
10 篇文章 4 订阅

9.19verilog100题学习

8.FPGA和CPLD的区别?

FPGACPLD

在这里插入图片描述
1、FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
2、CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
3、FPGA和CPLD的区别:
①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。
④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编 程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其 优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
⑧CPLD保密性好,FPGA保密性差。
⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
随著复杂可编程逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市常许多设计人员已经感受到 CPLD容易使用。时序可预测和速度高等优点,然而,在过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度 高达数十万门的CPLD所带来的好处。

9:锁存器(latch)和触发器(flip-flop)区别?

电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。

有交叉耦合的门构成的双稳态的存储原件称为触发器。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。
D触发器的构成:
TTL:4个与非门 加一个反相器
COMS:两个反相器和两个传输门

10:FPGA芯片内有哪两种存储器资源?

FPGA芯片内有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器(也就是分布式RAM)。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。Xilinx 18Kb 和 36Kb

11:什么是时钟抖动?

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

12:FPGA设计中对时钟的使用?(例如分频等)

首先得知道什么是路由。所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作
FPGA芯片有固定的时钟路由,这些路由能有减少时钟抖动和偏差。需要对时钟进行相位移动或变频的时候,一般不允许对时钟进行逻辑操作,这样不仅会增加时钟的偏差和抖动,还会使时钟带上毛刺。一般的处理方法是采用FPGA芯片自带的时钟管理器如PLL,DLL或DCM,或者把逻辑转换到触发器的D输入(这些也是对时钟逻辑操作的替代方案)。
如果使用触发器做生成时钟的话 :可以使用时钟原语,改善时钟性能

13:FPGA设计中如何实现同步时序电路的延时?

首先说说异步电路的延时实现:异步电路一半是通过加buffer、两级与非门等来实现延时(尽量不要用),但这是不适合同步电路实现延时的。在同步电路中,对于比较大的和特殊要求的延时,一半通过高速时钟产生计数器,通过计数器来控制延时;对于比较小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。

14:FPGA中可以综合实现为RAM/ROM/CAM的三种资源及其注意事项?

三种资源:BLOCK RAM,触发器(FF),查找表(LUT);

注意事项:

1:在生成RAM等存储单元时,应该首选BLOCK RAM 资源;其原因有二:第一:使用BLOCK RAM等资源,可以节约更多的FF和4-LUT等底层可编程单元。使用BLOCK RAM可以说是“不用白不用”,是最大程度发挥器件效能,节约成本的一种体现;第二:BLOCK RAM是一种可以配置的硬件结构,其可靠性和速度与用LUT和REGISTER构建的存储器更有优势。

2:弄清FPGA的硬件结构,合理使用BLOCK RAM资源;

3:分析BLOCK RAM容量,高效使用BLOCK RAM资源;

4:分布式RAM资源(DISTRIBUTE RAM)

15:Xilinx中与全局时钟资源和DLL相关的硬件原语:

时钟网络连接
常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG,IBUFGDS,BUFG,BUFGP,BUFGCE,BUFGMUX,BUFGDLL,DCM等。
IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUFG单元,否则在布局布线时会报错。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多种格式的IO标准。[理解就是任何时钟信号 在管脚分配步骤中,都必须映射在FPGA的全局时钟管脚上,同时在编程逻辑中必须使用IBUFG对该全局时钟引脚进来的信号进行缓冲]

IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。

BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源,目的是减少信号的传输延时,提高驱动能力,对于时序电路中的关键时钟信号,这是非常重要的,关系到系统设计的成功与否。如果内部产生的时钟,只在局部模块使用,可以考虑不使用BUFG。一个BUFG只能驱动一个时钟。

全局时钟资源必须满足的重要原则是:使用IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。**换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;**如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。

BUFGCE是带有时钟使能端的全局缓冲。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。

BUFGMUX是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。当S为低电平时输出时钟为I0,反之为I1。需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。

BUFR是区域时钟缓冲,BUFR我在SPARTAN6的时钟资源手册UG382里没有看到,应该是没有啊。BUFR是区域时钟缓冲器,要进入区域时钟网络,必须例化BUFR。一个BUFR最多可以驱动三个相邻的时钟区域中的区域时钟。顶部和底部区域中BUFR只能连接相邻的一个时钟区域,也就是说,顶部的BUFR连接它所在的下面一个相邻区域。底部的BUFR只能连接它所在的上边一个相邻区域。因此,底部和顶部BUFR的作用区域为两个时钟区域。

BUFIO是用来驱动I/O列内的专用时钟网络:,这个专用的时钟网络独立于全局时钟资源,适合采集源同步数据。BUFIO只能由位于同一时钟区域的Clock-Capable I/O驱动。一个时钟区域有4个BUFIO,其中的2个可以驱动相邻区域的I/O时钟网络。BUFIO不能驱动逻辑资源(CLB、BRAM等),因为I/O时钟网络只存在于I/O列中。

全局时钟资源的使用方法 全局时钟资源的使用方法(五种)

1:IBUFG + BUFG的使用方法:

IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。

IBUFGDS + BUFG的使用方法:
当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。

IBUFG + DCM + BUFG的使用方法:
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。

Logic + BUFG的使用方法:
BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO的输入或普通片内信号进入全局时钟布线层需要一个固有的延时,一般在 10ns左右,即普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。

5. Logic + DCM + BUFG的使用方法:

DCM同样也可以控制并变换普通时钟信号,即DCM的输入也可以是普通片内信号。使用全局时钟资源的注意事项全局时钟资源必须满足的重要原则是:使用 IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用 IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。

16:HDL语言层次

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

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

16:查找表的原理与结构?

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

17:寄生效应在IC设计中怎样加以克服和利用(这是我的理解,原题好像是说,IC设计过

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

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

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

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

18:用flip-flop和logic-gate设计一个1位加法器,输入carryin和current-stage,输出carryout和next-stage?半加器,全加器略

19:自动售卖机

自动售卖机三段式代码,时间情况直接写一段两端都行

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

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

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

常用逻辑电平: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需要在输出端口加一上拉电阻接到5V或者12V。

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

上拉电阻用途:

1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。

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

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

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

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

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

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

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

1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。

2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。

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

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

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

在有时我们用OC门作驱动(例如控制一个 LED)灌电流工作时就可以不加上拉电阻

总之加上拉电阻能够提高驱动能力。

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

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

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

静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径, 计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。它不需 要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此 静态时序分析已经越来越多地被用到数字集成电路设计的验证中。

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

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

关键路径就是输入到输出延时最大的路径,找到了关键路径便能求得最大时钟频率。,注意:同一时钟,需要减去时钟路径延迟

在这里插入图片描述

25:画出NOT,NAND,NOR的符号,真值表,还有transistor level(晶体管级)的电路?略

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

F = AB + AB;
F= m1B+m0B;
S=A ,D0=B,D0=B;

27:画出CMOS电路的晶体管级电路图,实现Y=A*B+C(D+E).?使用与非门或者或非门实现

  • 1:变与或
  • 2:1.两次摩根 得到与非与非门
  • 3: 1.两次对偶 得到或与门,把第一次对偶打开化简
  • 4:3.两次摩根得到或非或非门
    例外:对于特定元器件要求,需要把其中一些元素看成一个整体保留下来

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

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

29.状态图是以几何图形的方式来描述时序逻辑电路的状态转移规律以及输出与输入的关系。

30. 用你熟悉的设计方式设计一个可预置初值的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)
        cout<=data;      
        else if(cout>=3’d6)
        cout<=3’d0;
        else
        cout<=cout+3’d1;
    end
endmodule

31:SRAM,FALSHMEMORY,DRAM,SSRAM及SDRAM的区别?

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

FLASH:闪存,存取速度慢,容量大,掉电后数据不会丢失

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

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

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

此文的4种复用,均涉及到这4种资源。

32:有四种复用方式,频分多路复用,写出另外三种?

频分复用复用的是时隙、空间和码,划分的是载波带宽(频率上区分信道),即在同一时隙、同一空间、同一个正交码的情况下,将一个载波带宽划分为相互区别的、多个不同频点的子信道,分别传送不同的信号。

时分复用复用的是频率、空间和码,划分的是时间(时间上区分信道),即在同一频率、同一空间和同一正交码的情况下,按照时间划分不同的子信道,分别传送不同的信号。

码分复用复用的是频率、空间和时隙,划分的是正交码(根据码区分信道),即在同一频率、同一空间和同一时隙的情况下,按照正交码划分不同的子信道(正交码可以区分出不同的信道),分别传送不同的信号。
就是给用户M bit(位)码片,然后并且给所有的码片正交,对于任意两个不同的两个码片都有
码分复用需要发送的数据量为原先的 m 倍。因为本来可以发1、0、-1来表示用户发送的数据0和1以及其他用户发送的数据,现在需要用m位来表示用户和其他用户发送的数据;
这里是连接 :什么是码分复用

空分复用

33:如何防止亚稳态?

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

解决方法:

1 降低系统时钟频率

2 用反应更快的FF

3 引入同步机制,防止亚稳态传播(可以采用前面说的加两级触发器)。

4 改善时钟质量,用边沿变化快速的时钟信号

34:基尔霍夫定理的内容

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

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

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

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

反馈,就是在电路系统中,把输出回路中的电量(电压或电流)输入到输入回路中去。

反馈的类型有:电压串联负反馈、电流串联负反馈、电压并联负反馈、电流并联负反馈。

负反馈的优点:降低放大器的增益灵敏度,改变输入电阻和输出电阻,改善放大器的线性和非线性失真,有效地扩展放大器的通频带,自动调节作用。

电压负反馈的特点:电路的输出电压趋向于维持恒定。

电流负反馈的特点:电路的输出电流趋向于维持恒定。

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

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

有源滤波器:集成运放和R、C组成,具有不用电感、体积小、重量轻等优点。

集成运放的开环电压增益和输入阻抗均很高,输出电阻小,构成有源滤波电路后还具有一定的电压放大和缓冲作用。但集成运放带宽有限,所以目前的有源滤波电路的工作频率难以做得很高。

37:给了reg的setup,hold时间,求中间组合逻辑的delay范围。

Tdelay < Tperiod - Tsetup – Thold
Tperiod > Tsetup + Thold +Tdelay (用来计算最高时钟频率)

Tco= Tsetup + Thold 即触发器的传输延时

38:什么是竞争与冒险现象?怎样判断?如何消除?

在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一汇合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误的现象叫做冒险。(也就是由于竞争产生的毛刺叫做冒险)。

判断方法:

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

解决方法:

  • 1:加滤波电容,消除毛刺的影响(物理上);
  • 2:加选通信号,避开毛刺(配合触发器处理);
  • 3:增加冗余项消除逻辑冒险。
  • 4:通过触发器设置毛刺的门限,阻断毛刺的传播

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

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

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

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

滤毛刺时钟+触发器

  • 第一种方式的电路图如下所示,图中花了3个用于延时的D触发器,,只有大于3个周期,才能给出最后寄存器一个 0的输入,那么可以滤去30ns(3*10ns)一下的毛刺复位信号
    在这里插入图片描述
  • 延时器件
    如果不要依靠这个时钟的话,那么我们就引入一个延时元器件来滤毛刺,不过我没有实践过就说下大体方式吧。如果我要滤去100ns以下毛刺,那么就引入100ns延时器件,组成如下电路。
    在这里插入图片描述

异步复位/同步撤离

在这里插入图片描述
这种设计就比较好了
注意:在rst_work_n后面电路使用clk_work同步复位,这样保证同步释放复位,且开始复位也是同步的,但要保证率毛刺的电路的长度要大于多个个clk_work时钟周期,同步电路可以接收到复位信号

数字电路时钟无毛刺切换(选通信号)

链接:数字电路时钟无毛刺切换
/***************************************************

*无毛刺切换时钟,要点

  • 1、clkx_synx 复位后为0

  • 2、在高电平状态下不切换时钟

  • 3、同步寄存器为posedge 触发

  • 4、最后一级为 negedge 触发,确保切换发生在时钟为低电平

****************************************************/在这里插入图片描述

//可以好好看看
module clk_mux(
     input rst,
    input clk1,
    input clk2,
    input sel,  
    output m_clk
    );
    
    reg clk1_syn1;
    reg clk1_syn2;
 
    reg clk2_syn1;
    reg clk2_syn2;    
    
    /*同步寄存器*/
    always @(posedge clk1 or negedge rst)
    if(!rst)
        clk1_syn1 <= 1'b0;
    else
        clk1_syn1 <= sel & (~clk2_syn2);
 
    always @(negedge clk1 or negedge rst)
    if(!rst)
        clk1_syn2 <= 1'b0;
    else
        clk1_syn2 <= clk1_syn1;    
        
    /*同步寄存器*/    
    always @(posedge clk2 or negedge rst)
    if(!rst)
        clk2_syn1 <= 1'b0;
    else
        clk2_syn1 <= (~sel) & (~clk1_syn2);
 
    always @(negedge clk2 or negedge rst)
    if(!rst)
        clk2_syn2 <= 1'b0;
    else
        clk2_syn2 <= clk2_syn1;    
        
    assign m_clk = (clk1 & clk1_syn2) | (clk2 & clk2_syn2); 
endmodule

仿真实测没有问题

39 名词解释

CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,电压控制的一种放大器件是组成CMOS数字集成电路的基本单元。

MCU(Micro Controller Unit)中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时数计器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。

RISC(reduced instruction set computer,精简指令集计算机是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。

CISC是复杂指令系统计算机(Complex Instruction Set Computer)的简称,微处理器是台式计算机系统的基本处理部件,每个微处理器的核心是运行指令的电路。指令由完成任务的多个步骤所组成,把数值传送进寄存器或进行相加运算。

**DSP(digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。**其工作原理是接收模拟信号,转换为0或1的数字信号。 再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千 万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。

FPGA(Field-Programmable GateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。与门阵列等其它ASIC(ApplicationSpecific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点

PCI(Peripheral Component Interconnect) 外围组件互连,一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准。

ECC是“Error Correcting Code”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。

**DDR=Double Data Rate双倍速率同步动态随机存储器。**严格的说DDR应该叫DDR SDRAM,人们习惯称为DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器。

IRQ全称为Interrupt Request,即是“中断请求”的意思(以下使用IRQ称呼)。IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,用来停止其相关硬件的工作状态

USB ,是英文Universal Serial BUS(通用串行总线)的缩写,而其中文简称为“通串线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。

BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统" 其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制

40. 奇偶分频电路

例题:

偶分频

  • 方法1:直接计数
//N倍分频
reg en=0;
reg [31:0] cnt = 0;
reg clk_o = 0;
always@(psoedge clk_i)
	begin
		if(cnt = (N/2)-1)
			begin
				clk_o <= ~ clk_o;
				cnt <= 0;
				en  <= 1;
			end
		else
			begin
				cnt <= cnt + 1'b1;
			end			
	end
  • 方法2:2N分频
wire clk_o;
reg [31:0] cnt
always @ (posedge clk_i)
	begin
		cnt <= cnt + 1'b1;
	end
assign clk_o = cnt[N-1:0];

奇分频电路

原理

  • 使用原时钟上下边沿
  • 逻辑确定,触发器定住

奇数分频链接

2,奇数分频: 如果要实现占空比为50%的奇数倍分频,不能同偶数分频一样计数器记到一半的时候输出时钟翻转,那样得不到占空比50%的时钟。以待分频时钟CLK为例,如果以偶数分频的方法来做奇数分频,在CLK上升沿触发,将得到不是50%占空比的一个时钟信号(正周期比负周期多一个时钟或者少一个时钟);但是如果在CLK下降沿也触发,又得到另外一个不是50%占空比的时钟信号,这两个时钟相位正好相差半个CLK时钟周期。通过这两个时钟信号进行逻辑运算我们可以巧妙的得到50%占空比的时钟。
总结如下**:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数**,计数选定到某一个值(N+1)/2进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟进行逻辑运算(正周期多的相与,负周期多的相或),得到占空比为50%的奇数n分频时钟。

//任意整数分频计数器
module csdn_clkdiv(	clk,rst_n,clkout);
 
        input 	clk,rst_n;                       //输入信号,其中clk连接到FPGA的C1脚,频率为12MHz
        output	clkout;                          //输出信号,可以连接到LED观察分频的时钟
 
        //parameter是verilog里常数语句
	parameter	WIDTH	= 3;             //计数器的位数,计数的最大值为 2**WIDTH-1
	parameter	N	= 5;             //分频系数,请确保 N < 2**WIDTH-1,否则计数会溢出
 
	reg 	[WIDTH-1:0]	cnt_p,cnt_n;     //cnt_p为上升沿触发时的计数器,cnt_n为下降沿触发时的计数器
	reg			clk_p,clk_n;     //clk_p为上升沿触发时分频时钟,clk_n为下降沿触发时分频时钟
 
	//上升沿触发时计数器的控制
	always @ (posedge clk or negedge rst_n )         //posedge和negedge是verilog表示信号上升沿和下降沿
                                                         //当clk上升沿来临或者rst_n变低的时候执行一次always里的语句
		begin
			if(!rst_n)
				cnt_p<=0;
			else if (cnt_p==(N-1))
				cnt_p<=0;
			else cnt_p<=cnt_p+1;             //计数器一直计数,当计数到N-1的时候清零,这是一个模N的计数器
		end
 
         //上升沿触发的分频时钟输出,如果N为奇数得到的时钟占空比不是50%;如果N为偶数得到的时钟占空比为50%
         always @ (posedge clk or negedge rst_n)
		begin
			if(!rst_n)
				clk_p<=0;
			else if (cnt_p<(N>>1))          //N>>1表示右移一位,相当于除以2去掉余数,对于偶数直接输出就可,对于奇数会造成
				clk_p<=0;					//高低电平差异个周期
			else 
				clk_p<=1;               //得到的分频时钟正周期比负周期多一个clk时钟
		end
 
        //下降沿触发时计数器的控制        	
	always @ (negedge clk or negedge rst_n)
		begin
			if(!rst_n)
				cnt_n<=0;
			else if (cnt_n==(N-1))
				cnt_n<=0;
			else cnt_n<=cnt_n+1;
		end
 
        //下降沿触发的分频时钟输出,和clk_p相差半个时钟
	always @ (negedge clk)
		begin
			if(!rst_n)
				clk_n<=0;
			else if (cnt_n<(N>>1))  
				clk_n<=0;
			else 
				clk_n<=1;                //得到的分频时钟正周期比负周期多一个clk时钟
		end
 
        assign clkout = (N==1)?clk:(N[0])?(clk_p&clk_n):clk_p;      //条件判断表达式
                                                                    //当N=1时,直接输出clk
                                                                    //当N为偶数也就是N的最低位为0,N(0)=0,输出clk_p
                                                                    //当N为奇数也就是N最低位为1,N(0)=1,输出clk_p&clk_n。正周期多所以是相与
endmodule     

//仿真
module test_csdn(
    );
   
            reg    clk,rst_n;                                //需要产生的激励信号定义,激励信号需要过程块产生所以定义为reg型变量
            wire   clkout;                                   //需要观察的输出信号定义,定义为wire型变量
   
            //初始化过程块
            initial 
        begin 
           clk = 0;
           rst_n = 0;
           #25                                      //#表示延时25个时间单位
           rst_n = 1;                               //产生了一个初始25ns低电平,然后变高电平的复位信号
        end
   
            always #10 clk = ~clk;                          //每隔10ns翻转一次clk信号,也就是产生一个时钟周期20ns的clk,频率为50MHz  
   
            //module调用例化格式
            csdn_clkdiv5  #(.WIDTH(4),.N(11))  u1 (                         //#后面的()中为参数传递,如果不传递参数就是所调用模块中的参数默认值
                                                                     //divide表示所要例化的module名称,u1是我们定义的例化名称,必须以字母开头
                          .clk    (clk),     //输入输出信号连接。 .clk表示module本身定义的信号名称;(clk)表示我们在这里定义的激励信号
                          .rst_n    (rst_n),   //在testbench里定义的信号名称可以与所要调用module的端口信号名称不同
                          .clkout    (clkout)   
                        );
           endmodule

三. N+0.5分频器的verilog实现

链接:N+0.5分频器的verilog实现
注意:如果想在此之上改变占空比,则下降分频时钟打拍后进行&可改变占空比

倍频电路(可以使用锁相环)

具体看:杜勇老师的《锁相环计数原理和FPGA实现》,杜勇老师的书,我是强烈推荐的!

41、为了实现逻辑Y=A’B+AB’+CD,请选用以下逻辑中的一种,并说明为什么?

1)INV 2)AND 3)OR 4)NAND 5)NOR 6)XOR 答案:NAND(未知)

42、用传输门和倒向器搭一个边沿触发器(DFF)

在这里插入图片描述
在这里插入图片描述
边沿触发的D触发器,有两个D锁存器构成
在这里插入图片描述

42:画出可以检测1010串的状态图,并verilog实现之,(分为重复检测和不重复检测)

// 模块功能检测1010序列,要求不重复检测
// 使用段式状态机
module csdn_FSM1010(
    input clk,
    input rst_n,
    input data,     // 1bit序列    
    output signal  //表示检测到  
    ); 

parameter S0=5'b00001,S1=5'b00010,S2=5'b00100,S3=5'b01000,S4=5'b10000;

reg [4:0] next_state;
reg [4:0] current_state;

// 时序状态转换
always @ (posedge clk)
    begin
        if(!rst_n)
            begin
                current_state <=0;
            end
        else 
            begin
                current_state <= next_state;
            end
    end

//组合逻辑输出,这状态转移
always @ (*)
    begin
        case(current_state)
            S0:begin
                if(data == 0)
                    begin
                        next_state = S0;
                    end
                else
                    begin
                        next_state = S1;
                    end
            end
            S1:begin
                if(data == 0)
                    begin
                        next_state = S2;
                    end
                else
                    begin
                        next_state = S1;
                    end
            end
            S2:begin
                if(data == 0)
                    begin
                        next_state = S0;
                    end
                else
                    begin
                        next_state = S3;
                    end
            end
            S3:begin
                if(data == 0)
                    begin
                        next_state = S4;
                    end
                else
                    begin
                        next_state = S1;
                    end
            end
//            S4:begin				//不重复检测
//                if(data == 0)
//                    begin
//                        next_state = S0;
//                    end
//                else
//                    begin
//                        next_state = S1;
//                    end
//            end
           S4:begin           //重复检测的情况
                if(data == 0)
                    begin
                        next_state = S0;
                    end
                else
                    begin
                        next_state = S3;
                    end
            end
            default:begin
                    next_state = S0;
            end
        endcase
    end

assign signal = (current_state == S4)? 1'b1:0;

endmodule

43、分别写出IC设计前端到后端的流程和eda工具。(未知)

逻辑设计–子功能分解–详细时序框图–分块逻辑仿真–电路设计(RTL级描述)–功能仿真–综合(加时序约束和设计库)–电路网表–网表仿真)-预布局布线(SDF文件)–网表仿真(带延时文件)–静态时序分析–布局布线–参数提取–SDF文件–后仿真–静态时序分析–测试向量生成–工艺设计与生产–芯片测试–芯片应用,在验证过程中出现的时序收敛,功耗,面积问题,应返回前端的代码输入进行重新修改,再仿真,再综合,再验证,一般都要反复好几次才能最后送去foundry厂流片。设计公司是fables
数字IC设计流程(zz)

1.需求分析(制定规格书)。分析用户或市场的需求,并将其翻译成对芯片产品的技术需求。

2.算法设计。设计和优化芯片钟所使用的算法。这一阶段一般使用高级编程语言(如C/C++),利用算法级建模和仿真工具(如MATLAB,SPW)进行浮点和定点的仿真,进而对算法进行评估和优化。

3.构架设计。根据设计的功能需求和算法分析的结果,设计芯片的构架,并对不同的方案进行比较,选择性能价格最优的方案。这一阶段可以使用SystemC语言对芯片构架进行模拟和分析。

4.RTL设计(代码输入)。使用HDL语言完成对设计实体的RTL级描述。这一阶段使用VHDL和Verilog HDL语言的输入工具编写代码。

  1. RTL验证(功能仿真)。使用仿真工具或其他RTL代码分析工具,验证RTL代码的质量和性能。

6.综合。从RTL代码生成描述实际电路的门级网表文件。

7.门级验证(综合后仿真)。对综合产生的门级网表进行验证。这一阶段通常会使用仿真、静态时序分析和形式验证等工具。

  1. 布局布线。后端设计对综合产生的门级网表进行布局规划(Floorplanning)、布局(Placement)、布线(Routing),生成生产用的版图。

9.电路参数提取确定芯片中互连线的寄生参数,从而获得门级的延时信息。

10.版图后验证。根据后端设计后取得的新的延时信息,再次验证设计是否能够实现所有的功能和性能指标。

11.芯片生产。生产在特定的芯片工艺线上制造出芯片。

  1. 芯片测试。对制造好的芯片进行测试,检测生产中产生的缺陷和问题。

数字IC后端设计流程
14. 数据准备。对于 Cadance的 SE而言后端设计所需的数据主要有是Foundry厂提供的标准单元、宏单元和I/O Pad的库文件,它包括物理库、时序库及网表库,分别以.lef、.tlf和.v的形式给出。前端的芯片设计经过综合后生成的门级网表,具有时序约束和时钟定义的脚本文件和由此产生的.gcf约束文件以及定义电源Pad的DEF(Design Exchange Format)文件。(对synopsys 的Astro 而言, 经过综合后生成的门级网表,时序约束文件 SDC 是一样的,Pad的定义文件–tdf , .tf 文件 --technology file, Foundry厂提供的标准单元、宏单元和I/O Pad的库文件就与FRAM, CELL view, LM view 形式给出(Milkway 参考库 and DB, LIB file)

2.布局规划。主要是标准单元、I/O Pad和宏单元的布局。I/O Pad预先给出了位置,而宏单元则根据时序要求进行摆放,标准单元则是给出了一定的区域由工具自动摆放。布局规划后,芯片的大小,Core的面积,Row的形式、电源及地线的Ring和Strip都确定下来了。如果必要在自动放置标准单元和宏单元之后, 你可以先做一次PNA(power network analysis)–IR drop and EM .

  1. Placement -自动放置标准单元。布局规划后,宏单元、I/O Pad的位置和放置标准单元的区域都已确定,这些信息SE(Silicon Ensemble)会通过DEF文件传递给PC(Physical Compiler),PC根据由综合给出的.DB文件获得网表和时序约束信息进行自动放置标准单元,同时进行时序检查和单元放置优化。如果你用的是PC +Astro那你可用write_milkway, read_milkway传递数据。

  2. 时钟树生成(CTS Clock tree synthesis)。芯片中的时钟网络要驱动电路中所有的时序单元,所以时钟源端门单元带载很多,其负载延时很大并且不平衡,需要插入缓冲器减小负载和平衡延时。时钟网络及其上的缓冲器构成了时钟树。一般要反复几次才可以做出一个比较理想的时钟树。

  3. STA静态时序分析和后仿真。时钟树插入后,每个单元的位置都确定下来了,工具可以提出Global Route形式的连线寄生参数,此时对延时参数的提取就比较准确了。SE把.V和.SDF文件传递给PrimeTime做静态时序分析。确认没有时序违规后,将这来两个文件传递给前端人员做后仿真。对Astro 而言,在detail routing 之后, 用starRC XT参数提取,生成的E.V和.SDF文件传递给PrimeTime做静态时序分析,那将会更准确。

  4. ECO(Engineering Change Order)。针对静态时序分析和后仿真中出现的问题,对电路和单元布局进行小范围的改动.

  5. filler的插入(pad fliier, cell filler)。Filler指的是标准单元库和I/O Pad库中定义的与逻辑无关的填充物,用来填充标准单元和标准单元之间,I/O Pad和I/O Pad之间的间隙,它主要是把扩散层连接起来,满足DRC规则和设计需要。

8.布线(Routing)。Global route-- Track assign --Detail routing—Routing optimization布线是指在满足工艺规则和布线层数限制、线宽、线间距限制和各线网可靠绝缘的电性能约束的条件下,根据电路的连接关系将各单元和I/O Pad用互连线连接起来,这些是在时序驱动(Timing driven ) 的条件下进行的,保证关键时序路径上的连线长度能够最小。–Timing report clear

  1. Dummy Metal的增加。Foundry厂都有对金属密度的规定,使其金属密度不要低于一定的值,以防在芯片制造过程中的刻蚀阶段对连线的金属层过度刻蚀从而降低电路的性能。加入Dummy Metal是为了增加金属的密度。

  2. DRC和LVS。DRC是对芯片版图中的各层物理图形进行设计规则检查(spacing ,width),它也包括天线效应的检查,以确保芯片正常流片。LVS主要是将版图和电路网表进行比较,来保证流片出来的版图电路和实际需要的电路一致。DRC和LVS的检查–EDA工具Synopsy hercules/ mentor calibre/ CDN Dracula进行的.Astro also include LVS/DRC check commands.

  3. Tape out。在所有检查和验证都正确无误的情况下把最后的版图GDSⅡ文件传递给Foundry厂进行掩膜制造

44:半导体工艺中,掺杂有哪几种方式?

根据掺入的杂质不同,**杂质半导体可以分为N型和P型两大类。 N型半导体中掺入的杂质为磷等五价元素,**磷原子在取代原晶体结构中的原子并构成共价键时,多余的第五个价电子很容易摆脱磷原子核的束缚而成为自由电子,于是半导体中的自由电子数目大量增加,自由电子成为多数载流子,空穴则成为少数载流子。P型半导体中掺入的杂质为硼或其他三价元素,硼原子在取代原晶体结构中的原子并构成共价键时,将因缺少一个价电子而形成一个空穴,于是半导体中的空穴数目大量增加,空穴成为多数载流子,而自由电子则成为少数载流子。
链接:COMS原理及门电路设计

45 :解释latch-up现象和Antenna effect及其预防措施.

在芯片生产过程中,暴露的金属线或者多晶硅(polysilicon)等导体,就象是一根根天线,会收集电荷(如等离子刻蚀产生的带电粒子)导致电位升高。天线越长,收集的电荷也就越多,电压就越高。若这片导体碰巧只接了MOS 的栅,那么高电压就可能把薄栅氧化层击穿,使电路失效,这种现象我们称之为“天线效应”。随着工艺技术的发展,栅的尺寸越来越小,金属的层数越来越多,发生天线效应的可能性就越大(完)

  • 0
    点赞
  • 0
    评论
  • 11
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值