数字逻辑设计大程——以撒的结合(Verilog语言)

本文分享了一位学生在数字逻辑设计课程中,使用Verilog语言实现游戏《以撒的结合》的项目经历。通过三天三夜的努力,成功完成项目并意识到自己对硬件体系的兴趣不足。
摘要由CSDN通过智能技术生成

前言

在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。

代码部分

/top模块


`timescale 1ns / 1ps

module Top(
	input ps2_clk, //键盘时钟
   input ps2_data, //键盘数据
	input clk, //整体时钟
	input rstn, //复位按钮
	input [15:0]SW,//代表的是FPGA板上的按钮
	output hs, //VGAC的output
	output vs, //VGAC的output
	output [3:0] r, //VGAC的output代表的是一个(x,y)坐标处对应的RGB元素
	output [3:0] g,
	output [3:0] b,//demo中本身就有的输出,包括FPGA板上LED灯的输出
	output SEGLED_CLK,
	output SEGLED_CLR,
	output SEGLED_DO,
	output SEGLED_PEN,
   output LED_CLK,
	output LED_CLR,
	output LED_DO,
	output LED_PEN,
	inout [4:0]BTN_X,//代表按钮的X坐标和Y坐标
	inout [3:0]BTN_Y,
	output buzzer,//代表蜂鸣器的输出
	output  reg [31:0] clkdiv,
	output  reg [31:0] score
    );
	

/
	reg [10:0] seed;
	initial begin
		seed <= 10'b1010100101;
	end
	always@(posedge clk)begin
		seed <= seed ^ (~((seed>>1)));
	end
	//reg [31:0]clkdiv;//31位的一个数字,代表的是当前的时钟
	always@(posedge clk) begin
		clkdiv <= clkdiv + 1'b1;
	end
/
		
	assign buzzer = 1'b1;//设置蜂鸣器变量为1
	
/
		
	wire [15:0] SW_OK;//代表的是防抖模块的输出按钮信号
	AntiJitter #(4) a0[15:0](.clk(clkdiv[15]), .I(SW), .O(SW_OK));//调用防抖模块
	wire [31:0] segTestData;
	wire [3:0]sout; 
   Seg7Device segDevice(.clkIO(clkdiv[3]),
								.clkScan(clkdiv[15:14]),
								.clkBlink(clkdiv[25]),
								.data(score),
								.point(8'h0), 
								.LES(8'h0),
								.sout(sout)
	);
	//反正这部分必须有,因为这几个wire变量是整个程序的output端口
	assign SEGLED_CLK = sout[3];
	assign SEGLED_DO = sout[2];
	assign SEGLED_PEN = sout[1];
	assign SEGLED_CLR = sout[0];
	
	
/
	//VGA的总体信息可以这么理解,就是一个一个点的像素数据进行串行输入,然后每个时钟周期处理一个点的数据的显示,得到最终屏幕上的串行输出。由于时钟周期非常快所以一遍一遍地一个点一个点处理我们人眼是看不出来的
	wire [11:0] vga_data;//代表想要使用VGAC模块处理所需要的数据输入信息
 	wire [11:0] vga_data_1;//代表背景图像IP核所输出的VGA信息
 	wire [19:0] col_addr;//[9:0]代表当前正在处理的那个点的列的坐标
 	wire [19:0] row_addr;//[8:0]代表当前正在处理的那个点的行的坐标
 	wire [18:0] address;//代表输出背景图片时的地址
	wire [11:0] vga_data_object;//代表物体IP核调用之后产生的VGA信息
	wire [18:0] address_object;//代表物体的显示地址
	wire [9:0]  data;//代表PS2协议键盘的数据输出
	wire [9:0] on_hc_1; 
	wire [8:0] on_vc_1; 
	wire [9:0] on_hc_2; 
	wire [8:0] on_vc_2;
	wire [9:0] on_hc_3;
	wire [8:0] on_vc_3;
	wire [9:0] on_hc_4;
	wire [8:0] on_vc_4;
	wire [9:0] on_hc_5;
	wire [8:0] on_vc_5;
	wire [9:0] on_hc_6;
	wire [8:0] on_vc_6;
	wire [9:0] on_hc_7;
	wire [8:0] on_vc_7;
	wire [9:0] on_hc_8;
	wire [8:0] on_vc_8;
	wire [9:0] on_hc_9;
	wire [8:0] on_vc_9;
	wire [9:0] on_hc_10;
	wire [8:0] on_vc_10;
	wire [9:0] on_hc_11;
	wire [8:0] on_vc_11;
	wire [9:0] on_hc_12;
	wire [8:0] on_vc_12;
	reg [6:0] blood;
	reg [9:0] col_temp_1 ; //remember the col position 
	reg [8:0] row_temp_1 ; //remember the row position 
	reg [9:0] col_temp_2 ; //remember the col position 
	reg [8:0] row_temp_2 ; //remember the row position 	
	reg [9:0] tmp_x;
	reg [9:0] tmp_x2;
	reg [9:0] tmp_x3;
	reg [9:0] tmp_x4;
	reg [9:0] tmp_x5;
	reg [9:0] tmp_x6;
	reg [9:0] tmp_x7;
	reg [9:0] tmp_x8;
	reg [9:0] tmp_x9;
	reg 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值