EDA实验报告.docx

上传人:b****6 文档编号:7527322 上传时间:2023-01-24 格式:DOCX 页数:7 大小:31.43KB
下载 相关 举报
EDA实验报告.docx_第1页
第1页 / 共7页
EDA实验报告.docx_第2页
第2页 / 共7页
EDA实验报告.docx_第3页
第3页 / 共7页
EDA实验报告.docx_第4页
第4页 / 共7页
EDA实验报告.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

EDA实验报告.docx

《EDA实验报告.docx》由会员分享,可在线阅读,更多相关《EDA实验报告.docx(7页珍藏版)》请在冰豆网上搜索。

EDA实验报告.docx

EDA实验报告

 

 

EDA实验报告

 

院系:

电子通信工程系

学号:

姓名:

 

实验1应用QuartusII完成点亮LED

1实验目的

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

本实验力求以详细的步骤和讲解让读者以最快的方式了解EDA技术开发以及软件的使用,从而快速入门并激起读者对EDA技术的兴趣。

2实验内容

SmartSOPC实验箱上有8个发光二极管LED1~8,并分别与FPGA的50、53~55、176和47~49引脚相连。

实验内容是建立控制LED亮/灭的简单电路,要求点亮LED1、LED3、LED5和LED7。

3实验原理

FPGA器件和单片机一样,为用户提供了灵活的输入输出I/O口。

FPGA每个I/O口可以配置为输入、输出、双向I/O、集电极开路和三态门等各种组态。

作为输出口时,FPGA的I/O口可以吸收最大24mA的电流,可以直接驱动LED。

所以只要征求分配并锁定引脚后,在相应的引脚上输出低电平“0”,就可点亮该发光二极管的功能。

4实验步骤

①使用QuarterII建立工程,从开始>>程序>>Alera>>QuartusII5.0;

②建立工程并对工程进行设计;

③设置编译选项并编译硬件系统;

④下载硬件设计到目标FPGA;

⑤观察LED的状态。

5参考程序

点亮LED

①利用连续赋值语句assign语句来实现,文件名led.v

moduleled(led);//模块名led1

output[7:

0]led;//定义输出端口

assignled=8'b10101010;//输出0xAA

endmodule

②利用过程赋值语句来实现,文件名led1.v

moduleled1(led);//模块名led1

output[7:

0]led;//定义输出端口

reg[7:

0]led;//定义寄存器

always//过程1

begin

led=8'b10101010;//输出0xAA

end

endmodule

6思考:

若使实验箱上LED1~4亮,LED5~8灭,怎么修改程序。

 

实验2应用QuartusII完成流水灯的设计

1实验目的

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

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

2实验内容

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

3实验原理

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

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

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

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

②Int_div分频模块说明:

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

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

其中F_DIV为分频系数,分频系数范围为1~2n,若要改变分频系数,改变参数F_DIV和F_WIDTH到相应范围即可。

在本例中输入时钟为48MHz,要得到2Hz的信号,所以分频系数为48x106/2=24x106;对于分频系数为24x106为的数需要一个25位宽的计数器即可。

4实验步骤

①使用QuarterII建立工程,从开始>>程序>>Alera>>QuartusII5.0;

②建立工程并对工程进行设计,工程名为led_water.qpf;

③新建VerilogHDL源程序文件ledwater.v,并对程序进行综合编译,若发现错误,找出并改正错误,直至编译成功为止;

④对硬件进行配置;

⑤对管脚进行配置,将与ledwater模块led[7:

0]连接的管脚命名为led[7:

],int_div模块的clk_out与ledwater模块的clk相连接;

⑥将生成的ledwater.sof文件加载到FPGA中,然后运行。

观察实验箱上LED流水灯的状态。

5参考程序

ledwater.v

moduleledwater[led,clk];//模块名ledwater

output[7:

0]led;//定义LED输出口

inputclk;//定义时钟输入口

reg[8:

0]led_r;//定义输出寄存器

assignled=led[7:

0];//寄存器输出

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

begin

led_r<=led_r<<1;//是,则输出左移一位

if(led_r==9’d0)//循环完毕吗?

led_r<=9’b111111111;//是,则重新赋初值

end

endmodule

6思考题

①实现2种以上方法实现不同的花样流水。

 

②将几种方法,用一个程序让其轮流实现。

 

