FPGA基础实验

上传人:工**** 文档编号:574048165 上传时间:2024-08-15 格式:PDF 页数:31 大小:953.35KB
返回 下载 相关 举报
FPGA基础实验_第1页
第1页 / 共31页
FPGA基础实验_第2页
第2页 / 共31页
FPGA基础实验_第3页
第3页 / 共31页
FPGA基础实验_第4页
第4页 / 共31页
FPGA基础实验_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《FPGA基础实验》由会员分享,可在线阅读,更多相关《FPGA基础实验(31页珍藏版)》请在金锄头文库上搜索。

1、 第 1 页 共 1 页 电子科技大学成都学院 实验报告册 课程名称: FPGA 基础实验 姓 名: X X 学 号: 1240720133 院 系: 微电子技术系 专 业: 电子科学与技术 指导教师: 李 海 2014 年 12 月 28 日 第 2 页 共 2 页 实验一:奇数分频 一、实验目的: 掌握用 Verilog HDL语言实现奇数分频。 二、实验原理和内容: 原理:采用了两个计数器,一个由输入时钟上升沿触发,另一个由输入时钟下降沿触发,两个分频器的输出信号正好有半个时钟周期的相位差,最后将两个计数器的输出相或,即得占空比为 50%的方波信号。 内容:编写奇数分频模块,实现对输入时

