【FPGA入门八】自动售货机

这篇具有很好参考价值的文章主要介绍了【FPGA入门八】自动售货机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.任务

【FPGA入门八】自动售货机
功能完整描述:

KEY4:开关机按键,复位时,默认是关机状态,数码管和LED灯均不亮,同时蜂鸣器响,其余按键按下无效。
KEY3:在开机状态时,投币1元
KEY2:在开机状态时,投币为0.5元
KEY1:当投币但少于货物的价格时,取消订单,数码管显示为0.0,同时LED灯实现跑马灯2s然后熄灭
当投币为2.5元时,刚好能够购买货物,4个LED灯同时闪烁2s然后熄灭,同时数码管数字清零
当投币为3元时,购买货物还需找零,4个LED灯实现流水灯2s然后熄灭,同时数码管数字清零

思路:

位选信号:

两种状态 6’b111_110,6’b111_101让这两个状态频繁切换,看起来像是一直亮着一样。

售货机总共有8个状态:

1:用户投币总数为0,也是初始状态,此时数码管显示0.0
①当用户选择投币0.5,跳转到第2个状态
②当用户选择投币1,跳转到第3个状态

2:用户投币总数为0.5,数码管显示0.5
①当用户选择投币0.5,跳转到第3个状态
②当用户选择投币1,跳转到第4个状态
③当用户取消,跳转到第8个状态,同时开始计时

3:用户投币总数为1,数码管显示1.0
①当用户选择投币0.5,跳转到第4个状态
②当用户选择投币1,跳转到第5个状态
③当用户取消,跳转到第8个状态,同时开始计时

4:用户投币总数为1.5,数码管显示1.5
①当用户选择投币0.5,跳转到第5个状态
②当用户选择投币1,跳转到第6个状态,同时开始计时
③当用户取消,跳转到第8个状态,同时开始计时

5:用户投币总数为2.0,数码管显示2.0
①当用户选择投币0.5,跳转到第6个状态,同时开始计时
②当用户选择投币1,跳转到第7个状态,同时开始计时
③当用户取消,跳转到第8个状态,同时开始计时

6:用户投币总数为2.5,数码管显示2.5
①该状态保持2s后结束计时

7:用户投币总数为3,数码管显示3.0
①该状态保持2s后结束计时

8:用户取消订,数码管显示0.0
①该状态保持2s后结束计时

二.工程项目

Verilog HDL编写

①设计按键消抖模块

key_debounce.v

module key_debounce(
	input  wire  clk,
	input  wire  rst_n,
	input  wire  key,
	
	output reg   flag,               //判断抖动是否消除的标志信号,0为抖动,1为抖动结束
	output reg   key_value           //消抖后稳定的按键值给到蜂鸣器模块
);

//定义20ms延迟计数器,0.2s,1_000_000次
reg [19:0] delay_cnt;

//寄存依次key的值用来判断按键是否消抖成功
reg key_reg;



//20ms延时计数器
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		begin
			key_reg <= 1'b1;                        //复位信号,设置按键无效
			delay_cnt <= 1'b0;                      //计数器设置为0
		end
	else
		begin
			key_reg <= key; 
			if(key_reg == 1 && key == 0)            //当这一次key值和上一次key值不一样,证明正在抖动
				delay_cnt <= 20'd1_000_000;          //延迟时间20ms
			else if(delay_cnt > 0)
				delay_cnt <= delay_cnt - 1;          //没有抖动,开始20ms倒计时
			else
				delay_cnt <= 1'b0;                  
		end
end


