EDA技术及应用实验报告(完整版纯手打)_第1页
EDA技术及应用实验报告(完整版纯手打)_第2页
EDA技术及应用实验报告(完整版纯手打)_第3页
EDA技术及应用实验报告(完整版纯手打)_第4页
EDA技术及应用实验报告(完整版纯手打)_第5页
已阅读5页,还剩23页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、 ZhenRhou Institute of Aeronautical Industry Manase-ment EDA技术及应用 实验报告 部: 指导教师: 学 号: 姓 名: 实验 点亮LED设计 一、实验目的 通过此实验让用户逐步了解、熟悉和掌握FPGA开发软件QuartusII的使用方 法及Verilog HDL的编程方法。 本实验力求以详细的步骤和讲解让读者以最快的方式了解EDA技术开发以 及软件的使用,从而快速入门并激起读者对EDA技术的兴趣。 二、实验内容 FPGA 的 50、 LED亮/灭的简 SmartsOPC实验箱上有8个发光二极管LED18,并分别与 LED1、LED3、

2、 5355、176和47-49引脚相连。本实验的内容是建立可用于控制 单硬件电路,要求点亮SmartSOPC实验箱上的4个发光二极管( LED5 和 LED7 )。 三、实验原理 /输出I/O 口(单 FPGA器件同单片机一样,为用户提供了许多灵活独立的输入 元)。FPGA每个I/O 口可以配置为输入、输出、双向I/O、集电极开路和三态门等 各种组态。作为输出口时,FPGA的I/O 口可以吸收最大为24mA的电流,可以直 接驱动发光二极管LED等器件。所以只要正确分配并锁定引脚后,在相应的引脚 上输出低电平“0”就可以实现点亮该发光二级管的功能。 四、实验步骤 1、 启动Quarters II

3、建立一个空白工程,命名为led_test.qpf。然后分别建立图形设 计文件,命名为led_test.bdf,以及文本编辑文件ledl.v,将他们都添加进工程中。 2、对工程进行设计。在ledl.v中输入程序代码,并保存,进行综合编译,若在编 译中发现错误,则找出并更正错误,直至编译成功为止。从设计文件中创建模块, 由ledl.v生成名为ledl.bsf的模块符号文件。在led_test.bdf中任意空白处双击鼠 标左键,将symbol对话框中libraries : project下的led1模块添加到图形文件 led_test.bdf中,加入输入、输出引脚,双击各管脚符号,进行管脚命名。完整

4、的 顶层模块原理图如下图所示。选择目标器件并进行引脚锁定。将未使用的管脚设 置为三态输入。 3、设置编译选项并编译硬件系统。将led_test.bdf设置为顶层实体。对该工程文件 进行全程编译处理。若在编译过程中发现错误,则找出并更正错误,直到编译成 功为止。 4、下载硬件设计到目标FPGA。将产生的led test.sof输出对FPGA进行配置。 5、观察 LED 的状态。 五、实验程序 利用连续赋值assign语句实现 II模块名led1 II定义输出端口、 II输出0 xAA module led1(led); output7:0 led; assign led =8b10101010;

5、 endmodule 利用过程赋值语句实现(暂时已屏蔽) I* II模块名led1 /定义输出端口 II定义寄存器 II过程1,无敏感变量 module led1(led); output7:0 led; reg7:0 led; always /输出 0 xAA begin led = 8b10101010; end endmudule*I 六、思考题 写出使用 QuartusII 软件开发工程的完整的流程。 实验二流水灯实验 一、实验目的 通过此实验让用户进一步了解、熟悉和掌握 CPLD/FPGA 开发软件的使用方 法及 Verilog HDL 的编程方法。学习简单时序电路的设计和硬件测试。

6、 二、实验内容 本实验的内容是建立可用于控制 LED 流水灯的简单硬件电路,要求在 SmartsOPC实验箱上实现LED1LED8发光二极管流水灯显示。 三、实验原理 1、 在LED1LED8引脚上周期性的输出流水数据,如原来输出的数据是11111100 则表示点亮LED1、LED2,流水一次后,输出的数据应该为 11111000而此时则 应点亮LED1LED3三个LED发光二极管,就可以实现LED流水灯。为了观察方 便,流水速率最好在2Hz左右。在QuicksOPC核心板上有一个48MHz的标准时 钟源,该时钟脉冲Clock与芯片的28管脚相连。为了产生2Hz的时钟脉冲,在此 调用了一个分频

