EDA实验箱实验指导书.docx

上传人:b****7 文档编号:9913974 上传时间:2023-02-07 格式:DOCX 页数:52 大小:547.76KB
下载 相关 举报
EDA实验箱实验指导书.docx_第1页
第1页 / 共52页
EDA实验箱实验指导书.docx_第2页
第2页 / 共52页
EDA实验箱实验指导书.docx_第3页
第3页 / 共52页
EDA实验箱实验指导书.docx_第4页
第4页 / 共52页
EDA实验箱实验指导书.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

EDA实验箱实验指导书.docx

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

EDA实验箱实验指导书.docx

EDA实验箱实验指导书

实验二流水灯

1.实验目的

通过本实验让学生进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL语言的编程方法;学习简单的时序电路的设计和硬件测试。

2.实验内容

本实验的内容是控制实验箱上的发光二极管LED1—LED8,使之实现流水灯显示。

3.实验原理

在LED1~LED8引脚上周期性地输出流水数据,即输出的数据依次为11111111、11111110、11111100、11111000、11110000、11100000、11000000、10000000、00000000,如此循环显示,输出数据“0”,表示点亮相应的LED小灯。

为了方便观察,流水的速率控制在2Hz左右。

在核心板上有一个48MHz的标准时钟源,该时钟源与芯片EP2C5的23脚相连。

为了产生2Hz的时钟源,在此调用了分频模块int_div。

4.实验步骤

(1)启动QuartusII,建立一个空白工程,然后命名为led_waterflow.qpf。

(2)新建ledwater.vhd源程序文件,源代码如下。

然后进行综合编译。

若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。

生产符号文件ledwater.bsf(File→Create/_Update→CreateSymbolFilesforCurrentFile)。

流水灯程序参考

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYledwaterIS

PORT(

clk:

INSTD_LOGIC;

led:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);END;

ARCHITECTUREoneOFledwaterIS

SIGNALled_r:

STD_LOGIC_VECTOR(8DOWNTO0);

BEGIN

led<=led_r(7DOWNTO0);

PROCESS(clk)

BEGIN

IFclk’eventandclk=’1’THEN

led_r<=led_r(7DOWNTO0)&'0';

IFled_r="000000000"THEN--循环完毕吗?

led_r<="111111111";--是,则重新赋初值

ENDIF;

ENDIF;

ENDPROCESS;

END;

(3)将实验模块库里的int_div.vhd和int_div.bsf拷贝到工程目录下。

(4)新建图形文件,命名为led_waterflow.bdf并保存。

在空白处双击鼠标,打开symbol对话框,在symbol对话框的左上角的libraies中,分别将project下的ledwater和int_div模块放在图形文件led_waterflow.bdf中,加入输入input、输出output引脚,双击各引脚符号,进行引脚命名。

完整的顶层模块原理图如下图1所示。

双击int_div中的参数框,并修改参数,如下图2所示。

将F_DIV的值改为24000000,F_DIV_WIDTH的值改为25,单击“确定”按钮保存修改的参数。

图流水灯顶层模块

图参数修改对话框

如果在led_waterflow.bdf上不能看到参数设置框,在空白出右击鼠标,选择ShowParameterAssignments命令来显示参数设置框。

(5)将实验模块选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的CycloneII系列的EP2C5Q208C8,或者CycloneI系列的EP1C12Q240C8。

引脚锁定方法如下表所列。

(6)将led_waterflow.bdf设置成顶层实体Project→SetasTop-levelEntity。

对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

(7)把JP20的led0~led7的跳帽插上,使发光二极管有效。

下载程序到芯片上,观察流水灯的变化。

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

表引脚锁定方法

信号

引脚

信号

引脚

EP2C5

EP1C12

EP2C5

EP1C12

Led[0]

116

128

Led[5]

105

123

Led[1]

110

127

Led[6]

63

122

Led[2]

114

126

Led[7]

106

121

Led[3]

107

125

clock

23

153

Led[4]

112

124

实验三读取按键信号

1.实验目的

