电子科技大学微机实验报告 实验4

时间:2019-05-14 21:53:53下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《电子科技大学微机实验报告 实验4》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《电子科技大学微机实验报告 实验4》。

第一篇:电子科技大学微机实验报告 实验4

实验四基于ARM的嵌入式Linux开发环境建立 【实验目的】 1.掌握嵌入式Linux 开发环境的基本流程。2.熟悉Linux 操作系统 3.熟悉嵌入式开发平台

【实验内容】

在PC机虚拟机下的Linux系统中建立基于ARM 的嵌入式Linux 开发环境。

1.学会网口的配置 2.Minicom端口的使用

【预备知识】

1.了解ARM9处理器结构 2.了解Linux 系统结构

3.了解ARM开发板使用常识

【实验设备和工具】

硬件:PC机Pentium100以上,ARM嵌入式开发平台

软件:PC机Linux 操作系统+MINICOM+AMRLINUX开发环境

【实验原理】

1.交叉编译器在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构

(Architecture)、操作系统(OperatingSystem)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intelx86体系结构和Linuxforx86操作系统的统称;而x86WinNT平台 实际上是Intelx86体系结构和Windows NTforx86操作系统的简称。交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软

件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++ 开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为nativecompilation,中文可理解

为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM平台,其一般的静态存储空间大概是16到32MB,而CPU 的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilationtoolchain)需要很大的存储空间,并需要很强 的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。

要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(crosscompilation tool-chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:

1、在WindowsPC上,利用RVDS(ARM开发环境),使用armcc编译器,则可编译出针对ARMCPU的可执行代码。

2、在LinuxPC上,利用arm-linux-gcc编译器,可编译出针对LinuxARM平台的可执行代码。

3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARMCPU的可执行代码。

2.NFS服务

NFS是Net FileSystem的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS.NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系

统上的文件。

NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。

在本实验中就是将PC机作为服务器,而将ARM开发板作为客户机,这样ARM开发板就可以远程

访问存放在在PC机上的数据,这样可以缩短研发周期,更方便的调试程序。

【实验步骤】

1.双击桌面上VMWARE,打开Linux 虚拟机 2.点击启动虚拟机,启动虚拟机 3.以root身份登陆虚拟机,密码123456

4.其他步骤详见实验指导书

【实验结果和程序】

基于ARM 的嵌入式Linux开发环境建立完毕。

【思考题】

1.如何验证交叉编译器已安装成功? 答:在终端输入命令:cd/arm/rootfs/home/driver(文件夹里已有test_led.c文件)arm-linux-gcc–o test_ledtest_led.c

若有可执行文件test_led生成则表示交叉编译器已安装成功

2.如果我们需要变更根文件系统的目录,该如何设置使得ARM开发板可以成功挂载?答:修改/etc/exports 文件的内容,将/arm/rootfs*(rw,sync,no_root_squash)改为/XX/XXX

*(rw,sync,no_root_squash)(/XX/XXX为变更后点的文件目录)

3.怎么在u-boot命令行下修改ARM 开发板的IP?

答:输入setenvip=x.x.x.x:192.168.0.1:192.168.0.1:255.255.255.0:uestc:eth0:off

Saveenv

x,x,x,x为ARM开发板的新IP。

【实验结论】

本实验实现了基于ARM 的嵌入式Linux 开发环境建立

第二篇:电子科技大学微机实验报告 实验5

实验五 基于ARM的模块方式驱动程序实验 【实验目的】 1.掌握Linux 系统下设备驱动程序的作用与编写技巧 2.掌握Linux 驱动程序模块加载和卸载的方法 3.了解Linux 内核中的makefile和kconfig文件

【实验内容】

1.基于s3c2440 开发板编写led 驱动程序。2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。3.编写关于led 的测试程序,交叉编译后运行,控制led 灯的亮灭。

【预备知识】

1.了解ARM9处理器结构和Linux 系统结构

2.熟练掌握C语言。

【实验设备和工具】

 硬件:ARM嵌入式开发平台,PC机Pentium100 以上。

 软件:PC机Linux操作系统+MINICOM+AMRLINUX 开发环境

【实验原理】

linux设备驱动程序  驱动的模块式加载和卸载

 编译模块

 装载和卸载模块

 led 驱动的原理

在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。这八个led灯都是接的芯片上的gpio口(通用功能输入输出口)。在本实验的开发板硬件设计中,当led 灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。本驱动的作用就是通过设置对应gpio口的电平来控制led 的亮灭。

因为ARM 芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实

验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。

【实验步骤】实验程

序运行效果:

程序会提示:“pleaseenterthe led status”

输入与希望显示的led状态对应的ledstatus值(输入十进制值即可),观察led 的显示情况。例如:

 输入数字“3”,对应的二进制数字为00000011

故点亮LED2~LED7

 输入数字“4”,对应的二进制数字为00000100

故点亮LED0,LED1,LED3~LED7

【实验结果和程序】

C语言程序:

#include #include #include #include #include #include #include #include #include #include #include #include #include#defineDEVICE_NAME “s3c2440-led”

static intLedMajor=231;

staticintLedMinor=0;

static charledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev *s3c2440_led_cdev;

/*

******************************************************************************* ************************

** Function name:Update_led()**Descriptions **Input :NONE **Output :NONE :update the led status

******************************************************************************* ************************

*/ staticvoid Update_led(void)

{

if(ledstatus&0x01)

s3c2410_gpio_setpin(S3C2410_GPC7,1);//LED0灭

else

s3c2410_gpio_setpin(S3C2410_GPC7,0);//LED0亮

if(ledstatus&0x02)

s3c2410_gpio_setpin(S3C2410_GPC5,1);//LED1灭

else

s3c2410_gpio_setpin(S3C2410_GPC5,0);//LED1亮

if(ledstatus&0x04)

s3c2410_gpio_setpin(S3C2410_GPH9,1);//LED2灭

else

s3c2410_gpio_setpin(S3C2410_GPH9,0);//LED2亮

if(ledstatus&0x08)

s3c2410_gpio_setpin(S3C2410_GPB4,1);//LED3灭

else

s3c2410_gpio_setpin(S3C2410_GPB4,0);//LED3亮

if(ledstatus&0x10)

s3c2410_gpio_setpin(S3C2410_GPG5,1);//LED4灭

else

s3c2410_gpio_setpin(S3C2410_GPG5,0);//LED4亮

if(ledstatus&0x20)

s3c2410_gpio_setpin(S3C2410_GPG6,1);//LED5灭

else

s3c2410_gpio_setpin(S3C2410_GPG6,0);//LED5亮

if(ledstatus&0x40)

s3c2410_gpio_setpin(S3C2410_GPG7,1);//LED6灭elses3c2410_gpio_setpin(S3C2410_GPG7,0);//LED6亮

if(ledstatus&0x80)

s3c2410_gpio_setpin(S3C2410_GPG8,1);//LED7灭

else

s3c2410_gpio_setpin(S3C2410_GPG8,0);//LED7亮

}

staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){

copy_from_user(&ledstatus,buffer,sizeof(ledstatus));

Update_led();

printk(“write: led=0x%x,count=%dn”,ledstatus,count);returnsizeof(ledstatus);} staticints3c2440_Led_open(structinode*inode,struct file *filp)

