FPGA设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电学院
FPGA课程设计报告
题目:采用RAM实现计数器及FPGA功能验证
院系:电子工程学院
专业班级:
学生姓名:
导师姓名:
起止时间:2012-06-18至2012-06-29
2012年07 月01 日
FPGA课程设计报告提纲
1.任务
用一个10×8的双口RAM完成10个8位计数器,计数器的初值分别为
1~10,时钟频率为1MHz,计数器计数频率为1Hz。
用FPGA开发板上的按键作为计数器计数值的输出选择控制,数码管
(或led)作为选择计数器的计数值输出。
2.目的
采用RAM实现计数器及FPGA功能验证
3.使用环境(软件/硬件环境,设备等)
前仿modelsim 6.1f
后仿Quartus II 10.1
xilinx ise 9.1
FPGA课程设计详细内容
4.1 技术规范
功能:
1.先由复位键从选定的RAM地址中读出预置的8位初值存入计数模块。
2.由开始键开始计数,暂停键暂停计数并同时存入RAM中以选定的存储单元。
3. 双端口RAM为10×8RAM由一个地址切换键按顺序切换1~10个地址端
口。
4.读出数据开始计数暂
停计数存入数据
计数流程
5输出到数
码管显示
读取结果输出流程
6.分频:1Hz的秒计时频率,用来进行秒计时;
4.2 设计方案 信号定义:
分频:1Hz 的秒计时频率, 用来进行秒计时
分频:时钟信号clk ;
分频信号 clk_1hz ;
开始计时(使能)
rst_n ; 切换端口 开始计 暂停计数
存入数据
计数:开始计数 rst_n
计数器复位 reset ;
计数输出 ain ; 计数暂停 pause ; 计数置数 reduce ;
RAM:reg [7:0] ram[9:0] 10×8的RAM存储阵列10个字每个子8位使能ram_en
输入端输入地址ain;
输入数据din;
上升沿有效写入信号wr;
输出端输出地址aout;
输出数据dout;
上升沿有效读信号rd;
4.3 功能验证方案
1 验证对象及目的
本验证方案将描述对双端口RAM计数器的验证。在本文中验证指使用软件工具进行对其功能进行验证。
双端口RAM计数器功能和指标的详细描述请参见《双端口RAM计数器技术规范.doc》
在本文所描述的验证过程中侧重对RAM数据的读取进行验证,指标主要在硬件验证和测试过程中完成。
在本验证过程中将验证以下内容:
功能验证
功能要求:
1.先由复位键从选定的RAM地址中读出预置的8位初值存入计数模块。
2.由开始键开始计数,暂停键暂停计数并同时存入RAM中以选定的存储单元。
3. 双端口RAM为10×8RAM由一个地址切换键按顺序切换1~10个地址端
口。
4.读出数据开始计数暂
停计数存入数据
计数流程
5输出到数
码管显示
读取结果输出流程
6.分频:1Hz的秒计时频率,用来进行秒计时;
2验证环境及工具
根据情况验证过程将使用以下的环境和工具进行:
a)windows环境下使用ModelSim仿真工具;
b)windows环境下使用QuartusII工具。
为进行验证还应当建立仿真激励模块
3 预确认:
(1)系统主要技术参数;
经分析,系统的的主要参数包括:引脚数目,引脚工作电压,工作电源电
压,系统的工作频率。
(2)系统的模块数目及各模块实现的功能及如何知道模块工作正常;
(3)总模块验证,看总系统是否正常工作。
4 仿真确认:
4.1 目的
初步确认系统是否完成预期设计的功能;
先分析芯片所有模块连接关系,如下图
4.2 逐个完成各个模块的验证
①分频模块:由于系统提供的频率为50Mhz而计数时需要的是每秒那样计数,故需要将50Mhz分频为1hz.可为该程序编写激励,得到输出,用输出的频率与想要得到的1hz的信号进行比较,即可验证。
②计数模块:编写完成后可通过查看仿真图形确认计数范围,位宽等功能的正确。
③RAM存取模块:需在仿真中编写测试激励对RAM进行存取验证,在仿真图形中确认RAM的存取功能的正确性。
④顶层模块:在顶层模块中,调用上面的三个模块,通过相应的操作,可进行仿真
4.3 验证空标志产生逻辑:
先将复位信号置0(有效),在一定时间内看系统是否产生空标志;
4.4验证正常情况下的信号:
系统运行时,让复位信号为1(即复位无效),根据输入信号得出输出信号,与想要得到的信号进行比较。
4.4 电路设计源代码,功能仿真激励源代码及功能仿真结果报告
计数器
分频
数码管
4.5 综合及布局布线报告和引脚分布报告4.6 后仿真结果报告
4.7 硬件测试结果报告
下载到实验板上可实现mode键切换对应1~10个地址
Lode键用来读取RAM中的数据到计数器
STAR键开始计数并同时存入RAM
切换mode并用load读出RAM中各地址中数据显示到lcd显示屏上4.8 对结果和结论的问题讨论
4.课程设计的心得体会
在本次的课程设计报告中我学会了如何使用modesim和quartus软件进行电路的验证和仿真。在电路的设计初始时刻,我没有按照设计电路时从上到下的设计方法,而是盲目的进行对电路的模块进行设计。结果在最后的设计综合的时候,设计的各个模块不能进行顺利的综合和仿真。在电子钟的设计中我对时钟的理解不是很透彻,因此在进行计时的时候出现了很多的问题。在进行时分秒的计时时,我对时间的如何进位没有很好的理解,在计时时出现了很多问题,最后在同学的帮助下得到了很好的解决。在对按键的使用中我也出现了很困惑的问题。调整时间的时候,我使用了按键的触发,结果在时间调整计时的时候老是出现时间的快速跳动和不确定性。最后我引入了按键的扫描时钟,使用4Hz的频率来扫描按键的高低电平,然后利用按键的高低电平来触发调整计时的触发频率,这样很好的解决了按键的抖动问题。
在时钟的设计方面,尽量避免时钟延迟,因为一级延迟可能导致后面模块现以外而不可避免的错误,所以在设计时,要细致认真的设计时钟信号。且,在每个使用的if语句过程中,要尽量与else进行匹配,以免产生锁存。
在使用verilog HDL进行电路代码的书写时,应该首先总体的设计电路的总体输入和输出引脚。并且定义它们的作用。这样我们就可以在宏观上对自己设计的电路有了一个整体的理解,不至于在自己设计的时候出现对电路的盲目理解。在定义了引脚后,我们应该对电路进行模块化。对电路所要实现的功能进行模块化,然后在进行各个模块的定义和实现。对各个模块的引脚定义,实现功能和各模块之间的联系,我们应该有一个很好的宏观调控和理解。
再次是,在试验中,应学习模块设计过程中的分析问题的方法,比如采用自顶向下还是采用自底向上的思路,要将每个模块划分清楚,明白每个模块的具体内容与功能,且明白每个模块所需的端口以及变量定义。先写好可行性报告,分析方案的可行性,然后再书写电路,进行设计。我想,在模块设计中,一定要先验证可行性,为后面工作做好铺垫,且此工作是必不可少的,因为不进行分析,有可能会导致在继续工作过程中会发现此方案不可行,所以,正所谓磨刀不误砍柴工,做好前序工作,后端的工作就显得一马平川了。
5.参考资料等