资源描述
.
州 科 技 学 院
课 程 设 计
课 程 EDA课程设计
题 目 CPLD与51单片机数据通信设计
专业班级 *********
学生XX ***
学生学号 ***********
指导教师 *****
2011年 6 月 14 日
2 / 20
摘 要
本文介绍了利用行思科技的一款CPLD开发套件和微机上的QuartusⅡ等软件系统,使用Verilog HDL语言输入方法来实现串行通信。
Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。
本文简单介绍EDA技术的发展史、说明QuartusⅡ的使用过程,阐述了单片机与CPLD实行最简单的串行通信(SPI)相关过程。
关键词:EDA(电子设计自动化);Verilog HDL(硬件描述语言);QuartusⅡ软件开发环境
目录
第1章 概 述1
1.1 EDA的概念 1
1.1.1 EDA技术与应用 2
1.1.2 EDA技术发展趋势 2
1.2 EDA的工作平台 3
1.2.1 EDA硬件工作平台 3
1.2.2 EDA 的软件工作平台 3
第2章CPLD原理图设计 4
2.1 CPLD数据接收流程图: 4
2.2 CPLD数据显示流程图: 5
2.3系统逻辑框图: 5
第3章单片机原理图设计6
3.1发送数据流程图: 6
3.2硬件结构图: 7
第4章 系统程序设计
4.1 设计详细分析 8
4.1.1 CPLD通信协议SPI 8
4.1.2实验原理 8
4.2 SPI通信系统设计过程 8
4.2.1设计规划 8
4.2.2设计说明 9
4.3 程序设计 9
结 论 13
参考文献 13
附录与思考14
第1章 概 述
1.1 EDA的概念
EDA是电子设计自动化(Electronic Design Automation)的缩写。由于它是一门刚刚发展起来的新技术,涉与面广,容丰富,理解各异,所以目前尚无一个确切的定义[1]。但从EDA技术的几个主要方面的容来看,可以理解为:EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件与实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。可以实现逻辑编译、逻辑化简、逻辑分割、逻辑综合与优化,逻辑布局布线、逻辑仿真。完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片[2]。
EDA技术是伴随着计算机、集成电路、电子系统的设计发展起来的,至今已有30多年的历程。大致可以分为三个发展阶段。20世纪70年代的CAD(计算机辅助设计)阶段:这一阶段的主要特征是利用计算机辅助进行电路原理图编辑,PCB布同布线,使得设计师从传统高度重复繁杂的绘图劳动中解脱出来。20世纪80年代的QAE(计算机辅助工程设计)阶段:这一阶段的主要特征是以逻辑摸拟、定时分析、故障仿真、自动布局布线为核心,重点解决电路设计的功能检测等问题,使设计能在产品制作之前预知产品的功能与性能[3]。20世纪90年代是EDA(电子设计自动化)阶段:这一阶段的主要特征是以高级描述语言,系统级仿真和综合技术为特点,采用“自顶向下”的设计理念,将设计前期的许多高层次设计由EDA工具来完成[4]。
EDA是电子技术设计自动化,也就是能够帮助人们设计电子电路或系统的软件工具。该工具可以在电子产品的各个设计阶段发挥作用,使设计更复杂的电路和系统成为可能。在原理图设计阶段,可以使用EDA中的仿真工具论证设计的正确性;在芯片设计阶段,可以使用EDA中的芯片设计工具设计制作芯片的版图;在电路板设计阶段,可以使用EDA中电路板设计工具设计多层电路板。特别是支持硬件描述语言的EDA工具的出现,使复杂数字系统设计自动化成为可能,只要用硬件描述语言将数字系统的行为描述正确,就可以进行该数字系统的芯片设计与制造[5]。21世纪将是EDA技术的高速发展期,EDA技术将是对21世纪产生重大影响的十大技术之一。
硬件描述语言 : 硬件描述语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。 常用硬件描述语言有HDL、Verilog和VHDL语言[6]。
1.1.1 EDA技术与应用
电子EDA技术发展迅猛,逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、硬件描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。具有代表性的是全国每两年举办一次的大学生电子设计竞赛活动。在科研方面:主要利用电路仿真工具进行电路设计与仿真;利用虚拟仪器进行产品调试;将FPGA器件的开发应用到仪器设备中。在产品设计与制造方面:从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在后期的制作、电子设备的研制与生产、电路板的焊接、器件的制作过程等有重要作用。可以说电子EDA技术已经成为电子工业领域不可缺少的技术支持[7]。
1.1.2 EDA技术发展趋势
EDA技术在进入21世纪后,由于更大规模的FPGA器件的不断推出,在仿真和设计两方面支持标准硬件描述语言的功能强大的EDA软件不断更新、增加,使电子EDA技术得到了更大的发展。电子技术全方位纳入EDA领域,EDA使得电子领域各学科的界限更加模糊,更加互为包容,突出表现在以下几个方面:使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能;基于EDA工具的ASIC设计标准单元已涵盖大规模电子系统与IP核模块;软硬件IP核在电子行业的产业领域、技术领域和设计应用领域得到进一步确认;SoC高效低成本设计技术的成熟。随着半导体技术、集成技术和计算机技术的迅猛发展,电子系统的设计方法和设计手段都发生了很大的变化。可以说电子EDA技术是电子设计领域的一场革命。传统的“固定功能集成块十连线”的设计方逐步地退出历史舞台,而基于芯片的设计方成为现代电子系统设计的主流。作为高等院校有关专业的学生和广大的电子工程师了解和掌握这一先进技术是势在必行,这不仅是提高设计效率的需要,更是时代发展的需求,只有掌握了EDA技术才有能力参与世界电子工业市场的竞争,才能生存与发展。随着科技的进步,电子产品的更新日新月异,EDA技术作为电子产品开发研制的源动力,已成为现代电子设计的核心。所以发展EDA技术将是电子设计领域和电子产业界的一场重大的技术革命,同时也对电类课程的教学和科研提出了更深更高的要求。特别是EDA技术在我国尚未普与,掌握和普与这一全新的技术,将对我国电子技术的发展具有深远的意义。
1.2 EDA的工作平台
1.2.1 EDA硬件工作平台
1.计算机;
2.CPLD开发套件一款(MAX2EPM1270T144C5)。
1.2.2 EDA 的软件工作平台
PLD(Programmable Logic Device)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。目前主要有两大类型:CPLD(Complex PLD)和FPGA(Field Programmable Gate Array)。它们的基本设计方法是借助于EDA软件,用原理图、状态机、布尔表达式、硬件描述语言等方法,生成相应的目标文件,最后用编程器或下载电缆,由目标器件实现。生产PLD的厂家很多,但最有代表性的PLD厂家为Altera、Xilinx和Lattice 公司。
我们采用了QuartusⅡ软件作为开发工具。
1.2.3 SPI协议简述
SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 上升沿发送、下降沿接收、高位先发送。上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。
第2章 CPLD原理图设计
2.1 CPLD数据接收原理流程图:
开始
posedge sck
cs==1
counter<=0;
sbuf[7-counter]<=data
ounter<=counter+1
counter==4'd8
counter<=0;
sbuf[7:0]<=sbuf[7:0]
N
sbuf[7:0]<=sbuf[7:0]
Y
N
Y
N
图2-1 CPLD数据接收 流程图
2.2 CPLD显示流程图:
开始
posedge sck
out[3:0]是否为1-8
decodeout输出为其段码
N
N
Y
N
图2-2 CPLD数据显示流程图
2.3 CPLD设计的电路逻辑框图:
图2-3 系统逻辑框图
第3章 单片机原理图设计
3.1 51数据发送流程图:
开始
初始化变量
发送初始值buf=5
cs=1;
hc=buf;
cs=0;
i<8
i=0
dat=hc&0x80
hc=hc<<1
sck发送一个脉冲
i++
sck发送一个脉冲
等待发送下一个数据
3-1 发送数据流程图
3.2 51硬件结构图:
图3-2 硬件结构图
第4章 系统程序设计
4.1 设计详细分析
4.1.1 CPLD通信协议SPI: 本次课程设计中只取了SPI协议在方式0,CPOL=0(SCL为低时数据线空闲);
CPHA=0(为第一个SCl上升沿时),CPLD开始采集数据。为了设计的简单,简化了数据通信协议,题目要用CPLD接收来自51单片机的数据并在数码管上显示,
把51单片机数据接收端口SDO(CPLD发送端口)给省略了,还有在verilog程序设计时,省略了SPI中有关寄存器的配置。
4.1.2实验原理
1.发送程序:
当51单片机初始化之后,会向CPLD发送一个数字6;然后等待下一个按键按下,每当按键按下,就会发送对应的数字过去,每次发送时都会重新打开片选CS,每次发送完一次数据都会关闭CS。
2.接收数据:
当检测到片选信号CS有效时,在每个SCK上升沿时,将数据依次放到缓冲寄存器buf里面,依次将其送到共阴极数码管上显示,注意SPI协议发送数据是从低位往高位发送的,接收时注意。每接收8位数据,计数变量counter清零,以便下次继续发送数据。
4.2 SPI通信系统设计过程
4.2.1设计规划
基于硬件描述语言(Verilog HDL),行思科技的开发套件与QuartusⅡ软件设计数字钟,实现实验要求的实现51单片机与CPLD之间的数据通信(采用SPI协议),并通过8位八段共阴数码管静态稳定准确地显示出来。
4.2.2设计说明
本章节主要介绍用Verilog HDL语言来描述SPI协议通信和显示部分与c语言描述的单片机发送数据的程序部分。
4.3 Verilog HDL设计
4.3.1 数据接收与显示程序
module spi(sck,data,cs,decodeout);
input sck,data,cs;
output[6:0] decodeout;
reg [6:0] decodeout;
wire [7:0] out;
reg [7:0] sbuf;
reg [3:0] counter,counter2;
always(posedge sck)
begin
if(cs)
begin
counter<=0;
//out<=0;
end
else
begin
sbuf[7-counter]<=data;
counter<=counter+1;
if(counter==4'd8)
begin
counter<=0;
sbuf[7:0]<=sbuf[7:0];
end
end
end
wire [7:0] t_buf=sbuf[7:0];
assign out[7:0]=t_buf[7:0];
always(*)
begin
case(out[3:0])
4'd0:decodeout=7'h3f;
4'd1:decodeout=7'h06;
4'd2:decodeout=7'h5b;
4'd3:decodeout=7'h4f;
4'd4:decodeout=7'h66;
4'd5:decodeout=7'h6d;
4'd6:decodeout=7'h7d;
4'd7:decodeout=7'h07;
4'd8:decodeout=7'h7f;
4'd9:decodeout=7'h6f;
default: decodeout=7'bx;
endcase
end
/*
case(out[7:4])
4'd0:decodeout2=7'h3f;
4'd1:decodeout2=7'h06;
4'd2:decodeout2=7'h5b;
4'd3:decodeout2=7'h4f;
4'd4:decodeout2=7'h66;
4'd5:decodeout2=7'h6d;
4'd6:decodeout2=7'h7d;
4'd7:decodeout2=7'h07;
4'd8:decodeout2=7'h7f;
4'd9:decodeout2=7'h6f;
default: decodeout2=7'bx;
endcase */
endmodule//程序注释部分为追加的显示发送数据的高四位
#include<reg52.h>
#include<intrins.h>
sbit sck=P3^1;
sbit dat=P3^2;
sbit cs=P3^3;
unsigned char buf;
void initck()
{
SCON=0x70;
ES=1;
EA=1;
TMOD|=0x20;
TH1=TL1=0xfd;
TR1=1;
}
4.3.2 数据发送程序
#include<reg52.h>
#include<intrins.h>
sbit sck=P3^1;
sbit dat=P3^2;
sbit cs=P3^3;
unsigned char buf;
void delay()
{
int i,j;
for(i=0;i<50;i++)
void main()
{
unsigned char i,hc,hc2;
buf=0x6;
sck=0;
initck();
while(1)
{
cs=1;
hc2=hc=buf;
cs=0;
for(i=0;i<8;i++)
{
dat=hc&0x80;
hc=hc<<1;
sck=1;
_nop_();
_nop_();
delay();
sck=0;
}
cs=1;
while(hc2==buf);
buf=buf-0x30;
}
}
void fack() interrupt 4
{
RI=0;
if(SBUF!=0)
buf=SBUF;
}
方框里为用电脑发送数据,单片机接收,然后再送给CPLD显示的程序
for(j=0;j<10;j++);
}
void delay2()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<1000;j++);
}
void main()
{
unsigned char i,hc;
buf=0x5;
sck=0;
while(1)
{
cs=1;
hc=buf;
cs=0;
for(i=0;i<8;i++)
{
dat=hc&0x80;
hc=hc<<1;
sck=1;
_nop_();
_nop_();
delay();
sck=0;
}
cs=1;
while(P0==0xff);
delay2();
if(P0==0xfe)
buf=1;
else if(P0==0xfd)
buf=2;
else if(P0==0xfb)
buf=3;
else if(P0==0xf7)
buf=4;
else if(P0==0xef)
buf=5;
else if(P0==0xdf)
buf=6;
else if(P0==0xbf)
buf=7;
else if(P0==0x7f)
buf=8;
while(P0!=0xff);
delay2();
}
}
4.4 实验连接
1.51单片机,键盘输入口P0,数据输出口sck=P3^1、dat=P3^2、cs=P3^3。
2.CPLD如下图:
结 论
通过此次课程设计,让我对EDA这门技术有了更深的体会,并更好的学会了使用QuartusⅡ软件进行硬件设计。
此次课程设计时基于Verilog HDL语言进行的数据通信,在课程设计时,我逐渐掌握了Verilog HDL语言的语句与语法等的使用。但在学习过程中,也遇到了很多困难,由于刚刚学习EDA不久,所以很多细节容都不是很了解,尤其时VHDL语言的运用。我先上网找了一些资料和程序,一点点的看,慢慢摸索着学习写语句。最后在老师和同学的帮助下,终于完成了此设计,以后我会利用更多时间来学习EDA技术。
EDA技术有着非常好的发展前景,是进几年电子工业的发展趋向,中国的EDA行业发展十分迅速,有着很大的潜力。
参考文献
[1]国丽,朱维勇.电子技术实验指导书.:中国科技大学,2000
[2] 松,黄继业.EDA技术实用教程.:科学,2002
[3]家龙,王小海,章安元.集成电子技术基础教程.:高等教育,2002
[4]宋万杰,罗丰,吴顺君.CPLD技术与其应用.:电子科技大学,1999
[5]王金明,吉斌.数字系统设计与Verilog HDL.:电子工业,2002
[6]明业,将敬旗,刁岚松等译.硬件描述语言Verilog.:清华大学,2001
[7] Altera Corporation,“QuartusII Help Version 2.0”
[8] Synopsys Incorporated,“FPGA Compiler II/FPGA Express VHDL Reference Manual Version 1999,05”
附录与思考
调试现象:
1、实物:
2、仿真:
仿真时输入的dat为4,CPLD输出的decodeout为)0x66,为4的七段码,所以程序的时序正确。
问题:
当数据通信时,用led调试程序时,偶尔会出现数据显示与发送的数据不一致现象,可能问题出现在CPLD开发板的引脚电压高低电平为0-3.3v,而51单片机的引脚高低电平为0-5v,导致两者之间电压不匹配,从而引起误差,如有时51dat脚输出为2v,而其认为为低电平,但是CPLD认为为高电平,导致显示出现错误。
解决思路:
1、 电压比较法:
用运算放大器构成一个电压比较器,设定其阈值电压为2.5v,采用单电源供电,调节电源电压VCC使得当输入电压大于阈值电压时,比较器输出端为3.3v,小于阈值电压时,即为0v。电路原理图如下:
2、 三极管限压法:
当使用如图所示的电路时,5v输出端的输出电压大于3.3v时,三极管给的发射极导通,产生一个压降,是3.3v的输入端得电压接近3.3v,而且此种方法对于三级管基极的电源电压影响较小,大部分电流经集电极流入地,流进基极的只有流进集电极的几百分之一(取决于三极管的发大倍数)。
展开阅读全文