{

printk(“led device openn”);

return 0;

} staticints3c2440_Led_release(structinode*inode,struct file*filp)

{

printk(“led device releasen”);

return 0;} staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release, };

staticintinits3c2440_Led_init(void)

{

dev_ts3c2440_leds_devno;

/*configure the gpiofor leds*/

s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);

Update_led();/*registerthe devnumber*/ s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno, 1,DEVICE_NAME);

/*registerthe chardevice*/

s3c2440_led_cdev=cdev_alloc();if

(s3c2440_led_cdev!= NULL)

{ cdev_init(s3c2440_led_cdev, &s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev, s3c2440_leds_devno, 1))

printk(KERN_NOTICE “Something wrong when addings3c2440_led_cdev!n”);

else

printk(“Success addings3c2440_led_cdev!n”);} /*create the device node in /dev*/ s3c2440_class =class_create(THIS_MODULE, “led_class”);class_device_create(s3c2440_class, NULL, s3c2440_leds_devno, NULL, DEVICE_NAME);

printk(DEVICE_NAME “ initializedn”);

return 0;

}

staticvoid exits3c2440_Led_exit(void)

cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class, MKDEV(LedMajor,LedMinor));class_destroy(s3c2440_class);printk(DEVICE_NAME “ removedn”);

}

module_init(s3c2440_Led_init);

module_exit(s3c2440_Led_exit);

【思考题】

1.设备驱动程序的功能是什么?答:设备驱动的功能就是将系统提供的调用映射到作用于实际硬件的和设备相关的操作上。

2.模块化的最大优点是什么?答:可以在系统正在运行着的时候给内核增加模块

提供的功能(也可以移除功能)。

3.如果在驱动模块中删除module_exit(s3c2440_Led_exit);后会有什么影响?

答:这个模块将不能被移除。

4.驱动代码中调用的宏MKDEV 的作用是什么?答:获取设备在设备表中的位置。输入主设备号,从设备号,返回位置号。

【实验结论】

本实验实现了linux环境下的led灯驱动的添加。

第三篇:北京科技大学微机原理实验报告

微机原理及应用实验报告

学院: 班级: 学号: 姓名:

微机实验报告书(Ⅰ)学号:姓名:班级: 同组名单:实验日期:

实验题目:8253可编程定时器计数器

实验目标:掌握8253的基本工作原理和编程方法 实验步骤:

连接电路图

如图虚线连接电路,将计数器0设置为方式0,计数器初值为N(N<=0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。程序框图:

程序清单:

;*************************;;* 8253方式0计数器实验 *;;*************************;IOPORT

EQU

0C800H-0280H

IO8253A EQU

IOPORT+283H

IO8253B EQU

IOPORT+280H

CODE SEGMENT

ASSUME

CS:CODE

START: MOV

AL,00010000B

;设置8253工作方式

MOV

DX,IO8253A

OUT

DX,AL

MOV

DX,IO8253B

;送计数初值为0FH

MOV

AL,0FH

OUT

DX,AL

LLL: IN

AL,DX

;读计数初值

CALL

DISP

;调显示子程序

PUSH

DX

MOV

AH,06H

MOV

DL,0FFH

INT

21H

POP

DX

JZ

LLL

;跳转到LLL

MOV

AH,4CH

;退出

INT

21H

DISP PROC

NEAR

;显示子程序

PUSH

DX

AND

AL,0FH

;首先取低四位

MOV

DL,AL

CMP

DL,9

;判断是否<=9

JLE

NUM

;若是则为'0'-'9',ASCII码加30H

ADD

DL,7

;否则为'A'-'F',ASCII码加37H

NUM: ADD

DL,30H

MOV

AH,02H

;显示

INT

21H

MOV

DL,0DH

;加回车符

INT

21H

MOV

DL,0AH

;加换行符

INT

21H

POP

DX

RET

;子程序返回

DISP ENDP

CODE ENDS

END

START 运行结果:

每输入一个单脉冲,屏幕上的数值减1,从15减到0后(拨动16次后),检测到OUT0输出由低电平变为高电平。小结(体会与收获):

通过预习和实验,学会了 8253 芯片和微机接口原理和方法,掌握 8253 定时器/计数器的基本工作原理、工作方式和编程原理,熟悉了汇编代码的编写。实验中,连接电路,利用代码控制实验电路,深对了课本理论的理解。

由于是第一次实验,进程比较缓慢,所以仅进行了8253可编程定时器/计数器的一个实验,下次实验会熟练一些。

微机实验报告书(Ⅱ)

学号:姓名:班级: 同组名单:实验日期:

实验题目:1.8253可编程定时器计数器

2.8255可编程并行接口(方式0)3.七段数码管

实验目标:1.掌握8253的基本工作原理和编程方法

2.掌握8255方式0的工作原理及使用方法 3.掌握数码管显示数字的原理

实验步骤: 实验一:

连接电路图

按上图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。实验二:

连接电路图

1)实验电路如图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

2)编程从8255C口输入数据,再从A口输出。实验三:

连接电路图

静态显示:按图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中), S0、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。程序框图: 实验一:

实验二:

实验三:

程序清单: 实验一:

;*******************;* 8253分频 *;******************* IOPORT EQU

0C800H-0280H

IO8253A EQU

IOPORT+283H

IO8253B EQU

IOPORT+280H

IO8253C EQU

IOPORT+281H

CODE SEGMENT

ASSUME

CS:CODE

START: MOV

DX,IO8253A;向8253写控制字

MOV

AL,36H

;工作方式

OUT

DX,AL

MOV

AX,1000

;写入循环计数初值1000

MOV

DX,IO8253B

OUT

DX,AL

;先写入低字节

MOV

AL,AH

OUT

DX,AL

;后写入高字节

MOV

DX,IO8253A

MOV

AL,76H

;设工作方式

OUT

DX,AL

MOV

AX,1000

;写入循环计数初值1000

