北航电气技术实践FPGA报告

  • 格式:docx
  • 大小:1.68 MB
  • 文档页数:16

FPGA实验报告 141717 一、实验目的 1、熟悉使用可编程逻辑器件--Altera 公司FPGA Cyclone ш 系列EP3C55F 2、熟悉使用硬件描述语言--VHDL 3、熟悉FPGA集成环境--Altera公司FPGA Quartusǁ 9或10开发流程 4、熟悉并掌握核心目标系统板与接口电路等工作原理及功能模块绑定新信息 5、熟悉并掌握下载线方式和下载文件的选择 二、实验要求 1、学习并掌握文本编辑、图形编辑等输入和时序、功能仿真方法。 2、学习并掌握门电路、组合电路、时序电路等单一模块功能。 3、学习并设计各种不同状态机逻辑功能的电路。 4、学习并设计有单一模块--较多功能模板集成--系统集成的方法。 5、学习并将系统及成功逐一拆分成一个个子功能模块的方法。 6、学习并选择多种模式显示(发光二极管显示、七段数码管--动态扫描或静态扫描显示、LED点阵显示各种字符和图形或静止或移动等方式、LCD字符液晶显示各种字符和图形或静止或移动、TFT-LCD触摸液晶屏显示各种信息等方式)。 7、根据自己的兴趣和愿望,可从给定的实验题目中选取或自己设定功能题目。 8、同组实验者应轮流操作实例实验流程,并实施源程序编写、编译、调试、下载程序和验证实验结果实践环节。 9、利用元件例化语句调用,至少涉及一个有内容、功能较复杂稍大的主、子程序综合应用例程。 10、实验数目不仅要求有简单、一般设计验证、综合、提高等不同层次(难度)功能内容,关键是看质量。 三、实验设备 1、可编程逻辑EDA/SOPC实验箱一台。 2、计算机及开发软件Quartusǁ 一台套。 四、实验内容 1、按指导书7.6集成开发环境使用章节操作顺序实现文本编程实例1和图形编程实例2全过程。 2、分析并运行指导书5.2综合实例,掌握其编程技巧和输入及输出显示方法。 3、任选门电路、组合电路、时序电路实验各完成一个其逻辑功能,其实现方案自拟定。在运行FPGA目标器件输入和输出引脚绑定时,输入引脚可绑定高/低电平、单脉冲、各种分频连续脉冲等多种信号,输出引脚可绑定发光二极管、七段数码管、LED点阵等显示模式。如玉门、或门、非门、或非门、异或门、三态门、单向总线缓冲器、双向总线缓冲器、编码器(8-3编码器或优先编码器)、译码器(3-8译码器、BCD-7段显示译码器)、数据选择器(4-1 、8-1)、数据分配器、数值比较器(A,B)、加法器(半加器、全加器、4位全加器)、减法器(半减器、全减器、4位全减器)、RS触发器、JK触发器、D触发器、T触发器、同步计数器、异步计数器、减法计数器、可逆计数器、可变模计数器(无置数端、有置数端)、寄存器、锁存器、移位寄存器、顺序脉冲发生器、序列信号发生器、分频器、格雷码计数器、只读存储器(ROM)、随机存储器(RAM)、堆栈、FIFO。 4、在完成一位十进制计数器的基础上,可增加完成两或三等多位十进制计数器逻辑功能并用多位七段数码管来显示。也可完成8位十进制数字频率计,被测时钟来自外部引针组“CLK_DIV”,有复位、启动等功能。 5、根据状态机工作特点,设计一个你认为有一定功能效果的例程。如步进电机双向双拍、6位密码电子顺序锁、A/D转换器控制等。也可完成多人抢答器、彩灯控制、交通信号灯控制。 6、利用4x4键盘电路,设计一个按下键(如“F”)并用七段数码管或LED点阵对应显示的键字符信息(显示“F”字符)。扩展是否能显示多位字符信息,如计算显示结果功能(计算器)。 7、用LED点阵显示任意字符、图形等信息。 8、用元件例化语句调用方式,设计一个具有一定功能的例程。如模拟控制电梯上、下、停止、显示楼层等功能。 9、用LCD液晶屏显示任意字符、图形等信息。 五、实验代码 此处只附综合性实验的代码,其余代码参照实验指导书。 ① 4x4键盘电路 此程序实现按下键盘上一个键(如“F”)并用七段数码管显示对应键的字符信息(如显示“F”字样)的功能。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; USE ieee.std_logic_arith.all; entity cn7 is port (clk:in std_logic; start:in std_logic; KBCol:in std_logic_vector(3 downto 0); KBRow:out std_logic_vector(3 downto 0); seg7:out std_logic_vector(6 downto 0); scan:out std_logic_vector(7 downto 0)); end; architecture bev of cn7 is signal count:std_logic_vector(1 downto 0); signal sta:std_logic_vector(1 downto 0); begin scan<="11111110"; a: process(clk) begin if clk'event and clk='1'then count<=count+1; end if; end process a; b: process(clk) begin if(clk'event and clk='1')then case count(1 downto 0)is when "00"=>KBRow<="0111"; sta<="00"; when "01"=>KBRow<="1011"; sta<="00"; when "10"=>KBRow<="1101"; sta<="00"; when "11"=>KBRow<="1110"; sta<="00"; when others=>KBRow<="1111"; end case; end if; end process b; c: process(clk,start) begin if start='0'then seg7<="0000000"; elsif(clk'event and clk='1')then case sta is when "00"=> case KBCol is when "1110"=>seg7<="1001110"; when "1101"=>seg7<="0111101"; when "1011"=>seg7<="1001111"; when "0111"=>seg7<="1000111"; when others=>seg7<="0000000"; end case; when "01"=> case KBCol is when "1110"=>seg7<="1111111"; when "1101"=>seg7<="1110011"; when "1011"=>seg7<="1110111"; when "0111"=>seg7<="1011011"; when others=>seg7<="0000000"; end case; when "10"=> case KBCol is when "1110"=>seg7<="0110011"; when "1101"=>seg7<="1011011"; when "1011"=>seg7<="1011111"; when "0111"=>seg7<="1110000"; when others=>seg7<="0000000"; end case; when "11"=> case KBCol is when "1110"=>seg7<="1111110"; when "1101"=>seg7<="0110000"; when "1011"=>seg7<="1101101"; when "0111"=>seg7<="1111001"; when others=>seg7<="0000000"; end case; when others=>seg7<="0000000"; end case; end if; end process c; end bev; ② LED显示 程序实现了16x16LED点阵滚动显示字样“大辣条怪”。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity lt is port(enable,clk:in std_logic; sel:out std_logic_vector(3 downto 0); h0,h8:out std_logic_vector(7 downto 0)); end lt; architecture count of lt is signal lie:std_logic_vector(3 downto 0); signal next1: std_logic_vector(1 downto 0); begin a1:process(clk,enable) begin