7、模块(int_div模块,位于光盘中EDA_Component目录下),通过 修改分频系数来改变输出频,当分频系数为24x106时,输出即为2Hz的频率信 号。 2、Int_div 分频模块说明: int_div 模块是一个占空比为 50%的任意整数分频器。 输入时钟为clock,输出时钟为clk_out。其中F_DIV为分频系数,分频系数范围 为12八n (n=F_DIV_WIDTH),若要改变分频系数,改变参数F_DIV和 F_DIV_WIDTH到相应范围即可。在本例中输入时钟为 48MHz,要得到2Hz的信 号,所以分频系数为48x106/2=24x10%;对于分频系数为24x106的数

8、需要一个 25 位宽的计数器即可。 四、实验步骤 1 、启动 Quarters II 建立一个空白工程,命名为 led_water.qpf。 2、新建Verilog HDL源程序文件ledwater.v,输入程序代码并保存,进行综合编译, 若在编译中发现错误,则找出并更正错误,直至编译成功为止。 3、从设计文件中创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件。 4、将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。 5、新建图形设计文件命名为led_water.bdf并保存。在空白处双击鼠标左键,分别 将 sym

9、bol 对话框中 libraries:project 下的 ledwater 和 int_div 模块放在图形文件 led_water.bdf中,加入输入、输出引脚,双击各管脚符号,进行管脚命名。双击int_div 的参数框,并修改参数,将 F_DIV 的值改为 24000000, F_DIV_WIDTH 的值改为 25.完整的顶层模块原理图如下图所示。 6选择目标器件并进行引脚锁定。将未使用的管脚设置为三态输入。 7、将led_water.bdf设置为顶层实体。对该工程文件进行全程编译处理。若在编译 过程中发现错误,则找出并更正错误,直到编译成功为止。 8、将产生的led_water.sof

10、输出对FPGA进行配置。 的分频系数,并重新编译下载,观察流水灯的变化。 9、更改分频模块(int_div) /模块名 ledwater /定义LED输出口 /定义时钟输入口 /定义输出寄存器 寄存器输出 /在时钟上升沿触发进程 五、实验程序 module ledwater (led,clk); out put7:0 led; inputclk; reg8:0led_r; assig n led = led_r7:0; always (p osedge clk) begin /是,则输出左移一位 /循环完毕吗? /是,则重新赋初值 led_r = led_r 1; if(led_r = 9d0

11、) led_r = 9b111111111; end en dmodule 六、思考题 本实验顶层采用了图形输入的方式,若采用文本输入方式,如何编写 顶层文件?写出相应程序。 实验三 键盘、 LED 发光实验 一、实验目的 通过此实验让用户进一步了解、熟悉和掌握 CPLD/FPGA 开发软件的使用方 法及 Verilog HDL 的编程方法,熟悉以 Verilog HDL 文件为顶层模块的设计。学习 和体会分支条件语句case的使用方法及FPGA I/O 口的输出控制。 二、实验内容 KEY3 按下, SmartsOPC实验箱上有8个发光二极管LED18和8个按键KEY1KEY8。 本实验的内

12、容要求在 SmartsOPC实验箱上完成对8个按键KEY1KEY8进行监 控,一旦有按键输入判断其键值,并点亮相应的发光二极管,如若 则点亮 LED1LED3 发光二极管。 不过这种配 key0 为输入 使得该 I/O 三、实验原理 FPGA的所有I/O控制块允许每个I/O 口引脚单独配置为输出口, 置是系统自动完成的,一旦该 I/O 口被设置为输入口使用时(如定义 引脚:input keyO;)该I/O控制模块将直接使三态缓冲区的控制端接地, 口引脚对外呈高阻态,这样该 I/O 口引脚即可用作专用输入引脚。只要正确分配 并锁定引脚后, 一旦在 KEY1KEY8 中有按键输入, 在检测到键盘输

13、入的情况下, 继续判断其键值并做出相应的处理。 四、实验步骤 1 、启动 Quarters II 建立一个空白工程,命名为 keyled.qpf。 2、新建Verilog HDL源程序文件keyled.v,输入程序代码并保存,进行综合编译, 若在编译中发现错误,则找出并更正错误,直至编译成功为止。 3、选择目标器件并进行引脚锁定。将未使用的管脚设置为三态输入。 4、对该工程文件进行全程编译处理。若在编译过程中发现错误,则找出并更正错 误,直到编译成功为止。 /模块名 keyled /定义键盘输入口 /定义发光管输出口 /定义寄存器 5、将产生的keyled.sof输出对FPGA进行配置。按下不