MOV

DX,IO8253C

OUT

DX,AL

;先写低字节

MOV

AL,AH

OUT

DX,AL

;后写高字节

MOV

AH,4CH

;程序退出

INT

21H

CODE ENDS

END

START

实验二:

;*************************;;* 8255A的基本输入输出 *;;*************************;IOPORT EQU 0C800H‐280H IO8255A EQU IOPORT+288H IO8255B EQU IOPORT+ 28BH IO8255C EQU IOPORT+28AH CODE SEGMENT ASSUME CS:CODE START: MOV DX,IO8255B;对 8255 进行设定,A 输出,C 输入

MOV AL,10001001B

OUT DX,AL INPUT: MOV DX,IO8255C;从 C 输入

IN AL,DX

MOV DX,IO8255A;从 A 输出

OUT DX,AL

MOV DL,0FFH;判断是否有按键

MOV AH,06H

INT 21H

JZ INPUT;若无,则继续 C 输入,A 输出

MOV AH,4CH;否则,返回 DOS

INT 21H CODE ENDS END START 实验三:

;************************************;;*键盘输入数据(0-9)控制LED数码管显示*;;************************************;

DATA

SEGMENT

IOPORT

EQU

0C800H-280H IO8255A

EQU

IOPORT+288H IO8255B

EQU

IOPORT+28BH IO8255C

EQU

IOPORT+28AH

LED

DB

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

MESG1

DB

0DH,0AH,'Input a num(0--9),other key is exit:',0DH,0AH,'$' DATA

ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

MOV

AX,DATA

MOV

DS,AX

MOV

DX,IO8255B

;使 8255 的A口为输出方式

MOV

AX,10000000B

OUT

DX,AL

SSS:

MOV

DX,OFFSET MESG1

;显示提示信息

MOV

AH,09H

INT

21H

MOV

AH,01

;从键盘接收字符

INT

21H

CMP

AL,30H

;是否小于 0

JL

EXIT

;若是则退出

CMP

AL,39H

;是否大于9

JG

EXIT

;若是则退出

SUB

AL,30H

;将所得字符的 ASCII 码减 30H

MOV

BX,OFFSET LED

;BX为数码表的起始地址

XLAT

;求出相应的段码

MOV

DX,IO8255A

;从 8255 的A口输出

OUT

DX,AL

JMP

SSS

;转 SSS EXIT:

MOV

AH,4CH

;返回

INT

21H CODE

ENDS

END

START;

运行结果: 实验一:

8253通道0和通道1均工作在方式3,计数初值均为1000。通道0的时钟输入为1MHz标准脉冲,产生1000Hz的方波;通道1以通道0输出的1000Hz方波脉冲为输入,产生1Hz的方波。用逻辑笔发现,OUT1 输出电平呈规律性高低变化(显示灯闪烁),时间间隔为 1s,说明输出频率为 1Hz,实现计时器功能。实验二:

当逻辑开关K0~K7中的一个或几个打开时,对应的LED灯就会亮起来,即利用8255A实现了基本的输入输出控制。实验三:

静态显示:当从键盘输入0~9任一数字时,七段数码管上便 会显示相应的数字,按下其他按键则退出程序。小结(体会和收获):

通过本次实验,进一步了解了8253可编程定时器/计数器;巩固了可编程并行接口8255的基本知识点,了解了该芯片的应用。通过编程实现,熟悉了8255方式控制字,了解了方式0和基本工作原理。通过这三次实验的学习,对于可编程接口芯片有了更深的认识,掌握了基本的微机接口方法。

在实验过程中要细心,当编译、链接或者运行的时候遇到错误的时候,要仔细检查程序的输入是否正确,很容易输错字母数字。

微机实验报告书(Ⅲ)

学号:姓名:班级: 同组名单:实验日期: 实验题目:步进电机控制实验

实验目标:1.了解步进电机控制的基本原理

2.掌握控制步进电机转动的编程方法

实验步骤:

连接电路图

1)按图14连接线路,利用8255输出脉冲序列,开关K0~K6控制步进电机转速,K7控制步进电机转向。8255 CS接288H~28FH。PA0~PA3接BA~BD;PC0~PC7接K0~K7。

2)编程:当K0~K6中某一开关为“1”(向上拨)时步进电机启动。K7向上拨电机正转,向下拨电机反转。程序框图:

程序清单:

;*******************************;;*

步进电机

*;;*******************************;

DATA

SEGMENT

IOPORT

EQU

0E400H-280H

IO8255A

EQU

IOPORT+288H

;8255A 输出端口

IO8255B

EQU

IOPORT+ 28BH

;8255B 控制端口

IO8255C

EQU

IOPORT+ 28AH

;8255C 输入端口

BUF

DB

0

MES

DB

'K0-K6 ARE SPEED CONTROL',0AH,0DH

DB

'K6 IS THE LOWEST SPEED ',0AH,0DH

DB

'K0 IS THE HIGHEST SPEED',0AH,0DH

DB

'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$'

DATA

ENDS

CODE SEGMENT

ASSUME

CS:CODE,DS:DATA

START:

MOV

AX,CS

MOV

DS,AX

MOV

AX,DATA

MOV

DS,AX

MOV

DX,OFFSET MES

MOV

AH,09

INT

21H

MOV

DX,IO8255B

MOV

AL, 10001001B

OUT

DX,AL

;8255 C输入, A 输出

MOV

BUF,33H

OUT1:

MOV

AL,BUF

MOV

DX,IO8255A

OUT

DX,AL

PUSH

DX

MOV

AH,06H

MOV

DL,0FFH

INT

21H

POP

DX

JE

IN1

MOV

AH,4CH

INT

21H

IN1:

MOV

DX,IO8255C

IN

AL,DX

;输入开关状态

TEST

AL,01H

JNZ

K0

TEST

AL,02H

JNZ

K1

TEST

AL,04H

JNZ

K2

TEST

AL,08H

JNZ

K3

TEST

AL,10H

JNZ

K4

TEST

AL,20H

JNZ

TEST

JNZ

STOP:

MOV

MOV

JMP

K0:

MOV

SAM:

TEST

JZ

JMP

K1:

MOV

JMP

SAM

K2:

MOV

JMP

K3:

MOV

JMP

K4:

MOV

JMP

K5:

MOV

JMP

K6:

MOV

JMP

SAM

ZX0:

CALL

MOV

ROR

MOV

JMP

NX0:

CALL

MOV

ROL

MOV

JMP

DELAY

PROC

DELAY1:

MOV

DELAY2:

LOOP

K5

AL,40H K6

DX,IO8255C AL,0FFH

