(3条消息) 小汪的IC自习室的博客_CSDN博客-数字IC设计,SystemVerilog & IC验证,RISC-V领域博主
1、确定芯片的具体指标:
1)物理实现:
制作工艺(代工厂及尺寸要求)
裸片面积
封装(封装越大,散热越好,成本越高)
2)性能指标:
速度(时钟频率)
功耗
3)功能指标:
功能描述
接口定义
2、系统及设计:
用系统建模语言(高级语言 如matlab,c等)对各个模块描述,为了对方案的可行性进行验证。
1、算法或硬件架构设计与分析:完成芯片中数字部分的高层次算法或架构的分析与建模,为硬件提供一个正确的软件 功能模型,为 RTL 实现提供总体性的设计指导。
2、RTL实现:依据第一步的结果,完成由高层次描述到 Verilog HDL 实现的过程。
3、功能验证:在无延迟的理想情况在,通过大量的仿真,发现电路设计过程中的人为或者非人为引起的bug。
工具:Modelsim、VCS、NC-Verilog等
4、逻辑综合:将 RTL 代码映射为与工艺库相关的网表。逻辑综合要指定基于的库、工艺,设定约束条件。综合之前的仿真为前仿真,综合之后的仿真为后仿真,所以这里还需要一个后仿真。
5、静态时序分析(STA) :来计算所有的路径,有没有满足时序要求;主要是检查建立时间(Setup Time)和保持时间(Hold Time)是否违例(violation)
工具:PrimeTime、Tempus。
6、DFT(design for test)可测性设计:为了在芯片生产之后,测试芯片的良率,看制作有无缺陷,一般是在电路中插入扫描连(scan chain)
DFT是在得到Netlist之后,布局布线(Place and Route)之前进行设计
数字后端设计又称物理设计,将网标格式的文本转化成-个个有物理大小和位置的单元、连线。并且在实现过程中要满足面积、功耗、性能等要求。业界主流的后端工具来自synopsys、cadence两家公司,虽然两家公司工具不同但是基本流程相似。
1、布局布线(Place and Route):
保证没有太多的内部交互,避免布线上的拥堵和困扰。
包括时钟树插入(布局时钟线),用到Synopsys的IC Compiler(ICC)在布线(普通信号线)之前先布局时钟线,即时钟树综合CTS(Clock Tree Synthesis),用到Synopsys的Physical Compiler。均匀地分配时钟,减少设计中不同部分间的时钟偏移。
2、寄生参数提取(Extrat RC):
提取延迟信息
3、静态时序分析(STA):
加入了布局布线延迟,更真实的时序分析。
时钟树插入之后,每一个单元的位置都确定下来了,工具可以提出Global Route形式的连线寄生参数,此时对延时参数的提取就比较准确了;然后通过EDA工具指定提取模式如RC提取模式、指定延时计算模式等等来进行建立时间与保持时间分析:如果发生时序违例,那么则返回上一层设计,通过修改设计等等使其满足时序要求,从而达到时序收敛。
4、版图物理验证:
对完成布线的物理版图进行功能和时序上的验证,验证项目很多,如:
实际的后端流程还包括电路功耗分析,以及随着制造工艺不断进步产生的DFM(可制造性设计)问题。物理版图验证完成也就是整个芯片设计阶段完成,下面的就是芯片制造了。
DRC(设计规则检查);LVS(版图一致性检查)布线图和原理图进行比较
5、生成GDSII文件,Tap_off 流片
物理版图以GDSII的文件格式交给芯片代工厂(称为Foundry)在晶圆硅片上做出实际的电路,再进行封装和测试,就得到了实际的芯片。
这整个流程称为RTL2GDSII,利用GDSII来生产芯片的过程称作流片(Tapeout),以上是一个Fabless公司的简易设计流程,最后将GDSII送至Foundry生产芯片。
(注:整个IC设计流程都是一个迭代的过程,每一步如果不能满足要求,都要重复之前的过程,直至满足要求为止,才能进行下一步。)
数字IC设计流程相关名词梳理及各流程EDA工具总结正在上传…重新上传取消https://blog.csdn.net/weixin_42294124/article/details/123534569https://blog.csdn.net/weixin_42294124/article/details/123534569
亚稳态:是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。
异步:指的是输入信号和时钟无关;
同步:是指的输入信号和时钟信号有关;
实际上就是输入信号和时钟信号进行了与运算或者与非运算。实际开发中,经常有同步清零、异步清零、同步复位、异步复位等概念,下面就给与相关代码演示。
同步清零
module dff(d, clk, clr, q);
input d, clk, clr;
output q;
reg q;
always@(posedge clk)
if(!clr) q<=0;
else q<=d;
endmodule
异步清零
module(d, clk, clr, q);
input d, clk, clr;
output q;
reg q;
always@(posedge clk or negedge clr)
if(!clr) q <= 0;
else q <= d;
endmodule
同步电路:同步电路是指电路中的所有时钟都来自于同一个时钟源;
异步电路:是指电路的时钟来自于不同的时钟源,它们之间没有固定的相位关系;
(1)一段式:一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;
(2)二段式:两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计。
(3)三段式:三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。
三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。
Moore:输出信号只与当前输入有关。
mealy:输出信号不仅取决于当前状态,还取决与输入。
建立时间:是指触发器在时钟沿到来之前,数据输入端的数据必须保持不变的时间;
保持时间:是指触发器在时钟沿到来之后,数据输入端的数据必须保持不变的时间;
电路的工作频率主要与寄存器与寄存器之间的信号传播延时和clock_skew相关;
信号的传输时延主要包括:寄存器的开关延时,走线延时,经过组合逻辑的延时;
开关延时是由器件物理属性决定的,可以通过提升电压的方法来减少开关延时,走线延时可以通过给综合器添加适当的约束,一般添加的约束为5%~10%;组合逻辑的延迟可以通过将较大的组合逻辑分解为较小的多块,通过适当的方法将组合逻辑进行平均,并在中间插入寄存器,这样就可以避免在两个寄存器之间出现过大的延迟,消除速度的瓶颈,以达到提升工作频率的目的,也就是所谓的流水线的设计思想;
时序约束:设计者需要告诉软件(Quartus、Vivado、ISE等工具)应该从哪个引脚输入信号、输入信号需要延迟多长时间、时钟周期是多少。主要包括:周期约束、偏移约束、静态时序路径约束。
FPGA上的RAM一般分为三类:单口RAM、简单双口RAM、真双口RAM。
单口RAM:一条数据线和一条地址线,不能同时读写;
简单双口RAM:一条地址线和一条数据线,能够同时读写不同地址的数据,读写同一个地址的数据时会冲突;
真双口RAM:两条地址线和两条数据线,能够同时对同一地址的数据进行读写。
信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险。
1、跨时钟域分类
a.跨同步时钟域(clk1与clk2是同步时钟,即同源时钟,但是频率等不同);
b.跨异步时钟域(异步时钟,即不同源时钟,没有固定的相位关系,时钟来自不同的晶振);
2、对时钟域的理解
跨时钟域通俗地讲,就是模块之间有数据交互,但是模块用的不是同一个时钟进行驱动(这些时钟也又可能是起源于同一个时钟源)。
3、跨时钟域处理办法
a、单比特信号
针对单Bit控制信号跨越两个时钟域传输,可以使用多级的寄存器进行打拍。将信号打两拍,采第二拍的数据(两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。)可以消除亚稳态,但是传输的数据只是稳定为0或者1,数据还是不一定正确。
· 信号从慢时钟域到快时钟域(B到A)
经验设计最小寄存两拍,第一拍将输入信号同步化,同步后的信号可能会存在建立/保持时间的违例,产生亚稳态的情况。因此需要再进行寄存一拍,减少亚稳态带来的影响,一般的话寄存两拍是最少的要求,如果是高频设计的话,需要增加寄存器的计数来降低系统的不稳定性。如果采取多级触发器来采样来自异步时钟域的信号,寄存的拍数越多,同步过来的信号越稳定;
· 信号从快时钟域到慢时钟域(A到B)
处理方法:握手信号,加宽pulse的信号脉宽,异步FIFO。
b、多比特信号:
· 使用握手信号的方式
(所谓握手,是指通信双方使用了专用控制信号进行数据收发的状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式。类似于DMA与外设模块的通信,会用到dma_req,dma_ack 具体方法:硬件架构的艺术P63)。
· 格雷码转换
(格雷码:相邻的两个编码之间只有一位是不一样的。由于格雷码相邻数据只有一个bit不同,因此,在进行跨时钟域传输时,只有发生变化的那个bit有可能处于亚稳态,而其余bit由于保持不变,因此是稳定的,故多比特格雷码的跨时钟域传输相当于单比特信号的跨时钟域传输,我们采用打两拍的方法即可处理。)
· 异步双口RAM
· 使用异步FIFO
(异步FIFO融合了寄存器同步,格雷码编码,握手控制等处理方式,是处理跨时钟域数据传输最常用的方式)。
· 求FIFO深度需要考虑最坏的情形,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率;
· 不管什么场景,要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走;即FIFO的最小深度就等于没有被读走的数据个数。
· 由于FIFO空满标志位的判断延迟,在实际应用中需要预留一些余量。
图例 背靠背情况
推导FIFO深度的求解公式:
写时钟周期为clkw,读时钟周期为clkr,在读时钟周期内,每x个周期内可以有y个数据读出FIFO,即读数据的读数率 在写时钟周期内,每m个周期内就有n个数据写入FIFO,背靠背“的情形下是FIFO读写的最坏情形,burst长度 B = 2*n。
由上得到:FIFO的最小深度为 B - B * (clkr/clkw) * (y/x) 。
FIFO分类:
同步FIFO:是指的读时钟和写时钟是同一个时钟,在时钟沿到来时同时发生读写操作;
异步FIFO:是指的读写时钟不一致,读写时钟之间是相互独立的;
FIFO的空满检测:
当读写地址相等时,表示FIFO为空,这种情况发生在复位操作时,或者当读指针读出FIFO中最后一个字后,追赶上了写指针时,表示FIFO为空;
当读写指针再次相等时,表示FIFO为满,这种情况发生在,当写指针转了一圈,折回来又追上了读指针时;
如果指针的最高位不同,其余位相同表示写满,如果所有位相同就表示读空。
由于异步FIFO的设计,读写时钟不一样,在产生读空信号和写满信号时,会涉及到跨时钟域的问题。需要将读指针和写指针进行比较,需要在进行同步处理之后再进行比较。
解决方法:格雷码+两级寄存器同步;
异步FIFO代码实现:
多为二进制码转化为格雷码:
verilog代码实现如下:
在格雷码中检测空满状态
使用格雷码解决了计数器值同步的问题,但需要在格雷码中判断空与满状态;
判断空满信号:如果指针的最高位不同,其余位相同表示写满, 如果所有位相同就表示读空。
总结:
/* 异步FIFO
1.控制读写指针增加:增加的是二进制码,并将二进制码转换成格雷码,用于同步。 (同时输出二进制码和格雷码)
2.包括sram存储器,对数据进行读写(送入的地址为二进制指针)
3.同步:通过将格雷码打两拍,同步读写指针信号
4.将同步后的格雷码指针,转换成二进制码,送入比较模块
5.判断空满信号:如果指针的最高位不同,其余位相同表示写满, 如果所有位相同就表示读空。
注意:判断写满时,写指针(二进制)读指针(格雷码转二进制)
判断读满时,写指针(格雷码转二进制)读指针(二进制)
*/
(9条消息) 【原创】异步FIFO设计原理详解 (含RTL代码和Testbench代码)_锤王马加爵的博客-CSDN博客_异步fifo原理图
(以复位信号低电平有效为例)
复位恢复时间(recovery time):撤销复位时,复位信号无效到时钟有效沿来临之间需要维持的最小时间。
复位清除时间(removal time):复位时,在时钟有效沿来临之后复位信号还需要保持复位状态的时间。
**同步复位:**指的是加到所有功能触发器上的复位信号完全同步于时钟信号源。复位信号只有在时钟上升沿到来时,才能有效,否则,无法完成对系统的复位工作。
同步复位特点:
由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
异步复位: 复位信号直接接到功能触发器的异步复位引脚,复位只与复位信号有关,与时钟无关。无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
异步复位特点:
无需额外的逻辑资源,实现简单,可以保证复位信号到达各个寄存器的时钟偏斜最小;
复位信号易受外界干扰,对电路内的毛刺敏感;
复位信号释放具有随机性,如果复位释放信号刚好在时钟有效沿附近,可能存在时序违规(recovery time不满足要求),导致亚稳态。
异步复位,同步释放:利用同步复位和异步复位优点的折中。复位电路通过异步复位使得全部功能寄存器同时复位,同时使用同步释放很好克服了异步复位在信号释放时导致亚稳态的问题。
异步复位,同步释放代码实现:异步复位,同步释放就是指在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。
module Sync_rst(
input sys_clk,
input async_rst_n,
input din,
output reg dout
);
reg rst_reg;
reg sync_rst_n;
always@(posedge sys_clk,negedge async_rst_n)begin
if(!async_rst_n)begin
rst_reg <= 1'b0;
sync_rst_n <= 1'b0;
end
else begin
rst_reg <= 1'b1;
sync_rst_n <= rst_reg;
end
end
always@(posedge sys_clk,negedge sync_rst_n) begin
if(!sync_rst_n)
dout <= 1'b0;
else
dout <= din;
end
endmodule
异步复位,同步释放原理:
异步复位:
当async_rst_n有效时,第一个D触发器的输出是低电平,第二个D触发器的输出rst_sync_n也是低电平,方框2中的异步复位端口有效,输出被复位。
同步释放:
如果async_rst_n撤除时发生在clk上升沿附近,则可能发生亚稳态事件,使用两级触发器尽可能消除亚稳态。假设第一级D触发器clk上升沿时async_rst_n正好撤除,则D触发器1可能输出高电平“1”,也可能输出亚稳态,也可能输出低电平。但此时第二级触发器不会立刻更新输出,第二级触发器输出值为前一级触发器Q1的输出状态。显然Q1之前为低电平,故第二级触发器输出保持复位低电平。直到下一个时钟有效沿到来之后,前一级亚稳态大概率输出稳定(可能为低电平也可能为高电平),使得第二级触发器能够稳定输出,若此时第二级触发器输出高电平,即实现同步释放,若输出为低电平且此时复位信号仍然保持无效状态,则在第三个时钟输出高电平,实现同步释放。
上述时序图是在第二个触发沿到来时,前一级亚稳态输出已经稳定且稳定为高电平情况下的时序,如果在第二个触发沿到来时,前一级输出的亚稳态还未达到稳定,则电路还是处于亚稳态状态(概率不大),所以两级触发器电路并不能完全消除亚稳态问题,但是可以极大改善亚稳态。
是指触发器在时钟沿到来之前,数据输入端的数据必须保持不变的时间;
如果数据信号在时钟沿触发前的持续时间超过了建立时间Tsu,那么这个时间间隔就叫做建立时间裕量。
SDC约束命令为set_max_delay。
是指触发器在时钟沿到来之后,数据输入端的数据必须保持不变的时间;
如果数据信号在时钟沿触发后的持续时间超过了保持时间Th,那么这个时间间隔就叫做保持时间裕量。
SDC约束命令为set_min_delay。
恢复时间(Recovery Time):是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。这个时间的意义是,如果保证不了这个最小恢复时间,也就是说这个异步控制信号的解除与“下个时钟沿”离得太近(但在这个时钟沿之前),没有给寄存器留有足够时间来恢复至正常状态,那么就不能保证“下个时钟沿”能正常作用,也就是说这个“时钟沿”可能会失效。
去除时间(Removal Time)是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。这个时间的意义是,如果保证不了这个去除时间,也就是说这个异步控制信号的解除与“有效时钟沿”离得太近(但在这个时钟沿之后),那么就不能保证有效地屏蔽这个“时钟沿”,也就是说这个“时钟沿”可能会起作用。
传播时间(Propagation Delay):是指一个数字信号从器件(一般是DFF,符号表示为Tcq)的输入端到输出端所需的时间。通常在FPGA中是指时钟上升沿之后延时Tcq的时间,数据才到达寄存器Q端。
组合逻辑延时(Combinational Logic Delay):是指两级寄存器之间的输出端Q到输入端之间的组合逻辑延时。符号表示为Tlogic。
笔试题:
时序分析:
时序分析的方法主要有两种,一种是静态时序分析,另一种是动态时序分析。
T_setup:时钟沿来到之前数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。T_hold:时钟沿来到之后数据必须保持稳定的最小时间,芯片选定即决定,和制作工艺有关。
设计中,输入信号一般来说不能判断出上一级是寄存器输出还是组合逻辑输出,对于本级来说,就当成一根导线,即wire型。
而输出信号则由自己来决定是reg还是组合逻辑输出,wire和reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是reg输出,这比较稳定、扇出能力好(驱动负载能力比较强)。
reg和wire的区别:
1. wire表示线网型数据,常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是。(在SV中,除了wire,其他四值逻辑的默认值是x)。
2. reg型表示的寄存器类型。always模块内被赋值的信号,必须定义为reg型,代表触发器。默认初始值是x。reg类型不一定是寄存器变量,例如组合逻辑中reg类型变量。
3. reg相当于存储单元,wire相当于物理连线。
两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。
过程赋值语句always@和连续赋值语句assign的区别:
1. wire型用于assign的赋值,always@块下的信号用reg型。这里的reg并不是真正的触发器,只有敏感列表内的为上升沿或下降沿触发时才综合为触发器。
2. 另一个区别,举例:
wire a;
reg b;
assign a = 1'b0;
always@(*)
b = 1'b0; //输入信号是1'b0
上面例子仿真时a将会是0,但是b的状态是不确定的(也就是仿真时只有当always@(*)块内的输入信号产生变化,该块内描述的信号才会产生变化。)。因为Verilog规定,always@(*)中的*指的是该always块内的所有输入信号的变化为敏感列表,就是说只有当always@(*)块内输入信号发生变化,该块内描述的信号才会发生变化。像always@(*) b= 1'b0; 中由于1'b0是个常数,一直没有变化,由于b的组合逻辑输出,所有复位时没有明确的值--即不确定状态,又因为always@(*)块内没有敏感信号变化,此时b信号一直保持不变,即不确定是啥,取决于b的初始状态。
1、组合逻辑电路分析设计
组合逻辑电路:在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入(而且是瞬时变化),与电路原来的状态无关,它类似于电阻性电路,加法器、编码器、译码器、选择器、分配器等等都属于此类。
组合逻辑电路的分析方法:
输入到输出,逐级写出函数式,并且将之化简,最后转换为真值表的形式。
组合逻辑电路的设计方法:
根据给出的实际逻辑问题,求出实现这一逻辑功能的最简单逻辑电路。“最简”:是指电路所用的器件数最少,器件的种类最少,而且器件之间的连线最少,这在芯片设计中也称之为优化 Optimization。
2、时序逻辑电路分析设计
分为两类:
a、同步时序逻辑电路:有一个公共的时钟信号(共享的系统时钟信号 Sys_Clk)(从一到多,可以理解为时钟树 Clock Tree),电路中各记忆元件受它严格的统一控制,只有在该时钟信号有效沿(上升沿或者下降沿)到来时,记忆元件的状态才会统一发生变化,从而使得时序电路的输出发生变化,并且一个时钟信号有效沿只对应一次记忆元件的状态和电路输出状态的改变。
同步时序逻辑中最基本的储存元件是触发器。同步时序逻辑的核心逻辑用触发器实现,电路的主要信号、输出信号都由时钟信号驱动产生,可以很好的避免毛刺、有利于器件移植、有利于 STA 等等。
异步时序逻辑电路的分析方法:
b、异步时序逻辑电路:不存在单一的主控时钟,工作节奏不一致。由于异步电路没有统一的时钟,所以状态变化的时刻不稳定,因为电路状态的改变除了可以由部分时钟控制,还可以由外部输入的变化直接引起。而通常输入信号只在电路处于稳定状态时才发生变化,也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争 - 冒险现象。
异步时序逻辑中最基本的元件是锁存器。异步逻辑是时钟之间没有固定的因果关系。异步时序逻辑的核心逻辑使用组合电路实现,电路的主要信号、输出信号不依赖于任何一个时钟信号。容易产生毛刺、不利于器件移植、不利于 STA 等等。
异步时序逻辑电路的分析方法:
与同步时序逻辑电路的分析方法不同的是,在异步时序逻辑电路中,每次电路状态发生转换时并不是所有的触发器都有时钟信号(你需要找出每次电路状态转换时哪些触发器被触发哪些不被触发),而只有那些有 “时钟信号” 的触发器才需要用特性方程去计算次态,没有 “时钟信号” 的触发器将保持原来的状态不变。
5、以下是对Cache-主存-辅存三级存储系统中各级存储器的作用,速度,容量的描述,其中完全正确的是(B)。(大疆FPGA逻辑岗B卷)
A、主存用于存放CPU正在执行的程序,速度慢,容量极大
B、Cache用于存放CPU当前访问频繁的程序和数据,速度快,容量小
C、加大Cache的容量可以使主存储能够存放更多的程序和数据
D、辅存用存放需要联机保存但暂不执行的程序和数据,速度快,容量极大
解析:本题目主要考察了计算机系统中Cache的认识
逻辑综合(Logic Synthesis):利用工具将RTL代码转换为门级网表的过程。常见的逻辑综合工具是synopsys的design compile(DC);
综合一个设计的过程从读取RTL代码开始,通过施加时序约束关系,映射 产生一个门级网表文件;它可以分为三步:
如下图所示:逻辑综合=翻译+优化+映射
流程介绍:
(1)用RTL代码进行设计
即用可综合的RTL代码进行设计的编写;
(2)指定工艺库
在根据约束条件进行逻辑综合时,对于选择的流片工艺,工艺库会提供综合工具所需要的标准逻辑单元的全部信息,即工艺库含有特定工艺条件下的标准逻辑单元的逻辑功能、单元面积、输入到输出的时序关系、输出的扇出限制以及对逻辑单元进行时序检查所需要的信息等.综合工具将根据工艺库提供的这些信息,对器件进行选择和电路结构调整,使其达到时序收敛;主要包括以下几个库:
(3)读入RTL代码文件
将RTL代码输入给综合工具,由综合工具进行编译;
(4)定义环境的约束条件,主要包括:
(5)定义设计的约束条件,主要包括:
时钟定义的命令
设计规则约束
输入输出端口的延时
设置最大面积set_max_area
设置伪路径set_false_path
设置多周期路径set_multicycle_path
(6)设定综合策略
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。假设 Tco 是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间;Tdelay 是组合逻辑的延时;Tsetup 是 D触发器的建立时间。假设数据已被时钟打入 D 触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是 Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延 迟必须大于 Tco+Tdelay+Tsetup,也就是说最小的时钟周期 Tmin =Tco+Tdelay+ Tsetup,即最快的时钟频率 Fmax=1/Tmin。FPGA 开发软件也是通过这种方法来计算系 统最高运行速度 Fmax。因为 Tco 和Tsetup 是由具体的器件工艺决定的,故设计电路 时只能改变组合逻辑的延迟时间 Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。
由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的 N 块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是所谓"流水线"技术的基本设计思想,即原设计速度受限部分用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
本质区别是FPGA是半定制电路,MCU是定制电路。也可以说:单片机是成型的芯片;FPGA是用来设计芯片的芯片。单片机设计属软件范畴,它的硬件(单片机芯片)是固定的,通过软件编程语言描述软件指令在硬件芯片上的执行;而FPGA设计属硬件范畴,它的硬件(FPGA)是可编程的,是一个通过硬件描述语言在FPGA芯片上自定义集成电路的过程。
简单来说也还是定制和半定制的区别。从这一角度来讲,MCU属于一种ASIC。采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。FPGA可做其它全定制或半定制ASIC电路的中试样片。 FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
一文看懂fpga和单片机的区别-电子发烧友网 (elecfans.com)
MCU和ASIC区别:
微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。
ASIC芯片是用于供专门应用的集成电路(ASIC,Application Specific Integrated Circuit)芯片技术,在集成电路界被认为是一种为专门目的而设计的集成电路。
从概念上来讲,锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值。简单而言,锁存器的输入有数据信号和使能信号,当处于使能状态时,输出随着输入变化而变化,当不处于使能状态时,输入信号怎么变化都不会影响输出。
锁存器:是一种对电平(也就是0或者1)敏感的存储单元电路;
触发器是对脉冲边沿敏感的器件,它的变化只会在时钟的上升沿或者下降沿到来的瞬间改变。
触发器:是一种对脉冲边沿(即上升沿或者下降沿)敏感的存储电路。
锁存器是电平触发的,触发器是边沿触发的。如果是电平触发的,当使能的时候,如果输入信号不稳定, 那么输出就会出现毛刺。而触发器就不会出现这种问题,他的变化只会在边沿的时候触发。
首先,latch是电平触发的,这样就容易产生毛刺;
其次,latch将静态时序分析变得极其复杂;
再者latch会浪费硬件资源(对FPGA而言)。因为在FPGA当中,是没有latch单元的,要生成latch单元需要耗费其他资源。
由于if或者case语句的逻辑表达不完全会产生latch。
register是寄存器,用于暂时存放参与运算的数据和运算结果。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。
always(*)里面的所谓“reg”,其实和wire没有区别,为了方便称呼,我把wire和这类“reg”统称作“类wire”。
①类wire型的数据“自己等于自己”的情况下会产生latch;
②类wire型的数据,由于if或者case语句的逻辑表达不完全,会产生latch。
电路设计的难点在时序设计,时序设计的实质就是满足每一个触发器的建立时间、保持时间的要求,从而达到时序收敛的过程,扩大一点地说,就是使得数据能够在正确的时间到达从而正确地被处理。
时序收敛是现场可编程逻辑门阵列、专用集成电路的电路设计过程中,通过调整、修改设计,从而使得所设计的电路满足时序要求的过程。
时序约束是规范设计的时序行为,主要包括周期约束,偏移约束,静态时序路径约束三种,通过附加时序约束,可以指导综合工具和布局布线工具,使设计达到时序要求。
时序约束的作用:
1:提高设计的工作频率(减少了逻辑和布线延时);
2:获得正确的时序分析报告;(静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具可以正确的输出时序报告)
3:指定 FPGA/CPLD 的电气标准和引脚位置。
a、在通常的 FPGA 设计中对时钟偏差的控制主要有以下几种方法:
b、FPGA 设计中对时钟的正确操作(例如分频等等)如下:
时钟抖动jitter:指芯片的某一个给定点上时钟周期发生暂时性变化,也就是说时钟周期在不同的周期上可能加长或缩短。它是一个平均值为0的平均变量。
时钟偏移Skew:指全局时钟产生的各个子时钟信号到达不同触发器的时间点不同,是时钟相位的不一致。时钟偏移有两种类型:负偏斜和正偏斜。当时钟到达接收寄存器比到达发送寄存器晚时,会发生正偏移;负偏斜是相反的,即接收寄存器比发送寄存器更早地获得时钟触发。
jitter主要受外界干扰引起,通过各种抗干扰手段可以避免。而skew由数字电路内部各路径布局布线长度和负载不同导致,利用全局时钟网络可尽量将其消除。
竞争:在组合逻辑电路中,信号经过多条路径到达输出端,每条路径经过的逻辑门不同存在时差,在信号变化的瞬间存在先后顺序。这种现象叫竞争。
冒险:由于竞争而引起电路输出信号中出现了非预期信号,产生瞬间错误的现象称为冒险。表现为输出端出现了原设计中没有的窄脉冲,即毛刺。
时钟偏差(Clock Skew),是指同一个时钟域内的时钟信号,到达各个模块(如寄存器)所用的时间偏差;
时钟偏差主要分为两类,正偏差和负偏差:
时钟抖动(Clock Jitter):是相对于理想时钟沿而言,实际时钟所存在的不随时间积累的、时而超前、时而滞后的偏移(时钟脉冲宽度发生了暂时的变化,也就是 Tcycle 或大或小);
包括语句覆盖率、路径覆盖率、状态机覆盖率、触发覆盖率、表达式覆盖率。对于复杂的设计来说,Verilog代码覆盖率检查是检查验证工作是否完全的重要方法
数字电路的功耗有2部分构成,其一是静态功耗,在CMOS电路中静态功耗主要是由漏电流引起的功耗,控制这部分功耗主要决定于生产工艺和所用的材料;其二是动态功耗,动态功耗是由翻转电流和短路电流引起的功耗,其中翻转电流引起的功耗称为翻转功耗,短路电流引起的功耗称为短路功耗。而影响这部分功耗的因素很多,如电路设计的方式,线路的复杂程度,工作时时钟频率等。
低阈值的标准逻辑单元:速度快、漏电流大;高阈值的标准逻辑单元:速度慢、漏电流小。总结:在设计中可以在关键路径上使用低阈值的标准逻辑单元来优化时序,在非关键路径上使用高阈值的标准逻辑单元来优化漏电流。
优点:A可以大大减少系统的静态功耗;B没有任何面积开销,工艺库设计是将两种阈值库中的相应单元的面积设计成一样,这样可以方便替换。
电源门控(Power Gating)方法。
如上图所示,电源开关单元(Power Switch Cell)中的高阈值MOS管作为电源闸门,用来将低阈值电源和地隔离开。 在正常工作状态,Sleep信号为低电平,高阈值MOS管处于导通状态;当处于睡眠状态时,Sleep信号为高电平,切断电源,并且由于采用了高阈值MOS管作为开关,可以有效地减少漏电流。
体偏置(Body Bias)
晶体管阈值电压随体偏置而变化。在工作模式下,MOS管的体偏置为0,MOS管处于低阈值状态,翻转速度快。在等待模式下,MOS管的体偏置为反向偏置,处于高阈值状态,漏电小。
门控时钟(Clock Gating)
(3条消息) 数字IC(SoC)低功耗设计方法总结_wangkai_2019的博客-CSDN博客_低功耗设计方法有哪些
亚稳态:是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。
亚稳态产生的原因:触发器输入数据信号违反了触发器建立时间和保持时间的要求,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。
亚稳态的解决办法:
把规模较大、层次较多的组合逻辑电路分为几级,在每一级插入寄存器组并暂存中间数据。K级流水线就是从组合逻辑的输入到输出恰好有K个寄存器组,上一级的输出是下一级的输入而又无反馈的电路。
流水线深度并不是越大越好。在提高电路速度和吞吐的同时,电路的面积也随之加大。所以必须根据具体的需求来对流水深度进行择优选择。