当前位置: 首页 > news >正文

FPGA project : TFT_LCD

实验目标:

驱动TFT_LCD显示十色彩条。

重点掌握的知识:

1,液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器)LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。薄膜晶体管型。

2,两种工作时序:

 

 值得注意的事:

有效图像,与行场同步信号时序上要对齐。需要对行场同步信号打一拍,或者直接使用时序逻辑赋值。在时序图上有更直观的说明。

模块框图:

时序图:

代码:

module axis(input       wire            clk_9Mhz ,input       wire            rst_n    ,input       wire    [15:0]  rgb      ,output      reg             hsync    ,output      reg             vsync    ,output      reg     [9:0]   axis_h   ,output      reg     [8:0]   axis_v   ,output      wire    [15:0]  rgb_tft  ,output      wire            tft_clk  ,output      wire            tft_bl
);// wire signal definewire            hsync_0 ;wire            vsync_0 ;// parameterparameter   TOTAL_H = 10'd525 ,TOTAL_V =  9'd286 ,SYNC_H  = 10'd41  , // 同步synchronizationSYNC_V  =  9'd10  ; /*****************************************************************************************/assign hsync_0 = (axis_h >= 0 && axis_h <= (SYNC_H - 1'b1)) ? 1'b1 : 1'b0 ;assign vsync_0 = (axis_v >= 0 && axis_v <= (SYNC_V - 1'b1)) ? 1'b1 : 1'b0 ;// output signalassign tft_clk = clk_9Mhz   ;assign tft_bl  = rst_n      ;always @(posedge clk_9Mhz or negedge rst_n) beginif(~rst_n) axis_h <= 10'd0 ;else if(axis_h == TOTAL_H - 1'b1)axis_h <= 10'd0 ;else axis_h <= axis_h + 1'b1 ;endalways @(posedge clk_9Mhz or negedge rst_n) beginif(~rst_n) axis_v <= 9'd0 ;else if((axis_h == TOTAL_H - 1'b1) && (axis_v == TOTAL_V - 1'b1))axis_v <= 9'd0 ;else if(axis_h == TOTAL_H - 1'b1)axis_v <= axis_v + 1'b1 ;else axis_v <= axis_v ;endalways @(posedge clk_9Mhz or negedge rst_n) beginif(~rst_n) beginhsync <= 1'b0 ;vsync <= 1'b0 ;end else beginhsync <= hsync_0 ;vsync <= vsync_0 ;endendassign rgb_tft = rgb ;endmodule
module pixel(input       wire            clk_9Mhz ,input       wire            rst_n    ,input       wire    [9:0]   axis_h   ,input       wire    [8:0]   axis_v   ,output      wire            tft_de   ,output      reg     [15:0]  rgb      
);// parameterparameter   TOTAL_H = 10'd525  ,TOTAL_V =  9'd286  ,SYNC_H  = 10'd41   , // 同步synchronizationSYNC_V  =  9'd10   ,BACK_H  = 10'd2    ,BACK_V  =  9'd2    ,VALI_H  = 10'd480  ,VALI_V  =  9'd272  ,FRON_H  = 10'd2    , // 前沿frontFRON_V  =  9'd2    ;parameter   RED     = 16'hF800 ,ORANGE  = 16'hFC00 ,YELLOW  = 16'hFFe0 ,GREEN   = 16'h07e0 ,QING    = 16'h07FF ,BLUE    = 16'h001F ,PURPLE  = 16'hF81F ,BLACK   = 16'h0000 ,WHITE   = 16'hFFFF ,GRAY    = 16'hD69A ;// wire signal definewire            valid_rgb ;reg             valid_rgb_reg1 ;always @(posedge clk_9Mhz or negedge rst_n) if(~rst_n)valid_rgb_reg1 <= 1'b0 ;else valid_rgb_reg1 <= valid_rgb ;assign valid_rgb = (axis_h >= (SYNC_H+BACK_H) && (axis_h <= (SYNC_H+BACK_H+VALI_H-1'b1)) && (axis_v >= (SYNC_V+BACK_V) && (axis_v <= (SYNC_V+BACK_V+VALI_V-1'b1)))) ? 1'b1 : 1'b0 ;// output signalalways @(posedge clk_9Mhz or negedge rst_n) beginif(~rst_n) rgb <= WHITE ; else if(valid_rgb)beginif((axis_h >= (SYNC_H+BACK_H)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10-1'b1)))rgb <= RED ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*2-1'b1)))rgb <= ORANGE ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*2)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*3-1'b1)))rgb <= YELLOW ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*3)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*4-1'b1)))rgb <= GREEN ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*4)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*5-1'b1)))rgb <= QING ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*5)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*6-1'b1)))rgb <= BLUE ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*6)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*7-1'b1)))rgb <= PURPLE ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*7)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*8-1'b1)))rgb <= BLACK ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*8)) && (axis_h <= (SYNC_H+BACK_H+VALI_H/10*9-1'b1)))rgb <= WHITE ;else if((axis_h >= (SYNC_H+BACK_H+VALI_H/10*9)) && (axis_h <= (SYNC_H+BACK_H+VALI_H-1'b1)))rgb <= GRAY ;else rgb <= WHITE ;end else rgb <= WHITE ;endassign tft_de = valid_rgb_reg1 ;
endmodule

 

