news 2026/5/1 2:49:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
例说FPGA:可直接用于工程项目的第一手经验【2.4】

第10章 工程实例8——电子点菜单设计

本章导读

本章的工程实例至少结合了第4、6、8、9章的内容,集成实现了一个“电子点菜单”的雏形,虽然还不能称得上真正意义上的“点菜单”,但是已经非常接近实际产品了,相信在聪明的读者手中这个雏形很快就能摆上“大雅之堂”。话说回来,大家可要好好体会这个设计的精髓。

10.1 功能概述

民以食为天,随着经济的发展,人民的生活水平逐渐提高,“吃”在日常的生活中越来越重要,加上紧张的工作,人们逐渐更喜欢在外边的餐馆吃饭。由于顾客的增加,餐馆也出现了一些问题。比如,针对纸质菜单,由于无法根据采购原材料成本的变动实时调整菜品的价格,而不得不在纸质菜单上贴白纸条,这样每年至少需要更换2~3次纸质菜单,费时费力。另外,客人点餐服务员在手写单的过程中易出错、用时长,点餐效率低,在饭店繁忙的时候,服务员无法及时为顾客点餐,导致客人流失等。针对这些现象,电子点菜单应运而生。

本实例就是要实现一个简易版本的电子点菜单,主要完成产品的图像预存储、用户指令接收、图像实时显示和界面设计。系统功能框图如图10-1所示。

NIOS II处理器通过Avalon-MM总线与系统定制外设进行数据交互,主要的外设包括UART外设、Flash控制器、LCD控制器以及GPIO外设。UART外设用于接收上位机软件发送的图片数据,并且接收触摸屏校准指令。Flash控制器实现图片数据写入和读出用于显示。LCD控制器则用于实现NIOS II处理器写入当前所需图像数据的显示。GPIO外设模拟IIC时序驱动控制AD芯片(AW2803)转换的触摸屏坐标参数。

本实例的电子点菜单分三级、共31张图片,如图10-2所示。

NIOS II软件的整体流程如图10-3所示。在各种外设初始化后,首先让LCD显示主菜单图片;接着进入主循环,依次判断串口“下载”指令、串口通用指令或触摸屏中断事件的发生,在这些事件触发后,调用相应的处理函数。

10.2 装配说明

本实例除了主控的VIP核心板,还需要SF-USB子板和SF-L70子板。它们的连接示意如图10-4所示。VIP核心板的P2插座连接到SF-USB子板的P1插座,VIP核心板的P4插座连接到SF-L70子板的P3插座。SF-USB子板通过UART-USB插座P4连接到PC机,而SF-L70子板的P1和P2插座则分别连接到液晶屏的触摸屏和40PIN FPC连接器上。

10.3 IP核配置——FIFO配置

1.FIFO概述

FIFO(First In First Out),即先入先出,是一种典型的计算机数据或指令处理机制,和中国人所谓的“先来后到”理念有异曲同工之妙。而这里要说的FIFO存储器和前面带有地址可直接定位操作的ROM或RAM存储器不同,FIFO存储器没有地址定义;那你可能会认为FIFO存储器和移位寄存器差不多,还真“差不多”,但是FIFO存储器的输出可要比移位寄存器灵活,移位寄存器只要存储深度固定,基本上只能在存储器被“填满”或有固定个数的数据字节被“填满”时,我们才能够读出或输出数据,而FIFO存储器则一旦有数据写入或输入,随时都可以在读出或输出端进行操作,获得数据。

如图10-5所示,我们可以简单地认为FIFO存储器内部就是一条整齐划一的“队列”,操作起来就是一个挨着一个,并且井然有序。FIFO存储器的机理虽然简单,但是作用却异常强大,在多芯片数据交换传输的应用中,往往都会将FIFO存储器用作承前启后的“缓冲器”。

2.FIFO例化说明
ddr_avl_bridge.v模块中使用了3个FIFO,分别用于DDR2数据写入缓存和DDR2数据读取缓存。实际上,我们只需要例化两种类型的FIFO,即图10-6所示的名称为rdfifo_for_sdram和
wrfifo_for_sdram的两个FIFO。
为什么这里可以有两个名称为“rdfifo_for_sdram”的FIFO呢?其实,仔细看,你会发现这两个FIFO在“:”后面的名称不一样。一个为“rdfifo_dj_for_sdram_inst”,另一个
为“rdfifo_rf_for_sdram_inst”。我们可以先到ddr_avl_bridge.v模块的Verilog代码中查看一下这两个FIFO的例化。
//例化SDRAM读出数据缓存FIFO模块
rdfifo_for_sdram rdfifo_rf_for_sdram_inst(
.aclr(!local_rst_n || rdfifo_clr_r[3]),
.data(local_rdata), //128bit input
.rdclk(clk_33m),
.rdreq(lcd_rfreq),
.wrclk(phy_clk),
.wrreq(local_rdata_valid && rf_dj_flag),
.q(lcd_rfdb), //16bit output
.wrusedw(rfifo_rf_used)
);
//例化SDRAM读出数据缓存FIFO模块
rdfifo_for_sdram rdfifo_dj_for_sdram_inst(
.aclr(!local_rst_n || rdfifo_clr_r[3]),
.data(local_rdata), //128bit input
.rdclk(clk_33m),
.rdreq(lcd_djreq),
.wrclk(phy_clk),
.wrreq(local_rdata_valid && !rf_dj_flag),
.q(lcd_djdb), //16bit output
.w

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:17:48

2026-02-03 全国各地响应最快的 BT Tracker 服务器(电信版)

数据来源:https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://180.112.57.159:6969/announce江苏苏州电信72http://60.249.37.20:6969/announce广东东莞电信343http://211.75.205.188:6969/announce广东广州电信364udp://132.226.6.145:6969/announ…

作者头像 李华
网站建设 2026/4/29 17:39:52

上海计算机学会2月月赛丙组T3配对乘积题解

题解&#xff1a;查看数据范围发现&#xff0c;数据不是很大&#xff0c;所以采用二层循环来遍历每个数组进行交叉相乘的方式进行比较。找到最大值。乘积结果使用long long类型存储。代码如下&#xff1a;#include<iostream> using namespace std; int main(){long long …

作者头像 李华
网站建设 2026/4/27 19:02:07

<span class=“js_title_inner“>美国 TikTok 崩了!</span>

美国 TikTok 的全新运营方就本周末出现的服务故障发布了官方说明&#xff0c;同时表态正全力推进服务恢复工作。据 TikTok 方面披露&#xff0c;美国区域的服务从周日凌晨起出现持续性中断&#xff0c;背后诱因是电力供应故障。TikTok USDS 也正式发布声明称&#xff1a;“受美…

作者头像 李华
网站建设 2026/4/30 7:37:40

STM32L475定时器实验

配置定时器TIM2 配置项解释: Slave Mode: 正常情况下, TIM2的启动通过代码 HAL_TIM_Base_Start() 来控制, 但是开启Slave Mode之后, TIM2的核心操作将由外部信号触发, 如另一个定时器, GPIO电平等等, 外部触发源通过Trigger Source 来配置 Prescaler(PSC - 16 bits value) 通过…

作者头像 李华
网站建设 2026/5/1 0:53:39

nodejs篮球资讯网站开题报告

目录 项目背景技术选型核心功能模块创新点开发计划预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 项目背景 篮球运动在全球范围内具有广泛影响力&#xff0c;用户对实时赛事、球员数据、新闻等…

作者头像 李华