基于arm的i2c接口设计及eda实现多功能数字钟课程设计_第1页
基于arm的i2c接口设计及eda实现多功能数字钟课程设计_第2页
基于arm的i2c接口设计及eda实现多功能数字钟课程设计_第3页
基于arm的i2c接口设计及eda实现多功能数字钟课程设计_第4页
基于arm的i2c接口设计及eda实现多功能数字钟课程设计_第5页
已阅读5页,还剩43页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

评阅教师评语:评阅教师评语:课程设计成绩考勤成绩实做成绩报告成绩总评成绩指导教师签名:课程设计报告论文题目基于ARM的I2C接口设计学院(系):电子信息与自动化学院班级:测控技术与仪器学生姓名:同组同学:学号:学号:指导教师:时间:摘要:近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。I2C是一种较为常用的串行接口标准,具有协议完善、支持芯片较多和占用I/O线少等优点,主要在服务器管理中使用,可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,便于管理。目前比较流行的串行扩展总线中,I2C总线以其严格的规范和众多支持I2C接口的外围器件而获得了广泛的应用。因此,我们对I2C接口进行了必要的探究,通过UART(异步串行接口)发送字节数据,然后利用I2C串行接口对外部存储器24C01进行读写,最后通过显示器LCD1602显示,正确验证了I2C的通讯功能。关键字:I2C串行接口UART外部存储器显示器LCD1602正文:设计原理与总体方案:本设计包含三个部分:UART发送数据部分、I2C读写存储器部分、LCD1602显示部分,下面分别介绍各部分原理。异步串行接口UART是异步串行接口,LPC2000系列ARM7包含2个UART:UART0和UART1,UART0只有TXD(串行输出)和RXD(串行输入)两个引脚,只需设置相应的寄存器即可实现基本的数据收发功能。1.2.I2C总线基本原理I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的,该总线有严格的时序要求。总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线协议规定,各主节点进行通信时都要有起始、结束、发送数据和应答信号,这些信号都是通信过程中的基本单元。总线传送是以帧为单位进行的,每当发送完1个字节后,接收节点就相应给一应答信号。1.2.1.I2C总线数据传输中的接受/发送器I2C总线系统中发送器与接收器来表明数据传输的发送方与接收方。发送器:总线上发送数据的器件。接收器:总线上接收数据的器件。1.2.2.I2C总线上数据的有效性I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平的状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平状态变化,如图1所示。图1I2C总线数据位传送1.2.3.I2C总线数据传送的起始、停止与应答 I2C总线可以构成多主数据传送系统,但只有带CPU的器件可以成为主器件。主器件发送时钟、启动位、数据工作方式,从器件则接收时钟及数据工作方式,接收或发送则根据数据的传送方向决定。I2C总线上数据传送时的启动、结束和有效状态都由SDA、SCL的电平状态决定,在I2C总线规程中启动和停止条件规定如下:启动条件:在SCL为高电平时,SDA出现一个下降沿则启动I2C总线。停止条件:在SCL为高电平时,SDA出现一个上升沿则停止使用I2C总线。启动条件后总线为“忙”,在结束信号过后的一定时间总线被认为是“空闲”的。在启动和停止条件之间可转送的数据不受限制,但每个字节必须为8位。首先传送最高位,采用串行传送方式,但在每个字节之后必须跟一个响应位。主器件收发每个字节后产生一个时钟应答脉冲,在这期间,发送器必须保证SDA为高,由接收器将SDA拉低,称为应答信号(ACK)。主器件为接收器时,在接收了最后一个字节之后不发应答信号,也称为非应答信号(NOTACK)。当从器件不能再接收另外的字节时也会出现在种情况。I2C总线的数据传送如图2所示。图2I2C总线上的信号1.2.4.I2C总线数据传送I2C总线上连接的每个器件都有自己唯一确定的地址,启动条件后主机发送的第一个字节就是被读写的从器件地址,其中第8位为方向位,“0”(W)表示主器件发送,“1”(R)表示主器件接收。总线上每个器件在启动条件后都把自己的地址与前7位相比较,如相同则器件被选中,产生应答,并根据读写位决定在数据传送中是接收还是发送。如图所示为主器件发送和接收数据的过程,无论是主发、主收还是从发、从收都是由主器件控制。图3主器件发送和接收数据的过程在主发送方式下,由主器件先发出启动信号(S),接着发从器件的7位地址(SLA)和主器件发送的方向位“0”(W),即这个字节为SLA+W。被寻址的从器件在收到这个字节后,返回一个应答信号(A),在确定主从应答正常后,主器件向从器件发送字节数据,从器件每收到一个字节数据后都要返回一个应答信号,直到全部数据都发送完为止。在主接收方式下,主器件先发出启动信号(S),接着发从器件的7位地址(SLA)和表明主器件接收的方向位“1”(R),即这个字节为SLA+R。在发送完这个字节后,SCL继续输出时钟,通过SDA接收从器件发来的串行数据。主器件每接收到一个字节后都要发送一个应答信号(A),当全部数据都发送或接收完毕后,主器件应发出停止信号(P)。1.3.LCD1602液晶显示驱动原理1.3.1.LCD1602的引脚功能LCD1602液晶显示器的引脚如图4所示,其引脚功能如下:(1)RS:数据和指令选择控制端,RS=0命令状态;RS=1数据(2)R/W:读写控制线,R/W=0写操作;R/W=1读操作(3)A:背光控制正电源(4)K:背光控制地(5)E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换(6)DB0~DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。(7)VDD:电源端VEE:亮度控制端(1-5V)VSS:接地端VSSVDDVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7AKVSSVDDVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7AKLCD模块12345678910111213141516图4LCD1602液晶显示器引脚图1.3.2.LCD1602控制命令表1LCD控制命令序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6功能设置00001DLNF**7置字符发生器存储器地址0001字符发生存储器地址8置数据储存器地址001显示数据存储器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容指令3:光标和显示模式设置。I/D:光标移动方向,高电平右移,低电平左移。S:屏幕上所有文字是否左移或者右移,高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标。B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令6:功能设置命令。DL:高电平时为4位总线,低电平时为8位总线。N:低电平时为单行显示,高电平时为双行显示。F:低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。指令9:读忙信号和光标地址。BF:为忙标志,高电平表示忙,此时模块不能接受命令或者数据,如果为低电平表示不忙。软件设计2.1流程图及部分初始化说明开始开始引脚功能初始化引脚方向确定LCD1602初始化UART初始化I2C初始化UART接受data?NI2C写24C01延时I2C读24C01显示数据图5主程序流程图显示器忙?开始显示器忙?开始RS=0,RW=0E=1E=0,开始写命令写完了?结束YN显示器忙?开始RS=1,RW=0E=1E=0,开始写数据写完了?结束YN图6lcd初始化及显示函数流程图开始开始设置通信波特率设置数据格式读取数据接受标志=0?结束Y图7UART接受数据流程图开始设置主模式开始设置主模式并使能I2C发送起始信号写24C01地址+W写子地址SI清零,发送数据全部发完?发送停止信号结束N发送停止信号发送起始信号发送起始信号开始设置主模式并使能I2C写24C01地址+W写子地址接收数据全部接完?结束N发送停止信号写24C01地址+R图8I2C读写24C01流程图仿真设计仿真电路图 图9 仿真结果图图10调试问题1:在进行仿真调试时,出现了发送乱码的现象(如图11)。原因:ADS调试时钟频率与proteus仿真设置频率不一致。问题2:在进行仿真调试时,I2C读数据时,出现非应答位导致数据不能正常读取(如图12)。原因:ADS程序写完24C01后没有等待总线恢复,添加延时即可。图11调试出现乱码情况图12读取数据时出现非应答位情况结束语本次课程设计是ARM嵌入式系统课程设计,是在我们学习了《ARM嵌入式系统》的基础上的进一步实践与拓展,该课程设计对各方面的知识进行了融合,具有一定的挑战性。我们查阅了很多资料,并且借鉴了很多不同的想法,在老师的帮助下,我们顺利完成了课程设计,对嵌入式系统的硬件、软件有了更为深入的了解,为以后进行软硬件设计打下了良好的基础。参考文献[1]周立功主编.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2008。[2]吴明辉,等.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004。附录:主程序#include"config.h"#include"LCD1602.h"#include"UART.h"#include"I2C.h"#defineNum1uint8i=0,j=0,k=0,Addr=0;uint8rcv_data[Num],read_data[Num],display_data[16];intmain(){ PINSEL0=0x55;//设置p0.0-p0.1为UART0,p0.2-p0.3为I2C PINSEL1=0;//设置p0.16-p0.24为GPIO IODIR=0x7ff<<16;//p0.16-p0.24为输出lcd_init(); UART0_init(); I2C_init(100000); while(1) { UART0_RcvStr(rcv_data,Num); WriteC01(Addr,Num,rcv_data); DelayMs(100);//////////// ReadC01(Addr,Num,read_data); if(i<15) { display_data[i++]=read_data[0]; display_data[i]='\0'; } else { for(j=0;j<14;j++) { display_data[j]=display_data[j+1]; display_data[14]=read_data[0]; display_data[15]='\0'; } } DisText(0x80,display_data); Addr++;}return(0);}/*****************************************************************************File:lcd1602.h*功能:向LCD输出字符(一行只能显示16个字符)****************************************************************************/#include"config.h"#definers(1<<24)#definerw(1<<25)#defineen(1<<26)#definebusy(1<<23)//检查总线是否忙voidChkBusy(){IODIR=0x700<<16;while(1) { IOCLR=rs; IOSET=rw; IOSET=en; if(!(IOPIN&busy))break; IOCLR=en; }IODIR=0x7ff<<16;}//写函数voidWrOp(uint8dat){ ChkBusy(); IOCLR=rs; //RS=0,RW=0 IOCLR=rw; IOCLR=(0xff<<16); IOSET=(dat<<16); //送数 IOSET=en; IOCLR=en;}//写数据函数voidWrDat(uint8dat) { ChkBusy(); IOSET=rs; //RS=1,RW=0 IOCLR=rw; IOCLR=(0xff<<16); IOSET=(dat<<16); //送数 IOSET=en; IOCLR=en;}//lcd初始化函数voidlcd_init(void){ WrOp(0x38); //8-bitmode-2line. WrOp(0x06); //光标加1 WrOp(0x0C); //开显示}//显示文本函数voidDisText(uint8addr,uint8*p){ WrOp(addr); while(*p!='\0')WrDat(*(p++));}/*****************************************************************************File:UART.h*功能:通过串口输入字节数据。****************************************************************************/#include"config.h"#defineUART_BPS 9600 /*定义通讯波特率*///初始化串口0。voidUART0_init(void){uint16Fdiv;U0LCR=0x83; //DLAB=1,可设置波特率Fdiv=(Fpclk/16)/UART_BPS; //设置波特率U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03;} //从串口接收1字节数据,使用查询方式接收。uint8UART0_RcvByte(void){ uint8rcv_dat; while((U0LSR&0x01)==0); //等待接收标志置位 rcv_dat=U0RBR; return(rcv_dat);}//从串口接收字符串。voidUART0_RcvStr(uint8*s,uint32n){ for(;n>0;n--) {*s++=UART0_RcvByte();}}/*****************************************************************************File:I2C.h*功能:读写外部存储器24C01。****************************************************************************/#include"config.h"#defineWrite_C010xA0#defineRead_C010xA1#defineAA(1<<2)#defineSI(1<<3)#defineSTO(1<<4)#defineSTA(1<<5)#defineI2CEN(1<<6)#definelastbyte1//I2C初始化voidI2C_init(uint32fi2c){if(fi2c>400000)fi2c=400000;PINSEL0=(PINSEL0&0xffffff0f)|0x50;I2SCLH=(Fpclk/fi2c+1)/2;I2SCLL=(Fpclk/fi2c)/2;I2CONCLR=STA|SI|AA;I2CONSET=I2CEN;}//发送起始信号voidI2C_Start(void){I2CONSET=STA;while(I2STAT!=0x08);I2CONCLR=STA;}//发送停止信号voidI2C_Stop(void){I2CONSET=STO;I2CONCLR=SI;}//写一字节数据voidWriteByte(uint8data){I2DAT=data;I2CONCLR=SI;}//写地址voidWriteAddr(uint8Mode){WriteByte(Mode);if(Mode==Read_C01){ while(I2STAT!=0x40);}else{ while(I2STAT!=0x18);}}//写数据voidWriteData(uint8data){WriteByte(data);while(I2STAT!=0x28);} //读字节数据uint8ReadByte(uint8last){if(last){I2CONCLR=AA;I2CONCLR=SI;while(I2STAT!=0x58);}else{I2CONSET=AA;I2CONCLR=SI;while(I2STAT!=0x50);}return(I2DAT);}//写24C01voidWriteC01(uint8StartAddr,uint8CountByte,uint8*i2c_buf){uint8i=0;I2C_Start();WriteAddr(Write_C01);WriteData(StartAddr);for(i=0;i<CountByte;i++){WriteData(i2c_buf[i]);}I2C_Stop();}//读24C01voidReadC01(uint8StartAddr,uint8CountByte,uint8*i2c_buf){uint8i=0;//设置读指针I2C_Start();WriteAddr(Write_C01);WriteData(StartAddr);I2C_Stop();//开始读数据I2C_Start();WriteAddr(Read_C01);for(i=0;i<CountByte-1;i++){i2c_buf[i]=ReadByte(!lastbyte);}i2c_buf[i]=ReadByte(lastbyte);I2C_Stop();}//延时函数voidDelayMs(uint8dly){uint8i;for(;dly>0;dly--)for(i=0;i<1000;i++);}数字电子技术课程设计报告——EDA实现多功能数字钟专业班级:姓名:学号:指导教师:设计日期: 目录一、实验任务 1二、关键词 1三、内容摘要 1四、数字钟电路系统组成框图 2五、各个功能模块的实现 3(1)小时计时 3(2)分钟计时 3(3)秒钟计时 4(4)校时校分 5(5)整点报时 6(6)时段控制 6六、数字钟的顶层文件 7七、下载 8(1)添加译码模块后的原理图 8(2)选用芯片 8(3)分配引脚号 9(4)器件下载 9(5)效果显示 9 八、遇到的问题及解决办法 12九、《课程设计》中设计项目完成最终结论 13十、结束语 13十一、附录 14一、实验任务:用FPGA器件和EDA技术实现多功能数字钟的设计已知条件:1、QuartusП软件2、FPGA实验开发装置基本功能:1、以数字形式显示时、分、秒的时间;2、小时计数器为24进制;3、分、秒计数器为60进制。拓展功能:1、校时、校分(有两个使能端构成,分别为校时、校分功能,同时按无效)2、仿电台报时(每个小时的59分51、53、55、57、59分别以四长声一短声进行报时)3、时段控制(让信号显示灯在晚上19点至早上5点灭。之后亮)二、关键词小时、分钟计时模块、顶层文件、整点报时、时段控制、下载模块三、内容摘要1、设计要求:(1)小时计数器为8421BCD码24制;分和秒计数器为8421BCD码60进制计数器;(2)拓展功能:①校正“时”和“分”;②整点报时;③时段控制。2、硬件描述语言设计(VerilogHDL语言)方法在QuartusП软件系统平台上建立数字电子钟电路的顶层文件并完成编译和仿真。3、输入变量:时钟CPS,直接清零RD;输出变量:小时计时H[7..4]、H[3..0]为8421BCD码输出,其时钟为CPH;之后的分计时、秒计时均为8421BCD码输出,其时钟为CPS等。4、在顶层文件中,由若干低层模块“打包”组成整个多功能数字钟,分别对各模块作设计及仿真,最后级联各模块,统调、仿真及下载,从而实现各项功能。四、数字钟电路系统组成框图:秒显示器分显示器时显示器秒显示器分显示器时显示器仿电台报时仿电台报时秒译码器分译码器时译码器主秒译码器分译码器时译码器时段控制体时段控制分计数器秒计数器时计数器电分计数器秒计数器时计数器定点闹时路定点闹时校时电路校时电路拓展电路五、各个功能模块的实现(1)小时计时模块图如下:对该模块进行编译及波形仿真如下:分析及结论:由仿真图看出,当小时的高四位为0、1时,小时的低四位为九时,在下一个时钟的上跳延来了之后,高四位加一;当小时的高四位为2,同时低四位为3时,小时的高低四位都清零。从而实现00—24分的记数功能。仿真波形显示里23小时到00分的循环的过程仿真到位。对上述仿真波形图进行打包工作,将24进制图建立成模块:(2)分钟计时模块原理图如下:对该图进行编译及波形仿真如下:分析及结论:分计数器是60进制的。当分钟的高四位0、1、2、3、4时,小时的低四位为九时,在下一个时钟的上跳延来了之后,高四位加一;当分钟的高四位为5,同时低四位为9时,分钟的高低四位都清零。从而实现00—59秒的记数功能。Cp60S为向分的进位信号上跳沿有效。仿真波形显示里59秒到00秒的循环的过程,仿真到位。对上述仿真波形图进行打包工作,将60进制图建立成模块:(3)秒钟计时模块原理图如下:对该图进行编译及波形仿真如下分析及结论:仿真实现00—59秒的记数功能。Cp60S为向分的进位信号上跳沿有效。仿真波形显示里59秒到00秒的循环的过程,仿真到位。对上述仿真波形图进行打包工作,将60进制图建立成模块:(4)校时校分模块模块原理图如下对该图进行编译及波形仿真如下分析及结论:由仿真图可以看出,当SWM为0时,用秒时钟CPS对分钟进行校对。当SWH、SWM都不为0时、分钟、小时正常计数。验证了本模块的逻辑功能(5)整点报时模块对该图进行编译及波形仿真如下由仿真图波形图可以看出,当为59分51秒53秒55秒57秒时,以低音报时,当以59分59秒时以高音报时。验证了本模块的逻辑功能正确。(6)时段控制模块对该图进行编译及波形仿真如下由仿真图波形图可以看出,从6点到18点,路灯灭,从19点到凌晨5点(包括5点)路灯亮,验证了本模块的逻辑功能正确。六、多功能数字钟的顶层文件部分原理图如下:对该图进行编译及波形仿真如下由仿真波形分析:①电子钟走时正常;②通过对SWH和SWM的操作,能“校时”“校分”;③整点高音低音报时;④时段控制路灯的亮灭。七、下载1、添加译码模块后的原理图2、选用芯片3、分配引脚号4、对器件进行下载在电脑上安装实验板驱动然后下载模块进行验证时钟功能。5、效果显示①校时②校分③整点报时八、《课程设计》中遇到的问题及解决办法:(1)在用verilogHDL描述模块时一些语言的理解不是很熟悉也不是很理解的到位,通过查找其他书籍和询问老师才得以理解。(2)模块编译成功了进行仿真的时候有些时候得不到相应的结果,会有错误出现,通过回头检查,发现是自己没有按照操作步骤中的setting进行设置所以得不到相应的仿真图形。(3)在最后的所有打包模块级联的时候,很多相应的细节没有注意,例如,有些管脚需要输入这个管脚而我没有给,还有一些管脚之间的链接,我由于疏忽有些标明是大写,有些标明是小写,因此,联接不成功。后来反复的检查就成功了。(3)在实验板上验证效果的时候在QuartusП9.1软件上进行操作,且发现该软件中没有相对应的芯片后咨询老师才知应在更高级版本QuartusП11.0中操作。(4)在效果显示上面我一开始的效果是秒钟走时正常,到了分钟该进制它不进制。老师说是级联有问题,经过返回去修改模块、仿真均没有问题。后来就将分钟、时钟的模块换成了用图形仿真进行打包然后级联在进行下载显示效果,效果是成功的。后来也有部分同学也出现了这样的状况,老师好好的看了各模块,原来一些模块有着相应的问题。九、《课程设计》中设计项目完成最终结论特点:将我们所学的知识来运用实现具有以二十四小时计时、显示、整点报时、时间设置和时段控制的功能。实用性:数字电子钟在我们平常生活中很常用,应用比较广泛,而经过我所设计的这款数字钟设计过程也比较简单,通过编程就能达到相应的功能。心得体会:纵使有很多问题,但最终都被解决了,虽然有的问题是和同学讨论解决的,有些东西是请教老师的但还是很高兴的。在这些错误中也透露了自己对现有数电知识掌握的不牢固,对很多概念仍处于朦胧状态。以及对软件的使用不是很熟悉。因此这些是我以后还需要加强学习的地方。十、结束语通过这次VHDL课程设计,我学到了很多,对于原本掌握的不好的数字逻辑相关知识,在课程设计具体实践中有了很深刻的认识,在对于QuartusП的操作上也有很大的提高,增加了操作的熟练程度,现在我已经有信心做任何的设计课题。在学到新知识的同时,我也认识到了VHDL设计的困难性。同时我也觉得将所学的知识融会贯通的运用到实际操作中还是需要一些更多的锻炼。最后,感谢老师们帮我处理一些解决不了的问题,还要感谢在我思维陷入困境时给予我指点,让我获得灵感的同学们以及来帮助我解决问题的同学,谢谢大家!十一、附录1、分频模块程序modulediv_zh(f,_500HzOut,_1KHzOut,ncR,CLOCK_50,s);inputncR,CLOCK_50,s;output_500HzOut,_1KHzOut,f;wire_1HzOut,_5HzOut;assignf=s?_5HzOut:_1HzOut;divn#(.WIDTH(26),.N(50000000))u0(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_1HzOut));divn#(.WIDTH(17),.N(100000))u1(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_500HzOut));divn#(.WIDTH(16),.N(50000))u2(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_1KHzOut));divn#(.WIDTH(24),.N(10000000))u3(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_5HzOut));endmodulemoduledivn(o_clk,clk,rst_n);inputclk,rst_n;outputo_clk;parameterWIDTH=3;parameterN=6;reg[WIDTH-1:0]cnt_p;reg[WIDTH-1:0]cnt_n;regclk_p;regclk_n;assigno_clk=(N==1)?clk:(N[0]?(clk_p|clk_n):clk_p);always@(posedgeclkornegedgerst_n)beginif(!rst_n)cnt_p<=0;elseif(cnt_p==N-1)cnt_p<=0;elsecnt_p<=cnt_p+1;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n)clk_p<=0;elseif(cnt_p<(N>>1))clk_p<=1;elseclk_p<=0;endalways@(negedgeclkornegedgerst_n)beginif(!rst_n)cnt_n<=0;elseif(cnt_n==N-1)cnt_n<=0;elsecnt_n<=cnt_n+1;endalways@(negedgeclkornegedgerst_n)beginif(!rst_n)clk_n<=0;elseif(cnt_n<(N>>1))clk_n<=1;elseclk_n<=0;endendmodule2、译码模块程序moduledecode4_7(input[3:0]indec_0,indec_1,indec_2,indec_3,indec_4,indec_5,indec_6,indec_7,outputreg[6:0]dout_0,dout_1,dout_2,dout_3,dout_4,dout_5,dout_6,dout_7);always@(indec_0orindec_1orindec_2orindec_3orindec_4orindec_5orindec_6orindec_7)begincase(indec_0)4'h1:dout_0=7'b111_1001;//---0----4'h2:dout_0=7'b010_0100;//||4'h3:dout_0=7'b011_0000;//514'h4:dout_0=7'b001_1001;//||4'h5:dout_0=7'b001_0010;//---6----4'h6:dout_0=7'b000_0010;//||4'h7:dout_0=7'b111_1000;//424'h8:dout_0=7'b000_0000;//||4'h9:dout_0=7'b001_1000;//---3----4'ha:dout_0=7'b000_1000;4'hb:dout_0=7'b000_0011;4'hc:dout_0=7'b100_0110;4'hd:dout_0=7'b010_0001;4'he:dout_0=7'b000_0110;4'hf:dout_0=7'b000_1110;4'h0:dout_0=7'b100_0000;endcasecase(indec_1)4'h1:dout_1=7'b111_1001;//---0----4'h2:dout_1=7'b010_0100;//||4'h3:dout_1=7'b011_0000;//514'h4:dout_1=7'b001_1001;//||4'h5:dout_1=7'b001_0010;//---6----4'h6:dout_1=7'b000_0010;//||4'h7:dout_1=7'b111_1000;//424'h8:dout_1=7'b000_0000;//||4'h9:dout_1=7'b001_1000;//---3----4'ha:dout_1=7'b000_1000;4'hb:dout_1=7'b000_0011;4'hc:dout_1=7'b100_0110;4'hd:dout_1=7'b010_0001;4'he:dout_1=7'b000_0110;4'hf:dout_1=7'b000_1110;4'h0:dout_1=7'b100_0000;endcasecase(indec_2)4'h1:dout_2=7'b111_1001;//---0----4'h2:dout_2=7'b010_0100;//||4'h3:dout_2=7'b011_0000;//514'h4:dout_2=7'b001_1001;//||4'h5:dout_2=7'b001_0010;//---6----4'h6:dout_2=7'b000_0010;//||4'h7:dout_2=7'b111_1000;//424'h8:dout_2=7'b000_0000;//||4'h9:dout_2=7'b001_1000;//---3----4'ha:dout_2=7'b000_1000;4'hb:dout_2=7'b000_0011;4'hc:dout_2=7'b100_0110;4'hd:dout_2=7'b010_0001;4'he:dout_2=7'b000_0110;4'hf:dout_2=7'b000_1110;4'h0:dout_2=7'b100_0000;endcasecase(indec_3)4'h1:dout_3=7'b111_1001;//---0----4'h2:dout_3=7'b010_0100;//||4'h3:dout_3=7'b011_0000;//514'h4:dout_3=7'b001_1001;//||4'h5:dout_3=7'b001_0010;//---6----4'h6:dout_3=7'b000_0010;//||4'h7:dout_3=7'b111_1000;//424'h8:dout_3=7'b000_0000;//||4'h9:dout_3=7'b001_1000;//---3----4'ha:dout_3=7'b000_1000;4'hb:dout_3=7'b000_0011;4'hc:dout_3=7'b100_0110;4'hd:dout_3=7'b010_0001;4'he:dout_3=7'b000_0110;4'hf:dout_3=7'b000_1110;4'h0:dout_3=7'b100_0000;endcasecase(indec_4)4'h1:dout_4=7'b111_1001;//---0----4'h2:dout_4=7'b010_0100;//||4'h3:dout_4=7'b011_0000;//514'h4:dout_4=7'b001_1001;//||4'h5:dout_4=7'b001_0010;//---6----4'h6:dout_4=7'b000_0010;//||4'h7:dout_4=7'b111_1000;//424'h8:dout_4=7'b000_0000;//||4'h9:dout_4=7'b001_1000;//---3----4'ha:dout_4=7'b000_1000;4'hb:dout_4=7'b000_0011;4'hc:dout_4=7'b100_0110;4'hd:dout_4=7'b010_0001;4'he:dout_4=7'b000_0110;4'hf:dout_4=7'b000_1110;4'h0:dout_4=7'b100_0000;endcasecase(indec_5)4'h1:dout_5=7'b111_1001;//---0----4'h2:dout_5=7'b010_0100;//||4'h3:dout_5=7'b011_0000;//514'h4:dout_5=7'b001_1001;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论