通过本实验让学生进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL语言的编程方法;并熟悉VHDL文件为顶层模块的设计;学习和体会分支条件语句case的使用方法及FPGAI/O口的输出控制。

2.实验内容

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

本实验的内容是用这8个按键分别控制8个发光二极管,一旦有键按下,则点亮相应的发光二极管。

3.实验原理

FPGA的所有I/O控制块允许每个I/O引脚单独配置为输入口,不过这种配置是系统自动完成的。

当该I/O口被设置为输入口使用时(如定义key1为输入引脚:

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

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

4.实验步骤

(1)启动QuartusII,建立一个空白工程,然后命名为key_led.qpf。

(2)新建key_led.vhd源程序文件,源代码如下。

然后进行综合编译。

若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。

程序参考

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYkeyledIS

PORT(

key:

INSTD_LOGIC_VECTOR(7DOWNTO0);

led:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);END;

ARCHITECTUREoneOFkeyledIS

SIGNALled_r:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALbuffer_r:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

led<=led_r;

PROCESS(key,buffer_r)

BEGIN

buffer_r<=key;

CASEbuffer_rIS

WHEN"11111110"=>led_r<="11111110";

WHEN"11111101"=>led_r<="11111101";

WHEN"11111011"=>led_r<="11111011";

WHEN"11110111"=>led_r<="11110111";

WHEN"11101111"=>led_r<="11101111";

WHEN"11011111"=>led_r<="11011111";

WHEN"10111111"=>led_r<="10111111";

WHEN"01111111"=>led_r<="01111111";

WHENOTHERS=>led_r<="11111111";

ENDCASE;

ENDPROCESS;

END;

(3)选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的CycloneII系列的EP2C5Q208C8,或者CycloneI系列的EP1C12Q240C8。

引脚锁定方法如下表所列。

表引脚锁定方法

信号

引脚

信号

引脚

EP2C5

EP1C12

EP2C5

EP1C12

Led[0]

116

Key[0]

56

Led[1]

110

Key[1]

59

Led[2]

114

Key[2]

57

Led[3]

107

Key[3]

61

Led[4]

112

Key[4]

58

Led[5]

105

Key[5]

64

Led[6]

63

Key[6]

60

Led[7]

106

Key[7]

68

(4)对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

(5)JP6是一个3针的插座,如果把短接帽接到下面,使下面两个插针短接,则按键有效;如果把短接帽接到上面,使上面两个插针短接,则矩阵键盘有效。

本实验令按键有效,把短接帽接到下面。

把JP20的led0~led7的跳帽插上,使发光二极管有效。

下载程序到芯片上,按下KEY1~KEY8的任何一键,观察发光二极管LED1~LED8的亮灭状态。

实验四静态数码管显示

1.实验目的

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

2.实验内容

实验箱上有2个4位动态共阳极数码管LEDD4和LEDD3,其中8个位码DIG0~DIG7和8位段码SEG0~SEG7分别与FPGA相应的引脚相连。

这样只要DIG0~DIG7上一直输出低电平“0”,则8个数码管将显示相同的数码,这样8位动态数码管就变成了静态数码管。

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

要求在试验箱上循环显示0~9和A~F16个字符。

3.实验原理

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

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

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

公共端常称为位码,而将其它8位称为段码,分别为:

a、b、c、d、e、f、g、h,其中h为小数点。

对于共阳极数码管,只要公共端为高电平“1”,某个段输出为低电平“0”,则相应的段就亮。

本实验通过分频模块得到1Hz的频率信号,加载于4位计数器的时钟输入端,计数循环输出0~9和A~F16个字符,通过7段译码模块后在数码管上显示出来。

4.实验步骤

(1)启动QuartusII,建立一个空白工程,然后命名为sled.qpf。

(2)新建decl7s.vhd源程序文件,源代码如下。

然后进行综合编译。

若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。

生产符号文件decl7s.bsf(File→Create/_Update→CreateSymbolFilesforCurrentFile)。

程序参考

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYdecl7sIS

PORT(

d:

INSTD_LOGIC_VECTOR(3DOWNTO0);--输入4位二进制码

seg:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)--七段译码输出

);END;

