找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3397|回复: 0
打印 上一主题 下一主题
收起左侧

Verilog HDL同步FIFO的设计报告

[复制链接]
跳转到指定楼层
楼主
ID:300798 发表于 2018-4-2 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享一个fifo设计,基于V语言
大学物联网工程学院
Verilog HDL项目设计报告
题目同步FIFO的设计
专业、学号电科1362910201 13629102225
授课班号6292758


摘要
FIFO【1】是First Input First Output的缩写,先进先出队列,这是一种传统的按序执行方法,也是一种先进先出的数据缓存器。它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样,可以由地址线决定读取或写入某个指定的地址。为了提高效率和降低系统设计的难度,本文使用Verilog HDL【 2 】描述语言,通过Xilinx公司的ISE 【3】软件进行程序编写以及仿真,再将程序烧写进Basys2开发板,设计实现了一种4bit-256深的同步FIFO,提供数据缓冲。
关键词:同步FIFO  Verilog HDL  Basys

Abstract

FIFO is a acronym of First Input First Output, FIFO queue, which is a traditional sequential execution method, but also a FIFO data register. It differs from the ordinary that there is no external memory write address lines, so very simple to use, but the disadvantage is that the only sequential write data sequentially read out, the data read by the internal address pointer is automatically incremented by 1 to complete, not like generic memory that can be determined by the address line read from or written to a specified address. In order to improve efficiency and reduce the difficulty of system design, we use Verilog HDL description language, take advantage of Xilinx's ISE software programming and simulation, and then burn program written Basys2 development board, designed and implemented a 4bit-256 deep synchronous FIFO, provide data buffering.

Keywords: synchronous FIFO  Verilog HDL  Basys2



目录

一、系统设计
1.1 设计目的
1.2 方案的对比分析与确定
1.2.1 初始方案
1.2.2 改进方案
1.3 电路方框图及说明
1.4 电路设计及说明
1.4.1 顶层模块
1.4.2 时钟分频模块
1.4.3 数据输入输出模块
1.4.4 译码模块
二、结果与讨论
2.1 调试步骤与现象
2.1.1 调试程序
2.1.2 仿真
2.1.3 烧写程序到Basys2开发板
2.2 出现的问题与分析
2.3 对相关数据的分析与讨论
三、心得体会
3.1 设计特点
3.2 评估结果
3.3 改善建议
3.4 自我体会
五、参考文献
六、附录
附录一 RTL原理图
附录二 作品图片

一、系统设计
1.1 设计目的
              为了巩固和加深对“VerilogHDL数字设计与综合”与“数字电子技术”两门课程的理论知识及应用,了解如何使用VerilogHDL语言进行电路设计的步骤与方法,掌握ISE软件编程以及仿真的使用方法,初步了解Basys2开发板的使用方法,同时让我们对电子电路设计有进一步的认识,为我们后期对设计与制作的学习奠定了基础。

1.2 方案的对比分析与确定
1.2.1 初始方案
使用100kHz作为工作时钟。当写入信号有效时,每个时钟上升沿来临,写入一个数据,同时寄存器指针指向寄存器下一位;当读取信号有效时,每个始终上升沿来临,读出一个数据。数据存满,满信号灯亮;无数据时,空信号灯亮。
缺点:该方案的程序烧录进Basys2开发板后,对输入数据有很高的要求,首先速度必须很快,因为每一个上升沿来临就会写入一个数据,如果数据输入不及时,同一个数据将被输入两遍,读出速度太快,丢包率高。
优点:该方案适合于仿真,可以快速实现功能仿真。
1.2.2 改进方案
同样使用100kHz作为工作时钟。先使用开关设置好4位要写入的数据,按下写入按键后该数据写入寄存器;随时可按下读取按键,读出一个数据并显示在数码管上。数据存满,满信号灯亮;无数据时,空信号灯亮。
缺点:该方案仿真时间相对较长。
优点:该方案的程序烧录进Basys2开发板后,随时可以写入数据,同时可以随时读出数据,速度自由,目前测试丢包率为零。

1.3 电路方框图及说明



1.4 电路设计及说明
1.4.1 顶层模块
     连接控制时钟分频模块div、数据输入输出模块fifo、译码模块transcoder

1.4.2 时钟分频模块
     将Basys2开发板上的50MHz时钟输入分频为100kHz作为其他模块的工作时钟。
1.4.3 数据输入输出模块
     通过4个开关实现4bit数据的输入,当写入按键按下时,数据被写入且寄存器指针指向下一位。当读取按键按下时,读出最先输入的一个数据。写入、读取时间自由。
1.4.4 译码模块
         将4位输入的BCD码【4】译为8位二进制代码用于数码管显示。

二、结果与讨论
2.1 调试步骤与现象
2.1.1 调试程序
     最初采用通过判断写入信号与读取信号的高低电平来控制数据的输入与输出,时钟信号的上升沿直接控制指针+1。无法做到随时的输入与输出,且对数据输入方式要求极高,丢包率高。
                            之后修改程序,通过判断写入信号与读取信号的上升沿来控制数据的输入与输出,并同时控制指针+1。测试可以做到随时的输入与输出,目前丢包率为零。