14、同按键观察LED发光管的 状态。 五、实验程序 module keyled(key,led); input7:0 key; output7:0 led; reg7:0 led_r; reg7:0 buffer_r; /输出键值 /过程 1 always(key) begin buffer_r = key; case(buffer_r) 8b11111110:led_r = 8b11111110; / 是键 KEY1 , 8b11111101:led_r = 8b11111100; / 是键 KEY2 , 8b11111011:led_r = 8b11111000; / 是键 KEY3 , 8b

15、11110111:led_r = 8b11110000; / 是键 KEY4 , 8b11101111:led_r = 8b11100000; / 是键 KEY5 , 8b11011111:led_r = 8b11000000; / 是键 KEY6 , 8b10111111:led_r = 8b10000000; / 是键 KEY7 , 8b01111111:led_r = 8b00000000; / 是键 KEY8 , led_r = 8b11111111;/否则给寄存器赋值 0 xff /读取键值 则给寄存器赋值 则给寄存器赋值 则给寄存器赋值 则给寄存器赋值 则给寄存器赋值 则给寄存器赋

16、值 则给寄存器赋值 则给寄存器赋值 0 xfe 0 xfc 0 xf8 0 xf0 0 xe0 0 xc0 0 x80 0 x00 default: endcase end endmodule 六、思考题 能否用 if 语句改写本实验程序?如果能,写出相应程序。 assign led = led_r; 实验四 静态数码管显示实验 一、实验目的 学习 7段数码管显示译码器的设计,进一步了解、熟悉和掌握 FPGA 开发软 件 Quartus II 的使用方法及 Verilog HDL 的编程方法,学习 LPM 兆功能模块的调 用。 二、实验内容 SmartsOPC实验箱上有2个4位动态共阳极数码管

17、LED12和LED13。其中8 个位码DIG0DIG7和8位段码SEG0SEG7分别与FPGA相应的引脚相连。这样, 只要 DIG0DIG7 上一直输出低电平 “ 0,”则8 个数码管将显示相同的数码 (因为 8 个 LED 数码管的段码线分别接到了同一引脚上) ,这样 8位动态的 LED 数码管就 变成了静态的 LED。 本实验的内容是建立 7 段译码显示模块,用于控制 LED 数码管的静态显示。 要求在SmartSOPC实验箱上的数码管依次显示09和AF16个字符。 三、实验原理 数码管 LED 显示是工程项目中使用较广的一种输出显示器件。 常见的数码管 有共阴和共阳 2 种。共阴数码管是

18、将 8 个发光二极管的阴极连接在一起作为公共 端,而共阳数码管是将 8 个发光二极管的阳极连接在一起作为公共端。公共端常 被称作位码,而将其他的 8 位称作段码。数码管有 8 个段分别为: h、g、f、e、d、 c、b 和 a( h 为小数点),只要公共端为高电平 “1,”某个段输出低电平 “ 0则”相应的段就亮。 本实验通过分频模块int_div分频得到1Hz的频率信号,加载于4位计数器的 时钟输入端,计数循环输出0-9、AF16个数。最后通过七段译码模块译码后在 数码管上显示出来。 四、实验步骤 1、启动Quarters II建立一个空白工程,命名为 sled.qpf。 2、新建Veril

19、og HDL源程序文件decl7s.v,输入程序代码并保存,进行综合编译, 若在编译中发现错误,则找出并更正错误,直至编译成功为止。 3、从设计文件中创建模块,由decl7s.v生成名为decl7s.bsf的模块符号文件。 4、将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。 5、添加4位计数器兆功能模块。 inpu t3:0 d; out pu t7:0seg; reg7:0 seg_r; assig n seg = seg_r; /输出数码管译码结果 /七段译码 always (d) begin case(d) 4h0:seg_r = 8

20、hc0; / 显示 0 4h1:seg_r = 8hf9; / 显示 1 4h2:seg_r = 8ha4; / 显示 2 4h3:seg_r = 8hb0; / 显示 3 4h4:seg_r = 8h99; / 显示 4 4h5:seg_r = 8h92; / 显示 5 4h6:seg_r = 8h82; / 显示 6 4h7:seg_r = 8hf8; / 显示 7 4h8:seg_r = 8h80; / 显示 8 4h9:seg_r = 8h90; / 显示 9 4ha:seg_r = 8h88; / 显示 a 4hb:seg_r = 8h83; / 显示 b 4hc:seg_r = 8

