资源描述
摘 要
论文提出一种新型的电子点菜系统以弥补传统点菜方式的弊端。在目前的餐馆里,如果采用电子菜单,客人点菜时不需要服务员的陪伴,能实时地了解菜的特色,方便了顾客同时也减轻了餐馆的服务压力。
本课题是基于SOPC的电子点菜单的设计,该电子点菜系统实现了一个电子点菜终端的部分功能,如:显示菜的单价、口味、已点数量和总价等。本设计采用行扫描法实现4*4键盘的扫描,并对按键进行消抖处理。利用行波进位加法器进行总价的结算,使用静态RAM存储数据。整个设计是在ALTERA公司的QUARTUS编程环境下进行,在FPGA芯片上得以实现,通过模拟仿真,最终下载在CYC-L2便携式实验系统运行实现。本课题完成的电子点菜单功能齐全,使用方便,可大大提高服务质量,并节省许多人力物力。在餐饮业具有较好的推广价值。
关键字:电子菜单;FPGA;VHDL
Abstract
The thesis puts forward a kind of new electronics menu system to make up menu of tradition method. In current restaurant, if the adoption electricity submenu, the guest orders the menu do not need the attendant to keep company with, can be a very good understanding of the characteristics of food, convenience the customer also eased the service pressure of the restaurant.
This topic is a design that orders the menu according to the SOPC, that electronics menu parts of functions that the menu system carries out an electronics to order the vegetables terminal, such as: Show the u price, taste of the food and have already ordered quantity and total price etcs. This design adoption goes to scan the method to carry out 4*4 keyboards to scan, and carry on eliminate to tremble the processing to the key. The exploitation goes the wave balance of accounts that enters an adder to carry on the total price, saving data of the usage static state RAM. The whole design carries on under the QUARTUS plait distance environment of the company of ALTERA, can carry out on the chip of FPGA, really pass to imitate to imitate, the end download is in the CYC- L2 then the hold type experiment system circulates the realization. The electronics that this topic complete orders the menu function well-found, the usage convenience, can raise the service quantity consumedly, and save many manpower material resources. Have to compare in the dining industry good of expansion value.
Key word: electric menu; FPGA;VHDL
目 录
1绪论 1
1.1任务的提出 1
1.2设计的目的和意义 1
2相关知识简介 3
2.1开发工具 3
2.2开发语言 3
2.3开发环境 3
3总体设计 6
3.1设计的总体结构描述 6
3.2功能模块描述 6
3.2.1键盘模块 7
3.2.2显示模块 7
3.2.3控制模块 8
3.3功能模块的状态转换 8
4详细设计 9
4.1键盘模块设计 9
4.1.1键盘扫描 9
4.1.2键盘译码器 11
4.2显示模块设计 12
4.2.1菜单显示 12
4.2.2 口味显示 14
4.2.3单价显示 14
4.3控制模块 17
4.3.1 RAM的设计 19
4.3.2 加法器的设计 21
5系统测试 22
5.1键盘扫描模块 22
5.2键盘译码 23
5.3多位加法器 24
5.4七段数码管 25
5.5 RAM存储器 26
5.6系统控制器 27
6结论 28
参考文献 29
附 录 30
1绪论
在当今世界,以计算机技术、芯片技术和软件技术为核心的数字化技术取得了迅速发展,广泛渗透到各领域。现代控制技术、多媒体技术与Internet的应用与普及,促使消费电子、计算机、通信一体化趋势步伐加快当前是餐饮业由传统操作方式向信息化管理模式转换的时期,对信息化产品的需求量很大。根据其对产品要求小型化、低功耗、专用性等特点。
国内己经有不少公司开发出电子点菜系统,有些公司则采用了北京辰森计算机系统有限公司的手持点菜系统。但是由于成本等原因使用电子点菜系统的餐馆还比较少,市场需求很大。
1.1任务的提出
市场上出现的点菜系统都是作为餐馆信息化管理系统的一部分出现的,它们除了实现基本的点菜功能外,为了便于客户及管理者的使用,还附加了许多其他功能,个人很难完成一个功能完善的点菜系统。绝大部分电子点菜系统都用数据库管理系统来管理数据。数据库管理系统一般依赖于操作系统,因此,需要选择一个合适的操作系统。电子点菜系统中,管理数据的地方与使用数据的地方往往不在同一个站点上,需要用到计算机网络将二者连接起来。
另外,电子菜单与普通菜单相比有很多它的优点,比如普通菜单容易脏,而且需要服务人员写,很不方便,单据易丢失;而电子菜单方便快捷,点单灵活,不需要过多的服务人员等待客人点单,方便管理,点单取餐全自助,节省人力。
本课题的任务即是设计一种简单的电子点菜单终端,以CYC-L2便携式EDA/SOPC/DSP实验系统为硬件平台,利用VHDL语言进行编程,要求实现的电子点菜单功能齐全,使用方便。
1.2设计的目的和意义
电子点菜系统代表着当今餐饮业解决方案中最尖端的领先科技,此技术的应用在餐饮业中轰动一时。
餐馆引进电子点菜系统,具有重大的意义:首先,提高运营效率与降低运营成本,使用电子点菜系统可以加快点菜速度,减少人力资源的投入,避免跑、冒、漏;其次,提升餐馆品牌与形象,电子点菜系统是一个高科技产品,它代替传统的纸笔式点菜方式给人一种高贵的感觉;最后,营造一个安静、舒服的就餐环境,传统的点菜方式在某些环节中出现大声喧哇的场面,电子点菜系统则可以避免这类情况的出现。
国内己经有不少公司开发出电子点菜系统,例如上海工理电子有限公司的点菜通、餐饮通等,北京辰森计算机系统有限公司的手持点菜宝等。但是由于成本等原因,使用电子点菜系统的餐馆还比较少。由于市场的需求很大,所以随着技术的进步及餐饮业的激烈竞争,电子点菜系统将会越来越普遍,并越做越好。
2相关知识简介
2.1开发工具
本实验系统是在CYC-L2 便携式EDA/SOPC/DSP实验系统基础上研发而成,具有完备的外部接口电路模块,并继承了该系统开放性的特点。系统由开发板(含主板、底板)、ByteBlaster II并口下载板(含电缆)和12V直流电源三个组成部件构成。
2.2开发语言
VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
2.3开发环境
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。
Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。支持MAX7000/MAX3000等乘积项器件。
Altera的QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需求,是单芯片课编程系统设计的综合性环境和SOPC开发的基本工具,并为AlteraDSP开发包进行系统模型设计提供了集成综合环境。QuartusII设计工具完全支持VHDL,VERILOG的设计流程。
Quartus II基本设计流程有以下步骤
(1) 新建工程 在设置工程Project的时候,提供输入的信息较多,例如文件的路径、文件夹里面所有Verilog HDL文件的导入、芯片的选择,还有第三方工具的设置等等。
(2) 编译文件 译和仿真的时候,可以直接按工具栏上面的编译或者仿真按钮,同时也保留了Maxplus II的操作习惯,在Processing->Compiler Tool可以调出熟悉的编译窗口,以及仿真窗口Processing->Simulator Tool, 编译成功后,新建波形文件,从选项可以了解到,Quartus II不再采用Max+plus II的波形文件格式.scf,取而代之的是.vwf格式,不过使用的时候没有多大不同。
(3) 添加节点 添加节点的时候,在波形文件按鼠标右键Insert Node or Bus这一项调出,Node Finder进行选择,在节点的选择导入,还可以可以按照用户自定义的规则进行导出,即Customize选项。然后,在“Edit”中设置“END TIME”和“Grid Size”。
(4) 仿真 仿真的时候,Quartus II不是把仿真结果显示在波形文件中,而是在Simulation Report中,其实也可实现Max+plus II的样式,方法是来到Tools->Options->General->Processing,把Overwrite simulation input file with simulation results选项的钩打上即。
3总体设计
3.1设计的总体结构描述
本系统为一个电子点菜终端的简洁型系统,该系统以CYC-L2系统为主要核心,采用4*4的键盘,前12个键为菜单,8个数码管显示总价格,单价,已点菜数量;后四个键分别实现:结账,已点查询,删除,确认。4组LED灯分别表示菜的口味:酸,甜,麻,辣,以点亮的灯数表示口味浓度。总体外观如下图所示:
图3.1 系统外观图
3.2功能模块描述
本系统主要由3个模块构成,键盘模块、控制模块和显示模块。键盘模块是由一个4*4矩阵键盘实现数据的输入控制,通过行扫描法将对应的值输入到控制模块,进行相应的操作。控制模块控制显示模块的显示,存储点菜数据信息,对点菜数据进行处理,并完成最后的结算。显示模块显示菜的单价、数量、口味和总价。系统的功能模块图如图3.2所示。
图3.2 系统功能模块图
3.2.1键盘模块
键盘模块由4*4的键盘组成,3*4键盘代表一个菜名,共可容纳12个菜名,最后一排为功能键。当顾客选择一个菜名时,通过键位的触发连接到系统中的数据信息,显示该菜的单价和口味;选择菜名之后,如果满意则按确认,系统记录相关数据,不满意则重新选择。按下已点键,可以显示顾客已点菜的序号,单价,口味,再按一次则显示下一个已点菜,按删除,则取消该菜,按确认之后重新进入菜单。当按下“结账”键之后,显示应付金额(包括折扣,附加消费等等)。
3.2.2显示模块
由8个LED数码管,8个LED灯和一个显示屏组成,前4个数码管显示总价格,中间2个显示所选菜名的单价,最后2个显示已点菜的数量。在管理员使用改价键时,数码管则显示8位密码。8个LED灯分为4组,分别表示4种口味:酸,甜,麻,辣,每组2个灯都不亮表示无此味道;1个灯亮表示有此味道;如:微辣,微甜等;2个灯表示此味很重。以此来大概描述菜的口味。最后在存储器中存储菜名的实物图片,在选择菜名时显示相应的图片,方便顾客了解菜的外观。
3.2.3控制模块
控制器首先接收键盘模块的有效信息,如果键盘有键按下,则根据键盘扫描值经译码,判断是进入点菜状态还是功能选择状态,如果进入点菜状态,显示对应的菜单信息:单价,口味,图片信息。在接收到功能键的有效信号时,进入到控制状态。
3.3功能模块的状态转换
系统一直处于点菜等待状态,当客人开始点菜时,则进入点菜状态。系统对客人选择的菜进行及时的显示,以便及时了解所点菜的特色,如按下功能键,进入功能控制状态,系统进行数据信息的处理。如再按下菜单键,回到点菜状态。最后,结帐完毕,返回点菜等待状态。系统的功能转化图如图3.3所示。
图 3.3 系统功能转换图
4详细设计
4.1键盘模块设计
4.1.1键盘扫描
计算机键盘通常采用行列扫描法来确定按下键所在的行列位置。所谓行列扫描法是指,把键盘按键排列成n行×m列的n×m行列点阵,把行、列线分别连接到两个并行接口双向传送的连接线上,依次对每一行发出一个低电平,对列线进行检测,如显示低电平,则确定按键。
键盘处理的重要环节是扫描和去抖,这里采用定时扫描和计数去抖的键盘处理方法,它不仅使程序非常简单高效,而且便于灵活扩展实现处理更复杂的键盘要求。因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100ms,所以按下的时间可估算为50ms。以取样信号CP频率为8ms(125Hz),则可取样到6次。一般消抖动信号是频率必须比其它的电路使用的脉冲信号频率更高,一般消抖动频率是键盘扫描或LED频率的4倍或更高。
这是矩阵键盘的完整描述,包括扫描、消抖动、译码:
ENTITY key_44 IS
PORT(CLK : IN STD_LOGIC; --系统时钟脉冲
KEY_DRV : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); --扫描序列
KEY_IN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
OUT_NUMB : OUT INTEGER RANGE 0 TO 15 --按键输入译码后的值
);END ;
ARCHITECTURE key44 OF key_44 IS --时钟产生模块
COMPONENT clk_gen IS
PORT(CLK : IN STD_LOGIC; --全局时钟
CLK_SCAN : OUT STD_LOGIC; --扫描键盘时钟 125Hz
CLK_XD : OUT STD_LOGIC --键盘消抖动时钟 25Hz );
END COMPONENT clk_gen; --扫描序列产生模块
COMPONENT key_scan IS
PORT(CLK_SCAN : IN STD_LOGIC; --扫描时钟脉冲
KEY_DRV : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) --扫描序列 );
END COMPONENT ; --消抖动模块
COMPONENT key44_xiaod IS
PORT(XD_CLK : IN STD_LOGIC; --消抖动时钟脉冲
KEY_IN : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
--键盘输入
KEY_OUT :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
--键盘输出);
END COMPONENT ; --译码模块
COMPONENT key_yima IS
PORT(SC_CLK : IN STD_LOGIC; --扫描时钟脉冲
KEY_DRV : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --扫描序列
KEY_IN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
OUT_NUMB : OUT INTEGER RANGE 0 TO 15
--按键输入译码后的值 );
END COMPONENT;
SIGNAL CLK_SC : STD_LOGIC;
SIGNAL CLK_X : STD_LOGIC;
SIGNAL KEY_VALUE : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
clkgen1 :clk_gen PORT MAP(CLK=>CLK , CLK_SCAN=>CLK_SC , CLK_XD=>CLK_X );
key_scan1 : key_scan PORT MAP(CLK_SCAN=>CLK_SC , KEY_DRV=>KEY_DRV);
xiaodou1 : key44_xiaod PORT MAP(XD_CLK=>CLK_X, KEY_IN=>KEY_IN , KEY_OUT=>KEY_VALUE);
key_yima1 : key_yima PORT MAP(SC_CLK=>CLK_SC , KEY_DRV=>KEY_DRV , KEY_IN=>KEY_VALUE , OUT_NUMB=>OUT_NUMB);
END ;
生成的电路符号如下图所示:
图4.1 键盘扫描电路符号图
算法的实现过程如下:CPU以一定时间间隔周期地执行此键盘扫描处理程序。先是对键盘作扫描,获得反映键盘状态的键盘扫描码;然后对扫描码进行前后对比和定时计数,实现去抖;去抖后置位KReady标志,通知键盘分析程序已检测到有效按键。
键盘扫描码反映的是读取键盘时刻的键盘动作状态。对键盘扫描码的基本要求是它要能对每一个单键作唯一编码。
我们知道,当一个按键按下和释放时,对应信号线电平的变化有一个不稳定期,即所谓“抖动”,这是因为多数开关的闭合和断开都有一个过程,并不是即刻实现的。在读取键盘状态是必须避开这个不稳定期,以免造成误判,这样一个做法叫做“去抖”。
如果当在一段时间内都连续多次读到同一个非空(即有键按下)的扫描码,我们可以认为这时按键已处于稳定状态,这时得到的扫描码就代表了一个键盘动作,抖动的影响已经被剔除。按照这个想法,我们只需设置一计数器,当每次读到的非空扫描码与上一次的相同,就将计数器加1;而当一旦读到不同的扫描码或空码则立即将计数器清0。如果计数器的值达到某预定值N时,则表示连续N次读到同一扫描码,于是可认为已经读到了有效的按键。设键盘扫描的间隔是T,则去抖的时间就是N * T。在实际中可以根据按键的特性选取适当的N和T值,以达到可靠的去抖效果。
4.1.2键盘译码器
通过一个译码程序,将键盘扫描后的值根据需要设定成相应的功能键和菜单键。
程序设计如下:
ima:PROCESS(SC_CLK)
BEGIN
Z<=KEY_DRV & KEY_IN;
--将扫描信号和消抖动后的按键输入值存入Z
IF SC_CLK'EVENT AND SC_CLK='1' THEN
CASE Z IS --数字按键译码电路
WHEN "11100111"=> K_VALUE<=0;
WHEN "11101011"=> K_VALUE<=1;
WHEN "11101101"=> K_VALUE<=2;
WHEN "11101110"=> K_VALUE<=3;
WHEN "11010111"=> K_VALUE<=4;
WHEN "11011011"=> K_VALUE<=5;
WHEN "11011101"=> K_VALUE<=6;
WHEN "11011110"=> K_VALUE<=7;
WHEN "10110111"=> K_VALUE<=8;
WHEN "10111011"=> K_VALUE<=9;
WHEN "10111101"=> K_VALUE<=10;
WHEN "10111110"=> K_VALUE<=11;
WHEN "01110111"=> K_VALUE<=12;
WHEN "01111011"=> K_VALUE<=13;
WHEN "01111101"=> K_VALUE<=14;
WHEN "01111110"=> K_VALUE<=15;
WHEN OTHERS=> K_VALUE<=K_VALUE;
--默认情况为K_VALUE保持原来状态,相当于实现锁存器
END CASE;
4.2显示模块设计
4.2.1菜单显示
接收译码器的K_VALUE,显示相应的菜单信息,菜单见下表。
表4.1 菜单信息表
序号
菜名
单价
酸
甜
麻
辣
1
回锅肉
8
00
01
01
01
2
水煮肉片
10
00
00
11
11
3
青椒肉丝
7
00
01
00
11
4
麻婆豆腐
5
00
00
11
01
5
火爆腰花
6
01
01
00
01
6
锅巴肉片
10
00
11
00
00
7
三鲜汤
12
00
01
00
00
8
红烧鸡
8
00
00
01
01
9
酸菜鱼
15
11
00
01
01
10
炒青菜
3
00
01
00
01
11
肉片汤
5
01
00
01
01
12
鱼香茄子
6
11
11
00
01
单价显示和口味显示的源代码如下,其中,qw代表口味,dj代表单价。
entity myJP is
port (cd :in std_logic_vector(3 downto 0);
qw :out std_logic_vector(7 downto 0);
dj :out std_logic_vector(3 downto 0));
end entity myJP;
architecture SE of myJP is
begin
with cd select
qw <="00010101" when "0100",
"00001111" when "0101",
"00010011" when "0110",
"00001101" when "0111",
"01010001" when "1000",
"00110000" when "1001",
"00010000" when "1010",
"00000101" when "1011",
"11000101" when "1100",
"00010001" when "1101",
"01000101" when "1110",
"11110001" when "1111",;
with cd select
dj<= "1000" when "0100",
"1010" when "0101",
"0111" when "0110",
"0101" when "0111",
"0110" when "1000",
"1010" when "1001",
"1100" when "1010",
"1000" when "1011",
"1111" when "1100",
"0011" when "1101",
"0101" when "1110",
"0110" when "1111",
"0000" when others;
end architecture SE;
生成的电路符号如图下图所示
图4.2 菜单显示电路符号图
4.2.2 口味显示
通过CYC-L2 V2.0便携式EDA/SOPC/DSP实验系统自带的8个LED,显示当前所选菜的口味。8个LED灯分为4组,分别表示4种口味:酸,甜,麻,辣,每组2个灯都不亮表示无此味道;1个灯亮表示有此味道;如:微辣,微甜等;2个灯表示此味很重。效果图如下:
图 4.3 口味显示效果图
4.2.3单价显示
单价显示主要由LED数码管实现。分段式显示器(LED数码管)由7条线段围成,只要按规律控制各发光段的亮、灭,就可以显示各种字形或符号。 LED数码管有共阳、共阴之分。图4 .2是共阴式LED数码管的原理图。使用时,公共阴极接地,7个阳极a~g由相应的BCD七段译码。
图4.4 七段数码管电路图
BCD七段译码器的输入是1位BCD码(以D、C、B、A表示),输出是数码管各段的驱动信号(以Fa~Fg表示),也称4-7译码器。若用它驱动共阴LED数码管,则输出应为高有效,即输出为高(1)时,相应显示段发光。根据组成0~9这10个字形的要求可以列出8421BCD七段译码器的真值表,见表4.2。
表4.2 七段译码器真值表
程序设计如下:
architecture ex1 of seven is
begin
with A select
Z <="1110111" when "0000",
"0010010" when "0001",
"1011101" when "0010",
"1011011" when "0011",
"0111010" when "0100",
"1101011" when "0101",
"1101111" when "0110",
"1010010" when "0111",
"1111111" when "1000",
"1111011" when "1001",
"1101101" when "1010",
"1101101" when "1011",
"1101101" when "1100",
"1101101" when "1101",
"1101101" when "1110",
"1101101" when "1111",
"0000000" when others;
end architecture ex1;
生成的电路符号图如下所示:
图4.5 七段译码电路符号图
4.3控制模块
控制模块的实现主要是使用状态机的设计思路,在控制模块中有6个状态:点菜状态、等待状态、确认状态、删除状态、已点查询状态和结帐。每个状态产生不同的控制信号,用于过程的实现。其中包含2个进程,标识为seq和com,seq进程用于建模次态和输出逻辑,com进程用于建模状态寄存器。seq程序如下所示:
Achitecture gn of DCXT is
type state is (s0,s1,s2,s3,s4,s5)
signal p_state,n_state:state;
constant ID:std_logic_vector(15 downto 0):=(0=>'1',others=>'0');
signal a std_logic_vector(3 downto 0);
begin
seq:process (clock) is
begin
if (rising_edge(clock))then
p_state<=n_state;
end if;
end process seq;
在com进程中,设定了相应的功能键,YES表示确认键,DEL表示删除键,HAV表示已点查询键,OVER表示结帐。
控制器状态机图如下图所示:
图 4.6 状态机图
由此生成的控制器ASM图如下图所示:
图 4.7 控制器ASM图
4.3.1 RAM的设计
系统采用静态RAM,大小为16×8Bit,因为数据既可以存储与RAM中,也可以从RAM读取,所以数据端口为INOUT模式。RAM有3个控制信号:CS(片选),WE(写使能),OE(输出使能),均为低电平有效。
library ieee;
use ieee.std_logic_1164.all;
entity ram is
port(address : in integer range 0 to 15;
data : inout std_logic_vector(7 downto 0);
展开阅读全文