EDA技术及应用实验报告完整版纯手打Word下载.docx

上传人:b****2 文档编号:799458 上传时间:2023-04-29 格式:DOCX 页数:28 大小:80.88KB
下载 相关 举报
EDA技术及应用实验报告完整版纯手打Word下载.docx_第1页
第1页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第2页
第2页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第3页
第3页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第4页
第4页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第5页
第5页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第6页
第6页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第7页
第7页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第8页
第8页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第9页
第9页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第10页
第10页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第11页
第11页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第12页
第12页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第13页
第13页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第14页
第14页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第15页
第15页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第16页
第16页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第17页
第17页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第18页
第18页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第19页
第19页 / 共28页
EDA技术及应用实验报告完整版纯手打Word下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

EDA技术及应用实验报告完整版纯手打Word下载.docx

《EDA技术及应用实验报告完整版纯手打Word下载.docx》由会员分享,可在线阅读,更多相关《EDA技术及应用实验报告完整版纯手打Word下载.docx(28页珍藏版)》请在冰点文库上搜索。

EDA技术及应用实验报告完整版纯手打Word下载.docx

4、下载硬件设计到目标FPGA。

将产生的led_test.sof输出对FPGA进行配置。

5、观察LED的状态。

五、实验程序

//利用连续赋值assign语句实现

moduleled1(led);

//模块名led1

output[7:

0]led;

//定义输出端口、

assignled=8'

b10101010;

//输出0xAA

endmodule

//利用过程赋值语句实现(暂时已屏蔽)

/*

//定义输出端口

reg[7:

//定义寄存器

always//过程1,无敏感变量

begin

led=8'

end

endmudule*/

六、思考题

写出使用QuartusII软件开发工程的完整的流程。

实验二流水灯实验

通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VerilogHDL的编程方法。

学习简单时序电路的设计和硬件测试。

本实验的容是建立可用于控制LED流水灯的简单硬件电路,要求在SmartSOPC实验箱上实现LED1~LED8发光二极管流水灯显示。

1、在LED1~LED8引脚上周期性的输出流水数据,如原来输出的数据是11111100则表示点亮LED1、LED2,流水一次后,输出的数据应该为11111000,而此时则应点亮LED1~LED3三个LED发光二极管,就可以实现LED流水灯。

为了观察方便,流水速率最好在2Hz左右。

在QuickSOPC核心板上有一个48MHz的标准时钟源,该时钟脉冲Clock与芯片的28管脚相连。

为了产生2Hz的时钟脉冲,在此调用了一个分频模块(int_div模块,位于光盘中EDA_Component目录下),通过修改分频系数来改变输出频,当分频系数为24x10^6时,输出即为2Hz的频率信号。

2、Int_div分频模块说明:

int_div模块是一个占空比为50%的任意整数分频器。

输入时钟为clock,输出时钟为clk_out。

其中F_DIV为分频系数,分频系数围为1~2^n(n=F_DIV_WIDTH),若要改变分频系数,改变参数F_DIV和F_DIV_WIDTH到相应围即可。

在本例中输入时钟为48MHz,要得到2Hz的信号,所以分频系数为48x10^6/2=24x10^6;

对于分频系数为24x10^6的数需要一个25位宽的计数器即可。

1、启动QuartersII建立一个空白工程,命名为led_water.qpf。

2、新建VerilogHDL源程序文件ledwater.v,输入程序代码并保存,进行综合编译,若在编译中发现错误,则找出并更正错误,直至编译成功为止。

3、从设计文件中创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件。

4、将光盘中EDA_Component目录下的int_div.bsf和int_div.v拷贝到工程目录。

5、新建图形设计文件命名为led_water.bdf并保存。

在空白处双击鼠标左键,分别将symbol对话框中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输出对FPGA进行配置。

9、更改分频模块(int_div)的分频系数,并重新编译下载,观察流水灯的变化。

moduleledwater(led,clk);

//模块名ledwater

//定义LED输出口

inputclk;

//定义时钟输入口

reg[8:

0]led_r;

//定义输出寄存器

assignled=led_r[7:

0];

//寄存器输出

always(posedgeclk)//在时钟上升沿触发进程

led_r<

=led_r<

<

1;

//是,则输出左移一位

if(led_r==9'

d0)//循环完毕吗?

=9'

b111111111;

//是,则重新赋初值

本实验顶层采用了图形输入的方式,若采用文本输入方式,如何编写顶层文件?

写出相应程序。

实验三键盘、LED发光实验

通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VerilogHDL的编程方法,熟悉以VerilogHDL文件为顶层模块的设计。

学习和体会分支条件语句case的使用方法及FPGAI/O口的输出控制。

SmartSOPC实验箱上有8个发光二极管LED1~8和8个按键KEY1~KEY8。

