FPGA实验报告

合集下载

FPGA实习报告

FPGA实习报告

FPGA实习报告一、实习概况本次实习我进入了一家高科技公司,参与了FPGA(Field-Programmable Gate Array,现场可编程门阵列)相关的项目。

通过与团队成员合作,我了解了FPGA的基本知识和应用,并在项目中完成了一些任务。

在这次实习中,我学到了很多东西,也发现了自己的不足之处。

二、FPGA介绍FPGA是一种可编程逻辑器件,与ASIC(Application Specific Integrated Circuit,专用集成电路)相比,FPGA具有灵活性高、开发周期短等优点。

它可以根据需要进行编程,实现各种逻辑功能。

由于其广泛应用于通信、计算机、医疗等领域,我对FPGA技术充满了兴趣。

三、项目任务在本次实习中,我主要参与了一个数字信号处理项目。

具体任务如下:1. 学习FPGA编程语言:我首先学习了FPGA的编程语言,包括VHDL (VHSIC Hardware Description Language)和Verilog HDL(Hardware Description Language)。

这两种语言可以用于描述硬件电路,并在FPGA上实现。

3.进行性能优化:为了提高数字滤波器的性能,我进行了一系列优化工作。

首先,我对代码进行了优化,减少了资源占用和功耗。

同时,我对硬件设计进行了优化,使用并行计算等技术提高了滤波器的运算速度。

四、实习心得1.学到了很多知识:通过这次实习,我学到了很多关于FPGA的知识,包括编程语言、硬件设计、性能优化等方面。

这些知识对于我今后的学习和工作都有很大的帮助。

2.提高了动手能力:在项目中,我需要从零开始设计和实现一个数字滤波器。

通过不断的尝试和实践,我提高了自己的动手能力和解决问题的能力。

3.感受到了团队合作的重要性:在项目中,我和团队成员密切合作,共同解决了很多技术难题。

这让我意识到团队合作的重要性,团队的力量会比个人更加强大。

4.发现了自己的不足之处:在实习中,我发现了自己在硬件设计和性能优化方面的不足之处。

fpga 实验报告

fpga 实验报告

fpga 实验报告FPGA实验报告引言:FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,广泛应用于数字电路设计和嵌入式系统开发中。

本实验报告旨在介绍FPGA的基本原理、应用领域以及实验过程和结果。

一、FPGA的基本原理FPGA由可编程逻辑单元(PLU)和可编程互连资源(ICR)组成。

PLU是FPGA 的核心,由逻辑门、寄存器和查找表等组成,通过编程可以实现不同的功能。

ICR用于连接PLU之间的信号线,实现不同模块之间的通信。

FPGA的可编程性使其具有灵活性和可重构性,适用于多种应用场景。

二、FPGA的应用领域1. 数字电路设计:FPGA可以实现各种数字电路,如逻辑门、加法器、乘法器等。

其可重构性使得电路设计师可以在硬件开发过程中进行快速迭代和调试,提高开发效率。

2. 通信系统:FPGA广泛应用于通信系统中的信号处理和协议转换等功能。

通过编程实现不同的通信协议,提高系统的兼容性和灵活性。

3. 图像处理:FPGA在图像处理领域有着广泛的应用。

通过并行计算的能力,可以实现实时图像处理和图像增强等功能,提高处理速度和效果。

4. 汽车电子:FPGA在汽车电子领域的应用越来越广泛。

例如,用于驾驶辅助系统、车载娱乐系统和车身控制等方面,提高汽车的安全性和性能。

三、实验过程和结果本次实验旨在设计一个简单的数字电路,并在FPGA上实现。

首先,我们使用HDL(Hardware Description Language)编写了一个4位二进制加法器的逻辑电路描述。

然后,使用FPGA开发工具将逻辑电路描述烧录到FPGA芯片中。

在实际操作中,我们按照实验指导书的步骤进行了硬件连线和编程配置。

通过FPGA开发工具提供的仿真功能,我们验证了逻辑电路的正确性。

在实际测试中,我们输入了两个4位的二进制数,并观察了输出结果。

实验结果表明,FPGA成功实现了4位二进制加法器的功能。

四、实验总结通过本次实验,我们深入了解了FPGA的基本原理和应用领域。

fpga实训报告

fpga实训报告

fpga实训报告本报告旨在总结和分享我在FPGA实训课程中的学习和实践经验。

我将介绍我在实训过程中所遇到的挑战、学到的知识以及对未来发展的展望。

1. 概述FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,具有灵活性和可重构性,广泛应用于嵌入式系统、数字电路设计和计算机硬件加速等领域。

在本次实训中,我们团队学习了FPGA的基本原理和使用方法,并基于Verilog语言开发了几个具体的项目。

