课程设计报告FPGA

发布 2022-09-30 22:22:28 阅读 4445

课程设计报告。

自动售货机。

学院:电子与通信工程学院。

班级:微电子1班。

姓名:刁飞鹏。

学号:09110038

自动售货机设计。

任务分析。任务要求利用开发系统板,设计一个自动售货机控制芯片。自动售货机平时处于待机状态,当有钱投入之后开始工作。

利用三个按键作为投币信号,分别代表投币5元、10元、20元,投入钱币以后,采用七段数码管显示投入的金额;利用另外4个按键代表4种货物,可以在售货机上选择购买的货物,假设4种货物的售价分别为3元、6元、10元、17元。选择了货物之后,七段数码管显示购物之后的找币余额,并且用led数码管指示灯显示是否有足够的金额购买,如果投币不够,报警指示灯亮起,并且显示余额为零。选择了购买物品之后,可以按键出货或者余额不足退币。

系统的输入信号包括8个按键开关、时钟信号,输出部分有2个led、4个七段数码管,系统框图如图所示。

自动售货机控制芯片的外部时钟由晶振产生,该开发板系统实例中晶振频率为50mhz。

系统设计。自动售货机控制芯片系统结构框图如图所示,包括三个模块:分频器模块、核心控制模块和按键与七段数码管控制模块。

其中,分频器模块主要用于产生供按键、七段数码管扫描的时钟,这个扫描时钟的周期应该大约为0.01~0.001s。

同时,这个分频时钟也可用于核心模块的基本控制,由于扫描时钟要和按键、七段数码管控制电路构成一个同步电路,因此,必须使用同一个分频时钟。

核心控制模块的作用主要是控制系统的状态。系统一共有三种状态,需要使用两位状态寄存器存储状态数据,每个状态之间的转换由外部按键控制,在每一个状态下,有不同的七段数码管和指示灯的输出。

按键和数码管显示控制电路是对外部的矩阵按键以及动态显示硬件进行驱动,该模块对矩阵按键进行扫描,输出经过扫描之后的按键结果。并且可以把核心模块输出的二进制显示数据转化为bcd码,通过bcd译码,以及动态显示技术最终输出到动态七段数码管上显示出来。

模块设计。1.分频模块设计。

module clk_div(rst,clk,clk_1);

input rst,clk;

output clk_1;

reg [14:0]cnt;

reg clk_1;

always@(posedge clk or negedge rst)

beginif(rst==1'b0)begin

cnt<=15'd0;

clk_1<=1'b0;

endelse if(cnt==15'd26213)

begincnt<=15'd0;

clk_1<=~clk_1;

endelse cnt<=cnt+1'b1;

endendmodule

2.核心控制模块。

1)模块原理分析。核心控制模块控制三个状态,分别是“等待投币状态”、“等待买货状态”、“出货、退币状态”。

系统状态转换过程如图所示,当系统复位以后,进入“等待投币状态”,此时数码管输出全部为0,而指示灯也输出为“00”。在这种状态下,如果输入了投币按键,包括投币5元、10元、15元,就会跳转到下一个状态,称之为“等待买货状态”。在“等待买货状态”下,七段数码管输出的金额,指示灯仍然输出“00”。

在这种状态下,如果输入了购物按键,包括购买3元、6元、10元、17元的货物,就会跳转到下一个状态,称之为“出货、退币状态”。如果投币金额不足,七段数码管输出零,“余额不足指示灯”亮起。这个状态下,如果按下“出货、退币按键”则系统恢复到等待投币状态”,表示售货完成。

根据前面已经设计好的状态转移图。对所有的状态进行编码设计。由于系统包括三个状态,因此可以设计两位寄存器来对所有的状态进行编码。

设计状态机首先要确定状态,以及对状态进行编码,然后根据状态图确定具体的状态转换以及输出和输入的关系。

按照系统要求,有8个按键输入,首先定义每个按键具体含义,如表所示:

另外,还有两个led发光二极管,其中0号led代表“金额充足”,可以出货。1号代表“金额不足”,只能退币处理。

当系统复位以后,处于“等待投币状态”,状态**为为“2'b00",此时数码管输出全为0,而指示灯也输出为“00”。如果在这个状态下,只有出入三个投币按键,状态才能发生跳转,三个投币按键分别代表投币5元、10元、20元,对应的按键分别是0号、1号、2号。按下投币按键后,投币的金额需要被内部寄存器存储下来。

投币之后,状态跳转为 "等待买货状态”,状态**为为“2'b01".

在“等待买货状态”下,七段数码管输出已经被保存下来的刚刚投币的金额,led指示灯仍然输出“00”。在这种状态下,如果输入了购物按键,包括购买3元、6元、10元、17元的货物,分别对应着3号、4号、5号、6号按键,就会跳转到下一状态,称之为“出货、退币状态”,状态**为为“2'b10”。

在“出货、退币状态”下,如果刚刚投币金额充足,七段数码管输出找零的金额,“金额充足指示灯”亮起,如果投币金额不足,七段数码管输出零,余额不足指示灯亮起。这种状态下,如果按下7号按键代表的“出货、退币”按键则系统恢复到“等待投币状态”,表示售货完成。

2)模块接口定义。

