哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx

上传人:b****6 文档编号:8336699 上传时间:2023-05-11 格式:DOCX 页数:27 大小:1.78MB
下载 相关 举报
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第1页
第1页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第2页
第2页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第3页
第3页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第4页
第4页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第5页
第5页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第6页
第6页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第7页
第7页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第8页
第8页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第9页
第9页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第10页
第10页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第11页
第11页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第12页
第12页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第13页
第13页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第14页
第14页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第15页
第15页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第16页
第16页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第17页
第17页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第18页
第18页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第19页
第19页 / 共27页
哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx

《哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。

哈工大数电自主设计实验免试报告模板Word文档下载推荐.docx

(2)游戏初始模块

该模块有三个输入和一个输出,输入端clk和reset分别为时钟和复位功能,输入端switch为五位开关输入,用来选择本次游戏所需的游戏对应答案顺序。

输出端judge_array输出一组16位二进制数用以表示对应顺序,输出到判断按键模块供其判断答案正误。

(3)提示灯模块

该模块有四个输入和一个输出,输入端reset为复位功能开关,输入端clk_delay为clk_mod提供的3s周期时钟驱动,输入端led2和step_num_out都由下面将要介绍的判断按键模块输出提供,用以判断当前游戏胜利或失败状态,led2判断胜利,step_num_out判断失败,然后根据当前状态处于游戏中或游戏胜利或游戏失败由输出端led1输出不同提示灯状态。

游戏中亮相应灯,游戏胜利灯全亮,游戏失败灯全灭。

(4)判断按键模块

该模块有六个输入和两个输出,输入端clk为时钟输入,输入端reset为复位功能开关,输入端clk_delay为clk_mod提供的3s周期时钟驱动,用以判断是否新点亮一盏灯,从而使按键处于按下有效状态,从而实现每次亮灯只能按下一次按键有效,输入led1、judge_array、key为提示灯状态、对应顺序、按键状态三者,从而判断答案正误。

输出端led2为答案显示灯,输出端step_num_out为操作步数输出,输出到led_mod用于判断,输出到数码管显示模块用于显示操作步数。

 

(5)数码管显示模块

该模块有四个输入端和两个输出端,输入端clk为时钟输入,输入端reset为复位功能开关,输入端clk_delay_2ms为clk_mod提供的2ms周期时钟驱动,输入step_num_in为操作步数输入,输出端seg_num_out为数码管段选,输出端seg_pos_out为数码管位选。

(6)顶层模块连接图

该图显示了各个模块的连接关系,与上面的各个介绍一致。

整体输入有clk时钟,switch开关,reset复位开关,用户按键key,输出为数码管、led灯。

4.仪器设备名称、型号和技术指标

Basys2开发板1块

PC1台

ISE13.4开发平台及仿真工具

5.理论分析或仿真分析结果

下面,我将分模块进行假定用户输入下的仿真。

(1)时钟分频模块仿真

由上图可以看出每2ms,clk_delay_2ms的波形会出现一个峰值,仿真结果正确。

由上图可以看出每3s,clk_delay的波形会出现一个峰值,仿真结果正确。

(2)游戏初始模块仿真

假定switch输入为五位二进制数01010,可以看到输出judge_array输出一组十六位二进制数010*********,仿真结果正确。

(4)整体仿真

提示灯模块、判断按键模块属于整体游戏过程,数码管模块属于显示输出,这三个模块需要其他模块驱动,故与整体一起仿真。

设定假设用户输入如上图,假设用户按键为按下第三个键。

通过以上验证可以看出,switch为00000时,理论对应关系应为当led1为0010时,按键0010为正确答案,此时led2变为0010,仿真结果正确;

6.详细实验步骤及实验测量数据记录

实验步骤如下:

1.了解verilog语言语法及设计方法

2.设计游戏规则

3.根据游戏规则及verilog语法设计相应模块

4.了解basys2开发板结构,决定输入输出控制

5.编写基本游戏过程代码

6.通过综合工具调试代码

7.下载至basys2开发板进行调试

8.完善更多细节功能,通过实践发现bug,分析bug原因加以改进

9.最终调试及检测

7.实验结论

实现了设计的全部功能,以下是成果展示:

游戏失败照片

游戏胜利照片

游戏过程中照片

8.实验中出现的问题及解决对策

我将本次实验的问题分为两类,一类是程序逻辑设计上的问题,一类是开发板及verilog语言使用上的问题下面逐一介绍:

1.本次实验过程中,由于第一次上手,遇到了很多的问题,开发板使用方面,在程序设计时遇到了很多的警告与错误,下面是我总结的我的常见错误:

(1)不同always语句中对同一变量赋值操作;

(2)顶层模块调用时,各模块中间的输入输出需要定义wire,且注意命名不能出错;

(3)注意数制,输入数时均按照二进制位数输入;

(4)调用case,if语句时记得end终止;

(5)调用case,if语句时,用不上的条件情况最好也加以说明,哪怕default后加空语句,可减少不必要的警告。

2.游戏逻辑设计上的问题

(1)如何使每局游戏对应关系唯一?

使用了一个标志量,只有reset时使标志量重置,一旦产生对应关系,则利用标志量使模块不再产生新的对应关系。

(2)如何使一次亮灯后只有一次按键有效?

同样使用标志量,只有新的灯亮后,标志量重置,使按键有效。

(3)如何判断游戏胜利、失败和游戏状态?

令led_mod和和judge_mod互相输入对方模块的输出,达到模块间信息交互,从而判断各种状态。

9.本次实验的收获和体会、对电路实验室的意见或建议

通过本次实验,熟悉了通过verilog语言在ISE平台编写调试程序并下载到fpga实验的整体流程,深入了解了verilog模块化编程的思想与可编程逻辑器件的编程思想。

