FPGA课程设计实验报告_第1页
FPGA课程设计实验报告_第2页
FPGA课程设计实验报告_第3页
FPGA课程设计实验报告_第4页
FPGA课程设计实验报告_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 f p g a 课 程 设 计 报 告学部:信息科学与技术学部专业:通信工程班级:09级1班学号:姓名: 指导老师: 2011.11.22 实验一 100进制的可逆计数器一、设计一个可控的100进制可逆计数器,要求用实验箱下载。(1) 计数器的时钟输入信号周期为200ns。(2) 以十进制形式显示。(3) 有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。clrplusminus功能0复位为0110递增计数101递减计数111暂停计数二、程序如下:module keni100(clr,clk,plus,minus,out); /

2、100进制的可逆计数器input clr,plus,minus,clk;output 7:0out;reg 7:0out;always(posedge clk)begin if(!clr) /如果clr为零,输出为零;反之,运行else程序 out7:0=0; else begin if(plus=0 & minus=1) /100进制的递减计数 begin if (out3:0=0) begin out3:0=9; if (out7:4=0) out7:4=9; else out7:4=out7:4-1; end else out3:0=out3:0-1; end if(plus=1 & m

3、inus=0) /100进制的递增计数 begin if (out3:0=9) begin out3:0=0; if (out7:4=9) out7:4=0; else out7:4=out7:4+1; end else out3:0=out3:0+1; end if(plus=1 & minus=1) out=out; /若plus和minus都为1,暂停计数 if(plus=0 & minus=0) out=0; /若都为零,输出为零 endendendmodule三、运行程序1、在quartersii9.1输入程序打开quartersii界面,点击filenew,在出现的对话框中选择te

4、xt file 在出现的输入界面内输入程序,点击filesave as,再出现的对话框中点击yes,然后在出现的new project wizard对话框中点击next,在family&device settings 对话框中选择如下图所示的选项,在选择第三方软件的对话框中的选项选为none后点击next,在随后出现的对话框中,点击finish。设置完成。 2、 点击projectset as top-level entity,指向所输入的文件。3、 点击processingstartstart analysis & synthesis。4、点击filenew出现上面第一步时出现的对话框,选择

5、vector waveform file。5、点击viewutility windowsnode finder,在出现的对话框中点击list选择所需要的节点,将其拉到后面的name栏中,并设置输入数据6、选择end time:点击editend time7、输入参数的数据设置完成后,保存,图形如下:8、点击assigmentsettings,在出现的对话框中选择simulator settings,在simulation mode中选择functional,进行功能编译。8、 点击processinggenerate functional simulation netlist9、 点击proc

6、essingstart simulation,进行仿真。四、仿真结果:如上图所示,当clr为0时,out清零;当clr为1时,out开始输出,当plus=1,minus=0时,out开始递加;当plus=1,minus=1时,out暂停计数;当plus=0,minus=1时,out开始递减。五、封装在quartusii11.0中点击fileopen project,在弹出的对话框中选择counter100文件,单击右键选择creat symbol file for current file 上图为counter100的封装图,在quartus中打开此图,双击,将会看到counter100的程序

7、六、试验箱下载 将编好的程序应用于硬件上进行验证,所用的电路板子是: ep4ce115f29c7 外观如下: 1、安装硬件 在安装向导中选择如下安装路径,点击确定。2、硬件安装完毕后,在quartus11.0中封装图连接封装模块div和decode4_7是辅助模块,div是分频模块,decode4_7是译码部分。(相关程序在报告后面的附件)3、图形连接完毕后,单击filesave as,确定,修改设置,如下图:4、单击processingstart compilation,进行编译,没有错误后进行下一步。5、 单击toolsprogrammer,在弹出的对话框中,单击hardware弹出一个对