实验3应用QuartusII完成动态数码管显示

1实验目的

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

2实验内容

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

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

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

3实验原理

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

本次采用共阳极的数码管(abcdefgh)(h是小数点)都分别连到SEG0~SEG7,8个数码管分别由8个选通信号DIG0~DIG7来选择,选通信号为高电平“0”,被选择的数码管显示数据,其余关闭。

根据这种电路状态,通过在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描的目的。

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

4实验步骤

①使用QuarterII建立工程,从开始>>程序>>Alera>>QuartusII5.0;

②建立工程并对工程进行设计,然后命名为scan_led.qpf;

③新建VerilogHDL源程序文件scan_led.v,并对程序进行综合编译,若发现错误,找出并改正错误,直至编译成功为止;

④从设计文件创建模块,由scan_led.v生成名为scan_led.bsf的模块符号文件;

⑤选择目标器件并对相应的引脚进行锁定,将scan_led.bdf文件设置为顶层实体;

⑥下载硬件设计到目标FPGA;

⑦将生成的ledwater.sof文件加载到FPGA中,然后运行。

观察实验箱上LED流水灯的状态。

5实验程序

modulescan_led(clk_1k,d,dig,seg);//模块名scan_led

inputclk_1k;//输入时钟

input[31:

0]d;//输入要显示的数据

output[7:

0]dig;//数码管选择输出引脚

output[7:

0]seg;//数码管段输出引脚

reg[7:

0]seg_r;//定义数码管输出寄存器

reg[7:

0]dig_r;//定义数码管选择输出寄存器

reg[3:

0]disp_dat;//定义显示数据寄存器

reg[2:

0]count;//定义计数寄存器

assigndig=dig_r;//输出数码管选择

assignseg=seg_r;//输出数码管译码结果

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

begin

count<=count+1'b1;

end

always@(posedgeclk_1k)

begin

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

3'd0:

disp_dat=d[31:

28];//第一个数码管

3'd1:

disp_dat=d[27:

24];//第二个数码管

3'd2:

disp_dat=d[23:

20];//第三个数码管

3'd3:

disp_dat=d[19:

16];//第四个数码管

3'd4:

disp_dat=d[15:

12];//第五个数码管

3'd5:

disp_dat=d[11:

8];//第六个数码管

3'd6:

disp_dat=d[7:

4];//第七个数码管

3'd7:

disp_dat=d[3:

0];//第八个数码管

endcase

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

3'd0:

dig_r=8'b01111111;//选择第一个数码管显示

3'd1:

dig_r=8'b10111111;//选择第二个数码管显示

3'd2:

dig_r=8'b11011111;//选择第三个数码管显示

3'd3:

dig_r=8'b11101111;//选择第四个数码管显示

3'd4:

dig_r=8'b11110111;//选择第五个数码管显示

3'd5:

dig_r=8'b11111011;//选择第六个数码管显示

3'd6:

dig_r=8'b11111101;//选择第七个数码管显示

3'd7:

dig_r=8'b11111110;//选择第八个数码管显示

endcase

end

always@(disp_dat)

begin

case(disp_dat)//七段译码

4'h0:

seg_r=8'hc0;//显示0

4'h1:

seg_r=8'hf9;//显示1

4'h2:

seg_r=8'ha4;//显示2

4'h3:

seg_r=8'hb0;//显示3

4'h4:

seg_r=8'h99;//显示4

4'h5:

seg_r=8'h92;//显示5

4'h6:

seg_r=8'h82;//显示6

4'h7:

seg_r=8'hf8;//显示7

4'h8:

seg_r=8'h80;//显示8

4'h9:

seg_r=8'h90;//显示9

4'ha:

seg_r=8'h88;//显示a

4'hb:

seg_r=8'h83;//显示b

4'hc:

seg_r=8'hc6;//显示c

4'hd:

seg_r=8'ha1;//显示d

4'he:

seg_r=8'h86;//显示e

4'hf:

seg_r=8'h8e;//显示f

endcase

end

endmodule

6日积月累

动态扫描时显示刷新频率最好大于50Hz,即每显示完一轮的时间不超过20ms,每个数码管显示的时间不能太长也不能太短,时间太长可能会影响刷新率,导致总体显示呈现闪烁的现象;时间太短发光二极管的电流导通时间也就短,会影响总体的显示亮度。

一般控制在1ms左右。

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1