1 逻辑函数化简
分配律: A+BC = (A+B)(A+C)
互补律: A+A' = 1
吸收律: A+A'B = (A+A')(A+B) = A+B
反演律: (A+B)' = A'B'
(AB)' = A'+B'
包含律: AB+A'C+BC = AB+A'C+BC(A+A') = AB+A'C
((AB)'(A'B'))' = AB+ A'B' 为A与B的同或运算,AB相同为1,不同为0.
2 TTL和CMOS
TTL与非门电路,CMOS门电路结构简单,功耗低,集成度高。 TTL和CMOS是目前应用最广泛的两种数字集成电路。
1 TTL门电路驱动CMOS门电路
当TTL门电路驱动CMOS门电路时,主要考虑的问题是TTL门电路的输出高电平是否满足CMOS门电路的输入电平要求。一般TTL门电路采用+5V直流电源供电。
如果CMOS门电路的电源也是+5V,要求TTL门电路输出的高电平能够大于CMOS门电路的输入高电平,为此在TTL门电路的输出端与CMOS电源之间接一上拉电阻。如果CMOS电源大于TTL电源电压,则不可以。
2 CMOS门电路驱动TTL门电路
当用CMOS门电路驱动TTL门电路,需要考虑如何提高CMOS门电路在输出低电平时吸收负载电流的能力。
一般在CMOS门电路的输出端增加一级CMOS驱动器。
3 上拉电阻和下拉电阻
上拉电阻一般是一端接电源,一端接芯片管脚的电路中的电阻。
上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。
下拉电阻一般是指一端接芯片管脚一端接地的电阻。 当电路中出现高阻态时,而这时人们不希望存在高阻态,这时就会使用上拉电阻或下拉电阻来给引脚一个稳定的电平。
3 什么是竞争和冒险,怎么消除
没有考虑门电路的延时时间对逻辑电路产生的影响,实际上,信号从输入到输出的过程中,所通过的路径不同,经过的门的级数不同,延迟时间也不尽相同。这些因素都有可能造成一个输入信号经过不同的路径到达同一点的时间不同,这种现象称为竞争。
由于竞争现象所引起逻辑电路输出发生瞬间错误的现象,这一现象称为冒险。
FPGA最简单的避免方法是尽量使用时序逻辑同步输入输出。
解决方法:
增加滤波电容。
加选通信号,避开毛刺。
增加冗余项: 在逻辑表达式中添加多余项,消除冒险现象。
4 时钟偏斜,时钟抖动以及对setup 和hold的影响。
时钟偏斜(偏移)是因为布线长度和负载不同,导致同一时钟上升沿到不同触发器的时间不同。这一时间差,即为时钟偏移。时钟偏斜可能导致时序违例。 如果时钟倾斜变小,可能导致建立时间不满足,即建立时间违例。
如果时钟倾斜变大,可能导致保持时间不满足,导致保持时间违例;
时钟抖动是指同一时钟,相邻周期间时间不一致的现象。这一误差来源于时钟自身,与噪声、干扰以及电源变化有关。可以认为时钟抖动是时钟信号本身在传输过程中的一些偶然和不定的变化之总和。
时钟抖动可能导致时序违例。
时钟抖动可能导致时钟上升沿比期望值来的更早或更晚。 更早可能导致建立时间不满足,导致建立时间违例;更晚可能导致保持时间不满足,导致保持时间违例。
5格雷码计数器 独热码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)。
独热码:其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
6 亚稳态中 快速dff, 工艺从180nm到28nm有用吗
亚稳态
-
降低时钟频率
-
提高时钟质量(指提高时钟的上升速度,可以减小亚稳态窗口,从而提高MTBF)
-
引入同步机制
-
用更快的触发器
工艺从180nm到28nm,我觉得触发器延时会减小。我觉得可以减缓亚稳态。
7 ASIC从设计到流片过程,并设计到的EDA工具
前端:逻辑设计
1 架构设计与验证
根据客户提出的规格要求,拿出设计解决方案和具体时间架构,划分模块功能。
2 HDL编码,RTL设计
使用硬件描述语言(VHDL,Verilog HDL)。
3 仿真验证 功能仿真
工具:Mentor公司的Modelsim,Synopsys的VCS,还有Cadence的NC-Verilog均可以对RTL级代码进行验证。
4 逻辑综合
逻辑综合就是把设计实现的HDL代码翻译成门级网表netlist。综合需要设定约束条件,就是你希望综合出来的电路在面积、时序等目标参数上达到的标准。 逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元的面积,时序参数是不一样的。
Synopsys的Design Compiler,Cadence的 PKS,Synplicity的Synplify等。
5 STA 静态时序分析
从时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例。
使用的工具有:Synopsys的Prime Time。
6 形式验证
从功能上对综合后的网表进行验证。
常用的等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。
工具:Synopsys的Formality。
后端:物理设计
1 DFT 可测性设计
2 布局规划
3 时钟树综合
4 布线
布线是指在满足工艺规则和布线层数限制、线宽、线间距限制和各线网可靠绝缘的电性能约束的条件下,根据电路的连接关系将各单元和i/o相互连线连接起来。
5 DRC和LVS
DRC是对芯片版图中的各层物理图形进行设计规则检查(空间和宽度),它包括天线效应的检查,以确保芯片的正常流片。
LVS是主要将版图和电路网表进行比较,来保证流片出来的版图电路和实际需要的电路保持一致。
6 流片
8 FPGA开发流程
1.电路功能设计
首先要进行的是方案论证、系统设计和FPGA芯片选择等准备工作。
系统工程师根据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。
2.设计输入 RTL级别设计
HDL编码
3.功能仿真
是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。
4.综合
所谓综合就是将较高级抽象层次的描述转化成较低层次的描述。
综合优化是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。
逻辑综合就是把设计实现的HDL代码翻译成门级网表netlist。 基本逻辑单元连接的门级网表。
5.综合后仿真
综合后仿真检查综合结果是否与原设计一致。
6.实现与布局布线
实现是将综合生成的逻辑网表配置到具体的FPGA芯片上,布局布线是其中最重要的过程。
布局是指将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,这往往需要在速度最优和面积最优之间进行选择。
布线是指根据布局的拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。
7.时序仿真与验证
时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规。
时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。
8.板级仿真与验证
板级仿真主要应用于高速电路设计中,对高速系统的信号完整性、电磁干扰等特征进行分析,一般都用第三方工具进行仿真和验证。
9.芯片编程与调试
芯片编程是指产生使用的数据文件(位数据流文件,Bitstream Generation),然后将编程数据下载到FPGA芯片中。
其中,芯片编程需要满足一定的条件,如编程电压、编程时序和编程算法等方面。
逻辑分析仪(Logic Analyzer,LA)是FPGA设计的主要调试工具,但需要引出大量的测试引脚,且其价格昂贵。
目前,主流的FPGA芯片生产商都提供了内嵌的在线逻辑分析仪(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)来解决上述矛盾,它们只需要占用芯片少量的逻辑资源,具有很高的实用价值。
9 单bit快时钟域到慢时钟域同步
脉冲扩宽法:对脉冲进行展开,通常遵循三时钟沿”要求,也就是要持续3个时钟沿以上(上升沿和下降沿都算)。这个被称为:“三时钟沿”要求。
通过“握手”的方式来保证数据被采样到。
只需要对双方的握手信号(req和ack)分别使用脉冲检测方法进行同步。
在具体实现中,假设req、ack、data总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的req信号给接收域。
接收域在检测到有效的req信号后锁存数据总线,然后回送一个有效的ack信号表示读取完成应答。
发送域在检测到有效ack信号后撤销当前的req信号,接收域在检测到req撤销后也相应撤销ack信号,此时完成一次正常握手通信。此后,发送域可以继续开始下一次握手通信,如此循环。
该方式能够使接收到的数据稳定可靠,有效的避免了亚稳态的出现,但控制信号握手检测会消耗通信双方较多的时间。
快时钟域脉宽扩展+慢时钟域延迟打拍”
1快时钟域对脉冲信号进行检测,检测为高电平时输出高电平信号 pulse_fast_r。或者快时钟域输出高电平信号时,不要急于将信号拉低,先保持输出信号为高电平状态。
2 慢时钟域对快时钟域的信号 pulse_fast_r 进行延迟打拍采样。因为此时的脉冲信号被快时钟域保持拉高状态,延迟打拍肯定会采集到该信号。
3慢时钟域确认采样得到高电平信号 pulse_fast2s_r 后,再反馈给快时钟域。
4快时钟域对反馈信号 pulse_fast2s_r 进行延迟打拍采样。如果检测到反馈信号为高电平,证明慢时钟域已经接收到有效的高电平信号。如果此时快时钟域自身逻辑不再要求脉冲信号为高电平状态,拉低快时钟域的脉冲信号即可。
5 控制快时钟域脉冲信号拉低
//同步模块工作时钟大约为 25MHz 的模块
//异步数据对来自工作时钟为 100MHz 的模块
module pulse_syn_fast2s
#( parameter PULSE_INIT = 1'b0
)
(
input rstn,
input clk_fast,
input pulse_fast,
input clk_slow,
output pulse_slow);
wire clear_n ;
reg pulse_fast_r ;
/**************** fast clk ***************/
//(1) 快时钟域检测到脉冲信号时,不急于将脉冲信号拉低。 快时钟域检测到高电平输出pulse_fast_r。
always@(posedge clk_fast or negedge rstn) begin
if (!rstn)
pulse_fast_r <= PULSE_INIT ;
else if (!clear_n)
pulse_fast_r <= 1'b0 ;
else if (pulse_fast)
pulse_fast_r <= 1'b1 ;
end
reg [1:0] pulse_fast2s_r ;
/************ slow clk *************/
//(2) 慢时钟域对信号进行延迟打拍采样,相当于延迟两拍
always@(posedge clk_slow or negedge rstn) begin
if (!rstn)
pulse_fast2s_r <= 3'b0 ;
else
pulse_fast2s_r <= {pulse_fast2s_r[0], pulse_fast_r} ;
end
assign pulse_slow = pulse_fast2s_r[1] ;
reg [1:0] pulse_slow2f_r ;
/********* feedback for slow clk to fast clk *******/
//(3) 对反馈信号进行延迟打拍采样
always@(posedge clk_fast or negedge rstn) begin
if (!rstn)
pulse_slow2f_r <= 1'b0 ;
else
pulse_slow2f_r <= {pulse_slow2f_r[0], pulse_slow} ;
end
//控制快时钟域脉冲信号拉低
assign clear_n = ~(!pulse_fast && pulse_slow2f_r[1]) ;
endmodule
10 RS锁存器
-
当R=1时,输出为0,故R又称为直接置“0”端,或“复位”端(reset)
-
当S=1时,输出也为1,故S又称为直接置“1”端,或“置位”端
当R=S=0时,输出保持不变。保证了RS同时为0(断电)后,电路输出能够保持不变)
注意!!!RS不能同时为1
11 异步fifo,500Mhz写,200Mhz读,brust最大为100,两次brust间隔足够长。异步fifo最小深度
写一个数据需要花费 1/500mhz = 2ns。 写入100x2ns = 200ns。
读一个数据1/200mhz = 5ns。 200ns读 200/5 = 40个数据
所以fifo最小深度为 100 - 40 =60