(转)FPGA工程师面试试题 集锦 (第四篇)
来源:互联网 发布:淘宝交易数据导出 编辑:程序博客网 时间:2024/06/05 22:35
4个FPGA工程师面试题目(经历) 3.对竞争冒险的理解,以及如何消除?
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
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。
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
- (转)FPGA工程师面试试题 集锦 (第四篇)
- (转)FPGA工程师面试试题 集锦 (第三篇)
- (转)FPGA工程师面试试题 集锦 (第二篇)
- FPGA工程师面试试题集锦
- (转)FPGA工程师面试试题 集锦 (第一篇)
- 【转】常见数字IC设计、FPGA工程师面试
- 【转】常见数字IC设计、FPGA工程师面试题
- .net面试试题集锦
- 硬件工程师面试试题
- 技术支持工程师面试试题
- 4个FPGA工程师面试题目
- FPGA工程师面试题目网络收集
- 平面设计师美工面试试题集锦
- 【面试】Android面试题集锦
- 硬件工程师面试试题集
- 数字电路设计之数字电路工程师面试集锦
- 嵌入式驱动工程师面试题集锦
- 嵌入式驱动工程师面试题集锦
- 转载 dawugui MS SQL——02
- 如何学好Java
- Android通过Get方式提交数据以及乱码处理
- (转)硬件工程师面试集锦 模拟电路 数字电路 IC设计基础 单片机 信号与系统 DSP 嵌入式
- Enumeration 与 Iterator
- (转)FPGA工程师面试试题 集锦 (第四篇)
- (转)FPGA工程师面试试题 集锦 (第三篇)
- poj1009
- (转)FPGA工程师面试试题 集锦 (第二篇)
- (转)FPGA工程师面试试题 集锦 (第一篇)
- 列出文件名和属性——实现一个简单的ls命令
- listview 修改快速滑动的图片
- Java定时任务的实现
- Partially written block *** detected解决方案