FPGA实验报告

更新时间:2024-03-09 00:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

FPGA实验报告

专 业:电子信息科学与技术

注:以下所有设计均选用DE2-115开发板

FPGA 器件选用Cyclone IV E:EP4CE115F29C7 所有设计均在开发板上已通过硬件验证

8位全加器

1. 源代码 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity adder8 is

port (a,b: in std_logic_vector(7 downto 0);

cin: in std_logic;

dout: out std_logic_vector(7 downto 0);

cout: out std_logic);

end entity adder8;

architecture behav of adder8 is

signal data: std_logic_vector(8 downto 0); begin

data<=('0'&a)+('0'&b)+(\cout<=data(8);

dout<=data(7 downto 0); end behav;

2. 仿真结果

3. 引脚分配

通过DE2-115上9个LEDG,17个拨动开关对应八位全加器中所有输入输出。其中LEDG[8]表示进位输出cout,LEDG[7]~LEDG[0]对应dout(7 downto

0),SW[7]~SW[0]对应a(7 downto 0),SW[15]~SW[8]对应b(7 downto 0),SW[16]对应低位进位输入端cin。具体引脚分配在工程文件中。

智能抢答器

1. 设计要求

设计一个4人参加的智力竞赛抢答器,每人有1个对应的按钮。在主持人的主持下,参赛者通过抢先按下按钮获得答题资格,同时七段数码管会显示抢答成功者的号码。

2. 基本功能

4人抢答器,要求抢答开始后4人抢答,抢答结果在数码管上显示,复位后下一次抢答开始

3. 设计模块

抢答模块

源代码 library ieee;

use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity qdq1 is port ( qout: out std_logic_vector(3 downto 0); host : in std_logic; ----CONNECT TO RESET answer : in std_logic_vector(3 downto 0); light : out std_logic_vector(3 downto 0) );

end qdq1;

architecture rtl of qdq1 is signal lock:std_logic; begin

process (host,answer,lock)

begin

if(host='0')then light<=\ lock<='0'; qout<=\

elsif (lock='0')then case answer is

when \ when \ when \ when \ when others=>light<=\ end case; end if;

end process; end rtl;

显示模块 源代码 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity decode7 is port(hex:out std_logic_vector(6 downto 0); qin: in std_logic_vector(3 downto 0); rest: in std_logic); end decode7;

architecture behav of decode7 is begin process(qin) begin if rest ='0' then hex(6 downto 0)<=\ else case qin is when \ when \ when \ when \ when others=>hex(6 downto 0)<=\

end case; end if; end process; end behav;

顶层模块设计采用原理图输入

4. 引脚分配 SW[0]对应host(主持人),SW[4]~SW[1]对应四个回答者a(3 downto 0),

LEDG(3)~LEDG(0)对应显示a(3 downto 0)的显示状态。七段数码管对应显示四个回答者的相应编号。具体引脚分配在工程文件中。

数字钟

1. 功能说明

能进行正常的时、分、秒计时功能,并分别由相应数码管上显示时(24hour)、分(60min)、秒(60s)的时间,且能具有校时功能。

2. 设计思路

先设计出60进制(分,秒),24进制计数器(时),分频器,2选1选择器,七段数码管译码这些子模块,再进行顶层模块综合设计。

3. 模块设计

------------------------------- --60进制模块源代码--- -------------------------------

2. 设计思路

采用分模块设计的思想,先设计分频,显示等子模块,再设计顶层模块并综合。

3. 模块设计

---------------------------------- ----50MHZ分频为1HZ---- ---------------------------------

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity fp is

port(clk:in std_logic; clk1hz:out std_logic); end fp;

architecture behav of fp is

signal cnt:integer range 0 to 49999999; begin

process(clk)

begin if clk'event and clk='1' then if cnt=49999999 then cnt<=0; else cnt<=cnt+1; end if; if cnt<25000000 then clk1hz<='1'; else clk1hz<='0'; end if; end if;

end process; end behav;

--------------------- -----2 分频------- ---------------------

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity fp1 is

port(clk:in std_logic; clkhz:buffer std_logic); end fp1;

architecture behav of fp1 is signal cnt: integer range 0 to 1; begin

process(clk) begin if clk'event and clk='1' then if cnt=1 then cnt<=0; else cnt<=cnt+1; end if; if cnt<1 then clkhz<='1'; else clkhz<='0'; end if; end if; end process; end behav;

------------------------------ -----LED 显示模块------ ------------------------------

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity show is

port(clk:in std_logic; aout:out std_logic_vector(0 to 7)); end show;

architecture behav of show is begin

process(clk)

variable cnt:integer range 0 to 23; begin if (clk'event and clk='1') then if (cnt>24) then cnt:=0; else cnt:=cnt+1; end if; case cnt is ----左向流水----- when 0=> aout<=\ when 1=> aout<=\ when 2=> aout<=\ when 3=> aout<=\ when 4=> aout<=\ when 5=> aout<=\ when 6=> aout<=\ ---------------------- ----右向流水----- when 7=> aout<=\ when 8=> aout<=\ when 9=> aout<=\ when 10=> aout<=\ when 11=> aout<=\ when 12=> aout<=\ when 13=> aout<=\ when 14=> aout<=\ --------------------- ----全亮全灭---- when 15=> aout<=\ when 16=> aout<=\ --------------------------------- ----高四灯-低四灯闪烁-- when 17=> aout<=\ when 18=> aout<=\

when 19=> aout<=\ when 20=> aout<=\ ----------------------- ----隔灯闪烁------ when 21=> aout<=\ when 22=> aout<=\ when 23=> aout<=\ ------------------ when others=> null; end case; end if; end process; end behav;

顶层模块采用原理图输入

4. 引脚分配 LEDG[0]~LEDG[7]对应aout (0 to 7);SW[0]控制闪烁时间间隔,SW[0]为‘0’时,闪烁间隔为1 s ,SW[0]为‘1’时,闪烁间隔为2 s ,具体引脚分配在工程文件中。

结语:

通过综合实验的思考和设计,对一个项目的整体设计有了进一步认识,

加深了对VHDL语言的了解,提高了编程能力。同时,锻炼了独立发现问题解决问题的能力,提高了个人素质。利用硬件描述语言VHDL编程,借助Altera公司

的quartus II及modlesim软件环境下进行了编译及仿真测试,通过FPGA芯片实现了几个实际可行的的控制系统,如数字时钟,设计由于采用了EDA技术,不但大大缩短了开发研制周期,提高了设计效率,而且使系统具有设计灵活,实现简单,性能稳定的特点。

这是一次颇有收获的实训, 这次的实训中,我们更进一步体会到自主学习和团队合作的乐趣与必要性。为了完成项目,在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解, 这才知道老师的良苦用心。相信以后的我不管是做网络亦或是从事软、硬件开发,都会有一个扎实的基础和良好的开发习惯的。

通过这次课程设计真正体会到了课本上的知识是在做解决实际的问题时,是远远不够的,实际问题不是像理论知识那样,更多的是需要自己动手去操作,遇到问题时参考资料,咨询老师或是其他方式去解决问题,在此次设计过程中提升了如何解决问题的能力,找对方法,多动手实践才能解决问题。

不管这样,这次课程设计终于顺利完成了,我学也到很多实用的知识,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅。在此,感谢老师的细心指导!

若需工程文件夹可联系:1927377679

本文来源:https://www.bwwdw.com/article/8u6a.html

Top