sopc技术课程设计基于sopc技术实现数字闹钟_第1页
sopc技术课程设计基于sopc技术实现数字闹钟_第2页
sopc技术课程设计基于sopc技术实现数字闹钟_第3页
sopc技术课程设计基于sopc技术实现数字闹钟_第4页
sopc技术课程设计基于sopc技术实现数字闹钟_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、赣南师院物理与电子信息学院sopc技术课程设计报告书专业班级: 09电信本 学生姓名: 胡雯莹 学号: 090802054 指导教师: 管立新 设计时间: 2011.12.30 基于sopc技术实现数字闹钟一、课题简介 sopc技术是美国altrea公司于2000年最早提出的,并同时推出了相应的开发软件quartus ii。sopc是基于fpga解决方案的soc,与asic的soc解决方案相比,sopc系统及其开发技术具有更多的特色,构成sopc的方案有多种途径,我们主要用到的是:基于fpga嵌入ip硬核的sopc系统1基于fpga嵌入ip硬核的sopc系统即在fpga中预先植入嵌入式系统处理

2、器。目前最为常用的嵌入式系统大多采用了含有arm的32位知识产权处理器核的器件。尽管由这些器件构成的嵌入式系统有很强的功能,但为了使系统更为灵活完备,功能更为强大,对更多任务的完成具有更好的适应性,通常必须为此处理器配置许多接口器件才能构成一个完整的应用系统。如除配置常规的sram、dram、flash外,还必须配置网络通信接口、串行通信接口、usb接口、vga接口、ps/2接口或其他专用接口等。这样会增加整个系统的体积、功耗,而降低系统的可靠性。但是如果将arm或其他知识产权核,以硬核方式植入fpga中,利用fpga中的可编程逻辑资源和ip软核,直接利用fpga中的逻辑宏单元来构成该嵌入式系

3、统处理器的接口功能模块,就能很好地解决这些问题。2基于fpga嵌入ip软核的sopc系统这种sopc系统是指在fpga中植入软核处理器,如:nios ii核等。用户可以根据设计的要求,利用相应的eda工具,对nios ii及其外围设备进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求。二、数字闹钟的工作原理及设计过程1、工作原理 数字闹钟组成结构数字闹钟一般由振荡器、分频器、计数器、译码器、显示器及部分扩展电路等组成。1.1 振荡器振荡器是数字电子钟的核心,其作用是产生一个频率标准,即时间标准信号,然后再由分频器生成秒脉冲,所以,振荡器频率的精度和稳定度就基

4、本决定了数字电子钟的准确度,为产生稳定的时间标准信号,一般采用石英晶体振荡器。从数字电子钟的精度考虑,振荡频率越高记数精度越高。但这回使振荡器的耗电量增大,分频器级数增多。所以在确定频率时应同时考虑这两方面的因素再选择器材。如果精度要求不是很高的话我们可以采用由集成逻辑门与rc组成的时钟源振荡器或由集成电路定时器555与rc组成的多谐振荡器。一般而言,选用石英晶体振荡器所选用的晶振频率为32768hz,再通过15级2分频集成电路得到1hz的标准秒脉冲。1.2 分频器振荡器产生的时标信号频率很高,要使它变成用来计时的“秒”信号,需要若干级分频电路,分频器的级数和每级分频次数要根据时标信号的频率来

5、决定。其功能主要有两个:一是产生标准秒脉冲信号,二是提供功能扩展电路所需的信号。1.3 计数器有了“秒”信号了就可以根据60秒为一分,60分为一小时,24小时为一天的进制,分别选定没“秒”、“分”、“时”的计数器。从这些计数器的输出可得到一分、一小时、一天的时间进位信号。在秒计数器钟因为是60进制通常用两个十进制计数器的集成片组成,其中秒个位是十进制的、十位是6进制的。可采用反馈归零法变“秒”十位为6进制,实现秒的60进制,同样,分计数器的与秒的一样,只是时计数器里需要变成24进制,也用反馈归零法实现。1.4 译码器及显示器因为计数器全部采用8421bcd码十进制计数集成芯片,所以“秒”、“分