8、话框,选择usb-blasterusb-06、点击start,开始运行。七、硬件部分照片截图clk(sw3)与clr(sw0)置为1时,将plus(sw1)置为1,minus(sw2)置为0,开始从0递增,图为到99时,将plus与minus都置为1,暂停计数为99;下一时刻,数码管显示为0,重新开始递增计数;将plus(sw1)置为0,minus(sw2)置为1,开始从99递减计数。 实验二 交通灯控制系统一、交通灯控制系统,要求用实验箱下载。(1) 设计一个十字路口交通信号灯的定时控制电路。要求红、绿灯按一定的规律亮和灭,绿灯亮时,表示该车道允许通行;红灯亮时,该车道禁止通行。并在亮灯期间

9、进行倒计时,并将运行时间用数码管显示出来。(2)要求主干道每次通行时间为40秒,支干道每次通行时间为30秒。每次变换运行车道前绿灯闪烁,持续时间为5秒。即车道要由主干道转换为支干道时,主干道在通行时间只剩5秒钟时,绿灯闪烁5秒显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。(3)定时器要求采用递减计时方式进行计时。注:timeh、timel分别表示计数器的高位和低位hg、hr分别表示主干道的绿灯和红灯cg、cr分别表示支干道的绿灯和红灯两个定时时间:绿灯闪烁和绿灯停止闪烁4个状态:s

10、0:主干道绿灯亮,支干道红灯亮。s1:主干道绿灯闪烁,支干道红灯亮。s2:支干道绿灯亮,主干道红灯亮。s3:支干道绿灯闪烁,主干道红灯亮。2、 程序如下:module traffic00 (clk,en,lampar,fag,lampbr,fbg,numa,numb);input clk,en;output 7:0numa,numb;reg 7:0numa,numb;/计时显示output fag,fbg,lampar,lampbr; /fag:flash a greenreg lampar,lampag,lampbr,lampbg;/表示主路?路共四个灯reg tempa,tempb; /装

11、入计数reg 2:0 counta,countb;/灯亮的顺序reg 7:0 ared,agreen,bred,bgreen;always (en) if(!en) begin / 设置各种灯的预置数 ared =8b00110000; agreen =8b01000000; bred =8b01000000; bgreen =8b00110000; endalways (posedge clk) begin if(en) begin if(!tempa) begin tempa=1; case(counta) /控制灯亮的顺序 0: begin numa=agreen;lampag=1;la

12、mpar=0;counta=1; end 1: begin numa=ared; lampag=0;lampar=1;counta=0; end default: lampar8b00000001) begin if(numa3:0=0) begin numa3:0=4b1001; numa7:4=numa7:4-1;end else numa3:0=numa3:0-1; end if(numa=8b0000010) tempa=0; end end else begin lampar=1;lampag=0;counta=0;tempa=0; end end3、 运行程序步骤与实验一的步骤基本

13、相同,可参照实验一的步骤。四、仿真结果截图上图可以看出,在前35秒,主干道绿灯亮,次干道红灯亮;在最后5秒,主干道绿灯闪烁,次干道红灯亮;下一时刻,开始30进制的递减在前25秒,次干道绿灯亮,主干道红灯亮;在最后5秒,次干道绿灯闪烁,主干道红灯亮;下一时刻,开始40进制的递减五、封装在quartusii11.0中点击fileopen project,在弹出的对话框中选择traffic00文件,单击右键选择creat symbol file for current file traffic00的封装图6、 试验箱下载 所用的硬件与实验一是同一个板子,步骤可参考实验一的步骤。 封装图连接如下:7、

14、 硬件部分照片截图将en(sw17)和ncr(sw16)均置为1时,开始40进制的递减计数,主干道绿灯亮,次干道红灯亮,为零后,开始30进制递减计数;此时开始30进制递减计数,主干道红灯亮,次干道绿灯亮;最后五秒绿灯闪烁,为零后,开始40进制递减计数。 实验三 多功能数字钟系统一、多功能数字钟系统(层次化设计),要求用实验箱下载。(1)基本功能:60秒60分24小时。(2)扩展功能:报时;每小时59分51,53,55,57秒低频报时,59秒高频报时。校时校分;时段控制;6点18点 输出灯不亮,其它时间灯亮。独立设计除上述3种功能以外的扩展功能,可加分。2、 程序如下1、24进制的程序modul

