FPGA综合实验 05 - | VGA彩条信号显示控制电路设计
一、实验目的和任务
学习VGA图像显示控制电路设计。
二、设计代码(或原理图)、仿真波形及分析
1、rom 为图像数据存储模块
// megafunction wizard: %ROM: 1-PORT%
// GENERATION: STANDARD
// VERSION: WM1.0
// MODULE: altsyncram // ============================================================
// File Name: rom.v
// Megafunction Name(s):
// altsyncram
//
// Simulation Library Files(s):
// altera_mf
// ============================================================
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
//
// 13.1.0 Build 162 10/23/2013 SJ Full Version
// ************************************************************//Copyright (C) 1991-2013 Altera Corporation
//Your use of Altera Corporation's design tools, logic functions
//and other software and tools, and its AMPP partner logic
//functions, and any output files from any of the foregoing
//(including device programming or simulation files), and any
//associated documentation or information are expressly subject
//to the terms and conditions of the Altera Program License
//Subscription Agreement, Altera MegaCore Function License
//Agreement, or other applicable license agreement, including,
//without limitation, that your use is for the sole purpose of
//programming logic devices manufactured by Altera and sold by
//Altera or its authorized distributors. Please refer to the
//applicable agreement for further details.// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module rom (address,clock,q);input [16:0] address;input clock;output [23:0] q;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_off
`endiftri1 clock;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_on
`endifwire [23:0] sub_wire0;wire [23:0] q = sub_wire0[23:0];altsyncram altsyncram_component (.address_a (address),.clock0 (clock),.q_a (sub_wire0),.aclr0 (1'b0),.aclr1 (1'b0),.address_b (1'b1),.addressstall_a (1'b0),.addressstall_b (1'b0),.byteena_a (1'b1),.byteena_b (1'b1),.clock1 (1'b1),.clocken0 (1'b1),.clocken1 (1'b1),.clocken2 (1'b1),.clocken3 (1'b1),.data_a ({24{1'b1}}),.data_b (1'b1),.eccstatus (),.q_b (),.rden_a (1'b1),.rden_b (1'b1),.wren_a (1'b0),.wren_b (1'b0));defparamaltsyncram_component.address_aclr_a = "NONE",altsyncram_component.clock_enable_input_a = "BYPASS",altsyncram_component.clock_enable_output_a = "BYPASS",altsyncram_component.init_file = "../timg.mif",altsyncram_component.intended_device_family = "Cyclone V",altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",altsyncram_component.lpm_type = "altsyncram",altsyncram_component.numwords_a = 131072,altsyncram_component.operation_mode = "ROM",altsyncram_component.outdata_aclr_a = "NONE",altsyncram_component.outdata_reg_a = "CLOCK0",altsyncram_component.widthad_a = 17,altsyncram_component.width_a = 24,altsyncram_component.width_byteena_a = 1;endmodule// ============================================================
// CNX file retrieval info
// ============================================================
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
// Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
// Retrieval info: PRIVATE: AclrByte NUMERIC "0"
// Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: Clken NUMERIC "0"
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V"
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
// Retrieval info: PRIVATE: MIFfilename STRING "../timg.mif"
// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "131072"
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
// Retrieval info: PRIVATE: RegAddr NUMERIC "1"
// Retrieval info: PRIVATE: RegOutput NUMERIC "1"
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
// Retrieval info: PRIVATE: SingleClock NUMERIC "1"
// Retrieval info: PRIVATE: UseDQRAM NUMERIC "0"
// Retrieval info: PRIVATE: WidthAddr NUMERIC "17"
// Retrieval info: PRIVATE: WidthData NUMERIC "24"
// Retrieval info: PRIVATE: rden NUMERIC "0"
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
// Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE"
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: INIT_FILE STRING "../timg.mif"
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V"
// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "131072"
// Retrieval info: CONSTANT: OPERATION_MODE STRING "ROM"
// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0"
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "17"
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "24"
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
// Retrieval info: USED_PORT: address 0 0 17 0 INPUT NODEFVAL "address[16..0]"
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
// Retrieval info: USED_PORT: q 0 0 24 0 OUTPUT NODEFVAL "q[23..0]"
// Retrieval info: CONNECT: @address_a 0 0 17 0 address 0 0 17 0
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
// Retrieval info: CONNECT: q 0 0 24 0 @q_a 0 0 24 0
// Retrieval info: GEN_FILE: TYPE_NORMAL rom.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL rom.inc FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL rom.cmp FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL rom.bsf TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL rom_inst.v FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL rom_bb.v TRUE
// Retrieval info: LIB_FILE: altera_mf
2、VGA模块扫描显示功能,代码如下所示
module VGA(clk,hs,vs,rgbout,rgbin,vc,hc,blank,sync);input clk;input [23:0]rgbin;output hs,vs;output blank,sync;output [23:0]rgbout;output[9:0]hc,vc;reg [9:0]hcnt,vcnt;reg hs,vs;reg [9:0]x;reg [9:0]y;reg [23:0]rgbout;assign hc=hcnt,vc=vcnt;assign sync=1'b1;assign blank =~((hcnt>799)||(vcnt>524));always@(posedge clk) // 行计数800begin if(hcnt==10'd799)hcnt<=10'd0;else hcnt<=hcnt+1'b1;endalways@(posedge clk) // 场计数525begin if(hcnt==10'd639+10'd8)begin if(vcnt==10'd524)vcnt<=10'd0;else vcnt<=vcnt+1'b1;endendalways@(posedge clk) // 产生行同步有效信号 begin if ((hcnt > (10'd640+10'd8+10'd8)) && (hcnt < (10'd640+10'd8+10'd8+10'd96)))hs<=1'b0;elsehs<=1'b1;endalways@(vcnt) // 产生场同步有效信号 beginif ((vcnt > (10'd480+10'd8+10'd2)) && (vcnt < (10'd480+10'd8+10'd2+10'd2)))vs<=1'b0;elsevs<=1'b1;endalways@(posedge clk) // 送行图像beginif ((hcnt<10'd640)&&(vcnt<480))rgbout=rgbin;else rgbout=24'h000000;endendmodule
3、clock模块实现将输入时钟二分频后输出功能,代码如下所示
module clock(clkin,clkout);input clkin;output clkout;reg clkout;always @(posedge clkin) clkout=~clkout;
endmodule
4、顶层文件,上述各模块连接成的原理图,如下所示
5、实验结果截图及原理分析
原理分析:首先根据VGA图像的扫描时序与实验箱核心板原理图的VGA端口用VerilogHDL语言写出VGA模块,然后新建一个ROM模块把原本已经准备的mif格式的图片加入其中,最后写一个clock模块并生成电路模块进行电路连接。在烧录代码后,FPGA会不断地根据VGA图像的扫描时序来读取图片中的每个像素点RGB,通过时钟信号一直扫描下去,由此能显示出整张图片。
FPGA综合实验 05 - | VGA彩条信号显示控制电路设计相关推荐
- 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc
VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. 熟悉 VGA 接口协议规范. 4.通 ...
- 简单的eda实验vga在linux系统中,《EDA实验报告VGA彩条显示.doc
<EDA实验报告VGA彩条显示 VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. ...
- 基于Quartus II软件的FPGA综合实验——多功能数字钟
有很多自制元器件,内部电路附在文章中 文章目录 前言 一.设计要求 二.设计原理 三.设计过程 1.数码管扫描模块 2.计时模块 3.闹钟模块 4.闹钟响铃模块 5.数码管显示模块 6.整点报时功能 ...
- PLC实验:LED 数码显示控制
实验项目名称:LED 数码显示控制 一.实验控制要求 置位启动开关 K0 为 ON 时,LED 数码显示管依次循环显示 0.1.2.3-9.A.B.C- F: 二.端口分配 三.实验程序梯形图 PLC ...
- led数码显示控制plc实验_实验三 LED数码显示控制 PLC实验报告
广州大学学生实验报告 开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 ...
- led数码显示控制plc实验_实验三led数码显示控制plc实验报告
开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 实验三 LED 数码 ...
- led数码显示控制plc实验_实验三LED数码显示控制PLC实验报告.doc
实验三LED数码显示控制PLC实验报告 广州大学学生实验报告 开课学院及实验室:工程北529 2015年 5 月28 日 学院机械与电气工程年级.专业.班姓名学号实验课程名称 电气控制与可编程控制器成 ...
- 单片机综合实验 - 05 | 简易电子钟设计
一.实验目的和任务 1.熟悉电子钟的基本工作原理. 2.掌握简易电子钟的硬件结构及程序设计方法. 二.实验原理简介 电子钟是人们日常生活中不可或缺的计时工具.与数字集成电路纯硬件实现相比,采用单片机实 ...
- FPGA—VGA 显示器显示彩条(附代码)
目录 1. 理论 2. 实操 2.1 顶层设计 2.1.1 模块框图 2.1.2 代码编写 2.1.3 仿真验证 2.2 时钟生成模块 2.3 VGA时序控制模块 2.3.1 模块框图 2.3.2 波 ...
最新文章
- 双系统安装的流程记录
- 将图片读取为像素格式
- mysql 查询多边形_mysql中判断一个点是否在多边形中
- 七月在线 《关键点检测概览与环境配置》
- vue 实现 web端滚动刷新 自定义指令
- idea springboot一直卡在启动 没有日志输出
- 0基础学python做什么工作好-零基础自学python到什么程度才有机会去小公司实习?...
- bzoj 1015: [JSOI2008]星球大战starwar
- Kotlin中文开发者文档(一)
- 程序员入门:三本必看的书
- UE4 Datasmith 格式简述
- 经纬度(度分秒)坐标转换为小数格式(weixin公众号【图说GIS】)
- 情迁机器人Tim_情迁机器人插件-情迁机器人app下载V1.5.0安卓版-西西软件下载
- Hi3531添加16GByte(128Gbit) NAND Flash支持
- 趁你年轻快来学学如何搭建一个小说网站,这里有超详细教程,快进来看看吧,错过了可不要后悔哟。
- graphpad两组t检验_GraphPad prism -- t检验操作步骤解析~
- 奥卡姆剃刀:让事情回归简单
- typedef和define
- 物联16:4 ISO/IEC 14443-3 防冲突、防碰撞算法、Type A、Type B
- Spring Security和 JWT两大利器来打造一个简易的权限系统。