//根据延时计数器获取按键状态以及按键值
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		begin
		   flag <= 1'b0;                               //复位信号,设置信号标志为抖动
			key_value <= 1'b1;                          //设置抽样值为1
		end
	else
		begin
			if(delay_cnt == 20'd1)                      //倒计时1_000_000到1
				begin
					flag <= 1'b1;
					key_value <= key;                     //稳定20ms后将key值给到key_value
				end
			else	
				begin
					flag <= 1'b0;
					key_value <= key_value;               //20ms内先不取样
				end
		end
end

endmodule
②设计数码管位选驱动

sel_drive.v

module sel_drive(
	input wire clk,
	input wire rst_n,
	input wire  boot_flag,
	
	output wire [5:0] sel
);
parameter MAX_NUM = 10'd999;//20us
reg [5:0] sel_r;
reg [9:0] cnt;
reg sel_flag;

//20us计时器
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		cnt <= 10'd0;
	end
	else if(cnt == MAX_NUM)begin
		cnt <= 10'd0;
	end
	else begin
		cnt <= cnt + 1'd1;
	end
end

//状态切换计数器模块 
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		sel_flag <= 1'b0;
	else if(cnt == MAX_NUM)
		sel_flag <= ~sel_flag;      
	else
		sel_flag <= sel_flag;
end 


//位选信号切换功能
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		sel_r <= 6'b111_111;
	end
	else begin
		case(boot_flag)
			1'b0:begin //关机状态
				sel_r <= 6'b111_111;
			end
			1'b1:begin //开机状态
				case(sel_flag)
					1'b0: sel_r <= 6'b111_110;
					1'b1: sel_r <= 6'b111_101;
					default:sel_r <= sel_r;
				endcase
			end
		endcase
	end
end

assign sel = sel_r;

endmodule

③设计数码管显示模块

seg_scan.v

module seg_scan(
	input wire clk,
	input wire rst_n,
	input wire [3:0] money_flag,//用户投币标识
	input wire [5:0] sel,//位选信号
	
	output wire [7:0] seg//段选信号
);

reg [3:0] number;
reg [7:0] seg_r;

reg flag;//标识当前显示的数字是否是小数点后面的值 1:是 0:不是

//根据用户投币标识的不同显示不同的数字
always@(*)begin
	case(money_flag)
		4'd0:begin//显示0.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;//第二个零不带小数点
								end
				6'b111_101: begin
									number = 4'd0;
									flag = 1'b1;//第一个零带小数点
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd1:begin//显示0.5
			case(sel)
				6'b111_110: begin
									number = 4'd5;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd0;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd2:begin//显示1.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd1;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd3:begin//显示1.5
			case(sel)
				6'b111_110: begin
									number = 4'd5;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd1;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd4:begin//显示2.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd2;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd5:begin//显示2.5
			case(sel)
				6'b111_110: begin
									number = 4'd5;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd2;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd6:begin//显示3.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd3;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		4'd7:begin//显示0.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd0;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
		default:begin//显示0.0
			case(sel)
				6'b111_110: begin
									number = 4'd0;
									flag = 1'b0;
								end
				6'b111_101: begin
									number = 4'd0;
									flag = 1'b1;
								end
				default   : begin
									number = 4'd0;
									flag = 1'b0;
								end
			endcase
		end
	endcase
end


always@(*)begin
	case(number)
		4'd0   :	begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0100_0000;//数码管显示0 带小数点
						end
						else begin
							seg_r = 8'b1100_0000;//数码管显示0 不带小数点
						end
					end
		4'd1   :	begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0111_1001;//数码管显示1 带小数点
						end
						else begin
							seg_r = 8'b1111_1001;//数码管显示1 不带小数点
						end
					end
		4'd2   : begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0010_0100;//数码管显示2 带小数点
						end
						else begin
							seg_r = 8'b1010_0100;//数码管显示2 不带小数点
						end
					end
		4'd3   : begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0011_0000;//数码管显示3 带小数点
						end
						else begin
							seg_r = 8'b1011_0000;//数码管显示3 不带小数点
						end
					end
		4'd5   : begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0001_0010;//数码管显示5 带小数点
						end
						else begin
							seg_r = 8'b1001_0010;//数码管显示5 不带小数点
						end
					end
		default:	begin 
						if(flag == 1'b1)begin//显示小数点
							seg_r = 8'b0100_0000;//数码管显示0 带小数点
						end
						else begin
							seg_r = 8'b1100_0000;//数码管显示0 不带小数点
						end
					end
	endcase
end


assign seg = seg_r;

endmodule

④设计售货机购物模块

vending_machine.v

module vending_machine(
	input  wire 		 clk,//时钟
	input  wire 		 rst_n,//复位
	input        [3:0] key_value,//按键值
	input        [3:0] flag,
	
	output reg        beep,
	output reg   [3:0] led,
	output wire   [3:0] money_flag_w,
	output wire  boot_flag_w
);

parameter MAX_NUM = 9_999_999;//定义最大计时0.2s  LED灯闪烁间隔
parameter MAX_NUM2 = 10;//2s计数基于0.2s

//定义状态计数器,4个灯4个状态
reg [1:0] led_flag; 

reg boot_flag;                   //标识售货机是否处于开机状态 0:关机 1:开机

reg [3:0] money_flag;//用户投币的状态有8种 分别是0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 退货的0

reg [23:0] cnt = 0;             //计时器赋初值为0

reg [26:0] cnt_1 = 0;             //计时器赋初值为0

reg time_flag;//开始计时标记 1:开始计时 0:不开始



//0.2s计数器模块
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		cnt <= 1'b0;               //按下复位键,清零
	else if(cnt == MAX_NUM)          //计时器达到最大值,清零重新计数
      cnt <= 1'b0;
	else
		cnt <= cnt + 1'b1;         
end

//2s计数器模块
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		cnt_1 <= 1'b0;               //按下复位键,清零
	else if(time_flag == 1)begin//开始计时
		if(cnt == MAX_NUM)begin
			if(cnt_1 <MAX_NUM2)begin
				cnt_1 <= cnt_1 + 1'b1;
			end
			else begin
				cnt_1 <= 1'b0;//cnt_1计数达到最大就清空
			end
		end
		else begin
			cnt_1 <= cnt_1;//其余时间保持
		end
	end
	else begin
		cnt_1 <= 1'b0;//不计时,cnt_1清空
	end
end


//状态切换计数器模块 led_flag的状态基于0.2s
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		led_flag <= 1'b0;
	else if(cnt == MAX_NUM)
		led_flag <= led_flag + 1'b1;      //超出宽度截取低两位
	else
		led_flag <= led_flag;
end 


//售货机开关机状态控制 key4
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin  
			boot_flag <= 1'b0;                 //初始状态关机中
			beep <= 1'b0;//关机状态,蜂鸣器响 
	end
	else if(flag[3] == 1'b1 && key_value[3] == 1'b0)begin//当按键key4按下时,售货机开关机状态取反
			boot_flag <= ~boot_flag;
			beep <= ~beep;//当开机状态时蜂鸣器停止
		end
	else begin
		boot_flag <= boot_flag;//其余情况售货机开关机状态保持
		beep <= beep;//蜂鸣器状态保持
	end
end


assign boot_flag_w = boot_flag;

//当投入人民币购买功能
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		money_flag <= 4'd0;//初始用户投币为0
	end
	else if(boot_flag)begin//只有当售货机是开机状态才可以购买
		case(money_flag)
			4'd0:begin//用户投币为0的情况下
				if(flag[1] == 1'b1 && key_value[1] == 1'b0)begin//用户投币0.5
					money_flag <= 4'd1;//记下第二个状态
				end
				else if(flag[2] == 1'b1 && key_value[2] == 1'b0)begin//用户投币1
					money_flag <= 4'd2;//记下第三个状态
				end
//				else if(flag[0] == 1'b1 && key_value[0] == 1'b0)begin//用户退货
//					money_flag <= 4'd7;//记下第八个状态
//					time_flag <= 1'b1;//开始计时
//				end
				else begin//用户没操作,状态保持
					money_flag <= money_flag;
				end
			end
			4'd1:begin//用户投币为0.5的情况下
				if(flag[1] == 1'b1 && key_value[1] == 1'b0)begin//用户投币0.5
					money_flag <= 4'd2;//记下第三个状态
				end
				else if(flag[2] == 1'b1 && key_value[2] == 1'b0)begin//用户投币1
					money_flag <= 4'd3;//记下第四个状态
				end
				else if(flag[0] == 1'b1 && key_value[0] == 1'b0)begin//用户退货
				money_flag <= 4'd7;//记下第八个状态
				time_flag <= 1'b1;//开始计时
				end
				else begin//用户没操作,状态保持
					money_flag <= money_flag;
				end
			end
			4'd2:begin//用户投币为1的情况下
				if(flag[1] == 1'b1 && key_value[1] == 1'b0)begin//用户投币0.5
					money_flag <= 4'd3;//记下第四个状态
				end
				else if(flag[2] == 1'b1 && key_value[2] == 1'b0)begin//用户投币1
					money_flag <= 4'd4;//记下第五个状态
				end
				else if(flag[0] == 1'b1 && key_value[0] == 1'b0)begin//用户退货
					money_flag <= 4'd7;//记下第八个状态
					time_flag <= 1'b1;//开始计时
				end
				else begin//用户没操作,状态保持
					money_flag <= money_flag;
				end
			end
			4'd3:begin//用户投币为1.5的情况下
				if(flag[1] == 1'b1 && key_value[1] == 1'b0)begin//用户投币0.5
					money_flag <= 4'd4;//记下第五个状态
				end
				else if(flag[2] == 1'b1 && key_value[2] == 1'b0)begin//用户投币1
					money_flag <= 4'd5;//记下第六个状态
					time_flag <= 1'b1;//开始计时
				end
				else if(flag[0] == 1'b1 && key_value[0] == 1'b0)begin//用户退货
					money_flag <= 4'd7;//记下第八个状态
					time_flag <= 1'b1;//开始计时
				end
				else begin//用户没操作,状态保持
					money_flag <= money_flag;
				end
			end
			4'd4:begin//用户投币为2的情况下
				if(flag[1] == 1'b1 && key_value[1] == 1'b0)begin//用户投币0.5
					money_flag <= 4'd5;//记下第六个状态
					time_flag <= 1'b1;//开始计时
				end
				else if(flag[2] == 1'b1 && key_value[2] == 1'b0)begin//用户投币1
					money_flag <= 4'd6;//记下第七个状态
					time_flag <= 1'b1;//开始计时
				end
				else if(flag[0] == 1'b1 && key_value[0] == 1'b0)begin//用户退货
					money_flag <= 4'd7;//记下第八个状态
					time_flag <= 1'b1;//开始计时
				end
				else begin//用户没操作,状态保持
					money_flag <= money_flag;
				end
			end
			4'd5:begin//用户投币为2.5的情况下 保持2s
				if(cnt_1 == MAX_NUM2)begin
					money_flag <= 4'd0;//返回第一种状态
					time_flag <= 1'b0;//结束计时
				end
				else begin
					money_flag <= money_flag;
				end
			end
			4'd6:begin//用户投币为3的情况下 保持2s
				if(cnt_1 == MAX_NUM2)begin
					money_flag <= 4'd0;//返回第一种状态
					time_flag <= 1'b0;//结束计时
				end
				else begin
					money_flag <= money_flag;
				end
			end
			4'd7:begin//用户退货的情况下 保持2s
				if(cnt_1 == MAX_NUM2)begin
					money_flag <= 4'd0;//返回第一种状态
					time_flag <= 1'b0;//结束计时
				end
				else begin
					money_flag <= money_flag;
				end
			end
		endcase
	end
	else begin
		money_flag <= 4'd0;
	end
end




//led控制模块
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		led <= 4'b0000;
	else if(money_flag == 4'd5)begin//2.5块购买成功不找零  闪烁
			case(led_flag)
				2'b00  :led <= 4'b1111;
				2'b01  :led <= 4'b0000;
				2'b10  :led <= 4'b1111;
				2'b11  :led <= 4'b0000;
				default:led <= 4'b1111;
			endcase
	end
	else if(money_flag == 4'd6)begin//3块购买成功找零  流水灯
			case(led_flag)
				2'b00  :led <= 4'b1000;
				2'b01  :led <= 4'b0100;
				2'b10  :led <= 4'b0010;
				2'b11  :led <= 4'b0001;
				default:led <= 4'b1000;
			endcase
	end
	else if(money_flag == 4'd7)begin//退货 跑马灯(蜂鸣器)
			case(led_flag)
				2'b00  :led <= 4'b1000;
				2'b01  :led <= 4'b1100;
				2'b10  :led <= 4'b1110;
				2'b11  :led <= 4'b1111;
				default:led <= 4'b1000;
			endcase
	end
	else
		led <= 4'b0000;//其余情况led不亮
end


assign money_flag_w = money_flag;

endmodule
⑤设计顶层模块

top_vending_machine.v

module top_vending_machine(
	input wire clk,//时钟
	input wire rst_n,//复位
	input wire [3:0] key,//三个按键
	
	output wire beep,
	output wire [3:0] led,//led灯
	output wire [7:0] seg,//段选信号
	output wire [5:0] sel//位选信号
);

wire [3:0] money_flag;
wire [3:0] key_value;
wire [3:0] flag;
wire boot_flag;

//例化按键key1消抖模块
key_debounce inst_key_debounce1(
.clk       (clk      ),
.rst_n     (rst_n    ),
.key       (key[0]      ),
            
.flag      (flag[0]     ),              
.key_value (key_value[0])          
);


//例化按键key2消抖模块
key_debounce inst_key_debounce2(
.clk       (clk      ),
.rst_n     (rst_n    ),
.key       (key[1]      ),
            
.flag      (flag[1]     ),              
.key_value (key_value[1])          
);


//例化按键key3消抖模块
key_debounce inst_key_debounce3(
.clk       (clk      ),
.rst_n     (rst_n    ),
.key       (key[2]      ),
            
.flag      (flag[2]     ),              
.key_value (key_value[2])          
);


//例化按键key4消抖模块
key_debounce inst_key_debounce4(
.clk       (clk      ),
.rst_n     (rst_n    ),
.key       (key[3]      ),
            
.flag      (flag[3]     ),              
.key_value (key_value[3])          
);


sel_drive inst_sel_drive(
.clk    	  (clk  		 ),
.rst_n	  (rst_n		 ),
.boot_flag (boot_flag),
			
.sel  	  (sel		 )
);


seg_scan inst_seg_scan(
.clk       (clk  		 ),
.rst_n     (rst_n		 ),
.money_flag(money_flag),

.sel       (sel		 ),//位选信号
.seg       (seg		 )//段选信号
);


vending_machine inst_vending_machine(
.clk		    (clk		    ),//时钟
.rst_n		 (rst_n		 ),//复位
.key_value	 ({key_value[3],key_value[2],key_value[1],key_value[0]}),//按键值
.flag			 ({flag[3],flag[2],flag[1],flag[0]}),

.beep        (beep)	    ,									
.led			 (led			 ),
.money_flag_w(money_flag),
.boot_flag_w(boot_flag)
);
endmodule

编译:
【FPGA入门八】自动售货机

查看RTL门级电路:
【FPGA入门八】自动售货机

引脚绑定:
【FPGA入门八】自动售货机

硬件测试:
【FPGA入门八】自动售货机
【FPGA入门八】自动售货机

三.总结

售货机的思路和电子锁类似,主要是找出所有状态及切换条件。文章来源地址https://www.toymoban.com/news/detail-482420.html

到了这里,关于【FPGA入门八】自动售货机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【附源码】基于fpga的自动售货机(三段式状态机)

    目录 1、VL38 自动贩售机1 题目介绍 思路分析 代码实现 仿真文件 2、VL39 自动贩售机2 题目介绍: 题目分析 代码实现 仿真文件 3、状态机基本知识         设计一个自动贩售机,输入货币有三种,为0.5/1/2元,饮料价格是1.5元,要求进行找零,找零只会支付0.5元。 ps:   

    2024年02月01日
    浏览(39)
  • python自动售货机

    分享python实现自动售货一个小作业 输入2进行购买商品,输入商品id和数量,可以选择不同商品,最后进行结账操作。 可以有两种查询方式,全部查询和按时间条件查询 具体操作如下: 全部查询: 时间条件查询: 就按4直接退出23333 其实就是参考路边的自动售货机贩卖饮料啥的,

    2024年02月11日
    浏览(31)
  • 【Python实训】饮品自动售货机

    这段代码定义了三个函数:show_goods()、total()和main()。show_goods()函数用于展示饮品信息,total()函数用于计算总额,main()函数用于控制整个饮品自动售货机的操作流程。 运行程序后,会首先调用show_goods()函数展示饮品信息,然后用户可以根据展示的信息选择饮品和数量,输入

    2024年02月05日
    浏览(43)
  • 如何用Java设计自动售货机?

    如何用Java设计自动售货机?是大多在高级Java开发人员面试中经常被问到的好问题之一。在典型的编码面试中,你会得到一个问题描述来开发一个售货机,在有限的时间内,通常2到3小时内,你需要在Java中编写设计文档、工作代码和单元测试。这种Java面试的一个关键优势是可以一次

    2024年02月05日
    浏览(95)
  • 自动售货机销售数据分析与应用

    本书不仅适用于零基础的读者自学,还适用于教师教学,为了帮助读者更加高效地掌握本书的内容,本书提供了以下10项附加价值: (1)建模平台:提供一站式大数据挖掘建模平台,免配置,包含大量案例工程,边练边学,告别纸上谈兵 (2)视频讲解:提供不少于600分钟

    2024年02月08日
    浏览(43)
  • Verilog设计实例(一):自动售货机设计实例

    本系列为FPGA设计实例,基于Verilog HDL,题目一般是我在网上看到的一些FPGA相关的实验题目,基本会是一个实际场景的系统实现,而不是简单单元的设计,这是为了能更全面的练习,这些实例一般是可以基于FPGA进行实现的,因为正好手里有一块zynq板子,所以想把这个东西用起

    2024年02月05日
    浏览(33)
  • 基于单片机的自动售货机系统设计

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式   本文设计基于单片机的自动售货机系统,分为硬件电路设计与软件设计。硬件电路设计,本系统由ST(意法半导体)公司设计和生产的STM32F103C8T6单片

    2024年02月03日
    浏览(50)
  • VIVADO自动售票机售货机verilog代码ego1开发板验证

    名称:VIVADO自动售票机售货机verilog代码ego1开发板验证 软件:VIVADO 语言:Verilog 代码功能: 自动售票机  1、自动售票机只出售1角、2角、5角和1元4种车票 2、只接收1角、5角和1元硬币,每次只能出售1张车  3、自动售票机具有累加销售额的功能 实验要求  出售车票用SW0~3分别

    2024年02月05日
    浏览(43)
  • 【Python】python自动售货机销售数据分析

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 近年来,随着我国经济技术的不断提升,

    2024年02月06日
    浏览(38)
  • 售货机基于ego1开发板的自动饮料机verilog代码vivado软件

    名称:售货机基于ego1开发板的自动饮料机verilog代码vivado软件 软件:VIVADO 语言:Verilog 代码功能: 设计一个自动饮料机逻辑电路, 它的投币口只能投入一枚五角或一元硬币; 投入一元五角硬币后机器自动给出一杯饮料,投入两元硬币后再给出饮料的同时找回一枚五角硬币;

    2024年01月18日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包