OUT1

BL,40H

AL,80H ZX0 NX0

BL,50H

BL,70H

SAM

BL,80H SAM

BL,0A0H SAM

BL,0C0H SAM

BL,0FFH

DELAY

AL,BUF

AL,1

BUF,AL OUT1

DELAY

AL,BUF

AL,1

BUF,AL OUT1

NEAR

CX,0FFFFH

DELAY2

DEC

BL

JNZ

DELAY1

RET

DELAY

ENDP

CODE

ENDS

END

START 运行结果:

当K0~K6中任意一开关向上拨时步进电机启动,且K1速度最快,K6速度最慢;当K7向上拨电机正转,向下拨电机反转。当键盘中有任意键输入的时候则程序终止。小结(收获与体会):

实验和理论是相互检验,相互补充和相互促进的,在实际动手动脑运用理论知识的时候,能更深入地领会概念,熟练运用,在此基础上方能进行创新和自由发挥。通过本次实验,我了解了步进电机控制的基本原理,掌握了控制步进电机转动的编程方法。更加深入地了解了微机原理这门课程。

第四篇:现代电子实验报告 电子科技大学

基于FPGA的现代电子实验设计报告

——数字式秒表设计(VHDL)

学院:物理电子学院

专业:

学号:

学生姓名:

指导教师:

实验地点:

实验时间:

刘曦 科研楼303

摘要:

通过使用VHDL语言开发FPGA的一般流程,重点介绍了秒表的基本原理和相应的设计方案,最终采用了一种基于 FPGA 的数字频率的实现方法。该设计采用硬件描述语言VHDL,在软件开发平台ISE上完成。该设计的秒表能准确地完成启动,停止,分段,复位功能。使用 ModelSim 仿真软件对VHDL 程序做了仿真,并完成了综合布局布线,最终下载到EEC-FPGA实验板上取得良好测试效果。

关键词:FPGA,VHDL,ISE,ModelSim

目录

绪论.........................................................4

第一章实验任务…………………………………..5

第二章系统需求和解决方案计划………..5

第三章设计思路…………………………………..6

第四章系统组成和解决方案………………..6

第五章各分模块原理……………………………8

第六章仿真结果与分析………………………..11

第七章分配引脚和下载实现…………………13

第八章实验结论…………………...………………14 绪论:

1.1 课程介绍:

《现代电子技术综合实验》课程通过引入模拟电子技术和数字逻辑设计的综合应用、基于MCU/FPGA/EDA技术的系统设计等综合型设计型实验,对学生进行电子系统综合设计与实践能力的训练与培养。

通过《现代电子技术综合实验》课程的学习,使学生对系统设计原理、主要性能参数的选择原则、单元电路和系统电路设计方法及仿真技术、测试方案拟定及调测技术有所了解;使学生初步掌握电子技术中应用开发的一般流程,初步建立起有关系统设计的基本概念,掌握其基本设计方法,为将来从事电子技术应用和研究工作打下基础。

本文介绍了基于FPGA的数字式秒表的设计方法,设计采用硬件描述语言VHDL,在软件开发平台ISE上完成,可以在较高速时钟频率(48MHz)下正常工作。该数字频率计采用测频的方法,能准确的测量频率在10Hz到100MHz之间的信号。使用ModelSim仿真软件对VHDL程序做了仿真,并完成了综合布局布线,最终下载到芯片Spartan3A上取得良好测试效果。1.2VHDL语言简介: VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL语言的特点: VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来,VHDL 语言主要具有以下优点:(1)VHDL 语言功能强大,设计方式多样(2)VHDL 语言具有强大的硬件描述能力(3)VHDL 语言具有很强的移植能力(4)VHDL 语言的设计描述与器件无关(5)VHDL 语言程序易于共享和复用 由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言,因此它可以使设计成果在设计人员之间方便地进行交流和共享,从而减小硬件电路设计的工作量,缩短开发周期。1.3FPGA简介

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

FPGA一般来说比ASIC(专用集成电路)的速度要慢,实现同样的功能比ASIC电路面积要大。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)。

FPGA设计流程:

对于目标文件为FPGA的HDL设计,其一般流程如下:

1、文本编辑

用任何文本编辑器都可以进行,通常 VHDL文件保存为vhd文件,Verilog 文件保存为 v文件。

2、使用编译工具编译源文件

HDL 的编译器有很多,ACTIVE 公司,MODELSIM 公司,SYNPLICITY 公司,SYNOPSYS 公司,VERIBEST公司等都有自己的编译器。

3、逻辑综合

将源文件调入逻辑综合软件进行综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。但是此时还没有在芯片中形成真正的电路。这一步的最终目的是生成门电路级的网表(Netlist)。

4、布局、布线

将第 3 步生成的网表文件调入 PLD 厂家提供的软件中进行布线,即把设计好的逻辑安放到 CPLD/FPGA 内。这一步的目的是生成用于下载(编程 Programming)的编程文件。在这一步,将用到第 3 步生成的网表,并根据 CPLD /FPGA 厂商的器件容量,结构等进行布局、布线。这就好像在设计 PCB 时的布局布线一样。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。最后,生成一个供编程的文件。这一步同时还会加一些时序信息(Timing)到你的设计项目中去,以便于你做后仿真。

5、后仿真

利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫布局布线仿真或时序仿真)。这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。

6、编程,下载

如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中。

7、硬件测试

硬件测试的目的是为了在更真实的环境中检验 HDL设计的运行情况,特别是对于 HDL 程序设计上不是十分规范,语义上含有一定歧义的程序。

一、实验任务——设计一个秒表:

秒表的计时范围为00’00”00 ~ 59’59”99。有两个按钮开关Start/Stop和Split/Reset,控制秒表的启动、停止、分段和复位:

1,在秒表已经被复位的情况下,按下“Start/Stop”键,秒表开始计时。

2,在秒表正常运行的情况下,如果按下“Start/Stop”键,则秒表暂停计时。3,再次按下该键,秒表继续计时。

4,在秒表正常运行的情况下,如果按下“Split/Reset”键,显示停止在按键时的时间,但秒表仍然在计时; 5,再次按下该键,秒表恢复正常显示。

6,在秒表暂停计时的情况下,按下“Split/Reset”键,秒表复位归零。

二、系统需求和解决方案计划:

在项目开始设计时,首先要确定系统的需求并发展出一个针对这些需求的计划。

按照秒表的设计要求,整个电路需要下面这些组成部分: 2.1 分频器:

对晶体振荡器产生的时钟信号进行分频,产生时间基准信号。2.2 计数器:

对时间基准脉冲进行计数,完成计时功能。2.3 数据锁存器:

锁存数据使显示保持暂停。2.4 控制器:

控制计数器的运行、停止以及复位产生锁存器的使能信号。2.5 扫描显示的控制电路:

包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果。2.6 按键消抖电路:

消除按键输入信号抖动的影响,输出单脉冲。

三、设计思路:

从FPGA开发板的电路可以看出,其不具备对按键输入的消抖功能,故须编写消抖功能的模块代码。消除按键抖动的影响;每按一次键,只输出一个脉冲,其宽度为一个时钟周期。由开发板电路结构可以看出,其为共阳结构,故在其运行为低有效。

8个数码显示管共用一个段位,故为了将时钟显示在8个数码管上,需要一定频率(本秒表为1KHz)的信号进行扫描,使得我们肉眼看上去是8个数码管同时显示的。为了实现秒表暂停和复位的功能,需要锁存器模块将时钟数据锁存起来,并且结合控制电路满足秒表的功能。

FPGA开发板的晶振频率为48MHz,而实际电路需要的频率为1KHz,故须建立分频模块,将48MHz的晶振频率分频成1KHz。在构建计数范围从00’00”00-59’59”99的秒表时,从数码管显示的角度可知,需要建立模六和模十两种计数模块进行组合形成。设计图如下:

四、系统组成和解决方案:

在项目开始设计时,首先要确定系统的需求并发展出一个针对这些需求的计划。按照数字式秒表工作原理的描述,需要下面这些主要的子系统: 1,控制电路;

2,由石英振荡器和数字分频器构成的时基信号发生器; 3,按键开关(按键消抖); 4,计数器; 5,数据锁存器; 6,扫描显示的控制子系统(包括显示译码和扫描控制); 7,六个数码管(LED显示电路)。

设计框图如下:

五、各分模块原理:

5.1、48M-1K分频器

对晶振振荡器产生的时钟信号进行分频,产生时间基准信号。由于FPGA开发板的晶振频率为48MHz,故在设计分频器模块时,为了将频率分频成1KHz,即将输入的信号源每48000个周期转换成输出的一个周期。因此利用上升沿计数手段,将0-47999用16位二进制数表示,而在从0-47999的计数过程中,该二进制数的最高位只有一次状态变化,故可取对应二进制数的最高位来输出达到分频到1KHz的目的。如下代码为将晶振振荡器48MHz频率分频成1KHz信号:

5.2、计数器

对时间基准脉冲进行计数,完成计时功能。实现数字秒表的设计需要模6和模10计数器进行组合。考虑到秒表的暂停和清零等功能,在设计计数器模块时,必须有时钟输入端、使能以及清零端。在有时钟信号输入的情况下,当使能端无效时,计数器不能进行计数;当清零端有效时,计数重新归为0值。而为了实现计数的目的,故必须将各个计数器级联来实现从00’00”00-59’59”99的计数,使得级联的各技术模块有共同的清零端与使能端,因此该单个模块需要有输出进位以及该时刻的计数值并且前一级的进位端连在下一级的使能端上。如下为模6和模10计数器代码:

5.2.1、模6计数器

为了实现在秒表计数是0-5的计数部分,故须设计一个模6计数器,输入时钟信号、使能和清零,遇上升沿则记一次数,当从0记到5时,进位端(用于与下一级计数器级联)有效,且遇上升沿后从5变到0,并且输出的还有每一时刻的计数值。

5.2.2、模10计数器

为了实现在秒表计数是0-9的计数部分,故须设计一个模10计数器,输入时钟信号、使能和清零,遇上升沿则记一次数,当从0记到9时,进位端(用于与下一级计数器级联)有效,且遇上升沿后从9变到0,并且输出的还有每一时刻的计数值。

5.3、控制电路

控制计数器的运行、暂停以及复位;产生锁存器的使能信号。从如下状态图可知,在设计控制模块时,为实现开发板上控制秒表的运行暂停和清零功能,必须设置两个控制输入端,以及需要时钟信号输入端。在时钟信号输入情况下,由状态图显示,在输入不同的控制信号是,控制模块需输出信号控制计数器及其他各模块的清零和使能端,即当外部控制运行/暂停键首次按下时,控制模块输出控制技术模块最开始的计数器模块使能有效,各模块清零无效;当第二次按下时为暂停信号,控制模块控制锁存器锁存并控制显示。当清零控制键按下时,控制模块控制技术模块清零,故要两个输出使能端。

5.4、锁存器

锁存数据,使显示保持锁定。为达到锁存数据目的,则必须要有对应的8个数码显示数据输入,当其中两个数码数据为不变的,故只需输入6组由4位二进制码构成的数据、1KHz时钟信号以及控制模块作用的使能端。当使能端有效的情况下,将输入6组数据输出。5.5、消抖电路

消除按键输入信号抖动的影响,输出单脉冲。在手动控制按键输入控制信号前,由于人为因素,会导致输入信号不稳定等问题,故须添加一个消抖模块,使得每次按键只会产生一个脉冲。故除1KHz时钟信号输入外,还需要一个按键控制信号输入端以及一个按键消抖后输出信号。

5.6、译码器

包括扫描计数器、3-8译码器、数据选择器以及7段译码器;控制8个数码管一扫描方式显示计时结果。译码模块的功能是对之前计数模块的计数值进行译码,使其可以在数码管上显示出来。在8个数码管中有两个数码管显示是不变的,故不需要输出,所以译码模块要求输入需要译码的6组数据以及1KHz时钟信号。译码模块除了要求对每一个可能的值(0-9)进行译码外,还有设计要求8个数码管显示共用一个段位,故还需设计一个3-8译码模块对8个数码显示管进行选择,使其轮流显示,在1KHz的扫描下,使人看上去是8个数码管同时显示的。

l

5.7、计数器模块

由模6和模10计数器级联而成。为了实现从00’00”00-59’59”99的计数,需要将4个模10计数模块和2个模6计数模块级联,并且为了达到设计要求是这6个计数器工作在100Hz的时钟信号下,可利用一个模10的计数模块对1KHz进行分频,输出的信号频率即为100Hz,该总计数模块最终需输出6组计数数据以及其最终的进位。

5.8、top文件

由以上各个文件相互连接而成,以及硬件的管脚管脚分布。将之前所建立的各个模块级联起来,从按键输入信号到按键消抖模块再进而连接到控制器,通过控制模块对总计数器模块、锁存器模块、译码器模块、分频器模块相互连接起来,并设置晶振输入信号以及两个按键控制信号输入,再由译码器模块知,秒表设计的最终输出由一个3-8对应的8位位选信号和一组7位的段选信号组成。最后对总文件的输出进行管脚分配,并下载到FPGA开发板上验证设计。