2、钟信号的 17 分频,同时占空比为50%的方波信号。 三、实验步骤: 1 、启动 QuartusII建立一个空白工程,然后命令为 F_div17.qpf 2、 新建 Verilog HDL源程序文件 F_div17.v, 输入程序代码并保存 (完整的 Verilog HDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。 3、新建文件对话框 Vector Wareform file,单击 ok 关闭建立一个空的波形编辑器窗口,并改名为 F_div17.vwf保存。在所示 Name选项卡内双击鼠标左键,弹出一对话框,选择 Node Finder按

3、钮,再次弹出了一对话框,选择 list添加所有引脚, 再单击 ok, 然后编辑输入节点波形, 最后再 Quartus主界面下选择 Tools-Simulator Tool命令,弹出一对话窗, 第一步:在 Simulation input选择仿真文件 F_div17.vwf 第二步:在 Simulation mode选择 Functional 第三步:点击 Generate Functional Simulation Netlist生成仿真网表 第四步:点击左下角的 Start开始仿真,结束后再点击 Open打开仿真后的波形文件。 4、检查是否正确,若错误,则修改程序,直到达到要求。 四、实验数

4、据和结果: module F_div17(clk,reset,out,cout1,cout2); input clk,reset; output out,cout1,cout2; reg cout1,cout2; reg4:0 m,n; wire out; assign out = cout1|cout2; always (posedge clk) begin if(!reset) begin cout1=0;m=0;end 第 3 页 共 3 页 else if(m=5d16) begin m=m+1; if(m=5d7) begin cout1=cout1;end else if(m=5d

5、15) begin m=0;cout1=cout1;end end end always (negedge clk) begin if(!reset) begin cout2=0;n=0;end else if(n=5d16) begin n=n+1; if(n=5d7) begin cout2=cout2;end else if(n=5d15) begin n=0;cout2=cout2;end end end endmodule 波形仿真结果为: 五、实验总结: 进过波形仿真的验证可知,程序实现了对输入信号的 17 分频,且其占空比为 50%。该程序只要稍加改动就可以实现任意奇数的分频。

6、第 4 页 共 4 页 实验二:基于状态机的花样流水灯 一、实验目的: 通过此实验让我们进一步了解熟悉 FPGA开发软件的使用方法及 Verilog HDL 的编程方法;学习简单时序电路和硬件测试。 二、实验原理和内容: 利用状态机让 LED灯实现流水灯的花样显示: 从左向右的流水灯显示从右向左的流水灯显示、从两边向中间的流水灯、从 中间向两边的流水灯。 三、实验步骤: (1 )启动 QuartusII建立空白工程,然后命名为 led_water.qpf。 (2 )新建 Verilog HDL源程序文件 led_water.v,输入程序代码并保存(源程序参考实验内容),进行综合编译,若在编译过

7、程中发现错误,则找出并更正错误,直至编译成功为止。 (3 ) FPGA引脚分配,在 Quartus II 主界面下,选择 AssignmentsPins,按照实验课本附录进行相应的引脚分配,引脚分配好以后保存。 (4 )对该工程文件进行最后的编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 (5 )新建图形文件命名为 led_water.bdf并保存,在空白处双击鼠标左键后分别将 project下的 led_water和 int_div模块放入图形文件led_water.bdf中,加输入,输出引脚并命名。 (6 )打开试验箱的电源开关, 执行下载命令, 把程序下载到 FPGA

8、试验箱中,观察流水灯的变化。 四、实验数据和结果: module led_water (clock,led,state); input clock; 第 5 页 共 5 页 output7:0 led; output1:0 state; reg7:0 led=8b11111111; reg31:0 count; reg1:0 state; reg clk_out; always (posedge clock) begin count=count+1; if(count=32d24000000) begin count=0; clk_out=clk_out; end end always (po

9、sedge clk_out) begin case(state) 2d0:begin led=led1; if(led=8b00000000) begin led=8b11111111; state=2d1; end end 2d1:begin led1; if(led=8b00000000) begin led=8b11111111; state=2d2; end end 2d2:begin led7:4=led7:41; led3:01; if(led=8b00000000) begin led=8b11111111; state=2d3; end end 第 6 页 共 6 页 2d3:

10、begin led7:41; led3:0=led3:01; if(led=8b00000000) begin led=8b11111111; state=2d0;end end endcase end endmodule 结果:LED灯先从左依次亮,最后一盏 led亮完后全亮,再从右依次亮最后一盏led亮完后全亮,在从两边往中间亮最后全亮,再从中间向两边亮最后再全亮,如此循环显示。 六、实验总结: 选择器件后,比较有利的做法是先编译顶层文件,后分配引脚,因为编译之后,软件会自动将所有输入, 输出引脚记录下来, 不需要重新输入各个引脚的信号名。 可以通过修改 hyledwater.v里的代码,

11、改变 LED灯的显示方式,通过修改int_div.v里的分频系数,可改变LED灯的显示频率。 第 7 页 共 7 页 实验三:静态数码管显示 一、实验目的 学习 7段数码管显示译码器的设计,进一步了解、熟悉和掌握 FPGA开发软件QuartusII的使用方法及 Verilog HDL的编程方法, 学习 LPM兆功能模块的调用。 二、实验原理和内容 原理: 实验箱上有8 个位码DIG0DIG7 和 8 个段码 SEG0SEG7 分别与 FPGA相应的引脚相连。只要 DIG0DIG7 上一直输出低电平“0”,则 8 个数码管将显示相同的数码(因为8 个 LED 数码管的段码线分别接到了同一引脚上)

12、,这样8 位动态 LED 数码管就变成了静态 LED。 内容:建立 7 段译码显示模块,用于控制 LED 数码管的静态显示。要求在SmartSOPC实验箱上的数码管依次显示 09 和 AF16 个字符。 三、实验步骤 1、启动 QuartusII 建立一个空白工程,然后命令为 dec17s.qpf 2、新建 Verilog HDL 源程序文件 decl7s.v,输入程序代码并保存(完整的 Verilog HDL 程序参考程序清单 3.4),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。 3、选择目标器件并对相应的引脚进行锁定,将未使用的引脚设置为三态。 信号 引

13、脚 信号 引脚 seg0 169 dig1 159 seg1 170 dig2 162 seg2 167 dig3 161 seg3 168 dig4 215 seg4 165 dig5 216 seg5 166 dig6 213 seg6 163 dig7 214 seg7 164 clock 28 dig0 160 4、将 dec17s.bdf 设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 5、连接硬件,下载程序。 四、实验数据和结果: 第 8 页 共 8 页 module dec17s(clock,seg,dig); inpu

14、t clock; output7:0dig; output7:0seg; reg7:0seg; reg7:0 dig=8h00; reg clk_out; reg31:0count; reg3:0d=0; always (posedge clock ) begin count=count+1; if(count=32d24000000) clk_out=clk_out; if(count=32d48000000) begin clk_out=clk_out;count=0;end end always (posedge clk_out) begin d=d+1; if(d=4hf) begin

15、 d=0 ;end end always (d) begin case(d) 4h0:seg=8hc0; 4h1:seg=8hf9; 4h2:seg=8ha4; 4h3:seg=8hb0; 4h4:seg=8h99; 4h5:seg=8h92; 4h6:seg=8h82; 4h7:seg=8hf8; 4h8:seg=8h80; 4h9:seg=8h90; 4ha:seg=8h88; 4hb:seg=8h83; 4hc:seg=8hc6; 4hd:seg=8ha1; 第 9 页 共 9 页 4he:seg=8h86; 4hf:seg=8h8e; endcase end endmodule 五、实

16、验总结: 由于 LED静态显示需要占用较多的 I/O口, 且功耗较大, 因此在大多数场合通常不采用静态显示,而采用动态扫描的方法来控制LED数码管的显示 第 10 页 共 10 页 实验四:数码管显示学号后 8 位 一、 实验目的: 学习动态扫描显示的原理及电路的设计。实验原理和内容: 二、 实验内容: 内容:是建立数码管动态扫描显示模块,具体的内容: A、在 SmartSOPC实验箱上完成 LED数码管的动态显示“40720133”这 八个数字。 B、放慢扫描速度演示动态显示的原理过程。 原理:在 SmartSOPC实验箱上有八个数码管,其中每个数码管的 8 个段:a 、b 、c 、d 、e

17、 、f 、g 、h (h 是小数点)都分别连到 seg0seg7,8 个数码管分别由8 个选通信号 dig0dig7来选择。被选通的数码管显示数据,其余的关闭。根据这种电路状态,8个数码管全都显示想要的数据,就必须使得 8个选通信号dig0dig7分别单独选通,同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。虽然每次只有一个 LED显示,但是只要扫描显示速度够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。 三、 实验步骤: 1 、启动 QuartusII建立一个空白工程,然后命令为 dled.qpf 2 、 新建 Ver

18、ilog HDL源程序文件 dled.v, 输入程序代码并保存 (完整的 Verilog HDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。 3 、新建图形设计文件名为 dled.bdf并保存。 4 、选择目标器件并对相应的引脚进行锁定,将未使用的引脚设置为三态。 信号 引脚 信号 引脚 seg0 169 dig1 159 seg1 170 dig2 162 seg2 167 dig3 161 seg3 168 dig4 215 seg4 165 dig5 216 seg5 166 dig6 213 seg6 163 dig7 214 se

19、g7 164 clock 28 dig0 160 5 、对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 第 11 页 共 11 页 6 、添加常亮兆功能模块。 (4 )连接硬件,下载程序。 (5 )观察数码管上的数字是否为“40720133” 。 四、实验数据和结果: module dled(clk_1k,d,dig,seg); input clk_1k; input31:0 d; output7:0 dig; output7:0 seg; reg7:0 seg_r; reg7:0 dig_r; reg3:0 disp_dat; reg31:0 co

20、unt; reg clk_out; reg2:0 count1; reg31:0 d=32h40720133; assign dig=dig_r; assign seg=seg_r; always (posedge clk_1k) begin count=count+1; if(count=32d24000) clk_out=clk_out; if(count=32d48000) begin clk_out=clk_out;count=0;end end always (posedge clk_out) begin case(count1) 3d0:disp_dat = d31:28; 3d1

21、:disp_dat = d27:24; 3d2:disp_dat = d23:20; 3d3:disp_dat = d19:16; 3d4:disp_dat = d15:12; 3d5:disp_dat = d11:8; 3d6:disp_dat = d7:4; 3d7:disp_dat = d3:0; endcase case(count1) 3d0:dig_r=8b01111111; 3d1:dig_r=8b10111111; 第 12 页 共 12 页 3d2:dig_r=8b11011111; 3d3:dig_r=8b11101111; 3d4:dig_r=8b11110111; 3d

22、5:dig_r=8b11111011; 3d6:dig_r=8b11111101; 3d7:dig_r=8b11111110; endcase end always (disp_dat) begin case(disp_dat) 4h0:seg=8hc0; 4h1:seg=8hf9; 4h2:seg=8ha4; 4h3:seg=8hb0; 4h4:seg=8h99; 4h5:seg=8h92; 4h6:seg=8h82; 4h7:seg=8hf8; 4h8:seg=8h80; 4h9:seg=8h90; 4ha:seg=8h88; 4hb:seg=8h83; 4hc:seg=8hc6; 4hd

23、:seg=8ha1; 4he:seg=8h86; 4hf:seg=8h8e; endcase end endmodule 显示:(用肉眼看)同时显示为:40720133 五、实验总结: 动态扫描显示时刷新率最好大于 50Hz,即每显示一轮的时间不超过 20ms。每 个数码管显示的时间不能太长也不能太短,时间太长会影响刷新率,导致总体显示呈现闪烁的现象;时间太短发光二极管的电流导通时间也会就短,会影响总体的显示亮度。一般控制在 1ms左右最佳。 第 13 页 共 13 页 实验五:秒表 一、实验目的: 学习 Verilog语言设计及数字电路模块设计 二、实验原理和内容: 内容:在 SmartSO

24、PC试验箱上完成一个可以计时的数字时钟,其显示时间范围是 00:00:0000:00:59,且该时钟具有自加计时和清零等功能。 原理:这个完整的秒表只有一个分频秒脉冲发生电路。一个秒表的准确与否主要取决秒脉冲的精确度。我们对 48MHz进行 48000分频,从而得到 1秒的秒脉冲。显示部分与 LED数码管原理相同。 三、实验步骤: (1 ) 在 QuartusII中建立一个工程项目文件 clk_led.qpf,并在该项目下新建Verilog HDL源程序文件clk_led.v输入程序代码并保存。 (2 ) 选择目标器件并对相应的引脚进行锁定, 将未使用的引脚设置为三态输入。 (3 ) 对该工程

25、文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 (4 ) 连接硬件,下载程序。 四、实验数据和结果: 信号 引脚 信号 引脚 seg0 169 dig1 159 seg1 170 dig2 162 seg2 167 dig3 161 seg3 168 dig4 215 seg4 165 dig5 216 seg5 166 dig6 213 seg6 163 dig7 214 seg7 164 clock 28 dig0 160 第 14 页 共 14 页 module clk_led(clk,dig,seg); input clk; output7:0 di

26、g; output7:0 seg; reg7:0 seg; reg7:0 dig; reg3:0 disp_dat; reg clk_out1; reg7:0 out; reg clk_out2; reg a; reg15:0 count1; reg31:0 count2; always (posedge clk) begin count1=count1+1; if(count1=32d24000) begin clk_out1=clk_out1; count1=0; end end always (posedge clk) begin count2=count2+1; if(count2=3

27、2d24000000) begin clk_out2=clk_out2; count2=0; end end always (posedge clk_out1) begin a=a; end always (posedge clk_out2) begin out3:0=out3:0+1; if(out3:0=4h9) begin 第 15 页 共 15 页 out7:4=out7:4+1; out3:0=0; end if (out3:0=4h9&out7:4=4h5) begin out7:4=0; out3:0=0; end end always (posedge clk_out1) be

28、gin case(a) 1d0:disp_dat=out3:0; 1d1:disp_dat=out7:4; endcase case(a) 1d0:dig=8b11111110; 1d1:dig=8b11111101; endcase end always ( disp_dat) begin case(disp_dat) 4h0:seg = 8hc0; 4h1:seg = 8hf9; 4h2:seg = 8ha4; 4h3:seg = 8hb0; 4h4:seg = 8h99; 4h5:seg = 8h92; 4h6:seg = 8h82; 4h7:seg = 8hf8; 4h8:seg =

29、8h80; 4h9:seg = 8h90; endcase end endmodule 第 16 页 共 16 页 五、 实验总结: 在这个实验中我们通过分频产生秒信号,利用数码管动态扫描显示后两位数码管,然后进行及时处理,计时到59 后清零再计时。 第 17 页 共 17 页 实验六:多功能数字时钟 一、 实验目的: 学习数字时钟的硬件设计。 二、 实验原理和内容: 内容:在 SmartSOPC试验箱上完成一个可以计时的数字时钟,其显示时间范围是 00:00:0023:59:59,且该时钟具有暂停计时和清零等功能。 原理:一个完整的时钟由 3 部分组成:秒脉冲发生电路、计数显示部分和时钟调整

30、部分。一个时钟的准确与否主要取决秒脉冲的精确度。我们对48MHz进行 48000000分频,从而得到1Hz的秒脉冲。显示部分与LED数码管原理相同。 三、 实验步骤: (5 ) 在 QuartusII中建立一个工程项目文件 clock.qpf,并在该项目下新建 Verilog HDL源程序文件 clock.v输入程序代码并保存。 (6 ) 选择目标器件并对相应的引脚进行锁定, 将未使用的引脚设置为三态输入。 (7 ) 对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 (8 ) 连接硬件,下载程序。 四、实验数据和结果: module clock(clk

31、,dig,seg,key); input clk; input1:0 key; output7:0 dig; output7:0 seg; reg7:0 seg; reg7:0 dig; 信号 引脚 信号 引脚 seg0 169 dig1 159 seg1 170 dig2 162 seg2 167 dig3 161 seg3 168 dig4 215 seg4 165 dig5 216 seg5 166 dig6 213 seg6 163 dig7 214 seg7 164 clock 28 dig0 160 第 18 页 共 18 页 reg3:0 disp_dat; reg clk_ou

32、t1; reg23:0hour; reg clk_out2; reg clk_out3; reg keyen; reg1:0 dout1,dout2,dout3; wire1:0 key_done; reg2:0 a; reg31:0 count3; reg31:0 count1; reg31:0 count2; always (posedge clk) begin count1=count1+1; if(count1=31d24000000) begin clk_out1=clk_out1; count1=0; end end always (posedge clk) begin count

33、2=count2+1; if(count2=31d24000) begin clk_out2=clk_out2; count2=0; end end always (posedge clk) begin count3=count3+1; if(count3=31d120000) begin clk_out3=clk_out3; count3=0; end end assign key_done= (dout1|dout2|dout3); always (posedge clk_out3) 第 19 页 共 19 页 begin dout1=key; dout2=dout1; dout3=dou

34、t2; end always (negedge key_done0) begin keyen=keyen; end always (posedge clk_out2) begin if(a=3d7) begin a=3d0; end else a=a+1d1; end always (posedge clk_out2) begin case(a) 3d0:disp_dat=hour3:0; 3d1:disp_dat=hour7:4; 3d2:disp_dat=4ha; 3d3:disp_dat=hour11:8; 3d4:disp_dat=hour15:12; 3d5:disp_dat=4ha

35、; 3d6:disp_dat=hour19:16; 3d7:disp_dat=hour23:20; endcase case(a) 3d0:dig=8b11111110; 3d1:dig=8b11111101; 3d2:dig=8b11111011; 3d3:dig=8b11110111; 3d4:dig=8b11101111; 3d5:dig=8b11011111; 3d6:dig=8b10111111; 3d7:dig=8b01111111; endcase end 第 20 页 共 20 页 always (disp_dat) begin case(disp_dat) 4h0:seg =

36、 8hc0; 4h1:seg = 8hf9; 4h2:seg = 8ha4; 4h3:seg = 8hb0; 4h4:seg = 8h99; 4h5:seg = 8h92; 4h6:seg = 8h82; 4h7:seg = 8hf8; 4h8:seg = 8h80; 4h9:seg = 8h90; 4ha:seg = 8hbf; default:seg = 8hbf; endcase /if(a=3d3)&clk_out2) / seg=8hff; end always (negedge clk_out1 or negedge key_done1) begin if(!key_done1)

37、begin hour=24h0; end else if(!keyen) begin hour3:0=hour3:0+1; if(hour3:0=4h9) begin hour7:4=hour7:4+1; hour3:0=0; if(hour7:4=4h5) begin hour7:4=0;hour3:0=0; hour11:8=hour11:8+1; if(hour11:8=4h9) begin hour15:12=hour15:12+1; hour11:8=0; if (hour15:12=4h5) begin 第 21 页 共 21 页 hour15:12=0;hour11:8=0; h

38、our19:16=hour19:16+1; if(hour19:16=4h4) begin hour23:20=hour23:20+1; hour19:16=0;end if(hour19:16=4h4&hour23:20=4h2) begin hour23:20=0; hour19:16=0;end end end end end end end endmodule 五、实验总结: 通过该实验,我们对系统时钟 48MHz进行三次分频,从而得到 1 秒、1 微秒、5微秒的脉冲。至于显示部分与 LED数码管原理相同,而对于校时电路用户可以自由发挥,如定义 2 个键暂停和清零。 第 22 页 共

39、22 页 实验七: 状态机序列检测器(10001) 一、实验目的: 利用有限状态机实现一般时序逻辑分析的方法,了解一般状态机的设计和应用。 二、实验原理和内容: 设计一序列检测器并在 SmartSOPC 实验箱上进行硬件测试。 利用 Quartus软件进行设计、仿真验证,最后进行引脚锁定并完成硬件测试。 实验原理: 序列检测器可用于检测由二进制码组成的脉冲序列信号。当序列检测器连续收到进制码后,如果这组序列码与检测器中预先设置的序列码相同,则输出 1,否则输出 0。 三、状态转化图 第 23 页 共 23 页 四、实验步骤: (1) 启动 Quartus建立一个空白工程,并命名为 fsm.qp

40、f。 (2)新建 Verilog HDL 源程序文件 fsm.v,输入程序代码并保存, 进行综合编译直到完全通过为止 (3)仿真:在 Quartus II 主界面中选择 FileNew 命令,打开新建文件对话框,选择 Vector Wareform File,建立一个空的波形编辑窗口并保存位默认名。 (4)在空的波形编辑窗口中进行节点的添加,并对加入的节点进行编辑,编辑后保存。 (5)在 Quartus II 主界面下选择 ToolsSimulator Tool 命令进行波形仿真。 (6)验证仿真结果是否与设计相符合,如果不符合,需要重新设计文件,再进行综合编译、仿真,直到仿真结果与设计相符合

41、为止。 五、实验数据和结果: module fsm(clk,in,cout); input clk,in; output cout; reg cout; reg2:0 state; always (posedge clk) begin case(state) 3d0:begin if(in=1b1)begin state=3d1;cout=1b0;end else begin state=3d0;cout=1b0;end end 3d1:begin if(in=1b0)begin state=3d2;cout=1b0;end else begin state=3d1;cout=1b0;end

42、end 3d2:begin if(in=1b0)begin state=3d3;cout=1b0;end else begin state=3d1;cout=1b0;end end 3d3:begin if(in=1b0)begin state=3d4;cout=1b0;end else begin state=3d1;cout=1b0;end end 3d4:begin if(in=1b1)begin state=3d5;cout=1b1;end else begin state=3d0;cout=1b0;end end 3d5:begin if(in=1b1)begin state=3d1

43、;cout=1b0;end else begin state=3d2;cout=1b0;end end 第 24 页 共 24 页 endcase end endmodule 六、实验总结: 通过状态机的实验,成功的显示了 10001,并且掌握了状态图推算方法和画状态图的方法。 第 25 页 共 25 页 实验八:模拟带倒计时的交通灯 一、实验目的 熟练掌握 EDA 软件 quartus 2 的应用环境,加强利用 verilog 语言解决生活中实际问题的能力。 二、实验原理和内容 利用软件quartus 2进行编写程序实现十字路口交通灯控制器,达到 A 方向和 B 方向红、黄、绿三盏灯按合理的

44、顺序亮或灭,并能将灯亮的时间用倒计时的形式显示在数码管上,最后通过软件自带的工具将交通灯控制器的门级电路和 RTL 级电路自动生成。 三、实验步骤 1:首先分析交通灯的原理,整理出所需要的模块,设定每个灯的亮灯时间。 2:运行 quartus 2 软件、新建工程,然后新建 verilog HDL 文件,利用 verilog 语言编写程序实现 A 和 B 方向的红黄绿三盏灯合理的交替亮灭,通过对应数码管显示亮灯倒计时。 3:编译程序,若有错误根据错误提示对程序进行修改,直到编译通过,然后设置 LED灯和数码管的引脚,以达到控制 A 和 B 那盏灯亮和与之相对应的数码管做倒计时,倒计时结束,亮灯状

45、态转换的效果。 4:将程序烧入 FPGA 开发板,观察开发板上的 LED 和数码管显示状况,看是否达到实验目的,若达到则记录实验结果并整理,反之继续修改,直到达到预期效果为止。 5:关闭电源,拆除实验器材。 四、实验数据 A 方向红灯 40s,黄灯 10s,绿灯 30s B 方向红灯 40s,黄灯 10s,绿灯 30s 第 26 页 共 26 页 五、实验代码 module traffic(clk,en,seg,dig,lampa,lampb); input clk;/时钟信号,50Mhz input en;/ 使能信号,当为高电平时控制器工作,当为低电平时,进行初始化设置。 output7:

46、0 dig;/数码管位选 output7:0 seg;/数码管段选 output2:0 lampa;/A 方向灯亮的情况 output2:0 lampb;/B 方向灯亮的情况 reg clk_out1; reg clk_out2; reg15:0 count1; reg31:0 count2; reg1:0 a; reg2:0 lampa; reg2:0 lampb; reg3:0 disp_dat; reg7:0 dig; reg7:0 seg; reg7:0 ared,ayellow,agreen,bred,byellow,bgreen; reg7:0 numa,numb; reg tem

47、pa,tempb; reg1:0 counta, countb; always (posedge clk) begin count1=count1+1; if(count1=16d25000) begin clk_out1=clk_out1; count1=0; end end always (posedge clk) begin count2=count2+1; if(count2=32d25000000) 第 27 页 共 27 页 begin clk_out2=clk_out2; count2=0; end end always (en) /给各种灯亮的时间预置数,注意此处为十六进制的数

48、 begin if (!en) begin ared = 8h40; ayellow = 8h10; agreen = 8h30; bred =8h40; byellow = 8h10; bgreen = 8h30; end end always (posedge clk_out2) /控制 A 方向的四种灯的亮灭及亮的时间 begin if(en) begin if(!tempa) begin tempa = 1; case(counta) 2d0:begin numa = ared; lampa = 3b011; counta = 2d1;end 2d1:begin numa = agre

49、en; lampa = 3b110; counta = 2d2;end 2d2:begin numa = ayellow; lampa = 3b101; counta = 2d0;end endcase end else begin if(numa3:0=0) begin numa3:0 = 4d9; numa7:4 = numa7:4-1; end 第 28 页 共 28 页 else numa3:0 = numa3:0-1; if (numa = 8d2) tempa = 0; end end else begin lampa = 3b000; counta = 0; tempa = 0;

50、 end end always (posedge clk_out2) /控制 B 方向的四种灯的亮灭及亮的时间 begin if(en) begin if(!tempb) begin tempb = 1; case(countb) 2d0:begin numb = bgreen; lampb = 3b110; countb = 2d1;end 2d1:begin numb = byellow; lampb = 3b101; countb = 2d2;end 2d2:begin numb = bred; lampb = 3b011; countb = 2d0;end endcase end el

51、se begin if(numb3:0=0) begin numb3:0 = 4d9; numb7:4 = numb7:4-1; end else numb3:0 = numb3:0-1; 第 29 页 共 29 页 if (numb = 8d2) tempb = 0; end end else begin lampb = 3b000; countb = 0; tempb = 0; end end always (posedge clk_out1) begin a=a+1; end always (posedge clk_out1) begin case(a) /数码管显示什么样的数 2d0:

52、disp_dat = numa3:0; 2d1:disp_dat = numa7:4; 2d2:disp_dat = numb3:0; 2d3:disp_dat = numb7:4; endcase case(a) /数码管位选 2d0:dig = 8b10111111; 2d1:dig = 8b01111111; 2d2:dig = 8b11111110; 2d3:dig = 8b11111101; endcase end always (disp_dat) begin case(disp_dat) /数码管译码 4h0:seg = 8hc0; /显示 0 4h1:seg = 8hf9; /显示 1 第 30 页 共 30 页 4h2:seg = 8ha4; /显示 2 4h3:seg = 8hb0; /显示 3 4h4:seg = 8h99; /显示 4 4h5:seg = 8h92; /显示 5 4h6:seg = 8h82; /显示 6 4h7:seg = 8hf8; /显示 7 4h8:seg = 8h80; /显示 8 4h9:seg = 8h90; /显示 9 endcase end endmodule 交通灯 RTL 电路 第 31 页 共 31 页 交通灯门级网表

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号