21、hc6; / 显示 c 4hd:seg_r = 8ha1; / 显示 d 4he:seg_r = 8h86; / 显示 e 4hf:seg_r = 8h8e; / 显示 f endcase end endmodule 六、思考题 1.本实验采用的是共阳极数码管, 若采用共阴极数码管, 有什么不同? 2.如何显示 HHHHHHHH 和 PPPPPPPP? 实验五 动态数码管显示实验 一、实验目的 学习动态扫描显示的原理及电路的设计。 二、实验内容 本实验的内容是建立数码管动态扫描显示模块,具体内容如下: 1、在SmartsOPC实验箱上完成LED数码管的动态显示“18”个数字; 2、放慢扫描速度

22、演示动态显示的原理过程。 三、实验原理 一个FPGA的片子如果带动多个(比如说8个)数码管,选用静态显示的话, 管脚很容易不够用,于是大多采用动态显示的方式。本次采用共阳极的数码管, 其中每个数码管的8个段:h、g、f、e、d、c、b和a(h为小数点)都分别连接 到SEG0SEG7, 8个数码管分别由8个选通信号DIG0DIG7来选择。被选通的 数码管显示数据,其余关闭。如果在某一时刻DIG2为低电平“ 0”,其余选通信 号为高电平“ 1”,这时仅DIG2对应的数码管显示来自段码信号端的数据,其余7 个数码管呈现关闭状态。根据这种电路状态,如果希望8个数码管显示希望的数 据,就必须使得8个选通

23、信号DIG0DIG7分别被单独选通,并在此同时,在段信 号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能 实现扫描显示的目的。虽然每次只有一个LED显示,但只要扫描显示速率足够快, 由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。 四、实验步骤 1、启动Quarters II建立一个空白工程,命名为 dled.qpf。 2、 新建Verilog HDL源程序文件scan_led.v,输入程序代码并保存,进行综合编译, 若在编译中发现错误,则找出并更正错误,直至编译成功为止。 3、从设计文件中创建模块,由scan_led.v生成名为scan_led.bsf的模

24、块符号文件。 4、将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。 5、添加常量兆功能模块。 input clk_1k; input31:0 d; output7:0 dig; output7:0 seg; / 模块名 scan_led /输入时钟 /输入要显示的数据 /数码管选择输出引脚 /数码管段输出引脚 reg7:0 seg_r; reg7:0 dig_r; reg3:0 disp_dat; reg2:0count; assign dig = dig_r; assign seg = seg_r; /输出数码管选择 /输出数码管译码结果

25、always (posedge clk_1k) begin count CLRN inst INPUT a VCC J DFF PRN D s Q z CLRN inst1 -y DFF 6 PRN DQ CLRN inst2 V OR3 in st3 OUTPUT key out 由于这里是低电平表示按键按下,所以按键去抖动的关键在于提取稳定的低 电平状态,虑除前沿、后沿抖动毛刺。对于一个按键信号,可以用一个脉冲对他 进行取样,如果连续三次取样为低电平,可以认为信号已经处于键稳定状态,这 时输出一个低电平按键信号。继续取样的过程中如果不能满足连续三次取样为低, 则认为键稳定状态结束, clo

26、ck INPUT VCC 四、实验步骤 1、启动Quarters II建立一个空白工程,命名为 key_debounce.qp。 2、将上图所示消抖电路用 Verilog HDL语言描述出来,并拓展多个通道。新建 Verilog HDL源程序文件debounce.v,输入程序代码并保存,进行综合编译,若在 编译中发现错误,则找出并更正错误,直至编译成功为止。 3、从设计文件中创建模块,由debounce.v生成名为debounce.bsf的模块符号文件。 4、将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。 5、添加4位计数器兆功能模块。 6

27、新建图形设计文件命名为key_debou nce.bd倂保存。在空白处双击鼠标左键, 分别将 symbol 对话框中 libraries: project 下的 counter debounce decl7s和 int_div 模块放在图形文件 debounce.bsf中,在symbol对话框中Name:输入gnd,添加 gnd符号,输入and2,添加与门。加入输入、输出引脚,双击各管脚符号,进行 管脚命名。双击int_div的参数框,并修改参数,将F_DIV的值改为240000, F_DIV_WIDTH的值改为18。完整的顶层模块原理图如下图所示。 clock VCC I key 1 y I