六、仿真结果与分析::

6.11000HZ信号的产生

6.210位计数器的产生

由图可得,10位计数器从0000计到1001

6.3 6位计数器的产生

由图可得,6位计数器从0000计到0101。

6.4七段数码管显示数字

6.5锁存器

由图可得,当没有时钟信号时Q不变。6.6分频器 1000Hz-100Hz

七、分配引脚和下载实现:

全部仿真通过后,就运行ISE 的设计实现,然后再打开XILINX PACE,在里面分配引脚,即实现设计的输入输出端口与实际芯片的输入输出端口的对应连接。

比如七段LED 管的控制信号就连接到实际电路的七个引脚。需要注意的是一些端口是固定的,不能胡乱的连接。比如时基信号即石英振荡器所提供的信号就只能由P181 输入。同时还要考虑内部的可配制逻辑块CLB 的数量是否够满足程序的综合要求。一切都准备就绪后就可以运行Configure Device,选择要下载的位文件(.bit)便可开始。

八、实验结论:

8.1、本次实验实现了秒表的计数,复位,暂停,锁显等功能,让我充分了解和认识到ISE 和Modelsim软件的强大功能和FPGA 技术的优越性。并对软件开发产生了兴趣。

8.2、仿真和下载实现是两个不同的检验,仿真从软件内部来检验程序的合理性和正确性,准确性较高。而下载实现是从外部来观察程序的实现效果,更直观,但不具有准确性。8.3、有时候下载实现了所有的功能,但是仿真通不过,这可能是因为程序中有些部分并不完善导致。从外部来看,效果是一样的,但实际程序却存在漏洞。附:参考文献:

《数字设计原理与实践》作者:(美)John F.Wakerly编 《FPGA应用开发入门与典型实例》华清远见嵌入式培训中心编

附件:(源程序)

1.TOP文件:

library IEEE;use IEEE.STD_LOGIC_1164.ALL;

entity top is

Port(S_S : in STD_LOGIC;

S_R : in STD_LOGIC;clk : in STD_LOGIC;

Out8: out STD_LOGIC_VECTOR(7 downto 0);Seg : out STD_LOGIC_VECTOR(6 downto 0));end top;

architecture Behavioral of top is

COMPONENT fenpingqi_48m_1k PORT(clk : IN std_logic;

q : OUT std_logic);END COMPONENT;

COMPONENT counter PORT(clk : IN std_logic;

eng : IN std_logic;

clear : IN std_logic;

ou : OUT std_logic;

daout1 : OUT std_logic_vector(3 downto 0);

daout2 : OUT std_logic_vector(3 downto 0);

daout3 : OUT std_logic_vector(3 downto 0);

daout4 : OUT std_logic_vector(2 downto 0);daout5 : OUT std_logic_vector(3 downto 0);daout6 : OUT std_logic_vector(2 downto 0));

END COMPONENT;

COMPONENT keydb PORT(clk : IN std_logic;key_in : IN std_logic;

key_out : OUT std_logic);END COMPONENT;

COMPONENT control PORT(clk : IN std_logic;q : IN std_logic;p : IN std_logic;

j_clr : OUT std_logic;j_en : OUT std_logic;s_en : OUT std_logic);END COMPONENT;COMPONENT latch PORT(cnt_0 : IN std_logic_vector(3 downto 0);cnt_00 : IN std_logic_vector(3 downto 0);cnt_1 : IN std_logic_vector(3 downto 0);cnt_11 : IN std_logic_vector(2 downto 0);cnt_2 : IN std_logic_vector(3 downto 0);cnt_22 : IN std_logic_vector(2 downto 0);display_in : IN std_logic;

cnt0 : OUT std_logic_vector(3 downto 0);cnt00 : OUT std_logic_vector(3 downto 0);cnt1 : OUT std_logic_vector(3 downto 0);cnt11 : OUT std_logic_vector(2 downto 0);cnt2 : OUT std_logic_vector(3 downto 0);cnt22 : OUT std_logic_vector(2 downto 0));END COMPONENT;

COMPONENT display PORT(clk_1k : IN std_logic;

cnt0 : IN std_logic_vector(3 downto 0);

cnt00 : IN std_logic_vector(3 downto 0);

cnt1 : IN std_logic_vector(3 downto 0);

cnt11 : IN std_logic_vector(2 downto 0);

cnt2 : IN std_logic_vector(3 downto 0);

cnt22 : IN std_logic_vector(2 downto 0);

output: out STD_LOGIC_VECTOR(7 downto 0);

seg : OUT std_logic_vector(7 downto 1));END COMPONENT;

signal clk_1k,clk_100:std_logic;signal S_S_out,S_R_out:std_logic;signal clr_A,ena_A,lock_A:std_logic;signal co_out1,co_out2,co_out3,co_out4,co_out5:std_logic;signal dao1,dao2,dao3,dao5,daoA,daoB,daoC,daoE:std_logic_vector(3 0);signal dao4,dao6,daoD,daoF:std_logic_vector(2 downto 0);signal Dig:std_logic_vector(2 downto 0);

begin

Inst_fenpingqi_48000: fenpingqi_48m_1k PORT MAP(clk =>clk,q => clk_1k);

Inst_counter: counter PORT MAP(clk =>clk_1k ,eng =>ena_A ,clear =>clr_A ,daout1 =>dao1 ,daout2 => dao2,daout3 => dao3,daout4 => dao4,daout5 => dao5,daout6 => dao6);

Inst_keydb1: keydb PORT MAP(clk =>clk_1k ,key_in => S_S,downto

key_out =>S_S_out);

Inst_keydb2: keydb PORT MAP(clk =>clk_1k , key_in => S_R, key_out =>S_R_out);Inst_control: control PORT MAP(clk =>clk_1k , q =>S_S_out , p =>S_R_out , j_clr =>clr_A , j_en =>ena_A , s_en =>lock_A);Inst_latch: latch PORT MAP(cnt_0 => dao1, cnt_00 => dao2, cnt_1 => dao3, cnt_11 => dao4, cnt_2 => dao5, cnt_22 => dao6, display_in =>lock_A , cnt0 =>daoA, cnt00 =>daoB, cnt1 =>daoC, cnt11 =>daoD, cnt2 =>daoE, cnt22 =>daoF);Inst_display: display PORT MAP(clk_1k => clk_1k, cnt0 =>daoA , cnt00 =>daoB, cnt1 =>daoC, cnt11 =>daoD, cnt2 =>daoE, cnt22 =>daoF, output => Out8, seg =>Seg);

