例说FPGA:可直接用于工程项目的第一手经验【3.3】

例说FPGA:可直接用于工程项目的第一手经验【3.3】

第15章 工程实例13——基于VGA显示器的720p的广告机设计

本章导读

本章工程与第10章的电子点菜单有异曲同工之妙,只不过一个是将图像存储显示功能应用在了“点菜单”上,一个是将图像存储显示功能应用在了“广告机”上。

15.1 功能概述

本实例的基本架构和电子点菜单项目实例的基本一致。只是将电子点菜单实例中的7寸LCD换成了通用的VGA显示器(很多液晶电视基本也都支持VGA输出功能,本实例演示就用了一台电视的VGA接口进行显示)。显示的分辨率也由电子点菜单的800×480提升到了1080×720(720p)。这个实例中,不仅要实现720p图片的下载存储操作,同时要在正常工作中,循环播放预存储在NAND Flash芯片中的广告图片。整个工程实例的功能框图如图15-1所示。

NIOS II处理器通过Avalon-MM总线与系统定制外设进行数据交互,主要的外设包括一个UART外设、FLASH控制器和VGA显示驱动模块。UART控制器用于接收上位机软件发送的图片数据。

FLASH控制器实现图片数据写入和读出用于显示。VGA显示驱动模块通过DDR2控制器读取DDR2中存储的图像送往VGA显示器进行显示。

15.2 装配说明

本实例工程除了SF-VIP核心板,还需要SF-USB子板的UART串口实现图片的下载操作,以及SF-VGA子板用于驱动VGA显示器。整个系统的装配连接如图15-2所示。

15.3 Verilog代码解析

本实例有6个大模块,2个大层级。其层次结构如图15-3所示。

·vip.v是顶层模块,其下例化了5个模块,即sys_ctrl子模块、ddr2_avl_bridge.v模块、ddr_controller.v模块、lcd_driver.v模块和vip_qsys系统子模块。该模块仅仅用于子模块间的接口连接,以及连
接到FPGA外部接口的定义,该模块中未作任何的逻辑处理。
·sys_ctrl.v二级子模块中例化了PLL模块,并且对输入PLL的复位信号以及PLL锁定后的复位信号进行“异步复位,同步释放”的处理,确保系统的复位信号稳定可靠。
·vip_qsys.v模块则是Qsys系统的例化,该模块例化了一个NIOS II处理器,作为Avalon-MM总线的主机;Avalon-MM总线上可访问的从机有片内RAM、System ID、JTAG UART、LED PIO和
Timer外设。
·ddr2_avl_bridge.v模块作为连接ddr2_controller的桥接模块,用户逻辑中要写入或读出DDR2的数据都需要通过该模块例化的DDR2读数据缓存FIFO或DDR2写数据缓存FIFO实现。
·ddr2_controller.v二级子模块也是一个软核IP,实现DDR2的时序控制功能,并且通过一个简单的Avalon接口实现DDR2和FPGA逻辑之间的读写数据传输。
·lcd_driver.v二级子模块产生1280×720分辨率的VGA显示驱动逻辑。
1.ddr2_controller.v模块代码解析
略,请参考例程vip_ex2。
2.ddr_avl_bridge.v模

Read more

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

目录 为什么要有 TIME_WAIT 状态? 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 原因二:让旧连接的重复报文段在网络中自然消失(防止影响新连接) 服务端 TIME_WAIT 状态过多是什么原因? 原因一:服务端使用了短连接,并且是它主动关闭连接 原因二:客户端的非正常行为 原因三:负载均衡器的健康检查 总结 面试回答 为什么要有 TIME_WAIT 状态? TIME_WAIT,俗称2MSL等待状态,是TCP连接主动关闭一方(通常是客户端,但也可能是服务端)在发送最后一次ACK确认报文后,会进入的一个状态。它需要等待2倍的最大报文段生存时间后,才会最终进入CLOSED状态,释放连接资源。 设计TIME_WAIT状态主要有两个核心原因,它们是确保TCP协议可靠性的基石: 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 这是最主要的原因。让我们回顾一下TCP四次挥手的正常流程: 1. 主动关闭方(假设为A)

By Ne0inhk
【Java】synchronized关键字详解:从字节码到对象头与锁升级

【Java】synchronized关键字详解:从字节码到对象头与锁升级

👨‍💻程序员三明治:个人主页 🔥 个人专栏: 《设计模式精解》《重学数据结构》 🤞先做到 再看见! 目录 * synchronized底层原理(总结版) * `synchronized` 底层原理(详解版) * 1. 字节码层面:monitorenter 和 monitorexit * 2. JVM 底层实现:对象头与 Monitor * 2.1 Java 对象头(Mark Word) * 2.2 Monitor(管程/监视器锁) * 3. 锁的升级与优化 * 3.1 偏向锁 * 3.2 轻量级锁 * 3.3 重量级锁 * 4. 硬件层面:内存屏障与 CAS * JVM锁升级是什么?

By Ne0inhk
JAVA 集合框架进阶:List 与 Set 的深度解析与实战

JAVA 集合框架进阶:List 与 Set 的深度解析与实战

JAVA 集合框架进阶:List 与 Set 的深度解析与实战 1.1 本章学习目标与重点 💡 掌握 List 和 Set 接口的核心特性,理解不同实现类的底层原理与适用场景。 💡 熟练运用集合的常用方法,解决数据存储、查找、去重等实际开发问题。 💡 理解集合的线程安全问题,掌握线程安全集合的使用方式。 ⚠️ 本章重点是 不同集合的底层数据结构 和 性能对比,这是面试和开发中的核心考点。 1.2 List 接口:有序可重复的集合 1.2.1 List 接口的核心特性 💡 List 是有序集合,元素的存储顺序和插入顺序一致,支持通过索引访问元素。 List 允许存储重复元素,也可以存储 null 值。 List 接口的常用实现类有 ArrayList、LinkedList 和

By Ne0inhk
Java外功核心(7)——深入源码,拆解Spring Bean作用域、生命周期与自动装配

Java外功核心(7)——深入源码,拆解Spring Bean作用域、生命周期与自动装配

SpringBoot版本:3.5.8 1.Bean的作用域 Spring Bean的作用域定义了Bean的作用范围,即Bean在哪些上下文中可用 /** * 实体类 */publicclassDog{}/** * 配置类 */@ConfigurationpublicclassDogConfig{//单例@Bean@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)publicDogsingleDog(){returnnewDog();}//原型@Bean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)publicDogprototypeDog(){returnnewDog();}//请求@Bean@RequestScopepublicDogrequestDog(){returnnewDog();}//会话@Bean@SessionScopepublicDogsessionDog(){returnnewDog();}//应用@Bean@ApplicationScopepublicDogappl

By Ne0inhk