技术课程设计基于SOPC技术实现数字闹钟.docx
《技术课程设计基于SOPC技术实现数字闹钟.docx》由会员分享,可在线阅读,更多相关《技术课程设计基于SOPC技术实现数字闹钟.docx(16页珍藏版)》请在冰豆网上搜索。
技术课程设计基于SOPC技术实现数字闹钟
赣南师院
物理与电子信息学院
SOPC技术课程设计报告书
专业班级:
09电信本
学生姓名:
胡雯莹
学 号:
090802054
指导教师:
管立新
设计时间:
2011.12.30
基于SOPC技术实现数字闹钟
一、课题简介
SOPC技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件QuartusII。
SOPC是基于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中植入软核处理器,如:
NIOSII核等。
用户可以根据设计的要求,利用相应的EDA工具,对NIOSII及其外围设备进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求。
二、数字闹钟的工作原理及设计过程
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”,在时的指示调到需要的数字后,再切断“0.5”信号让计数器正常工作。
2、设计过程
SOPC设计首先使用QuartusII建立一个QuartusII的工程,创建完成工程之后,需要创建顶层实体。
创建完顶层设计文件之后,使用SOPCBuilder创建NIOSII嵌入式处理器,添加、配置系统的外设IP,组成NiosII系统模块。
NiosII系统模块设计完成之后要加入到该顶层实体中,然后进行其他片上逻辑的开发。
2.1QuartusII工程的建立:
(1)启动QuartusII软件;
(2)选择File菜单NewProjectWizard,出现Introduction页面,该页面介绍所要完成的具体任务,点击next。
(3)进行项目名称的设定、工作目录的选择。
指定工程存放的目录,工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名也要求是英文名字,我们的工程名和顶层实体名为clock,选择Next。
4.可以为工程添加先期已经输入的设计文件,指定用户自定义的元件库的路径,这里我们没有事先输入好的文件,也没有自定义的元件库,点击Next进入下一步。
5.用户指定目标器件,根据开发板的所使用的器件来选择,实际开发中,通过查看核心板的参考手册来获取所使用的器件具体型号,可以使用窗口右边的Filters来加快器件的选择,选择完毕点击Next。
6.指定在QuartusII之外的用于,设计输入、综合、仿真、时序分析的第三方EDA工具,QuartusII对第三方工具的支持比较完善。
这里我们不做选择,直接点击Next。
所见新工程的信息,确认所创建工程的主要信息,点击Finish完成工程的建立,在开发的过程中,还可以通过菜单assignmentSettings来对这些配置进行修改。
点击Finish按钮,QuartusII自动会打开这个工程,可以看到顶层实体名出现在工程导航窗口中。
7,、新建的工程窗口中,选择FileNew;在DeviceDesignFile页中,选择BlockDiagram/SchematicFile,即原理图文件,也可以选择硬件描述语言的文件形式。
单击OK。
出现一个模块编辑窗口;选择FileSaveAs,出现SaveAs对话框,显示的目录为之前设置的工程目录,文件名为之前设置的顶层实体名(由于这是工程的第一个文件,系统会默认为顶层设计实体的名字)。
确定AddtoCurrentProject选项被选中,点击save。
器件型号
2.2创建NIOSII系统模块
(1)创建系统:
启动SOPCBuilder,选择ToolsSOPCBuilder,出现如图所示的CreateNewSystem对话框。
键入系统的名字,选择硬件描述语言Verilog或者是VHDL。
(2)设置系统主频和指定目标FPGA:
在Board部分选择Unspecified,然后在DeviceFamily选择CycloneII。
用户需要设置系统的时钟频率,该频率用于计算硬件和软件开发中的定时,比如时钟分频或波特率,还可以选择是否选用流水线。
(3)加入NiosIICPU和IP模块:
首先加入NiosII软核,NiosII是软核CPU,共有三种类型的CPU可供选择:
NiosII/e(经济型)、NiosII/s(标准型)和NiosII/f(快速型)。
用户可以根据实际的情况进行选择。
NiosII是一个用户可以自行进行定制的CPU,用户可以增加新的外设、新的指令等。
添加CPU软核
添加内存__SDRAM
添加LCD模块添加100ms的定时器
完整的SOPC的硬件系统
生成的PLL模块
顶层总原理图
2.3部分程序如下:
模24计数器
//counter24.v
1//filename:
counter24.v(BCD:
0--23)
2modulecounter24(CntH,CntL,ncR,EN,CP);
3inputCP,ncR,EN;
4output[3:
0]CntH,CntL;
5reg[3:
0]CntH,CntL;
6
7always@(posedgeCP,negedgencR)
8begin
9if(~ncR)
10{CntH,CntL}<=8'h00;
11elseif(~EN)
12{CntH,CntL}<={CntH,CntL};
13elseif((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3)))
14{CntH,CntL}<=8'h00;
15elseif((CntH==2)&&(CntL<3))
16begin
17CntH<=CntH;
18CntL<=CntL+1'b1;
19end
20elseif(CntL==9)
21begin
22CntH<=CntH+1'b1;
23CntL<=4'b0000;
24end
25else
26begin
27CntH<=CntH;
28CntL<=CntL+1'b1;
29end
30end
31
32endmodule
模60计数器
//counter60.v
1//countuer60
2
3//counter10.v(BCD:
0--9)
4modulecounter10(Q,ncR,EN,CP);
5inputCP,ncR,EN;
6outputreg[3:
0]Q;
7
8always@(posedgeCP,negedgencR)
9begin
10if(~ncR)
11Q<=4'b0000;
12elseif(~EN)
13Q<=Q;
14elseif(Q==4'b1001)
15Q<=4'b0000;
16else
17Q<=Q+1'b1;
18end
19endmodule
20
21//counter6.v(BCD:
0--5)
22modulecounter6(Q,ncR,EN,CP);
23inputCP,ncR,EN;
24outputreg[3:
0]Q;
25
26always@(posedgeCP,negedgencR)
27begin
28if(~ncR)
29Q<=4'b0000;
30elseif(~EN)
31Q<=Q;
32elseif(Q==4'b0101)
33Q<=4'b0000;
34else
35Q<=Q+1'b1;
36end
37endmodule
38
39//counter60.v(BCD:
0--59)
40modulecounter60(Cnt,ncR,EN,CP);
41inputCP,ncR,EN;
42output[7:
0]Cnt;
43wire[7:
0]Cnt;
44wireENP;
45
46counter10UC0(Cnt[3:
0],ncR,EN,CP);
47counter6UC1(Cnt[7:
4],ncR,ENP,CP);
48
49assignENP=(Cnt[3:
0]==4'h9);
50endmodule
闹钟
//bell.v
1//Bell.v
2moduleBell(alarm_clock,set_hr,set_min,hour,minute,
3second,sethrkey,setminkey,_1khz,_500hz,
4_1hz,ctrlbell);
5outputalarm_clock;
6output[7:
0]set_hr,set_min;
7wirealarm_clock;
8input_1khz,_500hz,_1hz;
9inputsethrkey,setminkey;
10inputctrlbell;
11input[7:
0]hour,minute,second;
12
13supply1Vdd;
14wirehrh_equ,hrl_equ,minh_equ,minl_equ;
15wiretime_equ;
16
17counter60SU1(set_min,Vdd,setminkey,_1hz);
18counter24SU2(set_hr[7:
4],set_hr[3:
0],Vdd,sethrkey,_1hz);
19
20//comparatethesettime
21_4bitcomparatorSU4(hrh_equ,set_hr[7:
4],hour[7:
4]);
22_4bitcomparatorSU5(hrl_equ,set_hr[3:
0],hour[3:
0]);
23_4bitcomparatorSU6(minh_equ,set_min[7:
4],minute[7:
4]);
24_4bitcomparatorSU7(minl_equ,set_min[3:
0],minute[3:
0]);
25
26assigntime_equ=(hrh_equ&&hrl_equ&&minh_equ&&minl_equ);
27assignalarm_clock=ctrlbell?
(time_equ&&(((second[0]==1'b1)&&_500hz)
28||((second[0]==1'b0)&&_1khz))):
1'b0;
29endmodule
30
31//4bitcomparator.v
32module_4bitcomparator(equ,a,b);
33input[3:
0]a,b;
34outputequ;
35
36assignequ=(a==b);
37endmodule
2.3元器件型号及逻辑门
芯片:
EP2C20F484C71.2v18752315239616524
占用了3383个逻辑单元,占器件中18752个逻辑单元的18%
Timeoutperiod:
100ms
Timercountersize:
32bits
Pio:
4
电容若干
开关若干
100khz晶振1块
蜂鸣器1个
三、设计过程中遇到的问题及方案
在连接电路时,用1HZ的信号输入时,发现数码管显示没有按预期的要求显示,结果得等一两分钟才显示一次,于是用是最后用时钟信号来代替晶振通过调节脉冲信号的大小,结果发现在200HZ下,数码管才能实现其功能。
在设计闹铃功能时,原先总是想把定时部分显示出来,结果老是不近人意,后来通过查阅很多资料发现介绍定时器设计时,看到用逻辑开关来控制时,突然灵机一动,于是找到一个逻辑开关,把一端接在+5v上,然后放置一示波器,观察其波形,当开关拨置上端时发现示波器显示为高电平。
再将示波器接至数码管输入端时,发现4个输入端为8421码,于是想,是否可以将数码管输入端与逻辑开关组成比较器,后来真的解决了。
四、设计心得体会
经过几星期的努力,终于把这次课程设计做完了。
虽然刚开始对何为SOPC一点都不懂,于是按部就班地上图书馆去查阅资料,上网去搜索终于有较表层的认识。
但是这样远远不够的,还需要对数字闹钟的整体设计,包括具有什么功能,实现这些功能需要哪些元器件,还有软件与硬件的结合,代码的实现。
这需要我再次翻开数电书,重新再学习一次。
此次课程设计让我认清了几点:
第一,将理论付诸实践的困难。
第二,查找资料的重要性。
第三,细节决定成败。
第四,查找故障的能力有待提高。
总的来说,电子钟的课程设计有利于培养我们对电子设计的兴趣,也让我发现了自身很多不足,学会了不少知识,帮我积累了不少经验。
这对我以后的学习和工作都是一笔不可多得的财富。
最后感谢老师一直以来的支持和指导,老师辛苦了!
参考文献:
[1] 康华先---电子技术基础(数字部分);第五版[M]高等教育出版社。
[2]谢自美---《电子线路设计实验测试》;华中科技大学出版社。
[3]谭浩强---《C程序设计》;清华大学出版社。
[4]王建国---《SOPC设计基础与实践》;西安电子科技大学出版社
赣南师范学院2011--2012学年第一学期SOPC技术课程设计
课程设计题目:
基于SOPC技术数字闹钟
设计要求:
教师评语:
教师签字:
年月日
行政班级电子信息工程09级学号_090802054_姓名胡雯莹
选课班级电子信息工程09级任课教师管立新成绩_________