end Behavioral;

2.模10计算器:

entity counter10 is

Port(clr : in STD_LOGIC;clk : in STD_LOGIC;

en : in STD_LOGIC;

co : out STD_LOGIC;daout : out STD_LOGIC_VECTOR(3 downto 0));end counter10;

architecture Behavioral of counter10 is signal count:std_logic_vector(3 downto 0);begin process(clk,clr,count)begin if clr='1' then count<=“0000”;co<='0';elsif(clk='1' and clk'event)then if en='1' then if count=“1001” then count<=“0000”;else count<=count+1;end if;end if;end if;if count=“1001”and en='1' then co<='1';else co<='0';end if;daout<=count;end process;

end Behavioral;3.模6计算器:

entity counter6 is

Port(clr : in STD_LOGIC;clk : in STD_LOGIC;

en : in STD_LOGIC;

co : out STD_LOGIC;daout : out STD_LOGIC_VECTOR(2 downto 0));end counter6;

architecture Behavioral of counter6 is signal count:std_logic_vector(2 downto 0);

begin process(clk,clr,count)begin if clr='1' then count<=“000”;

co<='0';elsif(clk='1' and clk'event)then if en='1' then if count=“101” then count<=“000”;else count<=count+1;end if;end if;end if;if count=“101”and en='1' then co<='1';else co<='0';end if;daout<=count;end process;end Behavioral;

4.计算器级联:

entity counter is

Port(clk : in STD_LOGIC;eng : in STD_LOGIC;

clear : in STD_LOGIC;

ou : out STD_LOGIC;

daout1 : out STD_LOGIC_VECTOR(3 downto 0);

daout2 : out STD_LOGIC_VECTOR(3 downto 0);

daout3 : out STD_LOGIC_VECTOR(3 downto 0);

daout4 : out STD_LOGIC_VECTOR(2 downto 0);

daout5 : out STD_LOGIC_VECTOR(3 downto 0);

daout6 : out STD_LOGIC_VECTOR(2 downto 0));end counter;

architecture Behavioral of counter is COMPONENT fenpingqi_1k_100 PORT(clk : IN std_logic;

q : OUT std_logic);END COMPONENT;

COMPONENT counter10 PORT(clr : IN std_logic;

clk : IN std_logic;

en : IN std_logic;

co : OUT std_logic;

daout : OUT std_logic_vector(3 downto 0));END COMPONENT;

COMPONENT counter6 PORT(clr : IN std_logic;

clk : IN std_logic;

en : IN std_logic;

co : OUT std_logic;

daout : OUT std_logic_vector(2 downto 0));END COMPONENT;

signal clk_100:std_logic;signal clr_A,ena_A:std_logic;signal co_out1,co_out2,co_out3,co_out4,co_out5:std_logic;

begin Inst_fenpingqi_10: fenpingqi_1k_100 PORT MAP(clk =>clk,q => clk_100);

Inst_counter10_1: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en =>eng,co => co_out1,daout => daout1);Inst_counter10_2: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => co_out1,co => co_out2,daout => daout2);Inst_counter10_3: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => co_out2,co => co_out3,daout => daout3);

Inst_counter6_1: counter6 PORT MAP(clr =>clear ,clk =>clk_100,en =>co_out3,co =>co_out4 ,daout => daout4);Inst_counter10_4: counter10 PORT MAP(clr => clear,clk =>clk_100 ,en => co_out4,co => co_out5,daout => daout5);Inst_counter6_2: counter6 PORT MAP(clr =>clear,clk =>clk_100,en =>co_out5,co =>ou,daout => daout6);

end Behavioral;

5.控制电路:

entity control is

Port(clk : in STD_LOGIC;

q : in STD_LOGIC;

p : in STD_LOGIC;j_clr : out STD_LOGIC;j_en : out STD_LOGIC;s_en : out STD_LOGIC);end control;

architecture Behavioral of control is signal state:std_logic_vector(1 downto 0):=“00”;signal next_state:std_logic_vector(1 downto 0);signal key:std_logic_vector(1 downto 0);

begin key<=q&p;process(state,key)begin case state is when“00”=> if key=“10” then next_state<=“01”;else next_state<=state;end if;when“01”=> case key is when“10”=>next_state<=“11”;when“01”=>next_state<=“10”;when others=>next_state<=state;end case;when“10”=> if key=“01” then next_state<=“01”;else next_state<=state;end if;when others=> case key is when“10”=>next_state<=“01”;when“01”=>next_state<=“00”;when others=>next_state<=state;end case;end case;end process;process(clk)begin if rising_edge(clk)then state<=next_state;end if;end process;process(state)begin case state is when“00”=> j_clr<='1';j_en<='1';s_en<='1';when“01”=> j_clr<='0';j_en<='1';s_en<='1';when“10”=> j_clr<='0';j_en<='1';s_en<='0';when others=> j_clr<='0';j_en<='0';s_en<='1';end case;end process;end Behavioral;

6.分频器(2个): entity fenpingqi_48m_1k is

Port(clk : in STD_LOGIC;

q : out STD_LOGIC);end fenpingqi_48m_1k;

