数据接口的同步 ·如果输入数据的节拍和本系统处理时钟同频,可以直接用本系统的主时钟对输入数据寄存器进行采样,完 成输入数据的同步化。 ·如果输入数据和本系统的处理时钟是异步的,要用处理时钟对输入的数据做两次(或多次)寄存器采样, 完成输入数据的同步化。两次(或多次)采样的作用是抑制亚稳态的传播,适用于对少量对错误不敏感的功能单元。 ·为了避免异步的时钟域产生错误的采样电平,一般使用RAM、FIFO存 储的方法完成异步时钟域的数据转换,在输入端口使用上一级时钟写数据,在输出端口使用本级时钟来读数据,能够非常方便地完成异步时钟域之间的数据交换。 时序电路设计 图3给出了时序电路的一般结构。
首先是库说明语句Library declarations。接着是实体 结构,给出实体模块的名称Entity,由Port引出的输入输出的清单。再后面是结构体,然后是 内部信号说明。接着设置了一个状态进程,定义存储元件,进程名称为State process,敏感的清单一般是存储元件,reset、next state、Input等信号,是存储元件的输入信号,在这些信号下,进程会激活。然后是状态进程的Begin, 开始以后对状态的元件进行VHDL描述,顺序描述完以后,结束状态进程。下面的设置是组合进程,这个进程的敏感清单通常包括所 有的输入。接下来是进程的Begin,在Begin里头给出了规定组合逻辑的VHDL描 述,最后是进程结束与结构体结束。 前面已经讲过,FPGA设计尽量采用同步设计。这里要考虑同步硬件的RTL描 述。描述设计的寄存器到寄存器的功能,即描述寄存器之间组合逻辑的功能。 有效编码方式和If-Then-Else比较 在组合进程和状态进程中,都可能会用到If-Then-Else和case语 句,综合出来的结果和组合逻辑情况一样,都会有不同,case语句用一个模块来实现,If-Then-Else用 带有特权编码的译码器实现。 在组合进程和状态进程中,用If-Then-Else和case语 句带来的问题 对Case语句的要求 一般情况下,如果不需要特权编码,建议用Case语句。组合逻辑上,要求Case语 句对所有分支进行定义,如果有几don't care输出也可以利用,能够节省描述方式。Case语 句能节省资源,减少延时。 Case语句在组合进程和时序进程中带来的问题 ·Case 语句在组合的进程(VHDL)或 在always语句(Verilog)中: 要求在case语句中,对所有分支中的所有输出必须定义,才能防止出现锁 存;如果不是所有的分支都定义了,可以在case语句之前利用一个缺省语句来防止锁存的产生。 ·C语句在时序进程(VHDL)或在always语 句(Verilog)中: 如果在Case语句的分支中有的输出没有定义,就会产生一个时钟的使能信 号,这个信号并不出现错误,但是可能会产生一个很长的时钟使能方程式,使设计不能实现。那么在case语句之前利用一个缺省语 句防止不必要的时钟使能产生。 FPGA设计常用的一些模块有:存储单元、全局时钟资源和锁相环、全局复位/置位信号、高速串行收发器等,下 面做简要介绍。 |