60计数器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
60计数器实验报告篇一:60进制计数器VHDL实验报告
《可编程器件原理与应用》实训报告书
学号XX2305953
年级 07
专业班级电信(3)班
姓名薛晓玲
指导教师李致金
二〇〇九年十二月
目录
前言
第一章 VHDL语言介绍
1.1 VHDL的发展史
1.2 VHDL的特点
第二章六十进制计数器的设计与仿真
2.1 六十进制计数器源程序
2.2 运用软件设计过程
2.3 时序仿真
体会
致谢
参考文献
前言
本项实验通过六十进制计数器的设计与仿真,学习VHDL 语言及VHDL文本输入设计方法,编写六十进制计数器源程序,应用MAX+PlusII软件进VHDL文本输入设计与波形仿真。
写出源程序,并写出设计与仿真过程。
第一章 VHDL语言介绍
1.1 VHDL发展史
硬件描述语言(hardware description language,HDL)是电子系统硬件行为描述,结构描述,数据流描述的语言.目前,利用硬件描述语言可以进行数字电子系统的设计.随着研究的深入,利用硬件描述语言进行模拟电子系统设计或混合电子系统设计也正在探索中.国外硬件描述语言种类很多,有的从Pascal发展而来,也有一些从C语言发展而来.有些HDL成为IEEE标准,但大部分是企业标准.VHDL来源于美国军方,其他的硬件描述语言则多来源于民间公司.可谓百家争鸣,百花齐放.这些不同的语言传播到国内,同样也引起了不同的影响.在我国比较有影响的有两种硬件描述语言:VHDL语言和Verilog HDL语言.这两种语言已成为IEEE 标准语言.
电子设计自动化(electronic design automation,EDA)技术的理论基础,设计工具,设计器件应是这样的关系:设计师用硬件描述语言HDL描绘出硬件的结构或硬件的行为,再用设计工具将这些描述综合映射成与半导体工艺有关的硬
件配置文件,半导体器件FPGA则是这些硬件配置文件的载体.当这些FPGA器件加载,配置上不同的文件时,这个器件便具有了相应的功能.在这一系列的设计,综合,仿真,验证,配置的过程中,现代电子设计理论和现代电子设计方法贯穿于其中.
以HDL语言表达设计意图,以FPGA作为硬件实现载体,以计算机为设计开发工具,以EDA软件为开发环境的现代电子设计方法日趋成熟.在这里,笔者认为,要振兴我国电子产业,需要各相关专业的人士共同努力.HDL语言的语法语义学研究与半导体工艺相关联的编译映射关系的研究,深亚微米半导体工艺与EDA设计工具的仿真,验证及方法的研究,这需要半导体专家和操作系统专家共同努力,以便能开发出更加先进的EDA工具软件.软件,硬件协同开发缩短了电子设计周期,加速了电子产品更新换代的步伐.毫不夸张地说,EDA工程是电子产业的心脏起搏器,是电子产业飞速发展的原动力.本书从应用的角度向国内广大读者介绍VHDL编程技术,让大家掌握HDL编程,了解FPGA结构,学会使用EDA工具,为集成电路前端设计打下基础.
VHDL语言的英文全名是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言.HDL发展的技术源头是:在HDL形成发展之前,已有了许多程序设计语言,如汇
编,C,Pascal,Fortran,Prolog等.这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述.CAD的出现,使人们可以利用计算机进行建筑,服装等行业的辅助设计,电子辅助设计也同步发展起来.在从CAD工具到EDA工具的进化过程中,电子设计工具的人机界面能力越来越高.在利用EDA工具进行电子设计时,逻辑图,分立电子原件作为整个越来越复杂的电子系统的设计已不适应.任何一种EDA工具,都需要一种硬件描述语言来作为EDA工具的工作语言.这些众多的EDA工具软件开发者,各自推出了自己的HDL语言.
HDL发展的社会根源是:美国国防部电子系统项目有众多的承包公司,由于各公司技术路线不一致,许多产品不兼容,他们使用各自的设计语言,使得甲公司的设计不能被乙公司重复利用,造成了信息交换困难和维护困难.美国政府为了降低开发费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望VHDL功能强大,严格,可读性好.政府要求各公司的合同都用它来描述,以避免产生歧义.
由政府牵头,VHDL工作小组于1981年6月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL.1983年第3季度,由IBM公司,TI公
司,Intermetrics公司签约,组成开发小组,工作任务是
提出语言版本和开发软件环境.1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,并宣布实施,即IEEE STD
1076—1987[LRM87].1993年VHDL重新修订,形成了新的标准,即IEEE STD 1076—1993[LRM93].
从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用VHDL文档.即第一个官方VHDL 标准得到推广,实施和普及.
1.2 VHDL的特点
VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用 , 它自身必然具有很多其他硬件描述语言所不具备的优点。
归纳起来 ,VHDL 语言主要具有以下优点: (1) VHDL 语言功能强大 , 设计方式多样
VHDL 语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。
同时, 它还具有多层次的电路设计描述功能。
此外 ,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现, 这是其他硬件描述语言所不能比拟的。
VHDL 语言设计方法灵活多样 , 既支持自顶向下的设计方式, 也支持自底向上的设计方法; 既支持模块化设计方法, 也支持层次化设计方法。
(2) VHDL 语言具有强大的硬件描述能力
VHDL 语言具有多层次的电路设计描述功能,既可描述
系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。
同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。
VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。
VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。
(3) VHDL 语言具有很强的移植能力
VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。
(4) VHDL 语言的设计描述与器件无关
采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。
这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。
当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。
篇二:模60计数器VHDL设计实验
实验报告
专业班级
姓名
学号
成绩评定
电气与信息学院
和谐勤奋求是创新
1.
2.
3.
4.
实验教学考核和成绩评定办法课内实验考核成绩,严格按照该课程教学大纲中明确规定的比重执行。
实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。
单独设立的实验课考核按百分制评分,考核内容应包括基本理论、实验原理和实验。
实验考核内容包括:1)实验预习;2)实验过程(包括实验操作、实验记录和实验态度、表现);3)实验报告;权重分别为0.2 、0.4 、 0.4;原则上根据上述三个方面进行综合评定。
学生未取得1)和2)项成绩时,第3)项成绩无效。
实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现的问题。
实验成绩在教师手册中有记载。
实验报告主要内容
一.实验目的
二.实验仪器及设备
三.实验原理
四.实验步骤
五.实验记录及原始记录
六.数据处理及结论
七. 思考题
八.实验体会(可选项)
注:1. 为了节省纸张,保护环境,便于保管实验报告,统一采用A4纸,实验报告建议双面打印(正文采用宋体五号字)或
手写,右侧装订。
2. 实验类别指验证、演示、综合、设计、创新(研究)、操作六种类型实验。
3. 验证(本文来自:小草范文网:60计数器实验报告)性实验:是指为了使学生巩固课程基本理论知识而开设的强调演示和证明,注重实验结果(事实、概念或理论)的实验。
4. 综合性实验:是指实验内容涉及本课程的综合知识或本课程相关的课程知识的实验。
5. 设计性实验:是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的实验。
1
2
3
4
篇三:89C205160进制计数器实验报告
开放式电路实验报告
实验二基于89C2051的60进制计数器的实现成员:王俊福、宋渊、徐耀阳班级:软1215班
年 10 月 15 日 XX
实验二基于89C2051的60进制计数器的实现
一、实验目的
通过搭建电路并且编程实现60进制计数器,我们学习到89C2051的简单运用以及部分的电路原理,并且学会了对单片机的IO口的简单操作,同时也明白了计数器LED的发光原理。
二.实验原理
计数器通过LED显示,分为十位和各位单独显示。
每一个LED计数器显示电路(如图所示)是由8个发光二极管(七个二极管拼接成数字0—9,一个二极管显示为小数点)和8个电阻构成的电路。
发光二极管与电阻对应串联,然后接在与之相对应的IO口的特定位上。
通过软件编程对IO口输出高低电平来实现LED的亮灭。
由于发光二极管的导通电压一般为1.7V以上,另外,他的工作电流根据型号不同一般为1mA到30mA,电阻选择范围100欧姆~3千欧姆在此我们这里选用560欧姆的电阻。
三.实验电路图
四.实验设备及元器件汇综
同实验一的器件都一样,只不过这一次实验是把原件都集成到了电路板上,然后编程对芯片进行烧写,实现计数器程序。
五.实验过程简述
1、研究电路图,看懂60进制计数器的实现的电路原理。
2、然后把89C2051控制电路和LED显示电路按照编码要求连接。
3、测试电路,观察是否得到正确的60进制计数器显示,若出现错误则按照各部分的功能原理查找错误并纠正。
六.实验总结
1)比较C,ASM汇编语言编程的不同?
答:汇编语言是一种用文字助记符来表示机器指令的符号化语言,是最接近机器码的一种语言。
其主要优点是占用资源少,程序执行效率高,但是在不同的CPU上不易移植。
2)比较一下定时器中断和软件延时实现定时的优劣异同?
答:中断的优点在于响应的及时性,而且在中断程序执行的时候,还可以有处理其他程序,进行精确的计时,比如秒表,时钟,微波炉等的定时系统。
而软件延时是通过空指令或者无用循环来消耗一定的机器周期达到延时的效果,
在此期间程序不可以再做别的事情。
七.实验代码
//六十位加法计数器代码
/**************************************************
**********/ /* include files */ /**************************************************
**********/ #include"define.h"
#include"cpu.h"
static Word T40msTimer=25; //Delay Time is ??;
static Byte byLampeFlag=0;
/**************************************************
**********/ /*Status of P0 * Value of byLampeFlag */ /* 0xff * 0 */ /* 0x00 * 1 */ /* 0xaa * 2 */ /* 0x55 * 3 */ /* 0xf0 * 4 */ /* 0x0f * 5 */ /**************************************************
**********/ // Description: 40ms interrupt
void Timer1ISR_40ms(void) interrupt 3 using 2
{
TL1 = CLOCK_40MS & 0xff;// timer1:40ms
TH1 = CLOCK_40MS >> 8; // CLOCK_40MS =
(65536-40000) TF1 = 0;
if (T40msTimer != 0)T40msTimer--;
}
void InitialCPUIO(void)
{ P1 = 0xff; }
void InitTimer1(void)
{
IE = 0;//disable all interrupt
IP = 0x08; // hi priority:timer1
TMOD = 0x10; //set timer1:mode1 16 bit
TR1 = 1;// start timer1
TL1 = CLOCK_40MS & 0xff;//timer1:40ms
TH1 = CLOCK_40MS >> 8;
ET1 = 1;// ebable timer1 interrupt
EA = 1;//ebable all interrupt
}
void main()
{
int p1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x8 0,0x90};
//P1口数字0—9的模
int p3[10]={0xc0,0xf9,0x64,0x70,0x59,0x52,0x42,0xf8,0x4 0,0x50};
//P3口数字0—9的模
InitialCPUIO();
InitTimer1();
while(1)
{
if (!T40msTimer)
{
T40msTimer = 25;
//P1=p1[byLampeFlag%10];
P1=p1[byLampeFlag-10*(byLampeFlag/10)];P3=p3[byLamp eFlag/10];
byLampeFlag++;
byLampeFlag=byLampeFlag%60; }
}
}。