的设计效率。如何构建这些存储器阵列,以及如何实现它们之间的可编程互联,形成了可编程器件的发展目标。
FPGA 现场可编程门阵列
逻辑单元阵列:4输入单输出存储器,附带输出选择控制;
可编程连线资源:由大量三态器件进行单向、双向或多向连线选择控制; 可编程IO端口:由三态器件进行控制;
FPGA设计特点
根据系统设计对单元数量的需求选择集成器件,通常采用单片设计实现系统设计; 选用集成块内的可编程单元数量通常多于设计需求,设计优化目标主要体现在速度和频率上; 运算速度主要由连线延迟决定,每个单元的延迟(单元及相应连线延迟)可作为延迟的基本单元,设计优化的目标应以减少路径上的单元数量为主。
可编程逻辑单元可实现任意4输入单输出逻辑(可以通过运算表达进行设置),在设计时应以此为基本单元考虑优化措施。
基于FPGA的设计
每个单元都使用寄存器控制输出,确保设计能够实现最高频率; 将设计分解为4输入单元,减少中间连线,缩短运算时间;
多输入或门设计
以4输入单元为基础进行;
二进制译码器设计
以4位译码器和4输入与门阵列为单元进行设计;
加法器基本单元
通过对输入端进行合并,可以表现为4种基本运算单元; 需要对不同单元的不同输出设定输出方程;
加法单元的应用 LSB+1加法器
符号数转换器:原码—补码 常数加法器
串行加法器设计
全串行设计:只将前2级合并,后面使用全加器;
并-串设计:先进行2位全并行相加,再进行串行相加;
累加器设计
采用不同串行加法器的设计分析
课程设计
采用FPGA单元按照乘-累加方式设计8位乘法器,分析不同单元采用对设计的影响。
采用FPGA单元实现8位数值比较器的设计,分析使用单元的数量和运算时间,写出各FPGA单元的输出方程。
教材参考章节: 第9章:9.5、9.6
第21次课 (7-1)
第七章 时序控制设计
组合设计与时序设计的区分
组合设计:利用器件单元的组合实现真值表表达的逻辑,追求低成本、高速度、低功耗; 时序设计:根据从系统状态或外部指令获取的信息,对数据的流动及运算的时间顺序进行控制,追求高频率与高效率。
时序控制概述
数字信号特点:输入状态的变化离散发生,在一段时间内状态保持稳定; 组合设计希望实现输入状态与输出状态的对应; 由于器件单元的时间延迟,输出状态的稳定时段与输入状态不一定对应,需要考虑对输出数据采样时刻的控制;
当器件单元中存在不同延迟路径时,输出会出现不稳定时段,其稳定时段小于输入状态的稳定时段;若输入变化过快(频率过高),输入状态的稳定时段小于输出的不稳定时段,则无法得到稳定的输出;因此需要考虑对输入数据的变化时刻进行控制。
寄存器控制
引入特定控制器件对系统中的数据流动进行控制; 寄存器仅在时钟信号触发时刻传输数据,对其输入起到控制采样时刻的作用,对其输出起到控制数据变化的作用,可以实现时序控制的要求;
输入控制:不接收不稳定的混乱数据,等待数据状态稳定,再进行可靠的数据采集; 输出控制:保持输出状态不变,直到新的可靠数据投放时刻;
流水设计
在组合设计中,延迟路径越长,则数据采集和投放的周期相应增加:
数据变化频率随延迟路径增长而下降;
电路单元的有效运算时间比例随延迟路径增长而下降; 将组合路径按延迟时间段进行分割,以寄存器作为数据传输的隔离缓冲,则效率和频率都能得到有效提高。
同步状态机
复杂系统中存在不同运算途径,需要根据具体情况对数据的路径和运算进行安排;
同步状态机作为控制处理器,收集系统各部分状态信息,根据外部指令要求,对各寄存器和运算单元进行控制,形成同步系统,能够更有效组织运算。
寄存器结构原理
基本要求:能够保持输出状态,不受输入变化的影响; 能够在输入影响下,在特定时刻改变输出状态;
双稳态器件:2个反相器环接构成,通过正反馈保持数据; 缺乏输入端,无法设置及改变输出状态;
SR锁存器:通过将反相器改为或非门/与非门,加入设置状态和改变状态的手段; 在输入端上加高电平,可以实现状态设置:S 置1 R 置0 从设置脉冲加入,到稳定输出状态产生,需要一定的延迟时间;
需要限制最小脉冲宽度,否则会导致亚稳态:状态容易因干扰而破坏;
同步SR锁存器:在SR锁存器的输入端加上与门开关,确保状态稳定输出期间不受干扰; 控制C的变化可能会影响到设置脉冲的有效宽度;
C为1的时段中,输入信号需要满足保持时间和建立时间的限制;
教材参考章节: 第7章:7.1、7.2 第8章:8.2
第22次课 (7-2)
D锁存器:将S端和R端反相合并为D输入端,使D的任何状态都成为设置状态; 在C=1的时段中,有效消除亚稳态出现的可能:始终处于强制状态设置; 但还是需要满足建立时间限制:在C变为0之前,状态需要稳定。 输出状态的变化因素:C从0变化到1时,或C=1而D发生变化时;
锁存器的应用
能够实现数据存储、数据保持 SRAM中的存储单元 键盘数据保持 总线数据保持
D触发器:主从结构,将2个D锁存器级联,控制端反相连接,称为时钟端口; 由于控制端反相,数据传递被隔离,输入状态变化不能直接影响输出; C=0时,主锁存接收输入,建立状态;从锁存保持状态,不受前级影响;
C=1时,主锁存保持状态,不接收输入;从锁存接收前级状态,形成新的输出; 理想结果:输出状态仅在时钟上升沿(触发时刻)改变; 实际结果:触发时刻前,主锁存器需要满足建立时间限制;
触发时刻后,从锁存器需要传输时间将前级状态变为自己的输出; 时间窗口:触发时刻前后,输入状态必须保持稳定,不能变化(实际为主锁存的
建立时间段)
寄存器特征方程:表达触发后状态(函数)与触发前输入及状态的关系;
寄存器的阵列应用
并行连接:对并行数据进行传输控制;
串行连接:构成移位寄存器,对串行数据形成缓冲接收;
寄存器状态变化的控制
清零端的加入:寄存器内容清楚,状态复位;
使能端的加入:在触发时保持状态不变或接受改变; T触发器:实现状态翻转控制或状态保持
JK触发器:多功能器件,可以实现翻转、保持、置数
同步系统中的时序控制
影响时钟周期的因素:寄存器延迟、组合运算延迟、建立时间 建立时间容限、保持时间容限 组合设计切割的均衡性 频率与成本的权衡
时钟偏斜问题:时钟的传递驱动、时钟树缓冲设计 连线和器件负载的平衡布局
严禁直接对时钟信号进行组合控制
教材参考章节: 第7章:7.2
第8章:8.2、8.7、8.8
第23次课 (7-3 )
同步系统的设计
同步系统中,所有寄存器受同一时钟信号控制; 设计中,组合延迟时间对时钟频率起到决定性作用;
为了提高系统的设计效率,需要考虑组合单元规模的大小,需要平衡各类单元的延迟,也需要考虑寄存器加入成本的问题。
同步系统中的乘法器
组合延迟直接影响同步系统的时钟频率;
若直接使用组合乘法器作为整体器件,则时钟频率非常低; 将乘法器运算分割为延迟时间大致相等的若干段,则可以提高时钟频率,加快数据的投入,但需要增加大量寄存器成本,同时需要考虑输入和输出间的时钟周期差别;
在估算好时钟周期差别后,也可以不设置寄存器,将输入投放后,等待若干时钟周期再去提取输出;这样可以节约成本,但数据的投放效率会降低(需要考虑最短延迟和最长延迟之间的差距:等待的时钟周期按照最长时间延迟计算,而数据的投放频率则需要考虑延迟的差距:不稳定输出的时间段);
为了缩短不稳定输出的时间段,可以考虑分段添加缓冲,对短延迟路径进行补偿,使不同路径的延迟趋于一致。这种设计称为波段流水设计。
同步系统中的存储器
从存储器中取数,需要先经过译码器译码,然后再由数据选择器选择汇总输出,其时间延迟与存储器的规模有关;
为了与运算器的延迟时间保持一致,直接向运算器提供数据的存储器规模不能过大; 因此需要对存储器进行分级管理,分别建立高速缓存、内存、外存,高速缓存采用单时钟存取方式,而在不同级别存储器之间则采用多时钟存取方式。
异步输入的同步化问题
数字系统通过寄存器在触发时刻接收数据;
外界信号变化时刻不受本地时钟控制:可能丢失、可能导致亚稳态; 外界数据变化频率越高,问题越严重;
数据缓存接收方案
先将数据接收到缓存区:
对外部同步系统,利用外部时钟接收;
对非同步系统,利用变化检测产生接收时钟; 待缓存区数据稳定后,向本地系统发送通知信号;
通知信号对本地接收系统作为使能信号,保障在数据接收时,数据状态稳定;
通知信号的脉冲检测问题
直接使用通知信号作为使能信号,则存在以下问题:
若脉冲过宽,覆盖多个时钟窗口,则可能导致同一组数据被重复接收; 若脉冲过窄,错过时钟窗口,则可能导致该组数据丢失;
典型解决方法需要保障使能信号覆盖一个时钟窗口且只覆盖一个时钟窗口: 对于低频宽脉冲通知信号,可以用状态机对通知信号上升沿进行检测,产生一个时钟周期的使能信号,并用该使能信号反馈清除缓存数据和通知信号; 对于高频窄脉冲通知信号,则需要先用锁存器将通知信号延长到足够宽度,再使用上升沿检测器进行处理;
满足条件的使能信号可以作为复位信号返回给缓存系统,清楚已传输信号和通知信号。
同步错误的可能 然而,由于通知信号相对于本地系统任然是异步信号,其上升沿变化有可能落入本地时钟窗口中,导致输出的使能信号不稳定(亚稳态),这种不稳定可能导致错误的复位信号发出,但本地系统并未接收到数据。这种错误称为同步错误。
为了减少同步错误,需要将可能不稳定的使能信号再送入同步器中进行同步处理。
通过对使能信号中发生亚稳态的情况进行分析,可以看出,设置同步器后,只要亚稳态持续状态在下一个时钟窗口前消除,同步错误就可以避免。
为此,设定亚稳态容限时间,分析与该时间相关的因素,并由此改进设计,降低同步错误出现的概率(从理论上分析,同步错误的完全消除是不可能的): 选用建立时间更短的寄存器;
采用寄存器级联,减小其中的组合运算时间,同时通过概率乘积减小概率; 利用分频器扩大同步器的时钟周期。