15、e m24(h,cph,rd);output 7:0h;input cph,rd;reg 7:0h;always(negedge rd or posedge cph)begin if(!rd) h7:0=0;else begin if(h7:4=2)&(h3:0=3) /当高位为2,低位为3时,将其赋值为零 begin h7:0=0; end else /若高位不为2,低位为9时,高位加1 begin if(h3:0=9) begin h3:0=0; h7:4=h7:4+1; end else h3:0=h3:0+1; /若高位不为2,低位不为9时,低位加1 end endendendmodu

16、le2、60进制的程序(分钟和秒程序基本相同):module m60(m,cp60m,cpm,rd);output 7:0m;output cp60m;input cpm;input rd;wire cp60m;reg 7:0m;always(negedge rd or posedge cpm)begin if(!rd) begin m7:0=0; end else begin if(m7:4=5)&(m3:0=9) /当高位为5,低位为9时,将其赋值为0 begin m7:0=0; end else /若低位为9时,低位赋值为0 begin if(m3:0=9) begin m3:0=0;

17、if(m7:4=5) /若高位为5时,高位赋值为0 begin m7:4=0;end else m7:4=m7:4+1; /若高位不为5低位为9时,高位加1 end else m3:0=m3:0+1; /若高位不为5低位不为9时,低位加1 end endendassign cp60m=(m6&m4&m3&m0);endmodule3、 报时的程序:module baoshi(m6,m4,m3,m0,s6,s4,s3,s0,dy,gy,bshi);input m6,m4,m3,m0,s6,s4,s3,s0,dy,gy;output bshi;wire bm;reg bshi;assign bm=

18、m6&m4&m3&m3&m0&s6&s4&s0;always(bm or s3 or dy or gy) begin if(bm&s3) bshi=gy; else if(bm) bshi=dy; else bshi=0; endendmodule4、 校时的程序: module jiaoshi(cpm,cph,cps,cp60m,cp60s,swm,swh);output cpm,cph;input swm,swh;input cps,cp60s,cp60m;reg cpm,cph;always(swm or swh or cps or cp60s or cp60m) begin case(

19、swm,swh) 2b10:begin cpm=cps;cph=cp60m;end /校分 2b01:begin cpm=cp60s;cph=cps;end /校时 default:begin cpm=cp60s;cph=cp60m;end endcase endendmodule5、 时段控制的程序:module ludeng(h,sk);input 7:0h;output sk;reg sk;always(h) begin if(h=17) sk=1; else sk=0; endendmodule 三、运行程序步骤与实验一的步骤基本相同,可参照实验一的步骤。4、 仿真结果截图24进制,当

20、高位为2低位为3时,下一时刻,高低位都被赋值为零;60进制,当高位为5低位为9时,下一时刻,高低位都被赋值为零;校时校分,swm(sw1)为校分,swh(sw2)为校时;整点报时,在每一小时的最后5秒报时,这里用高频闪烁来代替;时段控制,在6:00到18:00灯灭,在18:00到第二天6:00灯亮。五、封装在quartusii11.0中点击fileopen project,在弹出的对话框中选择文件,单击右键选择creat symbol file for current file 24进制模块 分钟60进制模块 秒60进制模块 报时模块 校时模块 时段控制模块六、试验箱下载 所用的硬件与实验一是

21、同一个板子,步骤可参考实验一的步骤。 封装图连接如下:七、硬件部分照片截图将ncr(sw3)置1,开始计时,当s(sw5)置1时为高频,swm(sw1)为校分,swh(sw2)为校时,上图为早上5点59分59秒时,绿灯亮;早上,6点时,绿灯灭;到17:59:58时,绿灯是灭的,18:00时,绿灯开始亮,此为时段控制。八、心得体会 这次fpga设计中,有很多的不顺利,刚开始没有一点思路,到后来的不断出错误,不断的修改,到最后一点一点修改成功。其中学到了很多的新东西,并且更深的了解编程的方法,感到充实了自己。但是在应用在硬件上的时候,又出了许多问题,使我改正了自己在实验时的一些不准确的操作,对我在