本实验的容要求在SmartSOPC实验箱上完成对8个按键KEY1~KEY8进行监控,一旦有按键输入判断其键值,并点亮相应的发光二极管,如若KEY3按下,则点亮LED1~LED3发光二极管。

FPGA的所有I/O控制块允许每个I/O口引脚单独配置为输出口,不过这种配置是系统自动完成的,一旦该I/O口被设置为输入口使用时(如定义key0为输入引脚:

inputkey0;

)该I/O控制模块将直接使三态缓冲区的控制端接地,使得该I/O口引脚对外呈高阻态,这样该I/O口引脚即可用作专用输入引脚。

只要正确分配并锁定引脚后,一旦在KEY1~KEY8中有按键输入,在检测到键盘输入的情况下,继续判断其键值并做出相应的处理。

1、启动QuartersII建立一个空白工程,命名为keyled.qpf。

2、新建VerilogHDL源程序文件keyled.v,输入程序代码并保存,进行综合编译,若在编译中发现错误,则找出并更正错误,直至编译成功为止。

3、选择目标器件并进行引脚锁定。

4、对该工程文件进行全程编译处理。

5、将产生的keyled.sof输出对FPGA进行配置。

按下不同按键观察LED发光管的状态。

modulekeyled(key,led);

//模块名keyled

input[7:

0]key;

//定义键盘输入口

//定义发光管输出口

//定义寄存器

0]buffer_r;

assignled=led_r;

//输出键值

always(key)//过程1

buffer_r=key;

//读取键值

case(buffer_r)

8'

b11111110:

led_r=8'

b11111110;

//是键KEY1,则给寄存器赋值0xfe

b11111101:

b11111100;

//是键KEY2,则给寄存器赋值0xfc

b11111011:

b11111000;

//是键KEY3,则给寄存器赋值0xf8

b11110111:

b11110000;

//是键KEY4,则给寄存器赋值0xf0

b11101111:

b11100000;

//是键KEY5,则给寄存器赋值0xe0

b11011111:

b11000000;

//是键KEY6,则给寄存器赋值0xc0

b10111111:

b10000000;

//是键KEY7,则给寄存器赋值0x80

b01111111:

b00000000;

//是键KEY8,则给寄存器赋值0x00

default:

led_r=8'

b11111111;

//否则给寄存器赋值0xff

endcase

能否用if语句改写本实验程序?

如果能,写出相应程序。

实验四静态数码管显示实验

学习7段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件QuartusII的使用方法及VerilogHDL的编程方法,学习LPM兆功能模块的调用。

SmartSOPC实验箱上有2个4位动态共阳极数码管LED12和LED13。

其中8个位码DIG0~DIG7和8位段码SEG0~SEG7分别与FPGA相应的引脚相连。

这样,只要DIG0~DIG7上一直输出低电平“0”,则8个数码管将显示相同的数码(因为8个LED数码管的段码线分别接到了同一引脚上),这样8位动态的LED数码管就变成了静态的LED。

本实验的容是建立7段译码显示模块,用于控制LED数码管的静态显示。

要求在SmartSOPC实验箱上的数码管依次显示0~9和A~F16个字符。

数码管LED显示是工程项目中使用较广的一种输出显示器件。

常见的数码管有共阴和共阳2种。

共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端。

公共端常被称作位码,而将其他的8位称作段码。

数码管有8个段分别为:

h、g、f、e、d、c、b和a(h为小数点),只要公共端为高电平“1”,某个段输出低电平“0”则相应的段就亮。

本实验通过分频模块int_div分频得到1Hz的频率信号,加载于4位计数器的时钟输入端,计数循环输出0~9、A~F16个数。

最后通过七段译码模块译码后在数码管上显示出来。

1、启动QuartersII建立一个空白工程,命名为sled.qpf。

2、新建VerilogHDL源程序文件decl7s.v,输入程序代码并保存,进行综合编译,若在编译中发现错误,则找出并更正错误,直至编译成功为止。

3、从设计文件中创建模块,由decl7s.v生成名为decl7s.bsf的模块符号文件。

5、添加4位计数器兆功能模块。

6、新建图形设计文件命名为sled.bdf并保存。

project下的counter、decl7s和int_div模块放在图形文件sled.bdf中,在symbol对话框中Name:

输入gnd,添加gnd符号。

加入输入、输出引脚,双击各管脚符号,进行管脚命名。

双击int_div的参数框,并修改参数,将F_DIV的值改为48000000,F_DIV_WIDTH的值改为26。

7、选择目标器件并进行引脚锁定。

8、将sled.bdf设置为顶层实体。

9、将产生的sled.sof输出对FPGA进行配置。

观察LED显示状态。

moduledecl7s(d,seg);

//模块名decl7s

