面试准备FPGAor数字IC(三)-边沿检测、门控时钟、单双口RAM、亚稳态等

边沿检测
思路:每个时钟的上升沿寄存数据,然后在每个时钟的上升沿判断 比如上升沿检测:a_n &&!a;下降沿检测!a_n && a;
Verliog: module edge_detect(
input clk,
input rst_n,
input a,

output reg rise,
output reg down

);
reg a_n;
//每一个上升时刻 都将a的值暂存起来
always @ (posedge clk or negedge rst_n )
begin
if(!rst_n)
a_n<=1’b0;
else
a_n<=a;
end
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
rise<=1’b0;
down<=1’b0;
end
else if(!a_n && a)
begin
rise<=1’b1;
down<=1’b0;
end
else if(a_n && !a)
begin
rise<=1’b0;
down<=1’b1;
end
else
begin
rise<=1’b0;
down<=1’b0;
end
end
endmodule

单口RAM、双口RAM
单口RAM:单口只有一组地址线和数据线;不能同时读写,要么写,要么读。
双口RAM
简单双口RAM:一组读地址线和数据线、一组写地址线和数据线。可以同时读写,但不能同时对同一地址进行读写。
真双口RAM:每个口都有一组读地址线和数据线、一组写地址线和数据线。可以看成两个单口RAM,但是共用的是一个存储区域。因此要避免同时对一个地址进行读写,会发生冲突,写贯穿到读。同时对一个地址进行写操作时,此时需要关断一个写。
脉冲同步器
思路:脉冲转换成电平------然后寄存器打两拍(两级同步器)-------电平转化成脉冲(异或,最后一个寄存器和异或门组成边沿检测电路)。
Verliog:module pulse_detect(
input clk_fast ,
input clk_slow ,
input rst_n ,
input data_in ,

output  		 	dataout

);
reg Q_fast;
always @(posedge clk_fast or negedge rst_n)
begin
if(~rst_n)
Q_fast <=1’d0;
else if(data_in)
Q_fast <= ~Q_fast;
else
Q_fast <= Q_fast;
end

reg Q_buff0;
reg Q_buff1;
always @(posedge clk_slow or negedge rst_n)
    begin
        if(!rst_n)
            begin
                Q_buff0 <= 1'd0;
                Q_buff1 <= 1'd0;
            end
        else
            begin
               Q_buff0 <= Q_fast;
               Q_buff1 <= Q_buff0;
            end
    end
reg Q_slow;
always @(posedge clk_slow or negedge rst_n)
    begin
        if(!rst_n)
            Q_slow <= 1'd0;
        else
            Q_slow <= Q_buff1;
    end 
assign dataout = Q_buff1 ^ Q_slow;

endmodule
最小时钟周期和最大工作频率的问题
最小工作周期Tmin=Tco+Tcomb+Tsu-Tskew+ Tjitter //寄存器内部延迟+组合逻辑延迟+建立时间延迟-时钟偏移 + 时钟抖动
最大工作频率1/Tmin
注意:在求解Tcmob的时候 ,找到两个触发器间的关键路径。
时钟切换的毛刺问题
纯组合的逻辑,因此可能出现毛刺。

因此加入触发器(下降沿检测)

门控时钟中的毛刺问题
可以通过时钟信号与使能信号相与的方式,组合逻辑,会出现毛刺

解决方法:加个锁存器

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

