
SOPC技术课程设计---基于SOPC技术实现数字闹钟.doc
16页赣南师院物理与电子信息学院SOPC技术课程设计报告书专业班级: 09电信本 学生姓名: 胡雯莹 学 号: 090802054 指导教师: 管立新 设计时间: 基于SOPC技术实现数字闹钟一、课题简介 SOPC技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件Quartus IISOPC是基于FPGA解决方案的SOC,与ASIC的SOC解决方案相比,SOPC系统及其开发技术具有更多的特色,构成SOPC的方案有多种途径,我们主要用到的是:基于FPGA嵌入IP硬核的SOPC系统1.基于FPGA嵌入IP硬核的SOPC系统即在FPGA中预先植入嵌入式系统处理器目前最为常用的嵌入式系统大多采用了含有ARM的32位知识产权处理器核的器件尽管由这些器件构成的嵌入式系统有很强的功能,但为了使系统更为灵活完备,功能更为强大,对更多任务的完成具有更好的适应性,通常必须为此处理器配置许多接口器件才能构成一个完整的应用系统如除配置常规的SRAM、DRAM、Flash外,还必须配置网络通信接口、串行通信接口、USB接口、VGA接口、PS/2接口或其他专用接口等。
这样会增加整个系统的体积、功耗,而降低系统的可靠性但是如果将ARM或其他知识产权核,以硬核方式植入FPGA中,利用FPGA中的可编程逻辑资源和IP软核,直接利用FPGA中的逻辑宏单元来构成该嵌入式系统处理器的接口功能模块,就能很好地解决这些问题2.基于FPGA嵌入IP软核的SOPC系统这种SOPC系统是指在FPGA中植入软核处理器,如:NIOS II核等用户可以根据设计的要求,利用相应的EDA工具,对NIOS II及其外围设备进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求二、数字闹钟的工作原理及设计过程1、工作原理 数字闹钟组成结构数字闹钟一般由振荡器、分频器、计数器、译码器、显示器及部分扩展电路等组成1.1 振荡器振荡器是数字电子钟的核心,其作用是产生一个频率标准,即时间标准信号,然后再由分频器生成秒脉冲,所以,振荡器频率的精度和稳定度就基本决定了数字电子钟的准确度,为产生稳定的时间标准信号,一般采用石英晶体振荡器从数字电子钟的精度考虑,振荡频率越高记数精度越高但这回使振荡器的耗电量增大,分频器级数增多。
所以在确定频率时应同时考虑这两方面的因素再选择器材如果精度要求不是很高的话我们可以采用由集成逻辑门与RC组成的时钟源振荡器或由集成电路定时器555与RC组成的多谐振荡器一般而言,选用石英晶体振荡器所选用的晶振频率为32768Hz,再通过15级2分频集成电路得到1Hz的标准秒脉冲1.2 分频器振荡器产生的时标信号频率很高,要使它变成用来计时的“秒”信号,需要若干级分频电路,分频器的级数和每级分频次数要根据时标信号的频率来决定其功能主要有两个:一是产生标准秒脉冲信号,二是提供功能扩展电路所需的信号1.3 计数器有了“秒”信号了就可以根据60秒为一分,60分为一小时,24小时为一天的进制,分别选定没“秒”、“分”、“时”的计数器从这些计数器的输出可得到一分、一小时、一天的时间进位信号在秒计数器钟因为是60进制通常用两个十进制计数器的集成片组成,其中秒个位是十进制的、十位是6进制的可采用反馈归零法变“秒”十位为6进制,实现秒的60进制,同样,分计数器的与秒的一样,只是时计数器里需要变成24进制,也用反馈归零法实现1.4 译码器及显示器因为计数器全部采用8421BCD码十进制计数集成芯片,所以“秒”、“分”、“时”的个位和十位都有四个状态输出端(Qa、Qb、Qc、Qd)。
将这些输出端接至专门设计制造的译码电路,就可产生驱动七段数码显示器的信号1.5 校时电路当数字钟接通电源或者计时出现误差时需要校正时间,校时电路的要求是:在小时校正时不影响分和秒的正常计数;在分校时时不影响时和秒的正常计数;校时方式有“快校时”和“慢校时”两种,“快校时“是通过开关控制使计数器对1Hz的校时脉冲计数,“慢校时”是通过手动产生单脉冲作校时脉冲,校时的基本原理是将0.5秒的脉冲信号(可由分频器的第14级分频输出端直接获得),直接引进“时”计数器,同时将计数器置“0”,在时的指示调到需要的数字后,再切断“”信号让计数器正常工作 2、设计过程SOPC设计首先使用Quartus II建立一个Quartus II 的工程,创建完成工程之后,需要创建顶层实体创建完顶层设计文件之后,使用SOPC Builder创建NIOS II 嵌入式处理器,添加、配置系统的外设IP,组成Nios II系统模块 Nios II 系统模块设计完成之后要加入到该顶层实体中,然后进行其他片上逻辑的开发2.1 Quartus II 工程的建立:(1)启动Quartus II软件;(2)选择File菜单®New Project Wizard,出现Introduction页面,该页面介绍所要完成的具体任务,点击next。
3) 进行项目名称的设定、工作目录的选择指定工程存放的目录,工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名也要求是英文名字,我们的工程名和顶层实体名为clock,选择Next4. 可以为工程添加先期已经输入的设计文件,指定用户自定义的元件库的路径,这里我们没有事先输入好的文件,也没有自定义的元件库,点击Next进入下一步 5. 用户指定目标器件,根据开发板的所使用的器件来选择,实际开发中,通过查看核心板的参考手册来获取所使用的器件具体型号,可以使用窗口右边的Filters来加快器件的选择,选择完毕点击Next6. 指定在Quartus II 之外的用于,设计输入、综合、仿真、时序分析的第三方EDA工具,Quartus II对第三方工具的支持比较完善这里我们不做选择,直接点击Next所见新工程的信息,确认所创建工程的主要信息,点击Finish完成工程的建立,在开发的过程中,还可以通过菜单assignment®Settings来对这些配置进行修改 点击Finish按钮,Quartus II自动会打开这个工程,可以看到顶层实体名出现在工程导航窗口中。
7,、 新建的工程窗口中,选择File®New;在Device Design File页中,选择Block Diagram/Schematic File,即原理图文件,也可以选择硬件描述语言的文件形式单击OK出现一个模块编辑窗口;选择File®Save As,出现Save As对话框,显示的目录为之前设置的工程目录,文件名为之前设置的顶层实体名(由于这是工程的第一个文件,系统会默认为顶层设计实体的名字)确定Add to Current Project选项被选中,点击save器件型号 2.2创建NIOS II 系统模块(1) 创建系统:启动SOPC Builder,选择Tools®SOPC Builder,出现如图所示的Create New System对话框键入系统的名字,选择硬件描述语言Verilog或者是VHDL (2) 设置系统主频和指定目标FPGA:在Board部分选择Unspecified,然后在Device Family选择Cyclone II用户需要设置系统的时钟频率,该频率用于计算硬件和软件开发中的定时,比如时钟分频或波特率,还可以选择是否选用流水线。
(3)加入Nios II CPU和 IP模块:首先加入Nios II软核,Nios II 是软核CPU,共有三种类型的CPU可供选择:Nios II/e(经济型)、Nios II/s(标准型)和Nios II/f(快速型)用户可以根据实际的情况进行选择Nios II是一个用户可以自行进行定制的CPU,用户可以增加新的外设、新的指令等 添加CPU软核添加内存__SDRAM 添加LCD模块 添加100ms的定时器 完整的SOPC的硬件系统生成的PLL模块 顶层总原理图2.3部分程序如下:模24计数器 1 //filename :counter24.v (BCD : 0--23) 2 module counter24(CntH,CntL,ncR,EN,CP); 3 input CP,ncR,EN; 4 output [3:0]CntH,CntL; 5 reg [3:0]CntH,CntL; 6 7 always @(posedge CP,negedge ncR) 8 begin 9 if(~ncR)10 {CntH,CntL}<=8'h00;11 else if(~EN)12 {CntH,CntL}<={CntH,CntL};13 else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3)))14 {CntH,CntL}<=8'h00;15 else if((CntH==2)&&(CntL<3))16 begin17 CntH<=CntH;18 CntL<=CntL+1'b1;19 end20 else if(CntL==9)21 begin22 CntH<=CntH+1'b1;23 CntL<=4'b0000;24 end25 else26 begin27 CntH<=CntH;28 CntL<=CntL+1'b1;29 end30 end31 32 endmodule 模60计数器1 //countuer 60 2 3 //counter10.v (BCD: 0--9) 4 module counter10(Q,ncR,EN,CP); 5 input CP,ncR,EN; 6 output reg [3:0]Q; 7 8 always @(posedge CP,negedge ncR) 9 begin10 if(~ncR)11 Q<=4'b0000;12 else if(~EN)13 Q<=Q;14 else if(Q==4'b1001)15 Q<=4'b0000;16 else17 Q<=Q+1'b1;18 end19 endmodule20 21 //counter6.v(BCD: 0--5)22 module counter6(Q,ncR,EN,CP);23 input CP,ncR,EN;24 o。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