ARCHITECTUREONEOFdecl7sIS

SIGNALseg_r:

STD_LOGIC_VECTOR(7DOWNTO0);--定义数码管输出寄存器

BEGIN

seg<=seg_r;--输出数码管译码结果

PROCESS(d)--七段译码

BEGIN

CASEdIS

WHENX"0"=>seg_r<=X"c0";--显示0

WHENX"1"=>seg_r<=X"f9";--显示1

WHENX"2"=>seg_r<=X"a4";--显示2

WHENX"3"=>seg_r<=X"b0";--显示3

WHENX"4"=>seg_r<=X"99";--显示4

WHENX"5"=>seg_r<=X"92";--显示5

WHENX"6"=>seg_r<=X"82";--显示6

WHENX"7"=>seg_r<=X"f8";--显示7

WHENX"8"=>seg_r<=X"80";--显示8

WHENX"9"=>seg_r<=X"90";--显示9

WHENX"a"=>seg_r<=X"88";--显示a

WHENX"b"=>seg_r<=X"83";--显示b

WHENX"c"=>seg_r<=X"c6";--显示c

WHENX"d"=>seg_r<=X"a1";--显示d

WHENX"e"=>seg_r<=X"86";--显示e

WHENX"f"=>seg_r<=X"8e";--显示f

WHENOTHERS=>seg_r<=X"FF";

ENDCASE;

ENDPROCESS;

END;

(3)将实验模块库里的int_div.vhd和int_div.bsf拷贝到工程目录下。

(4)添加4位兆计数器功能模块。

步骤如下:

在QuartusII主界面中选择Tools—MegaWizardPlug-InManager,打开如图所示的兆功能模块向导。

选择Createanewcustommegafunctionvariation新建一个新的兆功能模块。

图添加兆功能模块向导对话框——Page1

单击Next进入向导第2页,按照如下图所示填写。

选择LPM_COUNTER,设置号输出文件的类型和路径,使用Cyclone族的器件。

单击Next进入向导第3页,,按照如下图所示填写。

选择4位计数器。

剩余步骤不需更改设置,在这里可以一步一步单击Next,或者直接单击Finish结束。

注意在结束时一定要选择生成“*.bsf”符号文件。

图添加兆功能模块向导对话框——Page2

图添加兆功能模块向导对话框——Page3

(5)新建图形设计文件,命名为sled.bdf并保存。

文件的设计如下图所示。

图静态LED显示顶层模块图

(6)选择目标器件并对相应的引脚进行锁定,这里选择的器件为Altera公司的CycloneII系列的EP2C5Q208C8,或者CycloneI系列的EP1C12Q240C8。

引脚锁定方法如下表所列。

表引脚锁定方法

信号

引脚

信号

引脚

EP2C5

EP1C12

EP2C5

EP1C12

seg[0]

145

161

dig[0]

135

138

seg[1]

142

144

dig[1]

127

137

seg[2]

143

159

dig[2]

133

136

seg[3]

139

141

dig[3]

117

135

seg[4]

141

156

dig[4]

128

134

seg[5]

137

139

dig[5]

115

133

seg[6]

138

143

dig[6]

118

132

seg[7]

134

140

dig[7]

113

131

clock

23

153

(7)将sled.bdf设置成顶层实体(Project—SetasTop-levelEntity)。

对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

(8)下载程序到芯片上,观察数码管的显示状态。

实验五动态数码管显示

1.实验目的

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

2.实验内容

本实验内容是建立数码管动态扫描显示模块。

在试验箱上完成LED数码管的动态显示1~8这8个数。

稳定显示后,放慢扫描速度演示动态显示的原理过程。

3.实验原理

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

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

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

公共端常称为位码,而将其它8位称为段码,分别为:

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

把每个数码管的8个段都分别连接到SEG0~SEG7,8个数码管分别由8个选通信号DIG0~DIG7来选择。

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