module top(input       wire            sys_clk   ,input       wire            sys_rst_n ,output      wire            tft_de    ,output      wire            tft_clk   ,output      wire            tft_bl    ,output      wire            hsync     ,output      wire            vsync     ,output      wire    [15:0]  rgb_tft 
);// 例化间连线wire            clk_9Mhz ;wire            rst_n    ;wire    [15:0]  rgb      ;wire    [ 9:0]  axis_h   ;wire    [ 8:0]  axis_v   ;pll_9Mhz pll_9Mhz_insert(.sys_rst_n                  ( sys_rst_n  ) ,.areset                     ( ~sys_rst_n ) ,.inclk0                     ( sys_clk    ) ,.c0                         ( clk_9Mhz   ) ,.locked                     ( rst_n      )
);axis axis_insert(.clk_9Mhz                   ( clk_9Mhz   ) ,.rst_n                      ( rst_n      ) ,.rgb                        ( rgb        ) ,.hsync                      ( hsync      ) ,.vsync                      ( vsync      ) ,.axis_h                     ( axis_h     ) ,.axis_v                     ( axis_v     ) ,.tft_clk                    ( tft_clk    ) ,.tft_bl                     ( tft_bl     ) , .rgb_tft                    ( rgb_tft    ) 
);pixel pixel_insert(.clk_9Mhz                   ( clk_9Mhz   ) ,.rst_n                      ( rst_n      ) ,.axis_h                     ( axis_h     ) ,.axis_v                     ( axis_v     ) ,.tft_de                     ( tft_de     ) ,.rgb                        ( rgb        )      
);endmodule
`timescale 1ns/1ns
module test_top();reg             sys_clk   ;reg             sys_rst_n ;wire            hsync     ;wire            vsync     ;wire    [15:0]  rgb_tft   ;wire            tft_de    ;wire            tft_clk   ;wire            tft_bl    ;top top_inst(.sys_clk        ( sys_clk   ) ,.sys_rst_n      ( sys_rst_n ) ,.tft_de         ( tft_de    ) ,.tft_clk        ( tft_clk   ) ,.tft_bl         ( tft_bl    ) ,.hsync          ( hsync     ) ,.vsync          ( vsync     ) ,.rgb_tft        ( rgb_tft   ) 
);parameter CYCLE = 20 ;initial beginsys_clk = 1'b1 ;sys_rst_n = 1'b0 ;#(CYCLE) ;sys_rst_n = 1'b1 ;endalways #(CYCLE / 2) sys_clk = ~sys_clk ;endmodule

仿真波形: 

 

相关文章:

FPGA project : TFT_LCD

实验目标&#xff1a; 驱动TFT_LCD显示十色彩条。 重点掌握的知识&#xff1a; 1&#xff0c;液晶显示器&#xff0c;简称LCD(Liquid Crystal Display)&#xff0c;相对于上一代CRT显示器(阴极射线管显示器)&#xff0c;LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼…...

2023年-华为机试题库B卷(Python)【满分】

华为机试题库B卷 已于5月10号 更新为2023 B卷 &#xff08;2023-10-04 更新本文&#xff09; 华为机试有三道题目&#xff0c;前两道属于简单或中等题&#xff0c;分值为100分&#xff0c;第三道为中等或困难题&#xff0c;分值为200分。总分为 400 分&#xff0c;150分钟考试…...

创建GCP service账号并管理权限

列出当前GCP项目的所有service account 我们可以用gcloud 命令 gcloud iam service-accounts list gcloud iam service-accounts list DISPLAY NAME EMAIL DISABLED terraform …...

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下&#xff1a; 对于一颗二叉树&#xff0c;我们需要做哪些校验&#xff1f; 首先…...

ERROR 6400 --- [ main] com.zaxxer.hikari.pool.HikariPool : root - Exception

在引用的日志中&#xff0c;报告了Hikari连接池初始化期间的异常。具体异常信息是"Exception during pool initialization"。这个异常可能是由于与MySQL数据库的通信链接失败导致的。在引用中也提到了与SSL连接相关的错误。 根据引用中提供的代码&#xff0c;可以看到…...

CART算法解密:从原理到Python实现

目录 一、简介CART算法的背景例子&#xff1a;医疗诊断 应用场景例子&#xff1a;金融风控 定义与组成例子&#xff1a;电子邮件分类 二、决策树基础什么是决策树例子&#xff1a;天气预测 如何构建简单的决策树例子&#xff1a;动物分类 决策树算法的类型例子&#xff1a;垃圾…...

C++项目:【高并发内存池】

文章目录 一、项目介绍 二、什么是内存池 1.池化技术 2.内存池 3.内存池主要解决的问题 4.malloc 三、定长的内存池 四、高并发内存池整体框架设计 1.高并发内存池--thread cache 1.1申请内存&#xff1a; 1.2释放内存&#xff1a; 1.3用TLS实现thread cache无锁访…...

[论文笔记]BitFit

引言 今天带来一篇参数高效微调的论文笔记,论文题目为 基于Transformer掩码语言模型简单高效的参数微调。 BitFit,一种稀疏的微调方法,仅修改模型的偏置项(或它们的子集)。对于小到中等规模数据,应用BitFit去微调预训练的BERT模型能达到(有时超过)微调整个模型。对于大规…...

浅谈yolov5中的anchor

默认锚框 YOLOv5的锚框设定是针对COCO数据集中大部分物体来拟定的&#xff0c;其中图像尺寸都是640640的情况。 anchors参数共3行&#xff1a; 第一行是在最大的特征图上的锚框 第二行是在中间的特征图上的锚框 第三行是在最小的特征图上的锚框 在目标检测中&#xff0c;一…...

RabbitMQ-工作队列

接上文 RabbitMQ-死信队列 1 工作队列模式 xx模式只是一种设计思路&#xff0c;并不是指具体的某种实现&#xff0c;可理解为实现XX模式需要怎么去写业务代码。 之前的是简单的一个消费者一个生产者模式&#xff0c;下边是一个生产者多个消费者的情况&#xff1a; 这里先定义两…...

网站安全防护措施

网络安全的重要性在网站和app的发展下已经被带到了全新的高度&#xff0c;已然成为各大运维人员工作里不可或缺的环节&#xff0c;重视网络安全能给我们的网站带来更好的口碑&#xff0c;也能为企业生产创造更稳定的环境。下面我们一起来看看有哪些是我们运维人员能够做的。 1、…...

C++的继承基础和虚继承原理

1.继承概念 “继承”是面向对象语言的三大特性之一&#xff08;封装、继承、多态&#xff09;。 继承&#xff08;inheritance&#xff09;机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性基础上进行扩展&#xff0c;增加功能&…...

第三章:最新版零基础学习 PYTHON 教程(第十三节 - Python 运算符—Python 中的运算符函数 - 套装2)

Python 中的运算符函数 - 套装1 本文将讨论更多功能。 1. setitem(ob, pos, val):- 该函数用于在容器中的 特定位置分配值。操作 – ob[pos] = val 2. delitem(ob, pos):- 该函数用于删除容器中 特定位置的值。 操作 – del ob[pos] 3. getitem(ob, pos)&#x...

Linux网络编程:详解https协议

目录 一. https协议概述 二. 中间人截获 三. 常见的加密方法 3.1 对称加密 3.2 非对称加密 四. 数据摘要和数据签名的概念 五. https不同加密方式的安全性的探究 5.1 使用对称加密 5.2 使用非对称加密 5.3 非对称加密和对称加密配合使用 六. CA认证 七. 总结 一.…...

LLVM IR 文档 专门解释 LLVM IR

https://llvm.org/docs/LangRef.html#phi-instruction...

免费服务器搭建网盘教程,给电脑挂载500G磁盘

免费服务器搭建网盘教程&#xff0c;给电脑挂载500G磁盘 请勿注册下载&#xff0c;注册下载是空白文件&#xff0c;使用免登录下载 免费搭建网盘教程&#xff0c;给电脑挂载500G磁盘 其他按照下载教程操作教程代码: 下载下来的文件pancn 文件拖到您创建的容器 手机的话点击…...

【Java】微服务——Nacos配置管理(统一配置管理热更新配置共享Nacos集群搭建)

目录 1.统一配置管理1.1.在nacos中添加配置文件1.2.从微服务拉取配置1.3总结 2.配置热更新2.1.方式一2.2.方式二2.3总结 3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&#xff09;运行两个UserApplication&#xff0c;使用不同的pr…...

QT基础入门——信号和槽机制(二)

前言&#xff1a; 在Qt中&#xff0c;有一种回调技术的替代方法&#xff1a;那就是信号和槽机制。当特定事件发生时&#xff0c;会发出一个信号。Qt的小部件中有许多预定义的信号&#xff0c;但我们可以将小部件子类化&#xff0c;向它们添加自定义的信号。槽是响应特定信号的…...

黑豹程序员-架构师学习路线图-百科:JavaScript-网页三剑客

文章目录 1、为什么需要JavaScript2、发展历史3、什么是JavaScript3.1、JavaScript介绍3.2、JavaScript内部结构3.3、主要功能 4、TypeScript 1、为什么需要JavaScript 前面我们已经了解了网页三剑客的HTML和CSS&#xff0c;已经明确了它们的职责。 HTML负责页面的展现&#x…...

三、互联网技术——IP子网划分

文章目录 一、IP地址基础1.1 IP地址分类1.2 网络掩码/子网掩码 二、子网划分VLSM2.1 为什么要进行子网划分2.2 怎么进行子网划分2.3 子网划分原理2.4 例题一2.5 例题二2.6 例题三2.6 例题四2.7 例题五2.8 例题六2.9 例题七2.10 例题八 三、无类域间路由CIDR3.1 例题一3.2 例题二…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...