2. 实训内容2.1 FPGA基础知识我们首先学习了FPGA的基础知识,包括FPGA的结构和工作原理、FPGA开发流程、Verilog语言基础等。

通过理论学习和实际操作,我们对FPGA的内部结构和原理有了更深入的了解。

2.2 FPGA开发工具在实训中,我们使用了主流的FPGA开发工具。

通过熟练掌握这些工具的使用,我们能够进行FPGA的设计、仿真和下载等操作,为后续的实验项目做好准备。

2.3 FPGA实验项目在实训过程中,我们完成了多个FPGA实验项目,包括数字逻辑电路设计、时序电路设计、数码管显示、LED闪烁、有限状态机设计等。

通过这些项目,我们将理论知识应用到实际场景中,提高了自己的设计能力和实践能力。

3. 实训经验和收获3.1 团队合作在实训中,我们组成了小组合作完成各项实验项目。

通过合作,我们不仅学会了协作和沟通,还互相帮助解决问题,提高了团队凝聚力和协作能力。

3.2 动手实践FPGA实训的一个重要特点是强调实践操作。

通过大量的实验练习,我们不仅掌握了基本的FPGA开发技能,还了解了FPGA在各个领域中的广泛应用,并在实践中提高了自己的问题解决能力。

3.3 创新思维在一些项目中,我们需要设计和实现独特的功能,这要求我们发挥创新思维,灵活运用所学知识。

通过这个过程,我们培养了创新意识和解决实际问题的能力。

4. 未来展望通过FPGA实训的学习和实践,我对FPGA的应用和发展前景有了更深入的认识和理解。

FPGA实验报告整理版.doc

FPGA实验报告整理版.doc

目录实验一分频器实验三 ADC0809 模数转换实验实验二七段数码管扫描显示实验四双向移位寄存器实验一分频器一、实验目的1.学习分频器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus II 的使用方法2.学习Verilog HDL 和VHDL的编程方法3.学会使用Vector Wave功能仿真4.掌握使用多种方法分配管脚二、实验内容编写一个分频器的Verilog 代码和VHDL代码并仿真,编译下载验证三、实验原理在数字电路中,时钟信号的分频是很常见的电路。

分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。

涟波计数器是计数器的一种,它属于异步设计。

因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。

本实验要设一个带选择的分频时钟,SEL[1:0]用于选择是几分频。

分频器设原理框图如图1所示:图1 分频器原理图从原理图中可见,核心板的时钟是50MHz ,通过sel[1:0]选择分频数,00:不分频;01:12.5M分频;10:25M四分频;11:50M分频。

采用SW1 ‐SW2 设置分频值,SW3 复位。

LED1为时钟的输出,通过调整SW1 、SW2 ,可以得到不同的闪烁频率。

引脚分配情况如表1所示表1 引脚分布情况四、实验步骤1.新建工程,取名为frediv ,如下图2所示。

图2 新建工程2.新建VHDL设计文件,选择“File|New ”,在New 对话框中选择Device Design Files下的VHDL File,单击OK,完成新建设计文件。

3.在新建设计文件中输入VHDL程序。

4.生成“Symbol ”文件,新建“Block Diagram/Schematic File”文件,在文件中添加刚刚生成的“Symbol ”以及输入输出管脚,最后完整的系统顶层模块图如图3 所示。

图3 顶层模块图5.保存文件,使用qsf或者tcl 进行管脚分配(相应的文件在本工程里面都可以找到)。

FPGA 实验报告

FPGA 实验报告

FPGA 实验任务书—实验一课程名称FPGA 适用专业微电子、通信实验项目FPGA 最小系统—认识D E2 开发板实验课时 2实验地点6505 实验时间11 周周四7、8 节一、实验目的:1.认识F PGA 芯片,熟悉其外围接口、连接方式及其功能。

2.利用控制面板测试D E2 开发板,进一步熟悉F PGA 功能。

二、实验内容:1.认识D E2 开发板中F PGA 芯片和所有外围接口。

1)请在板子上找出以下内容:2)打开电源,观察板子的反应,与接电源之前有何不同?答:所有LED都在闪烁,7段数码管显示数字0到F。

2.运行DE2的控制面板,对DE2进行测试。

测试内容包括:7-SEG、PS/2、LED、LCD、SDRAM/SRAM/FLASH、VGA、LINE OUT。

三、实验步骤:1. 打开实验板包装,逐一认识各个接口、电路和芯片。

2. 将实验板连接入P C,上电。

观察实验板的反应。

3.打开Q uartus II,运行第一个程序。

打开控制面板,逐一对主要外围接口进行测试,并记录。

4.运行 DE2_control_panel 目录下的 DE2_Control_Panel.exe,Open->Open_USB_port,下面即可对开发板进行测试了;图 2- 4 DE2 Control Panel5.PS2 和 7-SEG 的测试。