通过这次实验,不仅是对fpga,对于数电这门也有了新的认识,同时初步了解fpga的设计方法,对于以后也有很大的帮助。

建议实验室开设更多培训,可以提供一些常用的的外设,让我们可以设计并完成更多样实验。

10.参考文献

[1] 

沈涛,李传志,张小平,李斌.Xilinx 

FPGA/CPLD设计初级教程[M].西安电子科技大学出版社,2009.

[2]杜勇.FPGA/VHDL设计入门与进阶[M].机械工业出版社,2011.

[3]周兴华.手把手教你学CPLD/FPGA与单片机联合设计[M].北京航空航天大学出版社,2010.11.

附录I本次实验代码

moduletest77(

inputclk,

inputreset,

input[4:

0]switch,

output[3:

0]seg_pos_out,

output[6:

0]seg_num_out,

input[3:

0]key,

output[7:

4]led1,

0]led2

);

wireclk_delay_w;

wire[5:

0]step_num_out_w;

wire[16:

1]judge_array_w;

wireclk_delay_2ms_w;

clk_modclk_mod(

.clk(clk),

.reset(reset),

.clk_delay(clk_delay_w),

.clk_delay_2ms(clk_delay_2ms_w)

start_modstart_mod(

.switch(switch),

.judge_array(judge_array_w)

segment_modsegment_mod(

.step_num_in(step_num_out_w),

.clk_delay_2ms(clk_delay_2ms_w),

.seg_pos_out(seg_pos_out),

.seg_num_out(seg_num_out)

led_modled_mod(

.clk_delay(clk_delay_w),

.step_num_out(step_num_out_w),

.led2(led2),

.led1(led1)

judge_modjudge_mod(

.led1(led1),

.key(key),

.judge_array(judge_array_w),

.step_num_out(step_num_out_w)

endmodule

//------------时钟分频模块--------------------------------------------------

moduleclk_mod(

outputclk_delay,

outputclk_delay_2ms

reg[32:

1]time_delay;

1]time_cal=0;

1]time_delay1;

1]time_cal1=0;

regclk_delay_out=0;

regclk_delay_2ms_out=0;

always@(posedgeclk)

begin

if(reset)begin

//

end

else

begin

time_delay=150000000;

time_delay1=100000;

time_cal=time_cal+1;

time_cal1=time_cal1+1;

if(clk_delay_out==1)begin

clk_delay_out=0;

end

if(time_cal==time_delay)begin

clk_delay_out=1;

time_cal=0;

if(clk_delay_2ms_out==1)begin

clk_delay_2ms_out=0;

if(time_cal1==time_delay1)begin

clk_delay_2ms_out=1;

time_cal1=0;

end

assignclk_delay=clk_delay_out;

assignclk_delay_2ms=clk_delay_2ms_out;

//------------游戏开始产生对应关系--------------------------------------

modulestart_mod(

0]switch,

output[16:

1]judge_array

reg[4:

0]rand_status;

reg[16:

1]judge_array_out;

begin

if(reset)begin

end

else

begin

rand_status=switch[4:

0];

case(rand_status)

0:

beginjudge_array_out<

=16'

h8421;

end

1:

h8412;

2:

h8241;

3:

h8214;

4:

h8142;

5:

h8124;

6:

h4812;

7:

h4821;

8:

h4281;

9:

h4218;

10:

h4182;

11:

h4128;

12:

h2841;

13:

h2814;

14:

h2481;

15:

h2418;

16:

h2184;

17:

h2148;

18:

h1842;

19:

h1824;

20:

h1482;

21:

h1428;

22:

h1284;

default:

h1248;

endcase

assignjudge_array=judge_array_out;

//-----------------随机亮提示灯-----------------------------------------

moduleled_mod(

inputclk_delay,

0]led2,

input[6:

0]step_num_out,

4]led1

);

reg[1:

0]rand_led;

reg[3:

0]led_temp;

0]led_in;

reg[6:

0]step_num=0;

reg[31:

0]rand_num=32'

b1101_1010_0110_1011_0010_1001_1011_0100;

always@(posedgeclk_delay)

begin

rand_num<

=rand_num>

>

1;

rand_num[31]<

=rand_num[0];

always@(posedgeclk_delayorposedgereset)

led_temp<

=4'

b0000;

elsebegin

led_in=led2;

step_num=step_num_out;

if(led_in==4'

b1111)begin

b1111;

end

elseif(step_num>

39)begin

elsebegin

rand_led=rand_num[7:

6];

case(rand_led)

beginled_temp<

b0001;

b0010;

b0100;

b1000;

endcase

end

assignled1[7:

4]=led_temp;

endmodule

//-----------------判断按键正误--------------------------------------------

modulejudge_mod(

input[7:

4]led1,

input[16:

1]judge_array,

0]step_num_out

regflag=0;

0]led_answer=4'

0]led_temp_out;

0]step_num=7'

d0;

led_answer<

step_num=7'

else

if(step_num>

6'

d40)begin

if(clk_delay==1)begin

flag<

=1;

if(led_answer<

4'

step_num=step_num+1;

if(flag==1)begin

if(key>

b0000)begin

led_temp_out=led1;

case(led_temp_out)

4'

b0001:

if(judge_array[4:

1]==key)begin

if({led_temp_out&

led_answer}>

0&

&

step_num>

0)begin

step_num=step_num-1;

end

led_answer<

=led_answer|led_temp_out;

else

begin

if({led_temp_out&

step_num=step_num+1;

b0010:

if(judge_array[8:

5]==key)begin

b0100:

if(judge_array[12:

9]==key)begin

b1000:

if(judge_array[16:

13]==key)begin

if({led_temp_out

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2