FPGA设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.参考资料等

相关文档
最新文档