28、NPUT key 2 I、 input IF VCC P arameter Value F_DIV 240000 P arameterValue F DIV VVIDIH 18 KEY_WIDTH 1 z Z debounce key _outKEY_WIDTH-1.0 clk key _inKEY_WIDTH-1.0 int div clock clk out counter inst1 i消抖后的信号输出 clock up coun ter q3.0 in st3 decl/s 1 d3.0 seg7.0 in st4 OUTPUT 数码管段码输出 seg7.0 数码管位码输出 7、选择目

29、标器件并进行引脚锁定。将未使用的管脚设置为三态输入。 8、将key_debounce.bdf设置为顶层实体。对该工程文件进行全程编译处理。若在 编译过程中发现错误,则找出并更正错误,直到编译成功为止。 9、将产生的key_debounce.sof输出对FPGA进行配置。分别连续按KEY1或KEY2 观察数码管显示状态,看数值是否连续递增,比较前后两次操作有何不同。 /按键消抖模块 系统时钟输入 /外部按键输入 /按键消抖输出 /寄存器 /参数 /按键消抖输出 五、实验程序 module debo un ce(clk,key_i n, key_out); input clk; inp utKEY

30、_WIDTH-1:0 key_i n; out putKEY_WIDTH-1:0key_out; regKEY_WIDTH-1:0dout1,dout2,dout3; parameter KEY_WIDTH = 8; assig n key_out = (dout1 | dout2 | dout3); always (p osedge clk) begin dout1 = key_ in; dout2 = dout1; dout3 = dout2; end en dmodule 六、思考题 比较下面两段程序的异同,并画出电路结构图。 always ( posedge clk)always (

31、posedge clk) beginbegin dout1=key_in;/非阻塞赋值dout1=key_in;/ 阻塞赋值 dout2=dout1;dout2=dout1; dout3=dout2;dout3=dout2; endend 实验七 硬件电子琴实验 一、实验目的 学习利用蜂鸣器和按键设计硬件电子琴。 二、实验内容 在 SmartSOPC 实验箱上实现一个简易电子琴。 按下 KEY1KEY7 分别表示中 音 DO、RE、MI、FA、SOL、LA、SI;按住 KEY8 再按 KEY1KEY7 分别表示高 音的 DO、 RE、 MI 、 FA、 SOL、 LA、 SI。 三、实验原理

32、乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时 间(音长)是乐曲演奏的 2 个基本数据,因此需要控制输出到扬声器的激励信号 的频率高低和该频率信号持续的时间。频率的高低决定了音调的高低,而乐曲的 简谱与各音名的频率之间也有固定的对应关系。所有不同频率的信号都是从同一 基准频率分频而得来的,由于音阶频率多为非整数,而分频系数又不能为小数, 故必须将计算的到的分频数进行四舍五入取整,基准频率和分频系数应综合考虑 加以选择,从而保证音乐不会走调。如在 48MHz 时钟下,中音 1(对应的频率值 为523.3Hz)的分频系数应该为:48000000/(2*523.3)=0 xb32

33、7,这样只需对系统时 钟进行 45863次分频即可得到所要的中音 1。至于其他音符, 同样可求出对应的分 频系数,这样利用程序可以很轻松地得到对应的乐声。 四、实验步骤 1、在Quarters II中建立一个工程项目文件 beep1.qp。并在该项目下新建 Verilog HDL源程序文件beep1.v,输入程序代码并保存,进行综合编译,若在编译中发现 错误,则找出并更正错误,直至编译成功为止。 2、选择目标器件并进行引脚锁定。将未使用的管脚设置为三态输入。 3、对该工程文件进行全程编译处理。若在编译过程中发现错误,则找出并更正错 误,直到编译成功为止。 FPGA 进行配置。按下按键 KEY1

34、KEY8 就可以开 4、将产生的beep1.sof输出对 始使用电子琴来演奏音乐了。 / 模块名称 beep1 / 系统时钟 48MHz /按键输入 /蜂鸣器输出端 /LED 输出 五、实验程序 module beep1(clk,key,beep,led); input clk; input7:0key; output beep; /寄存器 output7:0led; reg beep_r; reg15:0count,count_end; reg7:0key_r; always(posedge clk) begin count = count + 1b1;/计数器加 1 /计数器清零 /取反输

35、出信号 if(count = count_end) beep_r = !beep_r; end end always (key) begin key_r = key; case(key_r) 8b11111110:count_end = 16hb327; 8b11111101:count_end = 16h9fa0; 8b11111011:count_end = 16h8e32; 8b11110111:count_end = 16h8637; 8b11101111:count_end = 16h7794; 8b11011111:count_end = 16h6a88; 8b10111111:c