22、以后的实验有很大的帮助。附件: 1、分频程序module div_zh(f,_500hzout,_1khzout, ncr,clock_50,s); input ncr,clock_50,s; output _500hzout,_1khzout,f; wire _1hzout,_5hzout; assign f=s?_5hzout:_1hzout; divn #(.width(26),.n(50000000) u0(.clk(clock_50), .rst_n(ncr), .o_clk(_1hzout) ); divn #(.width(17),.n(100000) u1(.clk(clock

23、_50), .rst_n(ncr), .o_clk(_500hzout) ); divn #(.width(16),.n(50000) u2(.clk(clock_50), .rst_n(ncr), .o_clk(_1khzout) ); divn #(.width(24),.n(10000000) u3(.clk(clock_50), .rst_n(ncr), .o_clk(_5hzout) ); endmodulemodule divn(o_clk,clk,rst_n); input clk,rst_n; output o_clk; parameter width=3; parameter

24、 n=6; reg width-1:0 cnt_p; reg width-1:0 cnt_n; reg clk_p; reg clk_n; assign o_clk=(n=1)? clk:(n0?(clk_p|clk_n):clk_p); always (posedge clk or negedge rst_n) begin if(!rst_n) cnt_p=0; else if(cnt_p=n-1) cnt_p=0; else cnt_p=cnt_p+1; end always (posedge clk or negedge rst_n) begin if(!rst_n) clk_p=0;

25、else if(cnt_p1) clk_p=1; else clk_p=0; end always (negedge clk or negedge rst_n) begin if(!rst_n) cnt_n=0; else if(cnt_n=n-1) cnt_n=0; else cnt_n=cnt_n+1; end always (negedge clk or negedge rst_n) begin if(!rst_n) clk_n=0; else if(cnt_n1) clk_n=1; else clk_n=0; end endmodule 2、译码程序module decode4_7 (

26、 input 3:0 indec_0,indec_1,indec_2,indec_3,indec_4,indec_5,indec_6,indec_7, output reg 6:0 dout_0,dout_1,dout_2,dout_3,dout_4,dout_5,dout_6,dout_7);always(indec_0 or indec_1 or indec_2 or indec_3 or indec_4 or indec_5 or indec_6 or indec_7 ) begin case(indec_0) 4h1: dout_0 = 7b111_1001; / -0- 4h2: d

27、out_0 = 7b010_0100; / | | 4h3: dout_0 = 7b011_0000; / 5 1 4h4: dout_0 = 7b001_1001; / | | 4h5: dout_0 = 7b001_0010; / -6- 4h6: dout_0 = 7b000_0010; / | | 4h7: dout_0 = 7b111_1000; / 4 2 4h8: dout_0 = 7b000_0000; / | | 4h9: dout_0 = 7b001_1000; / -3- 4ha: dout_0 = 7b000_1000; 4hb: dout_0 = 7b000_0011

28、; 4hc: dout_0 = 7b100_0110; 4hd: dout_0 = 7b010_0001; 4he: dout_0 = 7b000_0110; 4hf: dout_0 = 7b000_1110; 4h0: dout_0 = 7b100_0000; endcase case(indec_1) 4h1: dout_1 = 7b111_1001; / -0- 4h2: dout_1 = 7b010_0100; / | | 4h3: dout_1 = 7b011_0000; / 5 1 4h4: dout_1 = 7b001_1001; / | | 4h5: dout_1 = 7b00

