基于FPGA的verilog实现8X8点阵显示猜拳游戏
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3'b111:begin row=8'b01111111;col=8'b00000000;end
default:;
endcase
end
endmodule
module gen_divd(reset,clkin,clkout);
input reset,clkin;eter divdWIDTH=1;
LED点阵其实是由发光二极管组成的矩阵,一共有16个管脚,下面介绍的8*8点阵,即是8行*8列LED构成。下面是共阳极8*8点阵的内部结构图:
从图中可以看出在横向上,每行LED的阳极连在一块,并引出一个引脚到外面;在竖向上,每列的LED阴极连在一块,并引出一个引脚到外面。所以,要让某行某列的LED亮,就要使该行引出的引脚接高电平,该列引出的引脚接低电平。
if(cnt==(divdFACTOR-1))
begin
cnt<=0;
clkout<=~clkout;
end
end
endmodule
input clk,rst;
input [3:0] sw;
output [7:0] row,col;
reg [7:0] col,row;
wire clk_1k;
reg [2:0] cnt;
//1k时钟
defparam Gen_RxClk.divdFACTOR=24000,Gen_RxClk.divdWIDTH=14;//分频出1k的时钟
parameter divdFACTOR=1;
reg clkout;
reg [divdWIDTH:0] cnt;
always @ (posedge reset or posedge clkin)
if(reset)
begin
cnt<=0;
clkout<=0;
end
else
begin
cnt<=cnt+1'b1;
实际上无法使某些一直点亮,只能利用人眼的视觉暂留效应,通过快速更换led,达到形成图案的效果,而其驱动方法。由于每行(每列)LED的一个极被连在一块,所以这个驱动方法只能是动态扫描法。从本质上来讲同数码管的动态扫描方法是类似的,这里我们利用横向扫描实现猜拳游戏九种比赛状况。
源码实现
module dajiaoya ( sw, clk, rst, row, col );//实际上这也是猜拳游戏的一个模块
end
always @(cnt)
begin
case(cnt)
3'b000:begin row=8'b11111110;col=8'b00000000;end
3'b001:begin row=8'b11111101;col=8'b00000000;end
3'b010:begin row=8'b11111011;col=8'b11100100;end
3'b011:begin row=8'b11110111;col=8'b11100011;end
3'b100:begin row=8'b11101111;col=8'b11100011;end
3'b101:begin row=8'b11011101;col=8'b11100100;end
3'b110:begin row=8'b10111111;col=8'b00000000;end
gen_divd Gen_RxClk(
.reset(!rst),
.clkin(clk),
.clkout(clk_1k));//端口名称关联
always @(posedge clk_1k or negedge rst)
begin
if(!rst)
cnt<=3'b000;
else
cnt<=cnt+1'b1;
default:;
endcase
end
endmodule
module gen_divd(reset,clkin,clkout);
input reset,clkin;eter divdWIDTH=1;
LED点阵其实是由发光二极管组成的矩阵,一共有16个管脚,下面介绍的8*8点阵,即是8行*8列LED构成。下面是共阳极8*8点阵的内部结构图:
从图中可以看出在横向上,每行LED的阳极连在一块,并引出一个引脚到外面;在竖向上,每列的LED阴极连在一块,并引出一个引脚到外面。所以,要让某行某列的LED亮,就要使该行引出的引脚接高电平,该列引出的引脚接低电平。
if(cnt==(divdFACTOR-1))
begin
cnt<=0;
clkout<=~clkout;
end
end
endmodule
input clk,rst;
input [3:0] sw;
output [7:0] row,col;
reg [7:0] col,row;
wire clk_1k;
reg [2:0] cnt;
//1k时钟
defparam Gen_RxClk.divdFACTOR=24000,Gen_RxClk.divdWIDTH=14;//分频出1k的时钟
parameter divdFACTOR=1;
reg clkout;
reg [divdWIDTH:0] cnt;
always @ (posedge reset or posedge clkin)
if(reset)
begin
cnt<=0;
clkout<=0;
end
else
begin
cnt<=cnt+1'b1;
实际上无法使某些一直点亮,只能利用人眼的视觉暂留效应,通过快速更换led,达到形成图案的效果,而其驱动方法。由于每行(每列)LED的一个极被连在一块,所以这个驱动方法只能是动态扫描法。从本质上来讲同数码管的动态扫描方法是类似的,这里我们利用横向扫描实现猜拳游戏九种比赛状况。
源码实现
module dajiaoya ( sw, clk, rst, row, col );//实际上这也是猜拳游戏的一个模块
end
always @(cnt)
begin
case(cnt)
3'b000:begin row=8'b11111110;col=8'b00000000;end
3'b001:begin row=8'b11111101;col=8'b00000000;end
3'b010:begin row=8'b11111011;col=8'b11100100;end
3'b011:begin row=8'b11110111;col=8'b11100011;end
3'b100:begin row=8'b11101111;col=8'b11100011;end
3'b101:begin row=8'b11011101;col=8'b11100100;end
3'b110:begin row=8'b10111111;col=8'b00000000;end
gen_divd Gen_RxClk(
.reset(!rst),
.clkin(clk),
.clkout(clk_1k));//端口名称关联
always @(posedge clk_1k or negedge rst)
begin
if(!rst)
cnt<=3'b000;
else
cnt<=cnt+1'b1;