附加约束的作用
1:提高设计的工作频率(减少了逻辑和布线延时);
2:获得正确的时序分析报告;(静态时序分析工具以约束作为判断时序是否满足设计要 求的标准,因此要求设计者正确输入约束,以便静态时序分析工具可以正确的输出时序报告)
3:指定FPGA/CPLD的电气标准和引脚位置。
时序分析工具(待整理)
静态时序分析--------检查芯片时序特性、验证电路性能以及布局布线。
TimeQuest Timing Analyzer
流程:创建quertus prime项目,并制定设计文件------执行分析和综合------指定时间需求------编译设计和验证时间。
分析和综合完成什么:分析:工具会检查设计有没有错误,比如源文件中的语法错误等;综合:工具会把设计中的源文件转换成门级电路网表(netlist)。最后吧门级网表中的各个元素与FPGA里的基本元件逐一对应起来(映射)。
TimeQuest Timing Analyzer工具的使用(使用GUI界面创建约束)
1、 创建一个POST—Map时序网表。
Netlist—Create Timing Netlist;input Netlist中选择Post—Map,点击OK;
2、 创建时钟分配时钟端口;
Constraints—Create Clock—周期、上升沿开始、下降沿开始时间,Target选择端口
3、 对时序网表进行更新(将时钟约束更新)
Tasks—Update Timing Netlist
4、 创建SDC文件,将上述时钟约束保存SDC文件中,(如上,通过GUI指定的约束不会自动保存)。Tasks—Write SDC File;
5、 生成SDC约束报告(报告了在指定设计中包含的所有时序约束)。Tasks—Rports SDC;
生成时钟总结报告(总结设计的所有时钟)。Tasks—Reports Clocks;
生成时钟传输报告(验证所有的时钟到时钟传输都是有效的)。Tasks—Reports Clock Transfers;如有忽略路径(称之例外),通过在Clock Transfers报告中右键时钟,选择Set False Paths,命令:表明将跨时钟域的忽略路径设置为伪路劲。或者使用set_clock_groups命令设置伪路径,例如:set_clocks_groups-asynchronous-group[get_clocks_A]-groups[get_clocks_B],这个命令表明设置从A到B以及从B到A的所有路径设置为伪路径。如有设置相关新的路径约束,需要更新网表。
6、 将SDC文件添加到功能中
Quartus软件中的assignments—Settings,Category一栏—Files—浏览选择之前建的SDC文件–Add–apply—OK;
7、 运行全编译;start compilation。
8、 生成建立/保持总结。TimeQuest Timing Analyzer—Summary Setup/Hold
9、 检查未约束路径。Report Unconstrained Paths
10、约束输入输出端口 set_input_delay;set_output_delay

亚稳态,为什么两级触发器可以防止亚稳态传播?
这也是一个异步电路同步化的问题。亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。使用两级触发器来使异步电路同步化的电路其实叫做“一位同步器”,,他只能用来对一位异步信号进行同步。两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。

如何防止亚稳态
1 降低系统时钟频率
2 用反应更快的FF
3 引入同步机制,防止亚稳态传播(可以采用前面说的加两级触发器)。
4 改善时钟质量,用边沿变化快速的时钟信号

FPGA设计工程师努力的方向
SOPC,高速串行I/O,低功耗,可靠性,可测试性和设计验证流程的优化等方面。
随着芯片工艺的提高,芯片容量、集成度都在增加,FPGA设计也朝着高速、高度集成、低功耗、高可靠性、高可测、可验证性发展。芯片可测、可验证,正在成为复杂设计所必备的条件,尽量在上板之前查出bug,将发现bug的时间提前,这也是一些公司花大力气设计仿真平台的原因。另外随着单板功能的提高、成本的压力,低功耗也逐渐进入FPGA设计者的考虑范围,完成相同的功能下,考虑如何能够使芯片的功耗最低,据说altera、xilinx都在根据自己的芯片特点整理如何降低功耗的文档。高速串行IO的应用,也丰富了FPGA的应用范围,象xilinx的v2pro中的高速链路也逐渐被应用。
对于多位的异步信号如何进行同步
对以一位的异步信号可以使用“一位同步器进行同步”(使用两级触发器),而对于多位的异步信号,可以采用如下方法:1:可以采用保持寄存器加握手信号的方法(多数据,控制,地址);2:特殊的具体应用电路结构,根据应用的不同而不同;3:异步FIFO。(最常用的缓存单元是DPRAM

FPGA/CPLD芯片内有哪两种存储器资源?
FPGA芯片内有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器(也就是分布式RAM)。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。
CPLD的编程采用E2PROM或FASTFLASH技术

FPGA设计中异步/同步时序电路的延时?
异步电路的延时实现:异步电路一半是通过加buffer、两级与非门等来实现延时。
同步电路中:对于比较大的和特殊要求的延时,一半通过高速时钟产生计数器,通过计数器来控制延时;对于比较小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。

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

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

静态、动态时序模拟的优缺点?
静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。
动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题;

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

可编程逻辑器件有哪些
PAL,PLA,GAL,CPLD,FPGA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值