1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告

verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告

时间:2024-01-02 04:16:57

相关推荐

verilog 自动售货机状态机实现_Verilog HDL自动售货机系统设计与仿真实验报告

前言

随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要。经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。为了克服上述困难,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系统的EDA软件。他可以将不同类型的电路组合成混合电路进行仿真。此外,从另一角度来看,随着计算机技术和集成电路技术的发展,现代电子与电工设计,已经步入了电子设计自动化(EDA)的时代,采用虚拟仿真的手段对电子产品进行前期工作的调试,已成为一种发展的必然趋势。通过对实际电子线路的仿真分析,从而提高对电路的分析、设计和创新能力。

数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。

FPGA(现场可编程门阵列)与 CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,它们是在PAL,GAL等逻辑器件的基础之上发展起来的。同以往的PAL,GAL等相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA/CPLD实际上就是一个子系统部件。

本次EDA课程设计就是利用VerilogHDL来设计设计一个自动售货机,机器设有2个投币孔,可以接受一元和五角的硬币,每瓶饮料2.5元,可用2个按键来代替。还设有2个输出,要求有找零和提示信号,分别输出饮料和找零,编写一个测试平台,并通过仿真对该模型进行测试。一、设计程序Verilog程序源代码:

module sell(yi_yuan,wu_jiao,get,half_out,sell_out,reset,clk);

parameter idle=0, half=1, one=2,two=3,three=4;

input yi_yuan,wu_jiao,reset,clk;

output get,half_out,sell_out;

reg get,half_out,sell_out;

reg[2:0] s;

always @(posedge clk)

begin

if(reset)

begin

sell_out=0; get=0;half_out=0;s=idle;

end

else

case(s)

idle: begin

sell_out=0; get=0; half_out=0;

if(wu_jiao)s=half;

elseif(yi_yuan)s=one;

end

half: begin

if(wu_jiao)s=one;

else if(yi_yuan)

s=two;

end

one: begin

if(wu_jiao) s=two;

else if(yi_yuan)s=three;

end

two: begin

if(wu_jiao) s=three;

else if(yi_yuan)

begin

sell_out=1;get=1;s=idle;

end

end

three:begin

if(wu_jiao)

begin

sell_out=1; get=1;s=idle;

end

else if(yi_yuan)

begin

…………

…………

…………限于本文篇幅 余下代码请从51黑下载附件…………复制代码测试代码:

`timescale 1ns/1ns

module sell_top;

reg yi_yuan,wu_jiao,reset,CLK;

wire get,half_out,sell_out;

always #50 CLK=~CLK;

initial

begin

CLK =0; reset=1;

#100reset=0;

yi_yuan=0;

wu_jiao=0;

end

always@(posedge CLK)

begin

wu_jiao={$random}%2;#50 wu_jiao=0;

end

always@(posedge CLK)

begin

if(!wu_jiao)yi_yuan=1;#50 yi_yuan=0;

end

sell m(.yi_yuan(yi_yuan),.wu_jiao(wu_jiao), .get(get),

.half_out(half_out),.sell_out(sell_out),.reset(reset),.clk(CLK));

endmodule二、程序仿真仿真程序图

仿真波形及分析

分析前仿真波形,每个时钟周期为100ns,如图:在100ns系统复位,到550ns时,输入5个wu_jiao信号,get和sell_out信号出现告电平,持续100ns,表示卖出和取饮料信号。第三组开始输入信号:在1050ns且为上升沿时,1个yi_yuan高电平,后接着俩wu_jiao高电平,又一个yi_yuan高电平,half_out/get和sell_out信号出现告电平持续100ns,表示分别有卖出、找零和取饮料信号。在1850ns时第5组测试数据开始,同时为时钟上升沿,分别有三个wu_jiao和一个yi_yuan高电平,满足输出,get、sell_out同时为高,持续100ns,表示分别卖出和取饮料信号。

系统的顶层原理图如下:

1.本次仿真实验通过对自动售货机状态转换图的分析得出其工作原理,并根据工作原理编写出Verilog HDL源程序;

2.通过仿真验证,该设计能较好的实现自动售货机的基本功能;

3.根据仿真结果,仿真输出与理论值相比有一定的延时,这是系统误差,难以消除。三、程序说明电路变量分析

根据设计要求,共有七个变量。

clk:时钟输入;

reset:系统复位信号;

wu_jiao:代表投入五角硬币;

yi_yuan:代表投入一元硬币;

half_out:售货机找回一枚五角硬币信号;

sell_out:机器售出一瓶饮料;

get:提示投币者取走饮料。四、知识点说明

1、从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。 这时:

wire对应于连续赋值,如assign

reg对应于过程赋值,如always,initial

从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。 这时:

1、wire型的变量综合出来一般是一根导线; 2、reg变量在always块中有两种情况:

(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑

(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

2、verilog中always@(posedge clk)无竞争冒险,因为这是时序电路,a和c值的更新是在时钟沿到来时才会被采样的,你所看见的一个时钟周期,就是周期的概念,是延迟一周期后才赋值的,比如在0时刻,你给b,a一个初值1,1,而之前b,a值为0,0,则此时a为0的那个值赋给c,b为0值赋给a,在运行完这之后,由于有新值a=1,a值变化,a为1,即此时a=1,b=1,c=0,在下个周期时,c才等于1的。

3、#加数字表示延迟

4、Verilog中Timescale的用法

(1)`timescale 1ns / 1ps,含义为:时延单位为1ns,时延精度为1ps。

(2)在编译过程中,`timescale会影响其后面所有模块中的时延值,直至遇到另一个`timescale指令或`resetall指令。

(3) 当一个设计中的多个模块带有自身的`timescale编译指令时,模拟器将定位在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度。

5、$random(seed)是verilog中最简单的产生随机数的系统函数,给$random传入了参数seed。

6、reg [2:0]s:定义一个三位的计数器

7、parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。五、实验结论及总结

通过此次仿真实验—基于状态机的自动售货机的设计,我掌握了Quartus II软件的基本使用方法以及Verilog HDL语言的语法特点,可以初步编写一些逻辑功能较为简单的源程序。同时,通过此次实验,我掌握了设计工作的完整流程,为以后的课程设计积累了宝贵的经验。最后,实验过程中难免遇到一些问题,我们要冷静分析,找出原因。总之,通过此次实验,我学到了许多有益的知识。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。