赞
踩
本贴记录一下自己找工作过程中顺下来的知识点,如有错误的,请不吝指出,共同进步!
FPGA基于LUT,LUT本质上就是一个RAM,每一个LUT可以看成一个有4位地址线的16x1的RAM。这也是为什么FPGA需要外接一个rom来上电配置。
包括CLBs,I/O块,RAM块和可编程连线。
在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构。
复杂可编程逻辑器件Complex Programming logic device
采用CMOS EPROM、EEPROM、快闪存储器和SRAM等编程技术,从而构成了高密度、高速度和低功耗的可编程逻辑器件。
由逻辑块、可编程互连通道和I/O块三部分构成 。
这种基于乘积项(实际就是与或阵列)的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。布线方式是全局的,所以延时可预测。CPLD适合做逻辑设计。
FPGA芯片内有两种存储器资源:一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器(也就是分布式RAM)。
BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。
(1)ROM(Read-Only Memory,只读存储器)只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出。
可编程只读存储器(PROM);
可擦可编程序只读存储器(EPROM);
带电可擦可编程只读存储器(EEPROM,一般使用 IIC 接口读写)。
(2)RAM(Random Access Memory,随机存取存储器),而且速度很快,RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果,比如计算机的8G内存,掉电丢失;
(3)SRAM(Static Random-Access Memory,静态随机存取存储器)是 RAM 的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以保持;
(4)DRAM(Dynamic Random Access Memory,动态随机存取存储器),需要周期性地更新存储数据,所以叫“动态”。
SRAM 和 DRAM 比较:
SRAM 不需要动态刷新,速度快,性能高,但是功耗大、集成度低,同时体积也比 DRAM 大,由此 SRAM 的造价更高。
(5)SDRAM(Synchronous Dynamic Random-access Memory,同步动态随机存取内存),是有同步接口(Synchronous)的 DRAM,系统读写能够同步;
第一代 SDRAM 是 SDR 单数据速率,其后第二代 DDR SDRAM、第三代 DDR2 SDRAM、第四代 DDR3 SDRAM、第五代 DDR4 SDRAM 均为双倍速率的存储器,一般简称 DDR。
DDR:Double Data Rate。
(6)Flash 存储器,又叫闪存,非易失性存储器件。结合 RAM 和 ROM 的优点,既能电可擦除,不掉电丢数据(ROM),又能快速读写数据(RAM),U盘大部分使用的是 Flash 技术,所以你知道了,不丢数据,可读可写,还挺快,但是还是不如 RAM 快。
FLASH主要分NAND FLASH和NOR FLASH。(NOR和NAND是两种非易失闪存):
存储器容量如16K × 8,其中8为字长,即每个存储单元的字长,16K为存储单元的数量,因此地址线数量n有 2^n = 16K = 16*2^10 = 2^14,即n=14,数据线数量N = 8;
触发器构成寄存器(有时钟;通常为边沿D触发器,数据先有效,控制信号后有效)。
寄存器:一般是边沿触发的触发器,在时序电路中寄存器的作用就是只在时钟的边沿有效传输data(满足建立时间和保持时间使得数据是稳定被采得)。
在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能够构成一个存储n位二进制码的寄存器。
锁存器由钟控D触发器(无时钟;控制信号先有效,数据后有效;由于不锁存数据的时候输出随输入变化而变化,输出有毛刺,在FPGA中尽量避免使用)。
当一个always块中没有else时,给定条件下变量没有赋值,变量将会保持原值,即生成一个锁存器保存该值;
同理,当case语句没有default时也会生成锁存器(默认保持原值)
锁存器:由电平触发,比如JK和RS等。一般用在传输门和反向器。由若干钟控D触发器构成的一次能存储多位二进制代码的时序逻辑电路。数据有效比时钟信号有效晚(也就是先时钟信号有效,后数据有效)。这意味着时钟信号先到,数据信号后到。其优点是面积小,但是时序分析困难。
通常所说的锁存器,大多是电平敏感型D触发器,而通常所说的寄存器是边沿敏感型D触发器。钟控D触发器是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情况下输出随输入变化,边沿触发器只有在边沿跳变的情况下输出才变化。
c) 触发器flip-flop
触发器是边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿进行同步的。触发器是计算机记忆装置的基本单元,一个触发器能储存一位二进制代码。
寄存器是由触发器组成的。一个触发器可以组成一个一位的寄存器,多个触发器可以组成一个多位的寄存器。
存储器是由大量寄存器组成的,其中每一个寄存器就称为一个存储单元。它可以存放一个有独立意义的二进制代码。
触发器→寄存器→存储器
(1) 寄存器是同步时钟控制,而锁存器是电位信号控制。锁存器一般由电平信号控制,属于电平敏感型。寄存器一般由时钟信号控制,属于边沿敏感型。
(2) 寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化。
可见,寄存器和锁存器具有不同的应用场合,取决于控制方式以及控制信号和数据之间的时间关系:
若数据有效一定滞后于控制信号有效(锁存信号(控制信号)来了以后,才将输出端的状态/数据锁存起来),只能使用锁存器;
如果数据提前于控制信号而到达且要求同步操作,则可以用寄存器来存放数据。
换言之,控制信号/时钟信号先来,数据后来,用锁存器;
控制信号/时钟信号后来,数据先来,用寄存器。
register在同一时钟边沿触发下动作,符合同步电路的设计思想,而latch则属于异步电路设计,往往会导致时序分析困难,不适当的应用latch则会大量浪费芯片资源。
如果我们把 case 中最后一条注释掉,会发现分析出来的电路变成了这样:
可以看到电路复杂很多,更是多了 RTL_LATCH 这个块,及锁存器。原因很简单,因为当输入为 2’b11 时,根据我们的代码它没有给出 oS 应该是什么,那么它只能保持之前的值,及有了存储功能。但又没有时钟,那它只能成为锁存器。这样的设计是FPGA 中需严格避免的,因为它会占用大量资源而且时序上不稳定。
当全局时钟资源消耗完了,不够用,可以使用第二全局时钟资源,他的驱动能力和时钟抖动延迟仅次于全局时钟信号,他是通过片内的高速行列总线实现的,不像全局时钟总线是一条专用总线。
原来FPGA的管脚上有一类专用的时钟管脚、他们一般用于将外部的时钟信号引入FPGA、并在FPGA module中使用这些引入的时钟信号。
但是如果设计时管脚分配没做好、或者管脚不够用了,那么就有可能将本该接入专用时钟管脚(或者叫做全局时钟管脚)的信号,接到了普通IO口上,这样只能通过添加CLOCK_DEDICETED_ROUTE FLASE绕过PAR的检查,但是没有解决根本问题。
专用时钟引脚,可以减少时钟偏斜带来的影响,提高最大工作频率
全局时钟:FPGA内部的专用全局时钟布线资源,具有直达每一个触发器的能力,且布线资源经过优化,时钟经过它传输后具有高扇出、最小的偏斜和抖动等。但也因为是全局布线相较于区域时钟,会有较大的插入延时(手册也这么说),而且资源较少(且用且珍惜)。
全局时钟网络:
1)可由CLK引脚、内部PLL、高速串口(HSSI)、普通逻辑电路产生的时钟(一般不这么干)驱动;
2)可驱动所有输出引脚(尤其是CLK引脚,输出作为其他芯片的基础时钟)、内部PLL、区域时钟。
区域时钟:只在他们自己所在的区域有效,相当于区域内的全局时钟,在区域内,具有全局时钟的优点,且插入延时比全局时钟小,布线资源也比较多。
区域时钟网络:
1)可由CLK引脚(注意区域)、内部PLL、高速串口(HSSI)、普通逻辑电路产生的时钟(一般不这么干)驱动;
2)可驱动所有输出引脚(尤其是CLK引脚,输出作为其他芯片的基础时钟)、内部PLL。
查找表(look-up-table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可
在进行整数除法运算时,结果值要略去小数部分,只取整数部分。而进行取模运算时,结果值的符号位采用模运算式里第一个操作数的符号位
在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x。
两个长度不同的数据进行位运算时,系统会自动的将两者按右端对齐.位数少的操作数会在相应的高位用0填满,以使两个操作数按位进行操作.
"=="和"!="又称为逻辑等式运算符。其结果由两个操作数的值决定。由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。
"==="和"!=="运算符则不同,它在对操作数进行比较时对某些位的不定值x和高阻值z也进行比较,两个操作数必需完全一致,其结果才是1,否则为0。"==="和"!=="运算符常用于case表达式的判别,所以又称为"case等式运算符"。
动态截取固定长度的数据 vect[base+:width]或[base-:width]
base可以为可变,width必须为常量
对 12.918 做无损定点化,需要的最小位宽是多少位,位宽选择11位时的量化误差是多少?
(1)首先对于整数部分的12,至少需要4-bit量化;
(2)对于小数部分的0.918,只要量化的误差小于最小精度的一半,就可以认为是无损量化。当小数部分使用8-bit量化时,0.918*(2^8)=235.008,即采用8-bit量化时的误差为0.008/(2^8)=0.00003125,使用8-bit量化时的精度为1/(2^8)=0.00390625,量化误差小于精度的一半,满足“无损”量化,所以12-bit量化(整数4,小数8)可以满足“无损”。
当小数部分使用7-bit量化,0.918*(2^7)=117.504,量化误差为0.504/(2^7),量化的精度为1/(2^7),显然量化误差大于精度的一半(0.504>0.5),不满足无损量化,量化误差为0.504/(2^7)=0.0039375。
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine),主要分为2大类:
第一类,输出只和状态有关而与输入无关,则称为Moore状态机;
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。
实现相同的功能时,Mealy型比Moore型能节省一个状态(大部分情况下能够节省一个触发器资源,其余情况下使用的资源相同,视状态数和状态编码方式决定),Mealy型比Moore型输出超前一个时钟周期。
由于Mealy型状态机的输出与输入有关,输出信号很容易出现毛刺,所以一般采用Moore型状态机。
编码方式:二进制,格雷码和独热码
二进制转换为格雷码:GL=B^(B>>1)----高位、次高位异或
格雷码转换为二进制:B[i]=B[i+1]^GL[i]----最高位不变,高位、次高位异或
二段式、三段式
current_state\next_state---状态跳转条件---状态内执行
Verilog低功耗设计
对比项 | UART | SPI | I2C |
信号线数量 | 3根(TX、RX、GND) | 4根(SDI、SDO、SCLK、CS) | 2根(SDA、SCLK) |
设备主从关系 | 无 | 片选信号SS选择从机,一主多从 | 器件地址选择从机,多主从 |
通信方式 | 全双工 | 全双工 | 半双工 |
通信速率 | 根据波特率计算 115200、9600 不超过20Kbps | 受限于时钟信号SCLK的速率和最大SPI传输速率,可达10Mbps | 100k、400k 3.4 Mbps |
传输距离 | IO口使用上拉电阻,抗干扰能力较弱,常用于板卡上芯片间的通信 | ||
通信特征 | 异步传输,一帧可传输5/6/7/8位 | 同步传输 | 同步传输 |
先传输位 | 起始位、数据位、(奇偶校验位、停止位) 低位LSB | 高位MSB | 高位MSB |
RS232\RS422\RS485仅是关于UART通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面)。依靠检测起始位来实现发送与接收方的时钟自同步。
RS-232 | RS-485 | |
抗干扰性 | 使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰。 | 采用平衡驱动器和差分接收器的组合,抗噪声干扰性好 |
传输距离 | 最大传输距离标准值为 50 米,实际上也只能用在 15 米左右。 | 最大传输距离标准值为 1200 米(9600bps 时),实际上可达 3000 米 |
通信能力 | 只允许一对一通信 | 总线上是允许连接多达128个收发器,用户可以利用单一的 RS-485 接口方便地建立起设备网络 |
传输速率 | 传输速率较低,在异步传输时,波特率为 20Kbps | 数据最高传输速率为 10Mbps |
信号线 | 只使用 RXD、TXD、GND 三条线 | 半双工网络,一般只需二根信号线 |
电器电平值 | 逻辑"1",-5- -15V;逻辑"0 " +5- +15V 接口的信号电平值较高,易损坏接口电路芯片,又因为232电平与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接; | 逻辑"1"以两线间的电压差为+(2-6) V 表示;逻辑"0"以两线间的电压差为-(2-6)V 表示 |
根据时钟极性(CKP)和时钟相位(CKE)的组合有四种模式:
CKP = 0:时钟空闲IDLE为低电平 0;
CKP = 1:时钟空闲IDLE为高电平1。
CKE = 0:在时钟信号SCK的第一个跳变沿采样;
CKE = 1:在时钟信号SCK的第二个跳变沿采样。
优点:
缺点:
I2C读取AHT10温湿度传感器
VDD、GND电源引脚:AHT10的供电范围为1.8-3.6V,推荐电压为3.3V。
SCL串行时钟:用于微处理器(FPGA)与AHT10之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCL频率。
SDA串行数据:用于传感器的数据输入和输出。
当向传感器发送命令时,SDA在串行时钟SCL的上升沿有效,且当SCL为高电平之后,SDA必须保持稳定。在SCL下降沿之后,SDA值可被改变。SDA的有效时间在SCL上升沿之前的TSU和下降沿之后的TH0。
当从传感器读取数据时,SDA在SCL变低以后有效,且维持到下一个SCL下降沿。(标准I2C)
传感器读取流程:
常用逻辑电平:12V,5V,3.3V;
常用的逻辑电平标准有:TTL、CMOS、LVTTL、ECL、PECL、GTL;RS232、RS422、LVDS。
高速逻辑电平:LVDS、GTL、PGTL、CML、HSTL、SSTL等。
TTL:0.3~3.6V
CMOS:5V或者12V
TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是在12V/5V的
TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V
CMOS输出接到TTL是可以直接互连
上拉电阻用途:
上拉电阻阻值的选择原则包括:
1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。
2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。
3、对于高速电路,过大的上拉电阻可能边沿变平缓。
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制数位中“1”的个数是奇数或偶数来进行校验。
采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
举例,要输出一组8-bit数据,为“11101000”,该组数据共有4个“1”。若使用奇校验,则校验位应为1,传输数据实际为8-bit数据+1-bit奇校验位,即“111010001”;若使用偶校验,则校验位应为0,传输数据实际为8-bit数据+1-bit偶校验位,即“111010000”。
奇偶校验是数据通信中常用的校验模式,可以简便地校验数据是否出错,但是只知道数据是否出错,却不能纠正数据。
奇校验指的是,加上校验位,共有奇数个1,偶校验指的是,加上校验位共有偶数个1。可以把所有数据位加起来,观察结果是奇数还是偶数来确定数据中1的个数,也可以用按位异或的方法快速判断。
12bit 65Msps ±5V输入电压 1/2V基准电压 多级差分流水线架构
支持差分输入和单端输入
我们设计的电路选择的是 AD9226 内部基准源,VREF 是基准电压输出端口,可提供 1V 和 2V 两种基准电压。通过 SENSE 来进行选择,当 SENSE 与 GND 连接时,提供 2V 基准电压;当 SENSE 与 VREF 连接时,提供 1V 基准电压。
我们选择的接法为提供 2V 基准电压的连接方式。我们在电路中利用了这个 2V 基准电压,来设计衰减电路。
当 VREF=2V 时,VINA 的输入范围为 2V(3V-1V=2V);
当 VREF=1V 时,VINA 的输入范围为 1V(1.5V-0.5V=1V)。
衰减电路将±5V的输入电压衰减到VINA支持的1~3V
全并行接口(Parallel Interface)
全并行通信,在时钟驱动下,每一个采样时钟同时对12个引脚进行电压比较,并行输出12位数据
逐次逼近型ADC是应用非常广泛的模/数转换方法,它包括1个比较器、1个数模转换器、1个逐次逼近寄存器(SAR)和1个逻辑控制单元。它是将采样输入信号与已知电压不断进行比较,1个时钟周期完成位转换,N位转换需要N个时钟周期,转换完成,输出二进制数。
这一类型ADC的分辨率和采样速率是相互矛盾的,分辨率低时采样速率较高,要提高分辨率,采样速率就会受到限制。
优点:分辨率低于12位时,价格较低,采样速率可达1MSPS;与其它ADC相比,功耗相当低。
缺点:在高于14位分辨率情况下,价格较高;传感器产生的信号在进行模/数转换之前需要进行调理,包括增益级和滤波,这样会明显增加成本。
积分型ADC又称为双斜率或多斜率ADC,它的应用也比较广泛。它由1个带有输入切换开关的模拟积分器、1个比较器和1个计数单元构成,通过两次积分将输入的模拟电压转换成与其平均值成正比的时间间隔。与此同时,在此时间间隔内利用计数器对时钟脉冲进行计数,从而实现A/D转换。
积分型ADC两次积分的时间都是利用同一个时钟发生器和计数器来确定,因此所得到的D表达式与时钟频率无关,其转换精度只取决于参考电压VR。此外,由于输入端采用了积分器,所以对交流噪声的干扰有很强的抑制能力。能够抑制高频噪声和固定的低频干扰(如50Hz或60Hz),适合在嘈杂的工业环境中使用。这类ADC主要应用于低速、精密测量等领域,如数字电压表。
优点:分辨率高,可达22位;功耗低、成本低。
缺点:转换速率低,转换速率在12位时为100~300SPS。
∑-Δ转换器又称为过采样转换器,它采用增量编码方式即根据前一量值与后一量值的差值的大小来进行量化编码。
∑-Δ型ADC包括模拟∑-Δ调制器和数字抽取滤波器。∑-Δ调制器主要完成信号抽样及增量编码,它给数字抽取滤波器提供增量编码即∑-Δ码;数字抽取滤波器完成对∑-Δ码的抽取滤波,把增量编码转换成高分辨率的线性脉冲编码调制的数字信号。因此抽取滤波器实际上相当于一个码型变换器。
优点:分辨率较高,高达24位;转换速率高,高于积分型和压频变换型ADC;价格低;内部利用高倍频过采样技术,实现了数字滤波,降低了对传感器信号进行滤波的要求。
缺点:高速∑-△型ADC的价格较高;在转换速率相同的条件下,比积分型和逐次逼近型ADC的功耗高。
流水线结构ADC,又称为子区式ADC,它是一种高效和强大的模数转换器。它能够提供高速、高分辨率的模数转换,并且具有令人满意的低功率消耗和很小的芯片尺寸;经过合理的设计,还可以提供优异的动态特性。
流水线型ADC由若干级级联电路组成,每一级包括一个采样/保持放大器、一个低分辨率的ADC和DAC以及一个求和电路,其中求和电路还包括可提供增益的级间放大器。快速精确的n位转换器分成两段以上的子区(流水线)来完成。
首级电路的采样/保持器对输入信号取样后先由一个m位分辨率粗A/D转换器对输入进行量化,接着用一个至少n位精度的乘积型数模转换器(MDAC)产生一个对应于量化结果的模/拟电平并送至求和电路,求和电路从输入信号中扣除此模拟电平。并将差值精确放大某一固定增益后关交下一级电路处理。经过各级这样的处理后,最后由一个较高精度的K位细A/D转换器对残余信号进行转换。
将上述各级粗、细A/D的输出组合起来即构成高精度的n位输出。
优点:有良好的线性和低失调;可以同时对多个采样进行处理,有较高的信号处理速度,典型的为Tconv<100ns;低功率;高精度;高分辨率;可以简化电路。
缺点:基准电路和偏置结构过于复杂;输入信号需要经过特殊处理,以便穿过数级电路造成流水延迟;对锁存定时的要求严格;对电路工艺要求很高,电路板上设计得不合理会影响增益的线性、失调及其它参数。
逐次逼近型、积分型、压频变换型等,主要应用于中速或较低速、中等精度的数据采集和智能仪器中。
分级型和流水线型ADC主要应用于高速情况下的瞬态信号处理、快速波形存储与记录、高速数据采集、视频信号量化及高速数字通讯技术等领域。
∑-Δ型ADC主应用于高精度数据采集特别是数字音响系统、多媒体、地震勘探仪器、声纳等电子测量领域。
信号带宽的两倍称为奈奎斯特采样率。而采样率高出奈奎斯特采样率时,称为过采样。通常据此将 ADC 分为两类:奈奎斯特 ADC 和过采样ADC
其中奈奎斯特ADC主要包括:Flash ADC,逐次逼近型ADC和流水线型ADC等;
过采样ADC以sigma-delta ∑-Δ ADC为主
双通道 14位并行接口 125Msps转换速率
差分电流输出,满量程范围2~20mA
IoutA = (DAC_code/16384) * Ioutfs
IoutB = (16384 - DAC_code)/16384) * Ioutfs
自带1.2V参考电压,无需外部参考源
将电流转换为电压,并执行两级放大,信号输出为±5V
可通过芯片的模式管脚配置成
同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步
异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,其逻辑输出与任何时钟信号都没有关系,译码输出产生的毛刺通常是可以监控的。
同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。
同步逻辑是时钟之间有固定的因果关系。
异步逻辑是各时钟之间没有固定的因果关系。
在组合电路中,某个变量(或信号)经过两条以上的路径到达输出端时,由于不同路径上的延迟时间不一样,达到输出端的时间就会有先有后,这一现象称作竞争。(这种竞争也称作逻辑竞争,相应的还有功能竞争)
由于存在走线延时、逻辑门延时,组合逻辑的输出并非同时,因此会出现不正确的信号,比如一些很小的脉冲尖峰信号--毛刺,如果一个组合逻辑电路出现毛刺,则说明该电路存在冒险
竞争是冒险的必要不充分条件:有竞争现象不一定就会产生冒险,但有冒险就一定存在竞争
判断方法:
•代数法: 如果布尔式中有相反的信号则可能产生竞争和冒险现象,即逻辑函数在一定条件下可以化简成 Y=A+A’或 Y=AA’则可以判断存在竞争冒险现象(只是一个变量变化的情况);
•卡诺图:有两个相切的卡诺圈并且相切处没有被其他卡诺圈包围,就有可能出现竞争冒险;
•实验法+观察法:示波器观测;
消去竞争冒险:
→加一级寄存器锁存结果可解决毛刺问题(引入时序逻辑,只要保证建立时间和保持时间就能很大程度上保证数据的稳定性),因此时序逻辑电路优于组合逻辑电路
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;
保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。
在理想情况下,只要在时钟沿来临时,有效数据也来临(时钟沿之前或同时),则能够正确采集到数据;而在时钟沿之后(或同时),即使数据发生变化,也不会影响DFF的输出了。
然而在实际中,上升沿打开开关需要时间,逻辑门的状态改变(电容充放电等)都需要时间,因此数据的采集是需要一定时间的,在这个时间内数据不能发生变化。上升沿时候开关关闭也需要时间,如果在这个时间段内数据有变化的话,那么新数据就有可能被传递到下一级,进而发生错误,所以数据必须保持一定时间不变。
发生亚稳态的原因是信号在传输的过程中不能满足触发器的建立时间和保持时间。发生亚稳态时,触发器的输出是个中间态,也是x态,不能确定为0或1,而且这个亚稳态还会往后传递至更多的组合逻辑和时序逻辑电路
常发生在跨时钟域信号的传输上,因为数据可能在任何时间到达异步时钟域的目的寄存器,无法保证满足T_su/T_h的要求
减小亚稳态发生概率:
亚稳态震荡时间Tmet关系到后级寄存器的采集稳定问题
Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。
亚稳态的危害:
由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。
逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。
pin2reg / reg2pin分析时,要加上时钟/数据从源寄存器到引脚,以及引脚到目的寄存器引脚的走线时间
源寄存器lauch clock 目的寄存器latch clock
两者之间通常相差一个时钟周期
时序分析:
Tclk1:时钟到达源寄存器1的时间
Tclk2:时钟到达目的寄存器2的时间
Tco: 时钟到达reg1的clk端 到 数据从Q端输出 的时间(数据锁存在寄存器里的时间)---可以理解为寄存器的输出延时
Tdata:数据传输过程中经过的组合逻辑、走线延时
Tskew:时钟偏斜,= Tclk2- Tclk1
Tslack:建立时间余量
时序要求:
建立时间:
数据到达时间(Tclk1+ Tco+ Tdata)<=数据要求时间(Tclk+ Tclk2-Tsu)
→ Tclk1+ Tco+ Tdata <= Tclk+ Tclk2-Tsu
→ 建立时间余量Tslack = Tclk+ Tskew -Tsu- Tco- Tdata >= 0
保持时间:
→ Tclk1+ Tco+ Tdata <= Tclk2+Th
→ 保持时间余量Tslack = Tskew + Th – Tco - Tdata >= 0
建立时间决定触发器之间的组合逻辑的最大延迟
保持时间决定触发器之间的组合逻辑的最小延迟
实际设计中往往是建立时间Tsu影响着Fmax,关键路径就是输入到输出延时最大的路径,找到了关键路径便能求得最大时钟频率。
给定reg的setup,hold时间,求中间组合逻辑的delay范围.
Delay < period - setup – hold
关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我认为还需要加上布线的延迟),也就是说关键路径是对设计性能起决定性影响的时序路径。
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。
假设Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco=Tsetpup+Thold);
Tdelay是组合逻辑的延时;
Tsetup是D触发器的建立时间。
假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。
FPGA开发软件也是通过这种方法来计算系统最高运行速度Fmax。因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。
由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。
面积优化,提高资源利用率以降低功耗要求:串行化,资源共享,逻辑优化;
速度优化,提高运行速度:流水线设计,寄存器配平,关键路径优化,迟置信号后移。
同步复位在时钟沿变化时,完成复位动作。
异步复位不管时钟,只要复位信号满足条件,就完成复位动作。
异步复位对复位信号要求比较高,不能有毛刺,如果其与时钟关系不确定,也可能出现亚稳态。
同步复位(敏感列表不加rst_n,) always @(posedge clk)
用不到寄存器的CLR端口
优点:
1).有利于仿真器的仿真;
2).有利于静态时序分析工具的分析;
3).由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺。
缺点:
1).由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加 FPGA 内部的逻辑资源,另一方面也增加了相应的组合逻辑门时延。
2).复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑诸如时钟偏移、组合逻辑路径延时、复位延时等因素(所以复位信号有时需要脉冲展宽,用以保证时钟有效期间有足够的复位宽度)
3).同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。
异步复位(敏感列表里加入rst_n) always @(posedge clk or negedge rst_n)
在同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态。同样的道理,对于一个异步复位寄存器来说,同样异步复位信号同样需要和时钟满足recovery time和removal time 才能有效进行复位操作和复位释放操作,防止输出亚稳态。
优点:
1). ASIC库或FPGA器件的DFF都提供异步复位端口,无需多加的逻辑资源产生;
2).设计相对简单
3).复位信号不依赖于时钟,产生和响应都很方便。
缺点:
1) .属于异步逻辑,复位释放接近时钟有效沿时容易使得触发器的输出进入亚稳态;
2) 可能因为噪声或者毛刺造成虚假复位信号;
3) 静态时序分析困难,静态时序分析一般是针对同步设计,基于时钟周期分析时序;
4) 对于 DFT设计,如果复位信号不是直接来自于 I/O 引脚,在 DFT 扫描和测试时,复位信号必须被禁止,因此需要额外的同步电路。
对于时钟和异步复位信号
recovery恢复时间:在有效的时钟沿来临前,异步复位信号保持稳定的最短时间;
removal移除时间:在有效的时钟沿来临后,异步复位信号保持稳定的最短时间;
如果异步复位信号的撤销时间在Trecovery(恢复时间)和 Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。
异步复位、同步释放 → 打两拍寄存数据,解决亚稳态问题
(异步信号同步化)
通过时序约束可以综合布线工具调整映射和布局布线,使设计达到时序要求。
时序约束主要包括:
时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。
附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步元件进行分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD路径附加约束。
附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。
时序约束作用:
对同步逻辑来说,常用的时序优化方法包括Pipeline、Retiming、逻辑复制、加法/乘法树、关键信号后移、消除优先级等解决方法
组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,因为这种设计中额外插入寄存器增加的时钟周期延时并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,也即额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。当然,其不可避免地会带来部分面积的增加
在不增加寄存器个数的前提下,通过改变寄存器的位置来优化关键路径,可以对比和流水线插入寄存器的不同。
本身确实不需要优先级的地方,可以使用case代替if…else,使得顺序执行的语句编程并行执行。如果确实有优先级,则不能这样做。这种消除代码中的优先级的策略也称为代码结构平坦化技术,主要针对那些带优先级的编码结构。
当某个信号的扇出fanout比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。高扇出的危害是大大增加了布局布线的难度,这样其扇出的节点也就无法被布局得彼此靠近,所以就导致了布线长度过大的问题。
关键输入应该在逻辑最后一级提供,其中关键输入为芯片、Slice、或者LUT提供的时延最大的输入,比如在if…else if…链中,将关键信号放在第一级。
异步电路一般是通过加buffer、两级与非门等来实现延时,但这是不适合同步电路实现延时的。
同步电路中,对于比较大的和特殊要求的延时,一半通过高速时钟产生计数器,通过计数器来控制延时;对于比较小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。
不同的时钟域之间信号通信时需要进行同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响
整体思路:
当同步的是地址时,一般该地址应采用格雷码,因为格雷码每次只变一位,相当于每次只有一个同步器在起作用,这样可以降低出错概率,异步FIFO的设计中,比较读写地址的大小时,就是用这种方法。如果两个时钟域之间传送大量的数据,可以用异步FIFO来解决问题
对于同步时钟域来说,各个时钟同频/不同频但有固定相位关系,这时只需要保证数据满足建立和保持时间的要求就可以避免亚稳态的产生;
对于异步时钟域来说,读写时钟没有固定的相位关系,必须采取措施来保证亚稳态的产生: 亚稳态产生概率=(建立时间+保持时间)/时钟周期
展宽:
快时钟域传输到慢时钟域不一定能够检测到,易发生漏采,为此,在慢采快的情况下,通常采用数据展宽的方式进行传输:
FIFO:
异步FIFO中判断空满时地址数据也要进行读写时钟域之间的相互传输,要先将地址转换成格雷码,防止空满判断出现错误;
二进制转换为格雷码:GL=B^(B>>1)----高位、次高位异或
格雷码转换为二进制:B[i]=B[i+1]^GL[i]----最高位不变,高位、次高位异或
握手:
多时钟域的设计中,对于信号跨时域的处理这里可以采用乒乓操作的方法来进行。
乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。
在第1个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;
在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理;
在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。
乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块” 进行运算与处理。
把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。还可以节约缓冲区空间。
还有一种方法,FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,
假设其AD采集的速率为16 位 100K SPS,那么每秒的数据量为100K×16bit=1.6Mbps,PCI总线的速度为率33MHz,总线宽度32bit,其最大传输速为1056Mbps
流水线设计是verilog设计中基本功之一,是对组合逻辑系统的分割,并在各个部分之间插入寄存器,并暂存中间数据的方法。
流水线操作的目的是把一个大操作分解为若干小操作,因为每一步操作变小了,所以时间更短,频率更快(面积换时间)。流水线在理各个阶段都需要增加寄存器保存中间计算状态,而且多条指令并行执行会导致功耗增加,硬件复杂度增加
流水线的实现方式:
------------------------------------------------
后续可能还会有补充,,,,,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。