36、ount_end = 16h5ee8; 8b01111110:count_end = 16h59ab; 8b01111101:count_end = 16h4fce; 8b01111011:count_end = 16h471a; 8b01110111:count_end = 16h431c; 8b01101111:count_end = 16h3bca; 8b01011111:count_end = 16h3544; 8b00111111:count_end = 16h2f74; default:count_end = 16hffff; endcase end /取键值 /中音 /中音 /中

37、音 /中音 /中音 /中音 /中音 /高音 /高音 /高音 /高音 /高音 /高音 /高音 1 的分频系数值 2 的分频系数值 3 的分频系数值 4 的分频系数值 5 的分频系数值 6 的分频系数值 7 的分频系数值 1 的分频系数值 2 的分频系数值 3 的分频系数值 4 的分频系数值 5 的分频系数值 6 的分频系数值 7 的分频系数值 /输出音乐 /输出按键状态 assign beep =beep_r; assign led =key_r; endmodule 六、思考题 举例说明产生不同音符的原理。 实验八 数字时钟设计 一、实验目的 学习数字时钟的硬件设计。 二、实验内容 在 Sma

38、rtSOPC 实验箱上完成一个可以计时的数字时钟,其显示时间范围是 00:00:0023:59:59,,且该时钟具有暂停计时和清零等功能。 三、实验原理 一个完整的时钟应由 3 部分组成:秒脉冲发生电路、计数显示部分和时钟调 整部分。一个时钟的准确与否主要取决于秒脉冲的精确度。为了保证时钟计时准 确我们对系统时钟 48MHz 进行了 48000000分频,从而得到 1Hz 的秒脉冲。至于 显示部分与 LED 数码管原理相同,而校时电路用户可以自由发挥,如定义 3 个按 键keystart、keymon和keyadd,分别用于控制时钟的计时开始、调整功能选择和 加 1 处理,从而完成对现在时间的

39、调整。 本实验的校时电路在此仅仅完成了暂停、 清零等基本功能。 四、实验步骤 1、在Quarters II中建立一个工程项目文件 clock.qpf。并在该项目下新建 Verilog HDL源程序文件clock.v,输入程序代码并保存,进行综合编译,若在编译中发现 错误,则找出并更正错误,直至编译成功为止。 2、选择目标器件并进行引脚锁定。将未使用的管脚设置为三态输入。 3、对该工程文件进行全程编译处理。若在编译过程中发现错误,则找出并更正错 误,直到编译成功为止。 4、将产生的clock.sof输出对FPGA进行配置。观察数码管的显示状态。按下按键 KEY1 、 KEY2 观察数字钟上的时间

40、有什么变化。 /模块名 clock /输入时钟 /输入按键 /数码管选择输出引脚 /数码管段输出引脚 五、实验程序 module clock(clk,key,dig,seg); input clk; input1:0 key; output7:0 dig; output7:0 seg; reg7:0 seg_r; reg7:0 dig_r; reg3:0 disp_dat; reg24:0count; reg23:0hour; reg sec,keyen; reg1:0dout1,dout2,dout3; wire1:0key_done; /定义数码管输出寄存器 /定义数码管选择输出寄存器 /

41、定义显示数据寄存器 /定义计数寄存器 /定义现在时刻寄存器 /定义标志位 /寄存器 /按键消抖输出 assign dig = dig_r; assign seg = seg_r; /输出数码管选择 /输出数码管译码结果 /秒信号产生部分 always (posedge clk) begin count = count + 1b1; if(count = 25d24000000) begin count = 25d0; sec = sec; end end /定义 clock 上升沿触发 /0.5S 到了吗? /计数器清零 /置位秒标志 /按键消抖输出 /将琴键开关转换为乒乓开关 /数码管动态扫

42、描显示部分 always (posedge clk) begin case(count17:15) 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; 3d6:disp_dat = hour19:16; 3d7:disp_dat = hour23:20; endcase case(count17:15) 3d0:dig_r = 8b11111110; /count17:15 大约 1ms 改变一次 /选择扫描显示数据 /秒个位 /秒十位 /显示 - /分个位 /分十位 /显示 - /时个位 /时十位 /选择数码管显示位 /选择第一个数码管显示 /按键消抖处理部分 assign key_done = (dout1 | d

温馨提示

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

评论

0/150

提交评论