architecture Behavioral of fenpingqi_48m_1k is signal counter:STD_LOGIC_VECTOR(15 downto 0);begin process(clk)begin if(clk='1'and clk'event)then if counter=47999 then counter<=(others=>'0');else

counter<=counter+1;end if;end if;

q<= counter(15);end process;

end Behavioral;

entity fenpingqi_1k_100 is

Port(clk : in STD_LOGIC;

q : out STD_LOGIC);end fenpingqi_1k_100;architecture Behavioral of fenpingqi_1k_100 is signal counter:STD_LOGIC_vector(3 downto 0);

begin process(clk)begin if(clk='1'and clk'event)then if counter=9 then counter<=“0000”;else

counter<=counter+1;end if;end if;q<=counter(3);end process;end Behavioral;

7.显示电路:

entity display is

Port(clk_1k : in STD_LOGIC;

cnt0 : in STD_LOGIC_VECTOR(3 downto 0);

cnt00 : in STD_LOGIC_VECTOR(3 downto 0);

cnt1 : in STD_LOGIC_VECTOR(3 downto 0);

cnt11 : in STD_LOGIC_VECTOR(2 downto 0);

cnt2 : in STD_LOGIC_VECTOR(3 downto 0);

cnt22 : in STD_LOGIC_VECTOR(2 downto 0);

output: out STD_LOGIC_VECTOR(7 downto 0);seg : out STD_LOGIC_VECTOR(7 downto 1));end display;

architecture Behavioral of display is signal dig:std_logic_vector(2 downto 0):=“000”;signal bcd:std_logic_vector(3 downto 0):=“1000”;signal seg7:std_logic_vector(7 downto 1):=“1111110”;

begin process(clk_1k)begin if clk_1k'event and clk_1k='1' then dig<=dig+1;end if;end process;process(dig)begin case dig is when“000”=>bcd<=cnt0;when“001”=>bcd<=cnt00;when“010”=>bcd<=“1010”;when“011”=>bcd<=cnt1;when“100”=>bcd<='0'& cnt11;when“101”=>bcd<=“1010”;when“110”=>bcd<=cnt2;when“111”=>bcd<='0'&cnt22;when others=>bcd<=“1010”;end case;end process;process(bcd)begin case bcd is when“0000”=>seg7<=“0000001”;when“0001”=>seg7<=“1001111”;when“0010”=>seg7<=“0010010”;when“0011”=>seg7<=“0000110”;when“0100”=>seg7<=“1001100”;when“0101”=>seg7<=“0100100”;when“0110”=>seg7<=“1100000”;when“0111”=>seg7<=“0001111”;when“1000”=>seg7<=“0000000”;when“1001”=>seg7<=“0001100”;when others=>seg7<=“1111110”;end case;end process;process(dig)begin case dig is when“000”=>output<=“01111111”;when“001”=>output<=“10111111”;when“010”=>output<=“11011111”;when“011”=>output<=“11101111”;when“100”=>output<=“11110111”;when“101”=>output<=“11111011”;when“110”=>output<=“11111101”;when“111”=>output<=“11111110”;when others=>output<=“11111111”;end case;end process;seg<=seg7;end Behavioral;

8.锁存器:

entity latch is

Port(cnt_0 : in STD_LOGIC_VECTOR(3 downto 0);

cnt_00 : in STD_LOGIC_VECTOR(3 downto 0);

cnt_1 : in STD_LOGIC_VECTOR(3 downto 0);

cnt_11 : in STD_LOGIC_VECTOR(2 downto 0);

cnt_2 : in STD_LOGIC_VECTOR(3 downto 0);

cnt_22 : in STD_LOGIC_VECTOR(2 downto 0);display_in : in STD_LOGIC;

cnt0 : out STD_LOGIC_VECTOR(3 downto 0);

cnt00 : out STD_LOGIC_VECTOR(3 downto 0);

cnt1 : out STD_LOGIC_VECTOR(3 downto 0);

cnt11 : out STD_LOGIC_VECTOR(2 downto 0);

cnt2 : out STD_LOGIC_VECTOR(3 downto 0);

cnt22 : out STD_LOGIC_VECTOR(2 downto 0));end latch;

architecture Behavioral of latch is

begin process(display_in,cnt_0,cnt_00,cnt_1,cnt_11,cnt_2,cnt_22)begin if display_in='1' then cnt0<=cnt_0;cnt00<=cnt_00;cnt1<=cnt_1;cnt11<=cnt_11;cnt2<=cnt_2;cnt22<=cnt_22;end if;end process;end Behavioral;

9.消抖电路:

entity keydb is

Port(clk : in STD_LOGIC;key_in : in STD_LOGIC;key_out : out STD_LOGIC);end keydb;

architecture Behavioral of keydb is signal k1,k2:STD_LOGIC;signal cnt : STD_LOGIC_VECTOR(1 DOWNTO 0);

begin process(clk,key_in)begin if clk'event and clk ='0' then if cnt =3 then k1<='1';else k1<='0';cnt<=cnt+1;end if;k2<=k1;end if;if key_in ='0' then cnt<=“00”;end if;end process;key_out<= not k1 and k2;

end Behavioral

第五篇:电子科技大学实验报告格式

九、实验结论:

十、总结及心得体会:

十一、对本实验过程及方法、手段的改进建议:

报告评分:指导教师签字:

电子科技大学

学生姓名:

学号:

指导教师:

日期:实 验 报 告年月日

一、实验室名称:

二、实验项目名称:

三、实验原理:

四、实验目的:

五、实验内容:

六、实验器材(设备、元器件):

七、实验步骤:

八、实验数据及结果分析:

下载电子科技大学微机实验报告 实验4word格式文档
下载电子科技大学微机实验报告 实验4.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    电子科技大学实验报告格式

    九、实验结论:十、总结及心得体会:十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字: 电子科技大学 学生姓名:学号:指导教师:日期:实 验 报 告 年月 日一、实验......

    电子科技大学数学实验报告

    一、 选择题:(每题3分,共30分) 1、若分式 有意义,则x的取值范围是( A.B.C.D.x≠-1 ) 2、一射击运动员在一次射击练习中打出的成绩如下表所示:这次成绩的众数是( ) A;6B;8C;10D;7 3、若一组......

    电子科技大学实验报告(推荐阅读)

    电子科技大学信息与软件学院实 验 报 告(实验)课程名称 学生姓名学生学号电子科技大学教务处制表电 子 科 技 大 学 实验报告 学生姓名:学 号:指导教师: 实验地点:实验时间: 一、实......

    微机实验报告

    自动化 学院 物联网 专业 1 班 学号姓名 协作者 教师评定 实验一 操作训练及数码转换实验 一、实验目的 1)掌握80x86微机原理及接口技术教学实验系统的操作,熟悉Wmd86联级集成......

    微机实验报告

    微机实验报告 曾东明 实验一 输出字符‘A’ 一、实验目的 1.通过这个简单的例子熟悉在微机上建立、汇编、链接和运行8086/8088汇编语言程序的过程。 2.掌握字符的显示方法。 3......

    计算机组成原理实验报告 电子科技大学

    计算机专业类课程 实验报 告 课程名称:计算机组成原理 学院专业:计算机科学与工程 计算机科学与技术学生姓名:** 学号:20120600***** 指导教师:吴晓华 日期:2014年11月30日 实 验......

    电子科技大学 实验报告 创新学分 实验课(优秀范文5篇)

    电子科技大学学生姓名: 学号: 指导教师: 日期:实 验 报告 一、实验室名称: 二、实验项目名称: 三、实验原理:四、实验目的:五、实验内容:六、实验器材(设备、元器件):七、实验步骤:八、实......

    微机实验报告数模转换器和模数转换器实验5篇

    实验报告 课程名称 微机接口与汇编语言实验项目 实验五 数/模转换器和模/数转换器实验 实验仪器 TPC-USB通用微机接口实验系统 系 别 计算机学院专 业 班级/学号 学生姓......