6、”、“时”的个位和十位都有四个状态输出端(qa、qb、qc、qd)。将这些输出端接至专门设计制造的译码电路,就可产生驱动七段数码显示器的信号。1.5 校时电路当数字钟接通电源或者计时出现误差时需要校正时间,校时电路的要求是:在小时校正时不影响分和秒的正常计数;在分校时时不影响时和秒的正常计数;校时方式有“快校时”和“慢校时”两种,“快校时“是通过开关控制使计数器对1hz的校时脉冲计数,“慢校时”是通过手动产生单脉冲作校时脉冲,校时的基本原理是将0.5秒的脉冲信号(可由分频器的第14级分频输出端直接获得),直接引进“时”计数器,同时将计数器置“0”,在时的指示调到需要的数字后,再切断“0.5”信

7、号让计数器正常工作。 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)

8、进行项目名称的设定、工作目录的选择。指定工程存放的目录,工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名也要求是英文名字,我们的工程名和顶层实体名为clock,选择next。4. 可以为工程添加先期已经输入的设计文件,指定用户自定义的元件库的路径,这里我们没有事先输入好的文件,也没有自定义的元件库,点击next进入下一步。 5. 用户指定目标器件,根据开发板的所使用的器件来选择,实际开发中,通过查看核心板的参考手册来获取所使用的器件具体型号,可以使用窗口右边的filters来加快器件的选择,选择完毕点击next。6. 指定在quart

9、us ii 之外的用于,设计输入、综合、仿真、时序分析的第三方eda工具,quartus ii对第三方工具的支持比较完善。这里我们不做选择,直接点击next。所见新工程的信息,确认所创建工程的主要信息,点击finish完成工程的建立,在开发的过程中,还可以通过菜单assignmentsettings来对这些配置进行修改。 点击finish按钮,quartus ii自动会打开这个工程,可以看到顶层实体名出现在工程导航窗口中。7,、 新建的工程窗口中,选择filenew;在device design file页中,选择block diagramschematic file,即原理图文件,也可以选择

10、硬件描述语言的文件形式。单击ok。出现一个模块编辑窗口;选择filesave as,出现save as对话框,显示的目录为之前设置的工程目录,文件名为之前设置的顶层实体名(由于这是工程的第一个文件,系统会默认为顶层设计实体的名字)。确定add to current project选项被选中,点击save。器件型号 2.2创建nios ii 系统模块(1) 创建系统:启动sopc builder,选择toolssopc builder,出现如图所示的create new system对话框。键入系统的名字,选择硬件描述语言verilog或者是vhdl。 (2) 设置系统主频和指定目标fpga:在

11、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 添加l

12、cd模块 添加100ms的定时器 完整的sopc的硬件系统生成的pll模块 顶层总原理图2.3部分程序如下:模24计数器/counter24.v 1 /filename :counter24.v (bcd : 0-23) 2 module counter24(cnth,cntl,ncr,en,cp); 3 input cp,ncr,en; 4 output 3:0cnth,cntl; 5 reg 3:0cnth,cntl; 6 7 always (posedge cp,negedge ncr) 8 begin 9 if(ncr)10 cnth,cntl=8h00;11 else if(en)1

13、2 cnth,cntl2)|(cntl9)|(cnth=2)&(cntl=3)14 cnth,cntl=8h00;15 else if(cnth=2)&(cntl3)16 begin17 cnth=cnth;18 cntl=cntl+1b1;19 end20 else if(cntl=9)21 begin22 cnth=cnth+1b1;23 cntl=4b0000;24 end25 else26 begin27 cnth=cnth;28 cntl=cntl+1b1;29 end30 end31 32 endmodule 模60计数器/counter60.v1 /countuer 60 2 3