在开发板的插上键盘,输入字符即可显示在上图文本框中;设置HEX0 到 HEX7 的数字,点击 Set,开发板上相应位置的数码管显示相应数字。

6.LED 和 LCD 的测试。

如同上一步。

7.VGA 测试。

将一台显示器数据线连接到开发板的 VGA 口上。

选择 SRAM,将 File Length单选框选中。

点击下面的 Write a File to SRAM,打开DE2_demonstration\pictures\picture.dat;100%完成。

如下图示选 VGA 项。

fpga实训报告

fpga实训报告

fpga实训报告摘要:本实训报告旨在介绍FPGA(现场可编程门阵列)的基本原理和应用。

文章首先介绍了FPGA的概念和发展历程,然后详细阐述了FPGA的结构和工作原理。

接着,报告列举了几个常见的FPGA应用领域,并重点介绍了在数字信号处理和通信系统中的应用。

最后,本报告总结了FPGA在实际项目中的优势和挑战,并展望了FPGA技术的未来发展方向。

1. 引言FPGA是一种可编程的逻辑芯片,具有灵活性高、性能强等特点,因而在数字电路设计和嵌入式系统开发中得到广泛应用。

本实训报告将深入介绍FPGA的原理和应用领域。

2. FPGA的概念和发展历程FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,最早由Xilinx公司于1985年推出。

与传统的固定功能集成电路相比,FPGA可以通过编程实现不同的逻辑功能。

随着技术的发展和需求的增加,FPGA的规模不断扩大,性能也不断提高。

3. FPGA的结构和工作原理FPGA由可编程逻辑元件、输入/输出接口和内部互联网络构成。

可编程逻辑元件由可编程查找表(LUT)、触发器和算术逻辑单元等组成,可以通过配置位流(Configuration Bitstream)来实现不同的逻辑功能。

内部互联网络用于连接各个逻辑元件和输入/输出接口,实现信号的传输和通信。

4. FPGA的应用领域4.1 数字信号处理FPGA在数字信号处理中广泛应用,例如音频和图像处理等。

由于FPGA具有并行计算能力和高速数据处理特性,可以实现实时的信号采集、转换和滤波等功能。

4.2 通信系统FPGA在通信系统中也有重要应用,例如调制解调器、协议转换器和网络路由器等。

通过FPGA的可编程性,可以根据不同的通信标准和协议进行灵活配置和优化设计。

4.3 自动化控制FPGA可应用于自动化控制系统,如工业控制和机器人控制等。

通过实时数据采集和处理,FPGA可以实现高精度控制和实时响应。

fpga实训报告

fpga实训报告

fpga实训报告一、引言FPGA(Field-Programmable Gate Array)是一种可编程逻辑集成电路,通过在硬件设计中使用现场可编程的逻辑门阵列,实现了对硬件电路的灵活配置和重构。

FPGA广泛应用于数字信号处理、通信系统、嵌入式系统等领域。

本篇报告将介绍我在FPGA实训过程中的学习和实践成果。

二、实训目标本次FPGA实训的主要目标是通过学习和实践,掌握FPGA的基本原理和设计流程。

具体的实训内容包括FPGA的基本结构、开发环境的搭建、逻辑电路的设计与实现等。

三、FPGA基本原理1. FPGA的结构FPGA由可编程逻辑单元(CLB)、输入/输出块(IOB)、全局时钟网络(GCLK)、可编程互连网络等构成。

可编程逻辑单元是FPGA的核心,用于实现逻辑功能;输入/输出块用于与外部系统进行数据交互;全局时钟网络用于传播时钟信号;可编程互连网络用于连接逻辑单元和输入/输出块。

2. FPGA的编程语言FPGA的设计可以使用硬件描述语言(HDL)进行开发。

常用的HDL语言有VHDL和Verilog,开发者可以根据需求选择适合的语言进行设计。

四、实训步骤1. 搭建开发环境在开始实训之前,需要搭建好FPGA的开发环境。

首先,安装相应的开发软件,并配置开发板的驱动程序。

接着,将开发板与计算机连接,并确认连接成功。

2. 设计逻辑电路在FPGA实训中,我首先根据实际需求设计了一组逻辑电路。

通过使用VHDL语言,我实现了数字信号的采样和滤波功能。

为了验证设计的正确性,我使用仿真工具进行了逻辑电路的模拟。

3. 烧写程序设计完成后,我将设计好的逻辑电路通过编译器生成可烧写文件。

然后,将可烧写文件烧写到FPGA芯片中,使其能够正确运行设计好的逻辑电路。

五、实训成果通过本次FPGA实训,我深入了解了FPGA的基本原理和设计流程,掌握了VHDL语言的使用,熟悉了FPGA开发环境的搭建和操作。

最终,我成功实现了一组逻辑电路的功能,并通过烧写程序在FPGA上进行了验证。