例如在某一时刻,DIG2为“0”,其余数码管选通信号为“1”,这是仅DIG2对应的LED数码管显示来自段码信号端的数据,而其他数码管成关闭状态。

根据这种电路状态,如果希望8个数码管全都显示想要的数据,就必须使得8个选通信号DIG0~DIG7分别单独选通,同时在段输入端加上对应的数据。

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

4.实验步骤

(1)启动QuartusII,建立一个空白工程,然后命名为dled.qpf。

(2)新建scan_led.vhd源程序文件,源代码如下。

然后进行综合编译。

若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。

生产符号文件scan_led.bsf(File→Create/_Update→CreateSymbolFilesforCurrentFile)。

程序参考:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYscan_ledIS

PORT(

clk_1k:

INSTD_LOGIC;

d:

INSTD_LOGIC_VECTOR(31DOWNTO0);--输入要显示的数据

dig:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);--数码管选择输出引脚

seg:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)--数码管段输出引脚

);

ENDENTITY;

ARCHITECTUREoneOFscan_ledIS

SIGNALseg_r:

STD_LOGIC_VECTOR(7DOWNTO0);--定义数码管输出寄存器

SIGNALdig_r:

STD_LOGIC_VECTOR(7DOWNTO0);--定义数码管选择输出寄存器

SIGNALdisp_dat:

STD_LOGIC_VECTOR(3DOWNTO0);--定义显示数据寄存器

SIGNALcount:

STD_LOGIC_VECTOR(2DOWNTO0);--定义计数寄存器

BEGIN

dig<=dig_r;

seg<=seg_r;

PROCESS(clk_1k)

BEGIN

IFRISING_EDGE(clk_1k)THEN

count<=count+1;

ENDIF;

ENDPROCESS;

PROCESS(clk_1k)

BEGIN

IFRISING_EDGE(clk_1k)THEN

CASEcountIS

WHEN"000"=>disp_dat<=d(31DOWNTO28);--第一个数码管

WHEN"001"=>disp_dat<=d(27DOWNTO24);--第二个数码管

WHEN"010"=>disp_dat<=d(23DOWNTO20);--第三个数码管

WHEN"011"=>disp_dat<=d(19DOWNTO16);--第四个数码管

WHEN"100"=>disp_dat<=d(15DOWNTO12);--第五个数码管

WHEN"101"=>disp_dat<=d(11DOWNTO8);--第六个数码管

WHEN"110"=>disp_dat<=d(7DOWNTO4);--第七个数码管

WHEN"111"=>disp_dat<=d(3DOWNTO0);--第八个数码管

ENDCASE;

CASEcountIS--选择数码管显示位

WHEN"000"=>dig_r<="01111111";--选择第一个数码管显示

WHEN"001"=>dig_r<="10111111";--选择第二个数码管显示

WHEN"010"=>dig_r<="11011111";--选择第三个数码管显示

WHEN"011"=>dig_r<="11101111";--选择第四个数码管显示

WHEN"100"=>dig_r<="11110111";--选择第五个数码管显示

WHEN"101"=>dig_r<="11111011";--选择第六个数码管显示

WHEN"110"=>dig_r<="11111101";--选择第七个数码管显示

WHEN"111"=>dig_r<="11111110";--选择第八个数码管显示

ENDCASE;

ENDIF;

ENDPROCESS;

PROCESS(disp_dat)

BEGIN

CASEdisp_datIS

WHENX"0"=>seg_r<=X"c0";--显示0

WHENX"1"=>seg_r<=X"f9";--显示1

WHENX"2"=>seg_r<=X"a4";--显示2

WHENX"3"=>seg_r<=X"b0";--显示3

WHENX"4"=>seg_r<=X"99";--显示4

WHENX"5"=>seg_r<=X"92";--显示5

WHENX"6"=>seg_r<=X"82";--显示6

WHENX"7"=>seg_r<=X"f8";--显示7

WHENX"8"=>seg_r<=X"80";--显示8

WHENX"9"=>seg_r<=X"90";--显示9

WHENX"a"=>seg_r<=

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

当前位置:首页 > 高等教育 > 文学

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

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