您好,欢迎访问三七文档
1基于SOPC的数字钟设计摘要:数字时钟在我们日常生活中经常用到,可以用很多方法设计数字钟,本文用SOPC技术设计数字钟。SOPC设计包含FPGA设计、NIOS设计两大部分,其中首先用FPGA实现数字钟的秒的个位、秒的十位、分的个位、分的十位、小时的计数,然后设计NIOS,设计完后,把硬件和软件下载到试验箱里,实现在试验箱的数码管上显示数字钟的秒、分、小时。关键词:SOPC、数字钟、数码管1.引言SOPC是Altera公司提出的一种灵活、高效的片上系统设计方案。它将处理器、存储器、I/O口等系统设计需要的组件集成到一个PLD器件上,构建成一个可编程的片上系统。NIOS是Altera公司开发的可进行SOPC设计的处理器软核。2.设计内容(1)数字钟的秒计数器(用FPGA实现);(2)数字钟的分计数器(用FPGA实现);(3)数字钟的小时计数器(用FPGA实现);(4)NIOS的中断设计;(5)0NIOS读取数字钟的秒、分、小时的数据;(6)NIOS显示数字钟的秒、分、小时的内容。3.设计方案3.1数字钟的原理:数字钟的秒是60进制,分是60进制,小时是24进制。当秒满59后,再来一个1hz时钟信号,分钟进1;秒和分钟都满59时,再来一个1HZ时钟信号,小时进1;当秒,分都满59,小时满23,再来一个1HZ时钟信号,秒、分、小时都变成00。3.2数码管工作原理七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图3-1所示。图3-1静态七段数码管2由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭数据。3.3SOPC简介SOPC为可编程片上系统,由FPGA和NIOS两大模块组成。3.4设计方案我选择试验箱提供的24Mhz时钟作为最初的时钟信号,因为数字钟的基本单位是秒,所以首先用VHDL语言做一个分频模块,得到1hz的时钟信号。然后用VHDL语言做一个数字钟计数模块,得到秒的个位输出、秒的十位输出、分的个位输出、分的十位输出、小时的个位输出、小时的十位输出。在QuartusII中打开SOPCBuilder,设计CPU,然后通过NIOSIDE编写C语言,实现七段码显示。设计方案框图如下:图3-2设计方案框图4.设计步骤(1)打开QuartusII,建立一个fenpin工程,用VHDL编写代码,然后通过波形仿真,查看是否满足实现24MHZ的时钟分频为1HZ时钟信号的要求。有两个输入信号CLK、RST,一个输出信号CLK_1hz,CLK用于输入24MHZ时钟信号,RST是复位信号,管脚绑定K1。当K1拨到高电平时,输出信号CLK_1hz一直为低电平。当K1拨到低电平时,输出信号CLK_1hz为1HZ的时钟信号。分频的原理框图如下:图3-3分频的原理框图数字钟vhdl时钟秒个位秒十位分个位分十位cpu中断时个位时十位七段码显示3(2)打开QuartusII,建立一个shizhong工程,用VHDL编写代码,然后通过波形仿真,查看是否满足数字钟的原理。时钟模块有两个输入RST、CLK_1hz,7个输出MIAOGE、MIAOSHI、FENGE、FENSHI、SHIGE、SHISHI、COUT,MIAOGE表示秒的个位,MIAOSHI表示秒的十位,FENGE表示分的个位,FENSHI表示分的十位,SHIGE表示小时的个位,SHISHI表示小时的十位,COUT是我设计的一个进位信号,绑定第一个led灯的引脚,当秒钟显示59秒时,led亮10秒钟。在设计shizhong这个模块时,我用了三个进程,PROCESS(RST,CLK_1HZ),PROCESS(RST,COUT1),PROCESS(RST,COUT2)。进程PROCESS(RST,CLK_1HZ)功能是实现秒计数,进程PROCESS(RST,COUT1)实现分计数,进程PROCESS(RST,COUT2)实现小时计数。当复位信号RST为高电平时,时钟的MIAOGE、MIAOSHI、FENGE、FENSHI、SHIGE、SHISHI值全为0。时钟模块时序仿真图如下:图3-4时钟模块时序仿真图时钟模块原理图如下:图3-4时钟模块原理图(3)打开QuartusII,建立一个原理图顶层文件,分别新建fenpin、shizhong的VHDL文件,把步骤1,2的代码拷贝进去,然后生成fenpin、shizhong的原理图,放在顶层原理图里。FPGA芯片选择EP3C40F780C8。(4)设计CPU,①在QuartueII集成开发软件环境中选择TOOLS菜单下的SOPCBuilder4选项或者点选快捷按钮来启动SOPCBuilder。②指定目标FPGA及时钟,时钟为50MHZ。③添加NIOSII内核,添加8个PIO内核,7个输入,2个输出。有六个输入分别接时钟模块的秒个位、秒十位、分个位、分十位、小时个位、小时十位。还有一个输入作为中断输入,接1hz的脉冲,脉冲上升沿到时,响应中断,CPU读取秒个位、秒十位、分个位、分十位、小时个位、小时十位。1个输出选8位,用于译码输出,管脚绑定八位数码管。另一个输出选3位,用于位选,因为试验箱有八个八段数码管,引脚接的相同的线,需要通过位选动态扫描,来实现八个数码管显示时钟的数字。添加外部静态存储器SRAM,用于存储执行代码、程序、数据。添加管理CPU外设的总线桥④指定基地址和中断优先级。⑤设置NiosII复位和异常地址,⑥编译生成NiosII系统。NIOS原理图如下:图3-5NIOS原理图(5)对未使用的PIN设置成三态高阻模式(“Asinputtri-statedwithweakpull-upresistor”)。因为SRAM的管脚D20与FPGA的NCEO共用一个IO,我们要将这个IO设置成一个用户IO。(6)将各模块的线连接起来,绑定引脚,编译。5顶层原理图如下:图3-6顶层原理图(7)在NiosIIIDE中建立用户C工程,编写用户程序。因为实验箱有8个数码管,我的时钟显示设计是第一个数码管用于显示小时十位,第二个数码管用于显示小时个位,第三个数码管显示横杠,用于小时和分的间隔,第四个数码管用于显示分的十位,第五个数码管用于显示分的个位,第六个数码管显示横杠,用于分和秒的间隔,第七个数码管用于显示秒的十位,第八个数码管用于显示秒的个位。在程序设计中,主要工作是设计译码函数yima(intin);;中断函数Button_ISR_Init(void);读取秒个位、秒十位、分个位、分十位、小时个位、小时十位的函数read_in(void);在主函数中区调用这些函数和添加位选功能。从而实现我的时钟显示要求。(8)将编译好的sopc硬件和软件下载到试验箱里,查看实验结果,是否满足在试验箱的数码管上按要求显示时钟。5.试验箱上数字钟显示的照片如下:66.参考文献:[1]杨玲.基于SOPC和FPGA的LCD电子钟设计[J].物联网技术,2011,03:77-79.[2]方茁,彭澄廉,陈泽文.基于NIOS的SOPC设计[J].计算机工程与设计,2004,04:504-507.[3]范茂彦,沐士光,张丽芳.可编程片上系统(SOPC)的应用与发展[J].玉溪师范学院学报,2007,08:33-36.7.附录源程序如下:分频模块的VHDL代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYfenpinISPORT(CLK,RST:INSTD_LOGIC;CLK_1HZ:OUTSTD_LOGIC);ENDfenpin;ARCHITECTUREbehavOFfenpinISSIGNALCQ:STD_LOGIC;BEGINPROCESS(CLK,RST)VARIABLECOUNT:INTEGERRANGE1TO12000000;BEGINIFRST='1'THENCQ='0';ELSIFCLK'EVENTANDCLK='1'THENIFCOUNT=12000000THENCOUNT:=1;CQ=NOTCQ;ELSECOUNT:=COUNT+1;ENDIF;ENDIF;CLK_1HZ=CQ;ENDPROCESS;ENDbehav;时钟模块的代码如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYshizhongISPORT(RST:INSTD_LOGIC;CLK_1HZ:INSTD_LOGIC;MIAOGE:OUTINTEGERRANGE9DOWNTO0;MIAOSHI:OUTINTEGERRANGE5DOWNTO0;FENGE:OUTINTEGERRANGE9DOWNTO0;FENSHI:OUTINTEGERRANGE5DOWNTO0;7SHIGE:OUTINTEGERRANGE4DOWNTO0;SHISHI:OUTINTEGERRANGE2DOWNTO0;COUT:OUTSTD_LOGIC);ENDshizhong;ARCHITECTUREONEOFshizhongISSIGNALM1:INTEGERRANGE9DOWNTO0;SIGNALM2:INTEGERRANGE5DOWNTO0;SIGNALF1:INTEGERRANGE9DOWNTO0;SIGNALF2:INTEGERRANGE5DOWNTO0;SIGNALS1:INTEGERRANGE4DOWNTO0;SIGNALS2:INTEGERRANGE2DOWNTO0;SIGNALCOUT1:STD_LOGIC;SIGNALCOUT2:STD_LOGIC;SIGNALCOUT3:STD_LOGIC;BEGINPROCESS(RST,CLK_1HZ)BEGINIFRST='1'THENM1=0;M2=0;ELSIFCLK_1HZ'EVENTANDCLK_1HZ='1'THENIFM19THENM1=M1+1;ELSIFM1=9THENM1=0;IFM25THENM2=M2+1;COUT1='0';COUT='0';ELSIFM2=5THENM2=0;COUT1='1';COUT='1';ENDIF;ENDIF;ENDIF;MIAOGE=M1;MIAOSHI=M2;ENDPROCESS;PROCESS(RST,COUT1)BEGINIFRST='1'THENF1=0;F2=0;ELSIFCOUT1'EVENTANDCOUT1='1'THENIFF19THENF1=F1+1;ELSIFF1=9THENF1=0;IFF25THENF2=F2+1;COUT2='0';ELSIFF2=5THENF2=0;COUT2='1';ENDIF;ENDIF;ENDIF;FENGE=F1;FENSHI=F2;ENDPROCESS;PROCESS(RST,COUT2)8BEGINIFRST='1'THENS1=0;S2=0;ELSIFCOUT2'EVENTANDCOUT2='1'THENIFS14THENS1=S1+1;ELSIFS1=4THENS1=0;IFS22THENS2=S2+1;COUT3='0';ELSIFS2=2THENS2=0;COUT3='1';ENDIF;ENDIF;ENDIF;SHIGE=S1;SHISHI=S2;ENDPROCESS;ENDONE;Nios程序如下:#includesystem.h#includealtera_avalon_pio_regs.h#includea
本文标题:sopc-论文
链接地址:https://www.777doc.com/doc-7101192 .html