input[3:

0]d;

//输入4位二进制码

0]seg;

//七段译码输出

0]seg_r;

//定义数码管输出寄存器

assignseg=seg_r;

//输出数码管译码结果

always(d)

case(d)//七段译码

4'

h0:

seg_r=8'

hc0;

//显示0

h1:

hf9;

//显示1

h2:

ha4;

//显示2

h3:

hb0;

//显示3

h4:

h99;

//显示4

h5:

h92;

//显示5

h6:

h82;

//显示6

h7:

hf8;

//显示7

h8:

h80;

//显示8

h9:

h90;

//显示9

ha:

h88;

//显示a

hb:

h83;

//显示b

hc:

hc6;

//显示c

hd:

ha1;

//显示d

he:

h86;

//显示e

hf:

h8e;

//显示f

1.本实验采用的是共阳极数码管,若采用共阴极数码管,有什么不同?

2.如何显示HHHHHHHH和PPPPPPPP?

实验五动态数码管显示实验

学习动态扫描显示的原理及电路的设计。

本实验的容是建立数码管动态扫描显示模块,具体容如下:

1、在SmartSOPC实验箱上完成LED数码管的动态显示“1~8”8个数字;

2、放慢扫描速度演示动态显示的原理过程。

一个FPGA的片子如果带动多个(比如说8个)数码管,选用静态显示的话,管脚很容易不够用,于是大多采用动态显示的方式。

本次采用共阳极的数码管,其中每个数码管的8个段:

h、g、f、e、d、c、b和a(h为小数点)都分别连接到SEG0~SEG7,8个数码管分别由8个选通信号DIG0~DIG7来选择。

被选通的数码管显示数据,其余关闭。

如果在某一时刻DIG2为低电平“0”,其余选通信号为高电平“1”,这时仅DIG2对应的数码管显示来自段码信号端的数据,其余7个数码管呈现关闭状态。

根据这种电路状态,如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。

虽然每次只有一个LED显示,但只要扫描显示速率足够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。

1、启动QuartersII建立一个空白工程,命名为dled.qpf。

2、新建VerilogHDL源程序文件scan_led.v,输入程序代码并保存,进行综合编译,若在编译中发现错误,则找出并更正错误,直至编译成功为止。

3、从设计文件中创建模块,由scan_led.v生成名为scan_led.bsf的模块符号文件。

5、添加常量兆功能模块。

6、新建图形设计文件命名为dled.bdf并保存。

project下的constant、scan_led和int_div模块放在图形文件dled.bdf中,加入输入、输出引脚,双击各管脚符号,进行管脚命名。

双击int_div的参数框,并修改参数,将F_DIV的值改为48000,F_DIV_WIDTH的值改为16。

8、将dled.bdf设置为顶层实体。

观察LED数码管上的数字是否为“12345678”,然后把分频模块的参数改为F_DIV:

24000000,F_DIV_WIDTH:

25,再重新编译下载,观察这次LED数码管上的显示数据,可以看到数据“12345678”动起来了,这正是动态扫描的方法和过程。

modulescan_led(clk_1k,d,dig,seg);

//模块名scan_led

inputclk_1k;

//输入时钟

input[31:

//输入要显示的数据

0]dig;

//数码管选择输出引脚

//数码管段输出引脚

0]dig_r;

//定义数码管选择输出寄存器

reg[3:

0]disp_dat;

//定义显示数据寄存器

reg[2:

0]count;

//定义计数寄存器

assigndig=dig_r;

//输出数码管选择

always(posedgeclk_1k)//定义上升沿触发进程

count<

=count+1'

b1;

always(posedgeclk_1k)

case(count)//选择扫描显示数据

3'

d0:

disp_dat=d[31:

28];

//第一个数码管

d1:

disp_dat=d[27:

24];

//第二个数码管

d2:

disp_dat=d[23:

20];

//第三个数码管

d3:

disp_dat=d[19:

16];

//第四个数码管

d4:

disp_dat=d[15:

12];

//第五个数码管

d5:

disp_dat=d[11:

8];

//第六个数码管

d6:

disp_dat=d[7:

4];

//第七个数码管

d7:

disp_dat=d[3:

//第八个数码管

case(count)//选择数码管显示位

dig_r=8'

b01111111;

//选择第一个数码管显示

b10111111;

//选择第二个数码管显示

b11011111;

//选择第三个数码管显示

b11101111;

//选择第四个数码管显示

b11110111;

//选择第五个数码管显示

b11111011;

//选择第六个数码管显示

b11111101;

//选择第七个数码管显示

//选择第八个数码管显示

endcase

always(disp_dat)

case(disp_dat)//七段译码

说出数码管动态显示的原理。

实验六按键去抖动实验

学习按

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

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

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

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