FPGA实验报告

FPGA实验报告

FPGA实验报告一、实验目的本次实验的主要目的是了解和掌握FPGA的基本原理、主要特点和应用领域,以及学习使用HDL语言进行FPGA设计和开发。

二、实验器材和软件1.实验器材:FPGA开发板、计算机;2. 实验软件:Xilinx Vivado。

三、实验内容1.FPGA基础知识学习首先,我们学习了FPGA的基本原理和主要特点。

FPGA(Field Programmable Gate Arrays)即现场可编程门阵列,是一种可在现场进行编程和重新配置的集成电路。

与常规的固定功能集成电路相比,FPGA具有灵活性和可重构性的优势,因此在各种应用领域得到广泛应用。

2.VHDL语言学习在了解了FPGA基础知识后,我们开始学习使用HDL语言进行FPGA设计和开发。

HDL(Hardware Description Language)即硬件描述语言,是一种用于描述数字电路结构和行为的语言。

在本次实验中,我们主要学习了VHDL(VHSIC Hardware Description Language)语言的基础语法和常用结构,如组合逻辑和时序逻辑。

3.FPGA设计实验基于学习的FPGA和VHDL知识,我们进行了一系列的FPGA设计实验。

首先,我们设计了一个组合逻辑电路,实现了一个两输入AND门的功能。

然后,我们设计了一个时序逻辑电路,实现了一个简单的计数器,能够在每个时钟上升沿时进行计数。

四、实验结果与分析通过实验,我们成功地实现了一个两输入AND门和一个计数器电路。

经过仿真和综合,我们验证了设计的正确性和可行性。

从实验中,我们不仅掌握了FPGA的基本原理和主要特点,也学习了使用HDL语言进行FPGA设计和开发的基本方法。

通过自己动手实验,我们加深了对FPGA的理解,并提高了自己的实践操作能力。

五、实验总结通过本次实验,我们对FPGA的基本原理和主要特点有了更深入的了解,也掌握了使用HDL语言进行FPGA设计和开发的基本方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA实验一、实验目的1. 熟悉Quartus Ⅱ软件基本使用方法;2. 掌握电路的基本设计方法;3. 掌握电路的基本仿真方法;4. 掌握电路的基本下载方法;5. 学习状态机的设计技巧;6. 掌握CASE 语句的使用;7. 掌握时钟分频电路的HDL 设计;8. 掌握CASE 语句的使用;9. 掌握VHDL模块化程序设计方式;10. 学习VHDL程序的设计技巧;11. 掌握VHDL语言译码电路的设计;12. 掌握选择信号赋值语句的设计方法;二、实验器材1. KH-310 下载板;2. KH-310 LED 显示模块;3. KH-310 时钟模块;5.KH-310 七段数码管模块。

4. 计算机。

三、实验原理乒乓球机:乒乓球游戏机是用8~16 个发光二极管代表乒乓球台,中间两个发光二极管兼作乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动。

另外设置发球开关:Af、Bf;和接球开关Aj、Bj。

利用若干七段数码管作为计分牌。

甲乙双方按乒乓球比赛规则来操作开关。

当甲方按动发球开关Af 时,靠近甲方的第一个灯亮,然后顺序向乙方移动。

当球过网后,乙方可以接球,接球后灯反方向运动,双方继续比赛,如果一方提前击球(过网击球)或未击到球,则判失分,对方加分。

重新发球后继续比赛。

译码器:状态机:状态机的一个常用的用处是构成控制步进电机的逻辑电路。

表1给出了用于顺时针和逆时针驱动步进电机的二进制码。

状态机的设计中我们需要提到一些称为常态和次态的状态,表2列举了步进电机的状态转换顺序。

时钟:图3.27四、实验内容1.用VHDL 语言和原理图分别完成设计、仿真和下载基本逻辑门电路半加器的过程:输入:a,b;输出:求和sum,进位c;2. 控制8 个LED 进行花式显示,设计四种显示模式:1. 从左到右逐个点亮LED;2. 从右到左逐个点亮LED;3. 从两边到中间逐个点亮LED;4. 从中间到两边逐个点亮LED。

四种模式循环切换,由复位键rst 控制系统的运行与停止。

3. 设计一个乒乓球游戏机,模拟乒乓球比赛基本过程和规则,并能自动裁判和计分。

4. 设计一个简单的指令译码器,按指定的要求,对两个逻辑变量进行运算,并将运算的结果在发光二极管上显示。

5.使用VHDL语言,编制一个4相步进电机控制程序,由发光二极管指示步进电机的相序,要求正反转控制,通过改变时钟频率实现调速。

6. 设计一个电子钟,要求可以显示时、分、秒,用户可以设置时间且需要设置的时间显示要求闪烁。

