1数字系统设计实验指导书beta.docx
《1数字系统设计实验指导书beta.docx》由会员分享,可在线阅读,更多相关《1数字系统设计实验指导书beta.docx(34页珍藏版)》请在冰豆网上搜索。
1数字系统设计实验指导书beta
(此文档为word格式,下载后您可任意编辑修改!
)
数字系统设计实验指导书
课程名称:
数字系统设计
实验性质:
设计性、验证性
指导教师:
李明
面向对象:
2011级电子信息工程所有学生
机电学院教学实验中心
电子信息综合实验室
实验一bcd2seg译码器设计
【实验目的】
掌握CPLD/FPGA的开发软件QuartusII的使用流程;
熟悉DE2-115开发板的结构,并会使用板上的拨码开关和七段数码管。
【实验仪器】
PC机1台
Quartus-II软件1套
DE2-115开发板1套,板载usb-blaster下载线。
【实验原理】
使用altera公司的QuartusII软件可以在其公司的FPGA上实现各种任意数字逻辑的设计。
ALTERA公司的QuartusII是Altera公司的第四代EDA集成开发环境,它操作方便、功能强大,提供了原理图输入和HDL语言输入功能,在环境中可以完成编译、查错、设计驱动信号、逻辑功能模拟、时序功能模拟、对FPGA/CPLD芯片编程以及SOPC的设计开发等功能。
【实验内容】
在DE2开发板上实现4位的二进制输入七段数码管显示的译码功能模块。
【实验步骤】
本实验中利用VerilogHDL在FPGA里面设计一个与门,请同学们按照以下步骤操作:
1.在e盘新建一个目录e:
\fpga\experiment1,(如果此目录已经存在,则删除experiment1目录)用于存放本次实验中的设计文件。
2.按下图操作打开QuartusII10.0软件
3.弹出界面如下图所示,按下图选择选项,点击OK,如果没有弹出下面界面,跳至步骤5.
4.弹出窗口如下图,点击OK
5.弹出界面如下图,点击欢迎界面左上角的X关闭欢迎界面
6.点击菜单File–〉New出现如下图,
7.选择VerilogHDLFile,然后点击OK按钮
在空白处敲入代码,如下图所示。
点击save按钮,将此文件保存到e:
\fpga\experiment1\目录下,并且命名为bcd2seg.v(注意:
这里的文件名必须和module的模块名一致,不包括扩展名!
)
图1-3
8.在出现的对话框中按下图设置:
点击Yes
9.出现创建项目向导,见下图,点击next
10.出现下面窗口,阅读一下说明,了解其含义,不要修改内容,点击next
11.添加文件窗口,系统默认把刚才创建的文件加入到项目中了。
12.选择器件窗口,Family选择CycloneIV,器件选择EP4CE115F29C7,和DE2-115开发板上的FPGA型号必须一致。
见下图,然后点击Next
13.EDA工具选择界面,默认都选择None
14.创建项目的最后页面,没有需要填写的内容,点击Finish即可。
15.在quartus-ii中,执行菜单Processing->StartCompilation进行代码编译(快捷键Ctrl+L),如下图
16.若没有语法错误,会弹出FullCompilationwassuccessful,如下图,若有错误,会在quartus的下面的message栏中给出错误的信息,请根据提示,修改代码至正确为止。
17.编译正确后,需要对芯片进行引脚锁定。
操作方式见下图:
18.在此窗口中给出了设计中的端口,见下图
要想验证本设计是否正确,就需要在本设计的四个输入端口D3,D2,D1和D0输入高低电平的逻辑,而开发板上,可以提供高低电平输入的外设有switch。
DE2-115上提供了18个switch,可以任意使用其中的4个,这里使用sw0~sw3,根据DE2-115的用户手册得知,这4个switch分别连接到了FPGA的4个特定的引脚上,因此,将本设计的4个输入锁定到这4个特定的引脚,就可以使用这4个引脚上的switch了。
这四个引脚分别是(见图)
,其余的switch所连接的引脚参见DE2-115_User_manual的Page36表4-1。
19.在Location中对应的位置三击,找到这些引脚并输入,见下图。
同理设定7段数码管的所连接的引脚。
参照DE2-115_User_manual的Page37表4-4,这里使用Hex0的连接的引脚,
20.关闭引脚锁定界面,在Quartus-II中,执行Processing->StartCompilation进行代码编译(快捷键Ctrl+L),在这次编译中,会把引脚锁定的信息编译到生成的下载文件中。
见下图
21.编译结束后,会弹出对话框,点击OK。
接下来进行程序下载操作。
将开发板供电,然后将usb下载线D型头插入板子左上角的blaster插座中,另一端插入电脑任意一个usb口上。
按下开发板红色按钮,给开发板供电。
打开Quartus-II的下载界面,命令见下图:
22.弹出如下窗口,
若在此窗口的左上角显示NoHardware,则按下图操作,确保开发板已经供电并且下载线已经正确连接至电脑,点击HardwareSetup按钮,弹出设置对话框,点击Currentselectedhardware旁边的下拉箭头,选择USB-Blaster[USB-0],然后点击Close按钮。
若显示为USB-Blaster[USB-0],则跳过下图
23.这时候下载界面变化为如下图
24.检查开发板子上的sw19,确保在RUN一边。
点击Start按钮,进行下载,注意Progress进度
25.当Progress显示为100%后,下载完成。
拨动SW0~Sw3四个开关,查看不同的输入数码管上显示的值,并做记录。
Sw3
Sw2
Sw1
Sw0
显示数字
Sw3
Sw2
Sw1
Sw0
显示数字
0
0
0
0
1
0
1
0
0
0
0
1
1
1
0
1
0
0
1
0
0
1
1
0
1
0
0
0
0
1
0
0
1
0
0
1
0
0
1
1
【思考与分析】
关闭此实验的QuartusII工程和软件,关闭开发板电源,独立完成此项目,并将本代码修改使其能用16进制的方式显示0~F。
修改引脚锁定,使用HEX5数码管显示,SW13~SW16作为二进制的输入端。
重复此设计。
【报告要求】
字迹工整,每项均要填写。
实验二数字跑表
(本实验为设计性实验)
【实验目的】
掌握分频器的工作原理和设计方法;
掌握秒表的HDL描述方法;
了解项目设计的构思及实现过程;
掌握DE2-115开发板上有源晶振的作用和使用方法。
【实验仪器】
PC机1台
Quartus-II软件1套
DE2-115开发板1套,板载usb-blaster下载线。
【实验原理】
将板载的50M有源晶振分频出100Hz时钟信号,在100Hz的时钟作用下,百分之一秒所在的计数器开始加1,当计数到9时,自身清0,同时产生一个进位(此时进位位的频率为10Hz),利用此进位位作为十分之一秒的计数时钟,计数范围从0到9,并且也产生一个进位(频率为1Hz),此进位再作为秒位的计数时钟……依次递推下去,便会产生一个秒表,计数器的显示可以采用实验一的Bcd2seg转化为数码管显示。
用原理图表示如下图:
【实验内容】
在DE2开发板上实现一个8位数显示的秒表。
【实验步骤】
1.在e盘新建一个目录e:
\fpga\experiment2,(如果此目录已经存在,则删除它)用于存放本次实验中的设计文件。
2.新建一个Verilog文件并创建项目,Verilog文件命名为e:
\fpga\experiment2\watch.v。
端口和功能如下:
Clk50M为50MHz的有源晶振输入,经分频后得到100Hz的时钟,PSL[6..0]显示对应秒表的百分之一秒,PSH[6..0]对应显示秒表的十分之一秒,SL[6..0]对应显示秒表的秒,SH[6..0]对应显示秒表的“十”秒位,ML[6..0]对应显示秒表的分钟,MH[6..0]对应显示秒表的“十”分钟位,HL[6..0]对应显示秒表的小时个位,HH[6..0]对应显示秒表的小时“十”位。
3.按照原理中的思想编写相应的代码。
4.按照DE2-115_User_manual提供的有源晶振输入引脚和数码管的连接引脚分别锁定图中的clk50M端口和相应的秒表显示端口(数码管使用自定义)。
5.重新编译整个工程并下载到DE2-115上进行验证。
【思考与分析】
为秒表增加2个控制端,clr:
“清零/启动”键,pause:
“暂停/继续”键。
当clr输入为高电平时启动秒表,当clr端输入低电平时,输出显示全为0,即00000000;当pause输入端为高电平时,秒表正常计数,当pause输入端为低电平时,秒表暂停计数。
分别将clr端口和pause端口用任意2个switch控制。
并在开发板上验证。
【报告要求】
字迹工整。
在实验过程遇到的各类问题需要做记录,以及解决办法和解决过程都要写到数据分析栏目中,并给出自己的体会。
实验三“双时钟”模10计数器
【实验目的】
掌握按键去抖动原理;
掌握输入信号的边沿检测方法;
掌握任意模计数器设计方法。
【实验仪器】
PC机1台
Quartus-II软件1套
DE2-115开发板1套,板载usb-blaster下载线。
【实验原理】
利用系统时钟对两个按键进行滤波去抖动处理后,分别使用边沿检测电路,当检测到一个键的边沿时,对计数器进行加1操作;当检测到另一个键的边沿时,对计数器进行减1操作;计数的的模值为10。
【实验内容】
在DE2开发板上实现一个模10计数器,一个按键输入计数器增加,另一个按键输入时,计数器减少。
【实验步骤】
1.在e盘新建一个目录e:
\fpga\experiment3,(如果此目录已经存在,则删除它)用于存放本次实验中的设计文件。
2.新建一个Verilog文件并创建项目,Verilog文件命名为e:
\fpga\experiment3\cntr10.v。
端口和功能如下:
3.按照原理中的思想编写相应的代码。
4.按照DE2-115_User_manual提供的有源晶振输入引脚和数码管的连接引脚分别锁定图中的clk50M端口和相应显示端口(数码管使用HEX0~HEX7中任意一个即可)。
Up和down两个端口必须要使用琴键按钮作为输入。
5.重新编译整个工程并下载到DE2-115上进行验证。
【思考与分析】
怎样能节省滤波(即去抖动)所使用的寄存器数量?
通过实验验证,并根据编译报告的提示进行证明。
【报告要求】
字迹工整。
在实验过程遇到的各类问题需要做记录,以及解决办法和解决过程都要写到数据分析栏目中,并给出自己的体会。
实验四VGA图像显示控制器(彩条)
【实验目的】
了解VGA工作原理和工作时序
了解ADV7123芯片的使用
掌握基于FPGA器件实现VGA图像显示的原理与方法
会根据时序图写程序
【实验仪器】
PC机1台
Quartus-II软件1套
DE2-115开发板1套,板载usb-blaster下载线。
【实验原理】
VGA彩条显示原理
VGA显示的原理
VGA(VideoGraphicsArray)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。
VGA的图形模式分为三类:
CGA,EGA兼容的图形模式;标准VGA图形模式;VGA扩展图形模式,后两种图形模式统称为VGA图形模式。
工业标准的VGA显示模式为:
640×480×16×60。
常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(GreenRedBlue)基色组成。
显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
VGA显示的时序图如下:
VGA行时序图
VGA场时序图
VGA使用扫描方式进行显示的,在内部时钟的作用下,VGA显示器从屏幕的左上角开始扫描,先水平扫完一行(800个像素点)到左右边,再回到最左边(期间CRT对电子束进行行消隐)换下一行,继续扫描,直到扫描到屏幕的最右下角(共525行),这样就扫描完一帧图像。
然后,再回到屏幕左上角(期间CRT对电子束进行场消隐),开始下一帧图像每秒必须扫描60帧,每一个像素点的扫描周期大约为40ns。
时序表如下:
上图中的标准时钟频率为:
25.175MHz(像素输出的频率),而在开发板上只有50MHz的晶振输入,故可以对它做2分频得到25MHz时钟近似替代25.175MHz。
DAC芯片--ADV7123的主要控制端:
●BLANK:
是复合消隐信号,当其为低电平的时候,模拟端输出消隐电平,此时,从R9~R2,G9~G2,B9~B2,输入的数据被忽略。
●SYNC:
复合同步信号,ADV7123只在绿色输出通道有同步信号出现,即绿同步。
●CLOCK:
时钟信号,在CLOCK时钟的上升沿,从R9~R2,G9~G2,B9~B2输入的数据锁存至数据寄存器;BLANK和SYNC信号也是在CLOCK的上升沿被锁存的。
ADV7123和FPGA芯片的连接电路图如下:
其管脚配置为:
【实验内容】
使用DE2-115开发板驱动板载VGA接口,通过连接到显示器显示出多种颜色的彩条。
【实验步骤】
1.在e盘新建一个目录e:
\fpga\experiment2,(如果此目录已经存在,则删除它)用于存放本次实验中的设计文件。
2.新建一个Verilog文件并创建项目,Verilog文件命名为e:
\fpga\experiment4\vga.v。
端口和功能请根据题目需求自己定义。
3.将写好的代码进行编译,分配引脚,再编译然后下载至FPGA芯片中验证。
【思考和分析】
实验五用状态机实现LCD1602显示控制
【实验目的】
掌握CFAH1602BTMCJP的使用方法
熟练掌握状态机的使用
可以根据资料写程序
【实验仪器】
PC机1台;
QuartusII10.0软件1套
DE2-115开发板1个,板载usb-blaster下载线1条;
【实验原理】
通过状态机对LCD1602的命令和数据输入的控制,可以使LCD显示相应的字符。
CFAH1602BTMCJP的端口和接口电路如下图,CFAH1602BTMCJP(以下简称LCD)是一种用5*7点阵图形来显示字符的液晶屏,其显示容量为2行*16个字符。
其电路图如下:
LCD_DATA7~LCD_DATA0为8位数据线。
LCD_EN:
LCD使能。
LCD_RW:
LCD读/写选择,0为写,1为读。
LCD_RS:
LCD指令/数据选择,0为指令,1为数据。
LCD_BLON:
LCD背光,0为关闭,1为开启。
LCD_ON:
电源开和断
当LCD_RS和LCD_RW同为低电平时可以写入指令或者显示地址,当LCD_RS为低电平而LCD_RW为高电平时可以读忙限号,当LCD_RS为高电平而LCD_RW为低电平时可以写入数据。
当LCD_EN出现下跳沿时,液晶模块执行命令。
1.管脚连接为:
3..LCD液晶控制的指令。
4.LCD内部显示地址
5.CGROM中的字符与代码
【实验内容】
利用DE2-115开发板在1602的LCD上面一行显示字符“HelloWorld!
”。
下面一行显示自己的学号。
【实验步骤】
1.先对LCD进行初始化
2.读忙信号
3.写数据
4.读数据
5.显示。
6.流程图如下。
实验六UART设计
【实验目的】
学习用VerilogHDL进行有限状态机编程;
掌握UART通讯协议的原理和规则;
练习DE2—115开发板上面串口的使用。
【实验仪器】
PC机1台;
QuartusII软件1套
DE2-115开发板1个,板载usb-blaster下载线1条。
【实验原理】
一、UART协议
通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。
将资料由串行通信与并行通信间作传输转换,作为并行输入成为串行输出的芯片,通常集成于其他通讯接口的连结上,作为短距离传书最常用的通讯协议。
基本的UART通讯只需要两条信号线:
RXD和TXD,TXD是发送端,RXD是接收端,接收与发送全双工工作。
UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
其中各位的意义如下:
起始位:
先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:
紧接着起始位之后。
资料位的个数可以是4、5、6、7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:
资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:
它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
[3]
空闲位:
处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:
是衡量资料传送速率的指标。
表示每秒钟传送的二进制位数。
串口常用的波特率为9600b/s,14400b/s,19200b/s,38400b/s等,在本节的实例中,选择的是115200b/s
二、数据接收:
数据的发送实际上就是按照上面的格式将寄存器中的并行数据转换为串行数据,为其加上起始位和停止位,以一定的传输速率进行传输。
传输速率可以有很多种选择,即波特率。
三、数据接收:
接收的首要任务是能够正确检测到数据的起始位,起始位是一位0,它作为同步信号附加进发送信息,因为空闲位都是高电平,所以当接收信号突然变为低电平时,告诉接收端将有数据传送。
一个字符接收完毕后,对数据进行校验(如果有校验位的话),最后检测停止位,以确认数据接收完毕。
四、数据采样:
数据传输开始后,接收端不断检测传输线,看是否有起始位到来。
当收到一系列的1之后,检测到一个下降沿,说明起始位出现。
但是,由于传输中有可能会出现毛刺,接收端有可能将毛刺误认为是起始位,所以要对检测到的下降沿进行判别。
一般采用如下方法:
取接收端的时钟频率是发送频率的16倍频,当检测到一个下降沿后,在接下来的16个周期内,检测数据线上0的个数,若0的个数超过一定个数,若0的个数超过一定个数(比如8个或10个,根据实际情况设置),则认为是起始位到来;佛则认为起始位没有到来,继续检测传输线,等待起始位。
在检测到起始位后,还要确定起始位的中间点的位置,由于检测起始位采取16倍频,因此计数器计到8的时刻即是起始位的中间点位置,在随后的数据位接收中,应恰好在每一位的中间点采样,这样可提高接收的可靠性。
接收数据位时,可采取与发送数据相同的时钟频率,如果是8位数据位,1位停止位,则需要采样9次。
最后还要讲接收端的停止位去掉。
五、方框图
【实验内容】
编写VerilogHDL代码,使DE2-115开发板上的RS232接口可以和PC交换数据。
[实现步骤]
1.通过分频得到串口所需时钟115200b/s
2.用状态机设计UART发送模块。
3.用状态机设计UART接收模块。
4.设计一个简易的堆栈用来存贮一些数据。
5.结构图如下。
【实验步骤】
1.在e盘新建一个目录e:
\fpga\experiment6,(如果此目录已经存在,则删除它)用于存放本次实验中的设计文件。
2.新建一个Verilog文件并创建项目,Verilog文件命名为e:
\fpga\experiment6\uart.v。
端口和功能请根据题目需求自己定义。
总体上可以从以下三个角度去实现
通过分频得到串口所需时钟115200b/s
用状态机设计UART发送模块。
用状态机设计UART接收模块。
3.将写好的代码进行编译,分配引脚,再编译然后下载至FPGA芯片中验证。
实验七FPGA控制DAC0832实现SIN函数
(本实验为设计性实验,4学时)
[实验目的]
掌握FPGA中ROM(RAM)的用法;
掌握用CPLD/FPGA实现与DAC0832电路接口的控制;
掌握数字正弦表的设计方法。
[实验仪器]
PC机1台;
QuartusII软件1套
EDA2000实验箱一个,并行电缆、串行电缆各一根。
[实验要求]
查找关于DAC0832的芯片资料,使用Verilog硬件描述语言自行编写编写一段程序,使用FPGA控制DAC0832接口,并且周期性的从DA端输出正弦波。
[提示]
使用EDA2000工具箱上提供的接口电路,仔细分析控制过程,DAC0832和FPGA的连接电路图如下:
上图中DA转换器和和FPGA的引脚连接以及运算放大器的连接已经在EDA2000实验箱上固化好了,同学们只需编写相应的程序即可。
[参考实验结果]
[思考与分析]
尝试使用不同的方法使用FPGA内的RAM资源。
尝试使用DDS技术输出频率可调的正弦波。