14、 /counter10.v (bcd: 0-9) 4 module counter10(q,ncr,en,cp); 5 input cp,ncr,en; 6 output reg 3:0q; 7 8 always (posedge cp,negedge ncr) 9 begin10 if(ncr)11 q=4b0000;12 else if(en)13 q=q;14 else if(q=4b1001)15 q=4b0000;16 else17 q=q+1b1;18 end19 endmodule20 21 /counter6.v(bcd: 0-5)22 module counter6(q,nc

15、r,en,cp);23 input cp,ncr,en;24 output reg 3:0q;25 26 always (posedge cp,negedge ncr)27 begin28 if(ncr)29 q=4b0000;30 else if(en)31 q=q;32 else if(q=4b0101)33 q=4b0000;34 else35 q=q+1b1;36 end37 endmodule 38 39 /counter60.v(bcd:0-59)40 module counter60(cnt,ncr,en,cp);41 input cp,ncr,en;42 output 7:0c

16、nt;43 wire 7:0cnt;44 wire enp;45 46 counter10 uc0(cnt3:0,ncr,en,cp);47 counter6 uc1(cnt7:4,ncr,enp,cp);48 49 assign enp=(cnt3:0=4h9);50 endmodule 闹钟/1 /bell.v 2 module bell(alarm_clock,set_hr,set_min,hour,minute, 3 second,sethrkey,setminkey,_1khz,_500hz, 4 _1hz,ctrlbell); 5 output alarm_clock; 6 out

17、put 7:0set_hr,set_min; 7 wire alarm_clock; 8 input _1khz,_500hz,_1hz; 9 input sethrkey,setminkey;10 input ctrlbell;11 input 7:0hour,minute,second;12 13 supply1 vdd;14 wire hrh_equ,hrl_equ,minh_equ,minl_equ;15 wire time_equ;16 17 counter60 su1(set_min,vdd,setminkey,_1hz);18 counter24 su2(set_hr7:4,se

18、t_hr3:0,vdd,sethrkey,_1hz);19 20 /comparate the set time21 _4bitcomparator su4(hrh_equ,set_hr7:4,hour7:4);22 _4bitcomparator su5(hrl_equ,set_hr3:0,hour3:0);23 _4bitcomparator su6(minh_equ,set_min7:4,minute7:4);24 _4bitcomparator su7(minl_equ,set_min3:0,minute3:0);25 26 assign time_equ=(hrh_equ & hrl

19、_equ & minh_equ & minl_equ);27 assign alarm_clock=ctrlbell?(time_equ&(second0=1b1)&_500hz)28 |(second0=1b0)&_1khz):1b0;29 endmodule30 31 /4bitcomparator.v32 module _4bitcomparator(equ,a,b);33 input 3:0a,b;34 output equ;35 36 assign equ=(a=b);37 endmodule2.3元器件型号及逻辑门芯片:ep2c20f484c7 1.2v 18752 315 239

20、616 52 4占用了3383个逻辑单元,占器件中18752个逻辑单元的18% timeout period:100mstimer counter size :32bitspio:4电容若干开关若干100khz晶振1块蜂鸣器1个三、设计过程中遇到的问题及方案在连接电路时,用1hz的信号输入时,发现数码管显示没有按预期的要求显示,结果得等一两分钟才显示一次,于是用是最后用时钟信号来代替晶振通过调节脉冲信号的大小,结果发现在200hz下,数码管才能实现其功能。在设计闹铃功能时,原先总是想把定时部分显示出来,结果老是不近人意,后来通过查阅很多资料发现介绍定时器设计时,看到用逻辑开关来控制时,突然灵机一动,于是找到一个逻辑开关,把一端接在+5v上,然后放置一示波器,观察其波形,当开关拨置上端时发现

温馨提示

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

最新文档

评论

0/150

提交评论