FPGA知识点总结

来源:互联网 发布:初学钢琴软件 编辑:程序博客网 时间:2024/06/05 06:10

1 什么是Setup 和Holdup时间?

答: setip 建立时间 holdup 保持时间 建立时间是指, 时钟边缘前,数据信号保持不变的的时间,保持时间 是指时钟跳变边缘数据信号数据信号保持不变的时间。

  不满足建立时间和保持时间,DFF将得不到正确的采样数据, DFF D触发器 将会出现mentablity 亚稳态的情况, 亚稳态是不确定的状态

  如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。

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

  在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。
   如果布尔式中有相反的信号则可能产生竞争和冒险现象。
   解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。

3 用D触发器实现2倍分频的逻辑电路?

module divide2( clk , clk_o, reset);     input     clk , reset;     output   clk_o;     wire in;   reg out ;     always @ ( posedge clk or posedge reset)       if ( reset)         out <= 0;           else             out <= in;         assign in = ~out;         assign clk_o = out;       endmodule  

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

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

5 什么是同步逻辑和异步逻辑?

  同步逻辑是时钟之间有固定的因果关系。
  异步逻辑是各时钟之间没有固定的因果关系。

6 请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接口、所存器/缓冲器)。

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

12,5,3.3
  TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V。

8 可编程逻辑器件在现代电子设计中越来越重要,请问:你所知道的可编程逻辑器件有哪些?

  PAL,PLD,CPLD,FPGA。

9 试用VHDL或VERILOG、ABLE描述8位D触发器逻辑

module dff8(clk , reset, d, q);  input        clk;  input        reset;  input  [7:0] d;  output [7:0] q;  reg   [7:0] q;  always @ (posedge clk or posedge reset)     if(reset)       q <= 0;     else       q <= d;  endmodule 

  设想你将设计完成一个电子电路方案。请简述用EDA软件(如PROTEL)进行设计(包
  括原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?
   电源的稳定上,电容的选取上,以及布局的大小。

11 用逻辑门和cmos电路实现ab+cd

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

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

Delay < period - setup - hold

14 如何解决亚稳态

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

15 用verilog/vhdl写一个fifo控制器

  包括空,满,半满信号。

16 用verilog/vddl检测stream中的特定字符串

  分状态用状态机写。

17 用mos管搭出一个二输入与非门。

18 集成电路前段设计流程,写出相关的工具。

19 名词IRQ,BIOS,USB,VHDL,SDR

  IRQ: Interrupt ReQuest
  BIOS: Basic Input Output System
  USB: Universal Serial Bus
  VHDL: VHIC Hardware Description Language
  SDR: Single Data Rate

20 unix 命令cp -r, rm,uname

21 用波形表示D触发器的功能

22 写异步D触发器的verilog module

module dff8(clk , reset, d, q);  input        clk;  input        reset;  input   d;  output  q;  reg q;  always @ (posedge clk or posedge reset)     if(reset)       q <= 0;     else       q <= d;  endmodule  

23 What is PC Chipset?

  芯片组(Chipset)是主板的核心组成部分,按照在主板上的排列位置的不同,通常分为北桥芯片和南桥芯片。北桥芯片提供对CPU的类型和主频、内存的类型和最大容量、ISA/PCI/AGP插槽、ECC纠错等支持。南桥芯片则提供对KBC(键盘控制器)、RTC(实时时钟控制器)、USB(通用串行总线)、Ultra DMA/33(66)EIDE数据传输方式和ACPI(高级能源管理)等的支持。其中北桥芯片起着主导性的作用,也称为主桥(Host Bridge)。
  除了最通用的南北桥结构外,目前芯片组正向更高级的加速集线架构发展,Intel的8xx系列芯片组就是这类芯片组的代表,它将一些子系统如IDE接口、音效、MODEM和USB直接接入主芯片,能够提供比PCI总线宽一倍的带宽,达到了266MB/s。

24 用传输门和反向器搭一个边沿触发器

25 画状态机,接受1,2,5分钱的卖报机,每份报纸5分钱

4个FPGA工程师面试题目(经历)

FPGA与CPLD内部结构区别? CPLD

  以altraMAX7000这种PLD为例,可分为三块结构:宏单元(Marocell),可编程连线(PIA)和I/O控制块。宏单元是PLD的基本结构,由它来实现基本的逻辑功能。可编程连线负责信号传递,连接所有的宏单元。I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。
  这种基于乘积项(实际就是与或阵列)的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。布线方式是全局的,所以延时可预测。CPLD适合做逻辑设计。
   FPGA
  FPGA基于LUT,LUT本质上就是一个RAM,每一个LUT可以看成一个有4位地址线的16x1的RAM。这也是为什么FPGA需要外接一个rom来上电配置。
   以xilinx的Spartan-II为例,主要包括CLBs,I/O块,RAM块和可编程连线。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构。
   FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于PLD。 所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。

2.Latch和Register区别?行为描述中Latch如何产生?

  本质的区别在于:latch是电平触发,reg是边沿触发。时序设计中尽量使用reg触发。
行为描述中,如果对应所有可能输入条件,有的输入没有对应明确的输出,系统会综合出latch。
比如:always@( a or b) //缺少else语句

    begin       if(a==1)         q <= b;     end 

3.对竞争冒险的理解,以及如何消除?

  在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。

4.用Verilog设计一个5分频器。

  5分频,奇数分频都可以类似这么做,只需要改div1和div2的参数。div1为奇数分频除2的余数。采用上升延和下降延分别触发不同波形,最后叠加的方式产生奇数分频。

module divfreq(clk, clk1x, rst, clk1xpose, clk1xnege, coutpose, coutnege);  input clk;  input rst;  output clk1x;  output clk1xpose;  output clk1xnege;  output[2:0] coutpose;  output[2:0] coutnege;  reg clk1xpose;  reg clk1xnege;  reg[2:0] coutpose;  reg[2:0] coutnege;  parameter div1 = 2 , div2 = 4;  // div1 = 5 / 2, div2 = 5 - 1  assign clk1x = clk1xpose | clk1xnege;  always@(posedge clk or negedge rst)  begin    if(!rst)      clk1xpose = 0;    else if(coutpose == div1)      clk1xpose = ~clk1xpose;    else if(coutpose == div2)      clk1xpose = ~clk1xpose;    else       clk1xpose = clk1xpose;  end  always@(negedge clk or negedge rst)  begin    if(!rst)      clk1xnege = 0;    else if(coutnege == div1)     clk1xnege = ~clk1xnege;    else if(coutnege == div2)     clk1xnege = ~clk1xnege;    else      clk1xnege = clk1xnege;  end  always@(posedge clk or negedge rst)  begin    if(!rst)     coutpose = 0;    else if(coutpose == div2)     coutpose = 0;    else     coutpose = coutpose + 1;  end  always@(negedge clk or negedge rst)  begin    if(!rst)     coutnege = 0;    else if(coutnege == div2)     coutnege = 0;    else     coutnege = coutnege + 1;  end  endmodule  
原创粉丝点击