基于fpga的异步fifo设计毕业设计论文(编辑修改稿)内容摘要:
节有详细介绍。 5 bit 格雷码计数器模块的 VHDL 设计程序 见附录。 程序编译成功后生成的格雷码计数器模块如图 31 所示,利用 Quartus II 软件 的波形编译器 对该模块进行 时序 仿真,其仿真波形如图 32 所示。 图 31 格雷码计数器模块 图 32 5 bit 格雷码计数器仿真波形 同步模块 为了降低亚稳态发生的概率,本课题使用前章所介绍 D 触发器二级同步将异步信号同步化。 在空满标志模块判断写满标志时,同步模块将读指针与写时钟同步后,和写指针比较产生写满标志;判断读空标志时,同步模块将写指针与读时钟同步后,和读指针比较产生读空标志。 同步模块的 VHDL 设计程序见附录。 程序编译成功后生成的同步模块如图 33 所示,利用 Quartus II 软件 的波形江苏科技大学本科毕业设计(论文) 9 编辑器 对该模块进行 时序 仿真,其仿真波形如图 34 所示。 从 仿真波形可以看出,该模块将输入的异步码与输入时钟同步后输出同步码,由延时时间可以看出其满足二级同步要求。 图 33 同步模块 图 34 同步模块仿真波形 格雷码∕自然码转换模块 虽然为了降低亚稳态发生概率而使用格雷码对读、写地址进行转换,但在双端口 RAM 进行存储和空满产生模块进行读写地址比较时仍使用自然二进制码,所以在异步地址信号同步后,仍需将格雷码地址转换回自然二进制码。 n 位格雷码转换为自然二进制码的 法则为: Bn = Gn, Bi = Gi⊕ Bi+1 (i≠n),其中 G 表示格雷码, B 标志 自然二进制码。 格雷码∕自然码转换模块的 VHDL 设计程序见附表。 程序编译成功后生成的格雷码∕自然码转换模块如图 35 所示,利用 Quartus II 软件 的波形编辑器 对该模块进行 时序 仿真,其仿真波形如图 36 所示。 图 35 格雷码∕自然码转换模块 江苏科技大学本科毕业设计(论文) 10 图 36 格雷码∕自然码转换模块仿真波形 空满标志产生模块 空满标志产生模块是整个异步 FIFO 系统的核心部分,该模块设计的好坏直接决定了该异步 FIFO 的性能。 空满标志产生的基本原则是无论在什么情况下,都不会出现存储器对同一存储地址同时进行读写操作的 情况,也就是存储器写满后不产生溢出,读空后不进行多读 [2]。 对于同步的 FIFO 系统,读写操作同时从存储单元起始位置开始进行读写操作,每进行完一次读写操作后,控制指针就增加一位,指向下一个存储单元,直到下一次时钟沿到来后存储器对该存储单元进行一次读写操作,然后指针继续增加。 当指针移动到最后一个存储单元后,它又重新回到起始位置继续进行读写操作。 由于同步 FIFO 读写操作同时进行,所以存储器始终处于非空和非满的状态,读写操作可以一直进行。 对于异步 FIFO 系统,有两个独立的控制指针 —— 读指针和写指针,读操作和写操作 独立运行。 然而当存储器存储空间被读空后,若继续读取数据则会造成多读,使一个无用的信号被读出;当存储器存储空间写满后,若继续写入数据则会产生溢出,造成一个有用的数据被覆盖。 为了避免这种情况发生,异步 FIFO 系统对存储器设置了读空和写满两个状态标志。 当存储器读空后,读空标志置位,暂停读操作继续读取数据,但仍可以执行写操作;当存储器写满后,写满标志置位,暂停写操作继续写入数据,但仍可以执行读操作。 按照此原理,当全局复位信号复位后,异步 FIFO 应该处于读空状态。 由上述原理可以知道,当读指针和写指针不相等时,读写操 作互不干扰,异步 FIFO 处于非空和非满的状态。 当读指针和写指针相等时, FIFO 要么处于读空状态,要么处于写满状态。 那么该怎么判断异步 FIFO 究竟处于什么样的状态呢。 判断的方法有很多,本课题使用读写指针比较的方法,通过额外增加状态标志位来判断究竟是读指针追赶写指针输出读空标志,还是写指针追赶读指针输出写满江苏科技大学本科毕业设计(论文) 11 标志。 本课题设计的异步 FIFO 存储深度为 128 bit,那么读写指针应有 4 个地址位,本设计使用 5 bit 的读写指针,其最高位作为额外增加的状态标志位,剩下的低 4 位为地址位。 地址位随着相应的读(写)操作的进行 依次递增,当读(写)指针由最后一个存储单元重新回到起始位置时状态标志位取反。 当读写指针的状态标志位和地址位完全相同时,表明执行了相同次数的读写操作,此时异步 FIFO处于读空状态;当读写指针的状态标志位不同,而地址位完全相同时,表明写操作比读操作多进行了一次循环,此时异步 FIFO 处于写满状态。 空满状态的行为描述如下: full = 39。 139。 when (wr_addr(4) /= rd_addr(4)) and (wr_addr(3 downto 0) = rd_addr(3 downto 0)) empty = 39。 139。 when (wr_addr(4 downto 0) = rd_addr(4 downto 0)) 由于空满标志是通过比较同步后的读写指针产生的,那么就可能出现这样的情况:当同步写指针时,实际的写指针可能已经发生了变化,这意味着此时的写指针可能是一个无用的值。 这样从读操作的角度来看,就会发生就会发生少写的的现象,也就是异步 FIFO 判定为读空时, FIFO 实际上可能未空,因为写操作可能正在发生,写指针仍在变化,但这从读操作的角度是“看不到的”;同理从写操作的角度来看,也会出现类似的情况,即异步 FIFO 判定为写满时, FIFO 实际上可能未满。 上述的情况被称为保守的报告,当 FIFO 未空时判定 FIFO 读空,而阻止读操作的继续进行;当 FIFO 未满时判定 FIFO 写满,而阻止写操作的继续进行。 这种情况从存储器的角度来看,存储器的存储空间好像变小,然而这种情况是毫无坏处的,能很好的避免错误的发生,因为当 FIFO 真的读空或写满了,而不去阻止读操作或写操作的进行将会出现多读或溢出的错误,影响异步 FIFO的性能 [2]。 读空、写满状态判定的 VHDL 设计程序分别见附录。 空满标志产生模块的顶层设计电路如图 37 所示,其中 empty_cmp 模块和full_cmp 模块分别是读空标志判定模块和写满标志判定模块。 将该顶层电路编译成功后生成的空满标志产生模块如图 38 所示。 江苏科技大学本科毕业设计(论文) 12 图 37 空满标志产生模块顶层电路图 江苏科技大学本科毕业设计(论文) 13 图 38 空满标志产生模块 双端口 RAM 本课题设计的异步 FIFO 的存储器是一个存储深度为 128 bit,数据宽度为 8 bit 的双端口 RAM,该 RAM 使用 Altera 的 Mega Wizard PlugIn Manager 工具定制,定制主要参数设置过程如下: ( 1)打开 Mega Wizard PlugIn Manager 对话框,选择“ Create a new custom megafunction variation”定制新的宏功能模块。 ( 2) 定制完新的功能模块后选中 Memory piler 下的 RAM: 2PORT 生成双端口 RAM。 然后选择 Cyclone II 器件和 VHDL 文件格式,输入 RAM 存放路径和模块名。 ( 3) 生成 RAM后在 RAM功能设置界面的 ram端口点击“ With one read port and one write port”,选择一个读端口和一个写端口。 存储方式选择 bit 方式,即“ As a number of bits”。 ( 4) 双端口 RAM 的存储深度选择 128 bit,数据线宽度选择 8 bit。 ( 5) 设置完存储深度和数据宽度后进入时钟设置界面,选择独立的读写时钟,并添加读使能。 ( 6) 在寄存器设置界面选中“ Which ports should be registered?”栏下第三个选择框,增加输出寄存器。 ( 7) 定制生成的双端口 RAM 外部接口如图 39 所示。 江苏科技大学本科毕业设计(论文) 14 图 39 双端口 RAM 外部接口 江苏科技大学本科毕业设计(论文) 15 第四章 时序仿真与实现 模块整合 本课题 采用层次化、描述语言和图形输入相结合的方法设计异步 FIFO 电路,该系统被分为同步模块、格雷码计数模块、格雷码∕自然码转换模块、空满标志产生模块和双端口 RAM 几部分,上一章节已经完成了各模块的编写及 时序 仿真测试。 将各模块整合后的异步 FIFO 电路的顶层实体如图 41 所示,其中 gray 模块是格雷码计数器模块, G2B 模块是格雷码∕自然码转换模块, full_empty 是空满标志产生模块, dram 模块是双端口 RAM。 江苏科技大学本科毕业设计(论文) 16 图 41 异步 FIFO 顶层电路图 江苏科技大学本科毕业设计(论文) 17 时序仿真及功能测试 本课题使用 Quartus II 软件 的波形编辑器 对设计的异步 FIFO 电路进行 时序 仿真, 并根据仿真波形对各模块功能进行测试,确认该异步 FIFO 是否 满足设计要求。 复位功能软件仿真与测试 对于复位功能的 时序 仿真测试波形如图 42 所示。 从图中可以看出,当系统运行后,复位端置 1,即不按下复位键时,异步 FIFO 系统正常工作;当复位端置 0,即按下复位键后,无论读写使能信号处于什么状态,数据输出始终不变,异步 FIFO 处于读空状态。 该仿真波形表明所设计的异步 FIFO 电路的复位键能控制系统的全局操作,复位功能达到了预期的设计要求。 图 42 复位功能时序仿真测试波形 写操作功能时 序仿真与测试 对于写操作功能的 时序 仿真测试波形如图 43 所示。 从图中可以看出,将系统复位端置 1,将写使能置位,读使能复位,经过一段时间后,数据输出始终不变,读空标志始终为 0,写满标志始终为 1,这表明异步 FIFO 电路始终处于写满状态。 该仿真波形表明写使能端控制 系统只进行写操作写入数据,由于不进行读操作,一段时间后双端口 RAM 存储器存储单元会始终处于写满状态,这表明所设计的异步 FIFO 电路的写操作功能达到了预期的设计要求。 江苏科技大学本科毕业设计(论文) 18 图 43 写操作功能时序仿真测试波形 读操作功能时序仿真与测试 对于读 操作功能的 时序 仿真测试波形如图 44 所示。 从图中可以看出,将系统复位端置 1,将写使能复位,读使能置位,数据输出始终不变,写满标志始终为 0,读空标志始终为 1,这表明异步 FIFO 电路始终处于读空状态。 该仿真波形表明读使能端控制 系统只进行读操作读取数据,由于不进行写操作,双端口RAM 存储器存储单元会始终处于读空状态,这表明 所设计的异步 FIFO 电路的读操作功能达到了预期的设计要求。 图 44 读操作功能时序仿真测试波形 异步 FIFO 电路整体功能软件仿真与测试 对于异步 FIFO 电路整体功能的 时序仿真 测试 波形如图 45 和图 46 所示,其中图 45 的输入的读时钟频率是写时钟频率的 2 倍,图 46 的输入的写时钟频率是读时钟频率的 2 倍。 对于图 45,将系统复位端置 1,将读写使能均置位,一段时间后异步 FIFO 间歇性处于读空状态,但始终不处于写满状态,输出数据队列与输入数据队列相同,但会有一定的延时。 这表明系统能同时进行读写操作,由于读操作速度快于写操作,所以异步 FIFO 只会处于读空状态,而不会进入写江苏科技大学本科毕业设计(论文) 19 满状态。 另外,输出数据队列与输入数据队列相同,也表明该电路实现了先入先出的功能,输入输出队列之间的延时是由同步电路和 程序的运行时间造成的。 对于图 46, 将系统复位端置 1,将读写使能均置位,一段时间后异步 FIFO 间歇性处于写满状态,但始终不处于读空状态,输出数据队列与输入数据队列相同,但会有一定的延时。 和图 45 相似,这同样表明系统同时进行了读写操作,由于写操作速度快于读操作,异步 FIFO 只会处于写满状态,而不会进入读空状态。 输出数据队列与输入数据队列相同,同样说明电路实现了先入先出的功能,队列之间的延时依然是由同步电路和程序的运行时间造成的。 图 45 和图 46 的 仿真波形表明所设计的异步 FIFO 电路的整体功能达到了预期的设 计要求。 图 45 异步 FIFO 系统时序仿真测试波形 1 图 46 异步 FIFO 系统时序仿真测试波形 2 时序仿真结果总结 从上述 时序 仿真测试结果可以看出,该异步 FIFO 电路在 硬件逻辑 设计方面实现了所有的预期设计功能,能快速准确的判定 FIFO 存储器的空满状态,并能通过外部读写使能控制系统内部读写操作,实现宽度为 8 bit 的数据队列在两个独立的异步时钟域之间进行先进先出的数据传输。 江苏科技大学本科毕业设计(论文)。基于fpga的异步fifo设计毕业设计论文(编辑修改稿)
相关推荐
他对应接上电源和地。 在键盘模块中添加上拉电阻,上拉电阻可以保证在没有按键输入时,进入单片机四个 I/O 口的按键状态均为高电平,防止干扰产生;当有按键按下时,相应的端口线状态转为低电平,总体框架如下图 所示。 图 高精度 GPS 时钟系统的框架简图 基于 GPS 的高精度时钟设计 8 硬件电路设计 系统的整体硬件电路图如下图 所示: 图 系统的整体硬件电路图 GPS 接受模块和单片机的连接
考文献 ........................................................................................................................ 19 附录 程序框图 ...............................................................
33 附录 1 LabVIEW 设计平台界面和平台的编程 34 附录 2 电路原理图和电路 PCB 图 36 附 录 3 单片机端程序 38 1 第 1 章 绪论 课题背景 随着计算机网络的迅速普及,奠定了控制网络化的基础,现代控制系统必然成为信息化家居的一个重要组成部分。 近年来随着大规模集成电路技术、自动控制技术、智能技术的发展,诞生了一种被称为“智能控制网络”的新型网络
设计 的 速度。 Quartus II 支持 的 器件类型 非常 丰富 ,其 图形界面 也易于操作。 Altera 在 Quartus II 中包 第 7 页 含了许多诸如 SignalTap II、 Chip Editor 和 RTL Viewer 的设计辅助工具,集成了 SOPC和 HardCopy 的 设计流程,并且继承了 Maxplus II 友好的图形界面及简便的使用方法。
录下了,循环进行此步骤,就可以将 8 到数据依次记 录在记忆模块中了。 选择输出模块子程序 ( 1)选择输出模块的 VHDL 程序及它的子程序 SLECT8_1 和 CNT8 见附录 2.选择输出模块的程序流程图如下图: JYMK CLR=1 D0~ D7=0 ,i=0 JISHU 键是否按下 i=i+1 记忆模块程序流程图 D0~ D7 保持不变 Qi=Di Y N N Y
境,能满足各种各样的设计要求。 其特点有以下几点: 开放的界面 与结构无关 完全集成化 丰富的设计库 模块化工具 硬件描述语言 Opencore 特征 Max+PlusⅡ 的功能 Max+PlusⅡ 支持 FLEX、 MAX 及 Classic 等系列 EDA 器件,设计者无须精通器件内部 的复杂结构 , 只需用自己熟悉的设计输入工具,如高级行为语言