FPGA经典面试题

更新时间:2023-12-09 06:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

1、FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。

2 CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定 ;FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。

3 大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。 基于SRAM的FPGA器件,每次上电后必须进行一次配置。FPGA内部阵列的配置一般采用在电路可重构技术,编程数据保存在静态存储器(SRAM) ,掉电易失。

4 目前世界上有十几家生产CPLD/FPGA的公司,最大的两家是:Altera,Xilinx。

5 硬件描述语言(HDL)是EDA技术的重要组成部分,是电子系统硬件行为描述、结构描述、数据流描述的语言,它的种类很多,如VHDL、Verilog HDL、 AHDL

6 WHEN_ELSE条件信号赋值语句 和 IF_ELSE顺序语句的异同 WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。

IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中

7 可编程逻辑器件设计输入有原理图输入、硬件描述语言输入和波形输入三种方式。

原理图输入方式是一种最直接的设计描述方式, 硬件描述语言的突出优点是:

* 语言与工艺的无关性;语言的公开可利用性,便于实现大规模系统的设计; * 具有很强的逻辑描述和仿真功能,而且输入效率高,在不同的设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。

波形设计输入适用于时序逻辑和有重复性的逻辑函数。 8 用VHDL/Veilog HDL语言开发可编程逻辑电路的完整流程: 文本编辑→功能仿真→逻辑综合→布局布线→时序仿真。

* 所谓综合,就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。综合的过程也是设计目标的优化过程,其目的是将多个模块化设计文件合并为一个网表文件,供布局布线使用,网表中包含了目标器件中的逻辑单元和互连的信息。

本文来源:https://www.bwwdw.com/article/ihy5.html

Top