2.1.2 仿真
初始方案:在仿真程序中输入18位数据,写入信号保持高电平时数据按一定速度输入,读取信号保持高电平时,数据可正常读出。
改进方案:在仿真程序中尝试输入两个数据,并读出数据。测试可行。

2.1.3 烧写程序到Basys2开发板
                            初始方案无法正常读出。改进方案测试可行。


2.2 出现的问题与分析
问题一:仿真时数据读不出来,但烧写进开发板时测试正常。
分析:仿真时时间设置不对,设置为每100个时间单位输入一个数据,但是此时100KHz的时钟信号还未出现过一个上升沿,所以数据无法写入。
问题二:仿真时能无限写入数据,但只能读取最后一个数据。
分析:每次数据写入时指针没有指向下一位,数据输入后一直覆盖之前的数据,所以时钟只能读取最后一个数据。
问题三:程序编写为16深,但只能存储15个数据。
分析:数据从第0位寄存器开始储存数据,由于写入信号同时控制着数据的写入与指针的指向,但当到达第15位时,指针不再能指向下一位,数据也就不再能写入,即数据寄存在0-14位寄存器。


2.3 对相关数据的分析与讨论
FIFO的几个重要参数:
1、宽度:宽度即4bit,每个数据为四位。在该程序中可自由修改宽度。
2、深度:深度指能够储存的数据个数。在该程序中可自由修改深度,方便扩展。
3、满标志:满标志用于阻止数据写入而造成的溢出。判断FIFO是否已满十分重要。
4、空标志:空标志用于阻止数据读取而造成的无效数据读出。
5、写入指针:指向下一个要写入的地址,写入时同时加1。
6、读取指针:指向下一个要读取的地址,读取时同时加1。

三、心得体会
3.1 设计特点
本课程设计运用Verilog HDL硬件描述语言,通过Xilinx公司的ISE软件进行程序编写以及仿真,将程序烧写至Basys2开发板,设计实现了一种4bit-256深的同步FIFO,提供数据缓冲。不同于之前硬件电路课程设计和C语言课程设计,此课程设计需要结合硬件和软件知识,需要掌握Verilog HDL硬件描述语言,熟悉Basys2开发板的硬件电路及板上各模块的使用方法。
    设计的同步FIFO宽度为4bit,深度为256,参数可以在程序中修改,方便扩展。通过4位开关输入数据,写入按键确认输入的数据,读取按键读取一条数据,这样设计便于手动输入数据。满标志LED亮表示队列已满,空标志LED亮表示队列是空状态,方便观察。使用数码管显示4位2进制数,充分利用板上模块资源,完成整个设计。
3.2 评估结果
利用Basys2开发板基本实现了FIFO队列所有要求。但是通过手动输入数据模拟不同工作频率模块间通信,还不能实际运用。
并且存在程序编写为16深,但只能存储15个数据的问题,原因是数据从第0位寄存器开始储存数据,由于写入信号同时控制着数据的写入与指针的指向,但当到达第15位时,指针不再能指向下一位,数据也就不再能写入,即数据寄存在0-14位寄存器。
3.3 改善建议
(1)通过矩阵键盘输入数据和控制输入和读取;
(2)使用液晶屏幕显示参数,标志满、空状态,美化交互界面;
(3)可以手动输入位宽和深度参数。
3.4 自我体会
通过本次课程设计,我们巩固和加深了“VerilogHDL数字设计与综合”与“数字电子技术”两门课程的理论知识及应用,认识到了基础知识是一切实践的基础,只有掌握好了理论知识,才能更好地使用工具去做设计与创新。
相比于在纸上写代码,使用软件编写代码,可以及时仿真验证效果,通过实践加深所学知识,熟悉使用VerilogHDL语言进行电路设计的步骤与方法。学习ISE软件编程以及仿真,方便之后将此软件作为一个优秀的工具,为我们设计更复杂的项目服务。在实际使用Basys2开发板,烧写程序到芯片中时,出现了各种问题,我们通过查阅网络资料、询问老师、同学交流等多种方式,将问题一一解决,在解决问题的过程中我们加深了对软件的使用和对知识点的学习。
我们认识到动手实践会遇到书中未提出的许多问题,而找出问题原因并将其解决锻炼了我们查阅资料、独立思考的能力,丰富了我们的实践经验,使我们对电子电路设计有进一步的认识,为我们后期对设计与制作的学习奠定了基础。

五、参考文献
1、Szwagrzyk J, Whitt J K. FIFO peek access: US, US7773453[P]. 2010.
2、袁本荣, 刘万春, 贾云得,等. 用Verilog HDL进行FPGA设计的一些基本方法[J]. 微计算机信息:测控仪表自动化, 2004, 20(6):93-94.
3.田耘 胡彬 徐文波. XILINX ISE DESIGN SUITE 10.X FPGA开发指南(逻辑设计篇)[M]. 人民邮电, 2008.
4.陈安时. 小数二进制码对BCD码的转换[J]. 电子技术应用, 1982(6).

六、附录
附录一RTL原理图
附录二作品图片
图 1  初始状态,FIFO中为空


图 2  设置好输入数据,按下写入键
图 3  写入数据中途读取数据


图 4  写入数据完毕,满信号灯亮

图 5  读取数据完毕,空信号灯亮

完整的Word格式文档51黑下载地址(内含清晰图片):
Verilog课设报告.docx (916.49 KB, 下载次数: 28)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表