29、1_0010; / -6- 4h6: dout_1 = 7b000_0010; / | | 4h7: dout_1 = 7b111_1000; / 4 2 4h8: dout_1 = 7b000_0000; / | | 4h9: dout_1 = 7b001_1000; / -3- 4ha: dout_1 = 7b000_1000; 4hb: dout_1 = 7b000_0011; 4hc: dout_1 = 7b100_0110; 4hd: dout_1 = 7b010_0001; 4he: dout_1 = 7b000_0110; 4hf: dout_1 = 7b000_1110; 4h

30、0: dout_1 = 7b100_0000; endcase case(indec_2) 4h1: dout_2 = 7b111_1001; / -0- 4h2: dout_2 = 7b010_0100; / | | 4h3: dout_2 = 7b011_0000; / 5 1 4h4: dout_2 = 7b001_1001; / | | 4h5: dout_2 = 7b001_0010; / -6- 4h6: dout_2 = 7b000_0010; / | | 4h7: dout_2 = 7b111_1000; / 4 2 4h8: dout_2 = 7b000_0000; / |

31、| 4h9: dout_2 = 7b001_1000; / -3- 4ha: dout_2 = 7b000_1000; 4hb: dout_2 = 7b000_0011; 4hc: dout_2 = 7b100_0110; 4hd: dout_2 = 7b010_0001; 4he: dout_2 = 7b000_0110; 4hf: dout_2 = 7b000_1110; 4h0: dout_2 = 7b100_0000; endcase case(indec_3) 4h1: dout_3 = 7b111_1001; / -0- 4h2: dout_3 = 7b010_0100; / |

32、| 4h3: dout_3 = 7b011_0000; / 5 1 4h4: dout_3 = 7b001_1001; / | | 4h5: dout_3 = 7b001_0010; / -6- 4h6: dout_3 = 7b000_0010; / | | 4h7: dout_3 = 7b111_1000; / 4 2 4h8: dout_3 = 7b000_0000; / | | 4h9: dout_3 = 7b001_1000; / -3- 4ha: dout_3 = 7b000_1000; 4hb: dout_3 = 7b000_0011; 4hc: dout_3 = 7b100_01

33、10; 4hd: dout_3 = 7b010_0001; 4he: dout_3 = 7b000_0110; 4hf: dout_3 = 7b000_1110; 4h0: dout_3 = 7b100_0000; endcase case(indec_4) 4h1: dout_4 = 7b111_1001; / -0- 4h2: dout_4 = 7b010_0100; / | | 4h3: dout_4 = 7b011_0000; / 5 1 4h4: dout_4 = 7b001_1001; / | | 4h5: dout_4 = 7b001_0010; / -6- 4h6: dout_

34、4 = 7b000_0010; / | | 4h7: dout_4 = 7b111_1000; / 4 2 4h8: dout_4 = 7b000_0000; / | | 4h9: dout_4 = 7b001_1000; / -3- 4ha: dout_4 = 7b000_1000; 4hb: dout_4 = 7b000_0011; 4hc: dout_4 = 7b100_0110; 4hd: dout_4 = 7b010_0001; 4he: dout_4 = 7b000_0110; 4hf: dout_4 = 7b000_1110; 4h0: dout_4 = 7b100_0000;

35、endcase case(indec_5) 4h1: dout_5 = 7b111_1001; / -0- 4h2: dout_5 = 7b010_0100; / | | 4h3: dout_5 = 7b011_0000; / 5 1 4h4: dout_5 = 7b001_1001; / | | 4h5: dout_5 = 7b001_0010; / -6- 4h6: dout_5 = 7b000_0010; / | | 4h7: dout_5 = 7b111_1000; / 4 2 4h8: dout_5 = 7b000_0000; / | | 4h9: dout_5 = 7b001_10

36、00; / -3- 4ha: dout_5 = 7b000_1000; 4hb: dout_5 = 7b000_0011; 4hc: dout_5 = 7b100_0110; 4hd: dout_5 = 7b010_0001; 4he: dout_5 = 7b000_0110; 4hf: dout_5 = 7b000_1110; 4h0: dout_5 = 7b100_0000; endcase case(indec_6) 4h1: dout_6 = 7b111_1001; / -0- 4h2: dout_6 = 7b010_0100; / | | 4h3: dout_6 = 7b011_00