module state(rst,clk_1,led,display,key);

input rst;

input clk_1;

input [7:0]key;

output [1:0]led;

output [7:0]display;

reg [1:0]led;

reg [7:0]display;

reg [1:0]state;

parameter [1:0] waitfor = 2'b00,buying = 2'b01,outfor = 2'b10;

always@(posedge clk_1 or negedge rst)

beginif(!rst)

begindisplay<=8'd0;

led<=2'b00;

state<=waitfor;

endelse

begincase(state)

waitfor:begin

if(key[0]==1'b0)

beginstate<=buying;

display<=8'd5;

led<=2'b00;

endif(key[1]==1'b0)

beginstate<=buying;

display<=8'd10;

led<=2'b00;

endif(key[2]==1'b0)

beginstate<=buying;

display<=8'd20;

led<=2'b00;

endend

buying:begin

if(key[3]==1'b0)

beginstate<=outfor;

if(display<8'd3)

begindisplay<=8'd0;

led<=2'b10;

endelse

begindisplay<=display-8'd3;

led<=2'b01;

endend

if(key[4]==1'b0)

beginstate<=outfor;

if(display<8'd6)

begindisplay<=8'd0;

led<=2'b10;

endelse

begindisplay<=display-8'd6;

led<=2'b01;

endend

if(key[5]==1'b0)

beginstate<=outfor;

if(display<8'd10)

begindisplay<=8'd0;

led<=2'b10;

endelse

begindisplay<=display-8'd10;

led<=2'b01;

endend

if(key[6]==1'b0)

beginstate<=outfor;

if(display<8'd17)

begindisplay<=8'd0;

led<=2'b10;

endelse

begindisplay<=display-8'd17;

led<=2'b01;

endend

endoutfor:begin

if(key[7]==1'b0)

beginstate<=waitfor;

display<=8'd0;

led<=2'b00;

endend

endcase

endend

endmodule

按键控制模块。

module xishi(clk_1,display,s,m);

input clk_1;

input [7:0]display;

output [3:0]s;

output [6:0]m;

reg [3:0]s;

reg [6:0]m;

reg [1:0]st;

reg [3:0]shi,bai,ge;

reg [3:0]bin;

wire [7:0]display_1;

always@(posedge clk_1)

beginst<=st+1'b1;

endalways@(st)

begincase(st)

2'b00:s<=4'b0001;

2'b01:s<=4'b0010;

2'b10:s<=4'b0100;

default:s<=4'b0000;

endcase

endalways@(display)

beginif(display>8'd199)

bai<=4'd2;

else if(display>=7'd99)

bai<=4'd1;

else bai<=4'd0;

endassign display_1=display-bai*7'd100;

always@(display_1)

beginif(display_1>=7'd90)

shi<=4'd9;

else if(display_1>=7'd80)

shi<=4'd8;

else if(display_1>=7'd70)

课程设计报告FPGA

课程设计报告。自动售货机。学院 电子与通信工程学院。班级 微电子1班。姓名 刁飞鹏。学号 09110038 自动售货机设计。任务分析。任务要求利用开发系统板,设计一个自动售货机控制芯片。自动售货机平时处于待机状态,当有钱投入之后开始工作。利用三个按键作为投币信号,分别代表投币5元 10元 20元,投...

FPGA课程设计报告

课程名称 fpga 系部信息工程系 专业班级。学生姓名。班级学号。指导老师。一 实验目的与要求。1 要独立完成测试题目,通过使用matlab simulink system generator进行模型的设计,锻炼自己综合运用所学知识的能力。2 熟练掌握matlab simulink system g...

FPGA课程设计报告

专业 通信工程。班级 班。姓名 学号 指导老师 祝宏。制作日期 11.10 11.20 设计课题1 设计一个可控的100进制可逆计数器,要求用de2 115开发板 1 计数器的时钟输入信号周期为200ns。2 以十进制形式显示。3 有一个复位端clr和两个控制端plus和minus,在这些控。制信号...