跑马灯:输入信号:时钟clk 接10Hz 输入(SW7) P152;复位rst 接拨动开关I01(拨码开关SW3 左1)P1 ;输出信号:8 位输出信号接LED 模块O25—O32。

P43~P50;乒乓球:输入信号:控制时钟CLK:可调时钟SW7 输入;接发球输入Af,Aj,Bf,Bj:脉冲发生器EPI0~EPI3(Pin236 Pin238 Pin237 Pin239);系统复位Clr:拨码开关I01;输出信号:乒乓球信号shift[15..0]:LED 显示模块O25~O40;计分输出q[6..0]:七段数码管O56~O50(Pin79~Pin73)(JP1);Sellread[3..0]:数码管选择SO61~SO58(Pin86~Pin83)(数码管跳线接左侧扫描方式)。

译码器:输入信号:译码器输入开关c、b、a 接拨动开关I01(拨码开关SW3 左1 P1)、I02(拨码开关SW3 左2 P2)、I03(拨码开关SW3 左3 P3),输入数据data1、data2接IO9(拨码开关SW4 左1 P11)、IO10(拨码开关SW3 左2 P12)输出信号:LED 模块O25 P43;步进机:输入信号:时钟clk 接10Hz 输入(SW7) P152;方向dir接拨动开关I01(拨码开关SW3 左1)P1 ;输出信号:4 位输出信号接LED 模块O25—O28。

P43~P46;电子钟:输入信号:时钟clk:接开发板可调时钟SW7(P152),选择100KHz 频率;模式选择mode:接脉冲发生器模块EPI0;P236时间设定set:接脉冲发生模块EPI1;P238输出信号:Seg7[7.. 0]接数码管段扫描信号O50~O56、SO57;P73、74、75、76、77、78、79、82 Segctr[7..0]接数码管位选显示信号S O58~S O65;P83、84、85、86、87、88、93、94 CLR ;P1 清零信号1. 新建文本文件2. 建立工程项目3. 编译并综合4. 设计仿真5. 管脚的分配与定位6. 硬件连接7. 器件下载编程与硬件实现七、实验操作1. 跑马灯:下载程序,将SW7 拨至第二段(10Hz),拨码开关SW3 的IO1 拨至ON 的位置,此时,LED 灯的前8 位会有规律的闪烁。

2. 乒乓球:下载程序,将SW3 的IO1 拨到ON 后可进行比赛,PULS1 为甲方发球,PULS2 为甲方接球,PULS3 为乙方发球,PULS4 为乙方接球。

LED 灯中,始终点亮的代表球网,将SW7 拨至第四段的位置。

点击发球之后,双方可进行比赛,比赛规则参照实验原理部分。

3. 译码器:改变译码器的输入值(a、b、c)和输入数据值(data1、data2),输出数据按设计值输出4. 步进机:下载程序,将SW7 拨至第二段(10Hz),此时,LED 灯的前1 位会有规律的闪烁。

改变方向开关的电平信号,指示灯的移动方向立即改变。

5. 电子钟:下载程序,按PULSE1 可进行时、分、秒的切换,按PULSE2 可以对时,分,秒进行设置,I01为系统的使能,I01 为off 时开始计时。