37、00; / 5 1 4h4: dout_6 = 7b001_1001; / | | 4h5: dout_6 = 7b001_0010; / -6- 4h6: dout_6 = 7b000_0010; / | | 4h7: dout_6 = 7b111_1000; / 4 2 4h8: dout_6 = 7b000_0000; / | | 4h9: dout_6 = 7b001_1000; / -3- 4ha: dout_6 = 7b000_1000; 4hb: dout_6 = 7b000_0011; 4hc: dout_6 = 7b100_0110; 4hd: dout_6 = 7b010_

38、0001; 4he: dout_6 = 7b000_0110; 4hf: dout_6 = 7b000_1110; 4h0: dout_6 = 7b100_0000; endcase case(indec_7) 4h1: dout_7 = 7b111_1001; / -0- 4h2: dout_7 = 7b010_0100; / | | 4h3: dout_7 = 7b011_0000; / 5 1 4h4: dout_7 = 7b001_1001; / | | 4h5: dout_7 = 7b001_0010; / -6- 4h6: dout_7 = 7b000_0010; / | | 4h

39、7: dout_7 = 7b111_1000; / 4 2 4h8: dout_7 = 7b000_0000; / | | 4h9: dout_7 = 7b001_1000; / -3- 4ha: dout_7 = 7b000_1000; 4hb: dout_7 = 7b000_0011; 4hc: dout_7 = 7b100_0110; 4hd: dout_7 = 7b010_0001; 4he: dout_7 = 7b000_0110; 4hf: dout_7 = 7b000_1110; 4h0: dout_7 = 7b100_0000; endcase endendmodule3、管脚

40、分配图:hex06outputpin_h226b6_n02.5 vhex05outputpin_j226b6_n02.5 vhex04outputpin_l256b6_n12.5 vhex03outputpin_l266b6_n12.5 vhex02outputpin_e177b7_n22.5 vhex01outputpin_f227b7_n02.5 vhex00outputpin_g187b7_n22.5 vhex16outputpin_u245b5_n02.5 vhex15outputpin_u235b5_n12.5 vhex14outputpin_w255b5_n12.5 vhex13o

41、utputpin_w225b5_n02.5 vhex12outputpin_w215b5_n12.5 vhex11outputpin_y225b5_n02.5 vhex10outputpin_m246b6_n22.5 vhex26outputpin_w285b5_n12.5 vhex25outputpin_w275b5_n12.5 vhex24outputpin_y265b5_n12.5 vhex23outputpin_w265b5_n12.5 vhex22outputpin_y255b5_n12.5 vhex21outputpin_aa265b5_n12.5 vhex20outputpin_

42、aa255b5_n12.5 vhex36outputpin_y194b4_n03.3-v lvttlhex35outputpin_af234b4_n03.3-v lvttlhex34outputpin_ad244b4_n03.3-v lvttlhex33outputpin_aa214b4_n03.3-v lvttlhex32outputpin_ab204b4_n03.3-v lvttlhex31outputpin_u215b5_n02.5 vhex30outputpin_v215b5_n12.5 vhex46outputpin_ae184b4_n23.3-v lvttlhex45outputp

43、in_af194b4_n13.3-v lvttlhex44outputpin_ae194b4_n13.3-v lvttlhex43outputpin_ah214b4_n23.3-v lvttlhex42outputpin_ag214b4_n23.3-v lvttlhex41outputpin_aa194b4_n03.3-v lvttlhex40outputpin_ab194b4_n03.3-v lvttlhex56outputpin_ah184b4_n23.3-v lvttlhex55outputpin_af184b4_n13.3-v lvttlhex54outputpin_ag194b4_n23.3-v lvttlhex53o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论