1.半加器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity halfadd isport(a:in std_logic;b:in std_logic;sum:out std_logic;c,d:out std_logic);end;architecture main of halfadd isbeginc<=a and b;sum<=a xor b;end;2.跑马灯library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led isport(clk:in std_logic;rst:in std_logic;q :out std_logic_vector(7 downto 0));end;architecture led of led isconstant s0:std_logic_vector(1 downto 0):="00"; --模式1constant s1:std_logic_vector(1 downto 0):="01"; --―模式2constant s2:std_logic_vector(1 downto 0):="10"; --―模式3constant s3:std_logic_vector(1 downto 0):="11"; --―模式4signal present:std_logic_vector(1 downto 0); -- ――当前模式signal q1:std_logic_vector(7 downto 0);signal count:std_logic_vector(3 downto 0);beginprocess(rst,clk)beginif(rst='0')then -- ――系统初始化present<=s0;q1<=(others=>'0');elsif(clk'event and clk='1')thencase present iswhen s0 => if(q1="00000000")then --――S0模式:从左到右逐个点亮LEDq1<="10000000";else if(count="0111")thencount<=(others=>'0');q1<="00000001";present<=s1;else q1<=q1(0) & q1(7 downto 1);count<=count+1;present<=s0;end if;end if;when s1 => if(count="0111")then --S1模式:从右到左逐个点亮LEDcount<=(others=>'0');q1<="10000001";present<=s2;else q1<=q1(6 downto 0) & q1(7);count<=count+1;present<=s1;end if;when s2 => if(count="0011")then --S2模式:从两边到中间逐个点亮LEDcount<=(others=>'0');q1<="00011000";present<=s3;else q1(7 downto 4)<=q1(4) & q1(7 downto 5);q1(3 downto 0)<=q1(2 downto 0) & q1(3);count<=count+1;present<=s2;end if;when s3 => if(count="0011")then --S3模式:从中间到两边逐个点亮LEDcount<=(others=>'0');q1<="10000000";present<=s0;else q1(7 downto 4)<=q1(6 downto 4) & q1(7);q1(3 downto 0)<=q1(0) & q1(3 downto 1);count<=count+1;present<=s3;end if;end case;end if;end process;q<=q1;end;3.乒乓球Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity corna isport (clr,af,aj,bf,bj,clk:in std_logic;shift:out std_logic_vector(15 downto 0);ah,al,bh,bl: out std_logic_vector(3 downto 0));end corna;architecture corna_arc of corna issignal amark,bmark : integer;signal clk1:std_logic;signal fen:std_logic_vector(9 downto 0);beginprocessbeginwait until clk='1';fen<=fen+1;clk1<=fen(7);end process;process(clr,clk1)variable a,b : std_logic;variable she: std_logic_vector(15 downto 0); beginif clr='0' thena:='0';b:='0';she:="0000000000000000";amark<=0;bmark<=0;elsif clk1'event and clk1 ='1' thenif a='0' and b='0' and af='1' thena:='1';she:="1000000000000000";elsif a='0' and b='0' and bf='1' thenb:='1';she:="0000000000000001";elsif a='1' and b='0' thenif she>128 thenif bj='1' thenamark<=amark+1;a:='0';b:='0';she:="0000000000000000";elseshe:='0'&she(15 downto 1);end if;elsif she=0 thenamark<=amark+1;a:='0';b:='0';elseif bj='1' thena:='0';b:='1';elseshe:='0'& she(15 downto 1);end if;end if;elsif a='0' and b='1' thenif she<256 and she/=0 thenif aj='1' thenbmark<=bmark+1;a:='0';b:='0';she:="0000000000000000";elseshe:=she(14 downto 0)&'0';end if;elsif she=0 thenbmark<=bmark+1;a:='0';b:='0';elseif aj='1' thena:='1';b:='0';elseshe:=she(14 downto 0)&'0';end if;end if;end if;end if;shift<=she;end process;process(clk,clr,amark,bmark)variable aha,ala,bha,bla: std_logic_vector(3 downto 0); variable tmp1,tmp2: integer;beginif clr='0' thenaha:="0000";ala:="0000";bha:="0000";bla:="0000";tmp1:=0;tmp2:=0;elsif clk'event and clk='1' thenif amark>tmp1 thenif ala="1001" thenala:="0000";aha:=aha+1;tmp1:=tmp1+1;elseala:=ala+1;tmp1:=tmp1+1;end if ;end if;if bmark>tmp2 thenif bla="1001" thenbla:="0000";bha:=bha+1;tmp2:=tmp2+1;elsebla:=bla+1;tmp2:=tmp2+1;end if ;end if;end if;al<=ala;bl<=bla;ah<=aha;bh<=bha;end corna_arc;Library ieee;use ieee.std_logic_1164.all;entity ch41a isport(sel:in std_logic_vector(2 downto 0);d0,d1,d2,d3: in std_logic_vector(3 downto 0);q: out std_logic_vector(3 downto 0));end ch41a;architecture ch41_arc of ch41a isbeginprocess(sel)begincase sel iswhen "100"=>q<=d2;when "101"=>q<=d3;when "000"=>q<=d0;when others=>q<=d1;end case;end process;end ch41_arc;Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel isport (clk:in std_logic;sell:out std_logic_vector(2 downto 0));end sel;architecture sel_arc of sel isbeginprocess(clk)variable tmp: std_logic_vector(2 downto 0);beginif clk'event and clk='1' thenif tmp="000" thentmp:="001";elsif tmp="001" thentmp:="100";elsif tmp="100" thentmp:="101";elsif tmp="101" thentmp:="000";end if;end if;sell<=tmp;end process;Library ieee;use ieee.std_logic_1164.all;entity disp isport (d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0));end disp;architecture disp_arc of disp isbeginprocess(d)begincase d iswhen "0000"=>q<="0111111";when "0001"=>q<="0000110";when "0010"=>q<="1011011";when "0011"=>q<="1001111";when "0100"=>q<="1100110";when "0101"=>q<="1101101";when "0110"=>q<="1111101";when "0111"=>q<="0100111";when "1000"=>q<="1111111";when others=>q<="1101111";end case;end process;end disp_arc;Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pingpong isport (clr,af,aj,bf,bj,clk:in std_logic;shift:out std_logic_vector(15 downto 0);q: out std_logic_vector(6 downto 0);net: out std_logic_vector(1 downto 0);sellread:out std_logic_vector(3 downto 0));end pingpong;architecture pingpong of pingpong iscomponent corna isport (clr,af,aj,bf,bj,clk:in std_logic;shift:out std_logic_vector(15 downto 0);ah,al,bh,bl: out std_logic_vector(3 downto 0));end component;component ch41a isport(sel:in std_logic_vector(2 downto 0);d0,d1,d2,d3: in std_logic_vector(3 downto 0);q: out std_logic_vector(3 downto 0));end component;component sel isport (clk:in std_logic;sell:out std_logic_vector(2 downto 0));end component;component disp isport (d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0));end component;signal i1,i2,i3,i4,i5: std_logic_vector(3 downto 0); signal i6:std_logic_vector(2 downto 0);beginu1:corna port map(clr,af,aj,bf,bj,clk,shift,i1,i2,i3,i4); u2:ch41a port map(i6,i2,i1,i4,i3,i5);u3:sel port map(clk,i6);u4:disp port map(i5,q);net <= "11";--with i6 select--sellread<="1000" when "000"--"0100" when "001"-- "0010" when "100"-- "0001" when others;sellread<="1000" when i6="000" else"0100" when i6="001" else"0010" when i6="100" else"0001" ;--sellread<=i6;end pingpong;4.指令译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(a,b,c:in std_logic;data1,data2:in std_logic;dataout:out std_logic);end decoder;architecture data_flow of decoder issignal inter:std_logic_vector(2 downto 0);begin inter<=c&b&a;with inter selectdataout<=data1 and data2 when "001",data1 or data2 when "010",data1 nand data2 when "011",data1 xor data2 when "100",data1 xnor data2 when "101",'Z' when others;end data_flow;5.状态机library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity state_stepper_b isport(clk,dir:in std_logic;q:out std_logic_vector(3 downto 0));end state_stepper_b;architecture arc of state_stepper_b istype state_type is (s0,s1,s2,s3);signal state:state_type;beginprocess(clk)beginif clk'event and clk='1' thenif dir='1' thencase state iswhen s0=> state <=s1;when s1=> state <=s2;when s2=> state <=s3;when s3=> state <=s0;end case;elsecase state iswhen s0=> state <=s3;when s1=> state <=s0;when s2=> state <=s1;when s3=> state <=s2;end case;end if;end if;end process;with state selectq<= "0001" when s0,"0010" when s1,"0100" when s2,"1000" when s3;end arc;6.时钟library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity BCD isport(DataIn:in std_logic_vector(5 downto 0);BCDOut:out std_logic_vector(7 downto 0) );end BCD;architecture main of BCD isbeginprocess(DataIn)variable inter:std_logic_vector(13 downto 0);variable test:std_logic_vector(3 downto 0);begininter:="00000000"&DataIn;for i in 0 to 5 looptest:=inter(9 downto 6);if(test>=5) thentest:=test+3;inter(9 downto 6):=test;end if;inter:=inter(12 downto 0)&'0';end loop;BCDOut<=inter(13 downto 6);end process;end main;Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Clock isport( mode, set, clr, clk :in std_logic;seg7, segctr :out std_logic_vector(7 downto 0));end entity;ARCHITECTURE arch OF Clock ISsignal state: std_logic_vector(1 downto 0);signal Hour, Min, Sec: std_logic_vector(5 downto 0); signal BCDH, BCDM, BCDS: std_logic_vector(7 downto 0); signal segDat: std_logic_vector(3 downto 0);signal blink: std_logic_vector(2 downto 0);signal set_reg, blink_clk: std_logic;component BCDport(DataIn : in std_logic_vector(5 downto 0);BCDOut : out std_logic_vector(7 downto 0));end component;BEGINprocess(mode)beginif (clr='1') thenstate<="00";elseif (mode'event and mode='1') thenstate<=state+1;end if;end if;end process;process(state, blink_clk)begincase state iswhen "00" => blink<="000";when "01" => blink<=(2=>blink_clk, others=>'0'); when "10" => blink<=(1=>blink_clk, others=>'0'); when "11" => blink<=(0=>blink_clk, others=>'0'); end case;end process;process(clk)variable blink_cnt: std_logic_vector(13 downto 0); beginif (clr='1') thenblink_clk<='0';blink_cnt:=(others=>'0');elseif (clk'event and clk='1') thenif (blink_cnt="11000011010011") thenblink_cnt:=(others=>'0');blink_clk<=not blink_clk;elseblink_cnt:=blink_cnt+1;end if;end if;end if;end process;process(clk, state)variable clk_cnt: std_logic_vector(16 downto 0); beginif (clr='1') thenHour<="000000"; Min<="000000"; Sec<="000000"; clk_cnt:=(others=>'0');set_reg<='0';elseif (clk'event and clk='1') thencase state iswhen "00" =>if (clk_cnt="11000011010011111") thenclk_cnt:=(others=>'0');if (Sec=59) thenSec<=(others=>'0');if (Min=59) thenMin<=(others=>'0');if (Hour=23) thenHour<=(others=>'0');else Hour<=Hour+1;end if;else Min<=Min+1;end if;else Sec<=Sec+1;end if;else clk_cnt:=clk_cnt+1;end if;when "01" =>if (set='1') thenif set_reg='0' thenset_reg<='1';if (Hour=23) thenHour<=(others=>'0');else Hour<=Hour+1;end if;end if;elseset_reg<='0';end if;when "10" =>if (set='1') thenif set_reg='0' thenset_reg<='1';if (Min=59) thenMin<=(others=>'0');else Min<=Min+1;end if;end if;elseset_reg<='0';end if;when "11" =>if (set='1') thenif set_reg='0' thenset_reg<='1';if (Sec=59) thenSec<=(others=>'0');else Sec<=Sec+1;end if;end if;elseset_reg<='0';end if;end case;end if;end if;end process;HBCD : BCDport map(Hour, BCDH);MBCD : BCDport map(Min, BCDM);SBCD : BCDport map(Sec, BCDS);process(clk)variable cnt :std_logic_vector(2 downto 0); beginif (clr='1') thencnt:=(others=>'0');segCtr<=(others=>'0');elseif (clk'event and clk='1') thencnt:=cnt+1;case cnt iswhen "000" =>segDat<=BCDH(7 downto 4)or (blink(2) & blink(2) & blink(2) & blink(2)); segctr<="10000000";when "001" =>segDat<=BCDH(3 downto 0)or (blink(2) & blink(2) & blink(2) & blink(2)); segctr<="01000000";when "010" =>segDat<="1010";segctr<="00100000";when "011" =>segDat<=BCDM(7 downto 4)or (blink(1) & blink(1) & blink(1) & blink(1)); segctr<="00010000";when "100" =>segDat<=BCDM(3 downto 0)or (blink(1) & blink(1) & blink(1) & blink(1)); segctr<="00001000";when "101" =>segDat<="1010";segctr<="00000100";when "110"=>segDat<=BCDS(7 downto 4)or (blink(0) & blink(0) & blink(0) & blink(0)); segctr<="00000010";when "111"=>segDat<=BCDS(3 downto 0)or (blink(0) & blink(0) & blink(0) & blink(0)); segctr<="00000001";end case;end if;end if;end process;process(segDat)begincase segDat iswhen "0000" => seg7<="11111100"; when "0001" => seg7<="01100000"; when "0010" => seg7<="11011010"; when "0011" => seg7<="11110010"; when "0100" => seg7<="01100110"; when "0101" => seg7<="10110110"; when "0110" => seg7<="10111110"; when "0111" => seg7<="11100000"; when "1000" => seg7<="11111110"; when "1001" => seg7<="11110110"; when "1010" => seg7<="00000010"; when others => seg7<="00000000";end case;end process;END arch;测验题译码器library ieee;use ieee.std_logic_1164.all;entity dec isport(signal cba: in std_logic_vector(2 downto 0);signal G: in std_logic_vector(1 downto 0);signal y: out std_logic_vector(7 downto 0));end dec;architecture behavior of dec isbeginprocess(cba,G)beginy<="11111111";if(G="10") thencase cba iswhen "000"=>y(0)<='0';when "001"=>y(1)<='0';when "010"=>y(2)<='0';when "011"=>y(3)<='0';when "100"=>y(4)<='0';when "101"=>y(5)<='0';when "110"=>y(6)<='0';when "111"=>y(7)<='0';when others=>null;end case;else y<="11111111";end if;end process;end behavior;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity state_stepper_b isport(clk,dir:in std_logic;q:out std_logic_vector(7 downto 0));end state_stepper_b;状态机architecture arc of state_stepper_b istype state_type is (s0,s1,s2,s3,s4,s5,s6,s7);signal state:state_type;beginprocess(clk)beginif clk'event and clk='1' thenif dir='1' thencase state iswhen s0=> state <=s1;when s1=> state <=s2;when s2=> state <=s3;when s3=> state <=s4;when s4=> state <=s5;when s5=> state <=s6;when s6=> state <=s7;when s7=> state <=s0;end case;else state<=s0;end if;end if;end process;with state selectq<= "00000001" when s0,"00000011" when s1,"00000111" when s2,"00001111" when s3,"00010000" when s4,"00110000" when s5,"01110000" when s6,"11110000" when s7;end arc;八、实验感想通过FPGA的实验更好的认识了编程预言在模拟开发中的应用学习了Quartus Ⅱ软件基本使用方法;掌握了VHDL模块化程序设计方式;.学习VHDL程序的设计技巧;掌握VHDL语言译码电路的设计。

相关文档
最新文档