您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页SOPC技术课程设计报告书要点

SOPC技术课程设计报告书要点

来源:爱go旅游网


赣南师院 物理与电子信息学院 SOPC技术课程设计报告书

专业班级: 09电信本 学生姓名: 胡雯莹 学 号: 0908020 指导教师: 管立新 设计时间: 2011.12.30

基于SOPC技术实现数字闹钟

一、课题简介

SOPC技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件Quartus II。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中植入软核处理器,如: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”,在时的指示调到需要的数字后,再切断“0.5”信号让计数器正常工作。

2、设计过程

SOPC设计首先使用Quartus II建立一个Quartus II 的工程,创建完成工程之后,需要创建顶层实体。创建完顶层设计文件之后,使用SOPC Builder创建NIOS II 嵌入式处理器,添加、配置系统的外设IP,组成Nios II系统模块。 Nios II 系统模块设计完成之后要加入到该顶层实体中,然后进行其他片上逻辑的开发。

2.1 Quartus II 工程的建立: (1)启动Quartus II软件; (2)选择File菜单的具体任务,点击next。

(3) 进行项目名称的设定、工作目录的选择。指定工程存放的目录,工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名也要求是英文名字,我们的工程名和顶层实体名为clock,选择Next。

,出现Introduction页面,该页面介绍所要完成

4. 可以为工程添加先期已经输入的设计文件,指定用户自定义的元件库的路径,这里我们没有事先输入好的文件,也没有自定义的元件库,点击Next进入下一步。

5. 用户指定目标器件,根据开发板的所使用的器件来选择,实际开发中,通过查看核心板的参考手册来获取所使用的器件具体型号,可以使用窗口右边的Filters来加快器件的选择,选择完毕点击Next。

6. 指定在Quartus II 之外的用于,设计输入、综合、仿真、时序分析的第三方EDA工具,Quartus II对第三方工具的支持比较完善。这里我们不做选择,直接点击Next。

所见新工程的信息,确认所创建工程的主要信息,点击Finish完成工程的建立,在开发的过程中,还可以通过菜单

来对这些配置进行修改。 点击Finish按钮,Quartus

II自动会打开这个工程,可以看到顶层实体名出现在工程导航窗口中。 7,、 新建的工程窗口中,选择

;在Device Design File页中,选择Block Diagram/

Schematic File,即原理图文件,也可以选择硬件描述语言的文件形式。单击OK。出现一个模块编辑窗口;选择

,出现Save As对话框,显示的目录为之前设置的工程目录,文件

名为之前设置的顶层实体名(由于这是工程的第一个文件,系统会默认为顶层设计实体的名字)。确定Add to Current Project选项被选中,点击save。

器件型号

2.2创建NIOS II 系统模块

(1) 创建系统:启动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的硬件系统

PLLinclk0inclk0 frequency: 50.000 MHzOperation Mode: NormalClk RatioPh (dg)DC (%)c0c11/11/1-.000.0050.0050.00c0c1inst1Cyclone II

生成的PLL模块

PLLCLK_50MHzINPUTVCCinclk0inclk0 frequency: 50.000 MHzOperation Mode: NormalClk RatioPh (dg)DC (%)c0c11/11/1-.000.0050.0050.00PIN_L1LVTTLc0c1OUTPUTDRAM_CLKPIN_U4PIN_A13PIN_B13PIN_A14PIN_B14PIN_A15PIN_B15PIN_A16PIN_B16LVTTLLCD_ELVTTLPIN_H14PIN_H12LVTTLLCD_RSLVTTLLVTTLLCD_RWPIN_H13LVTTLLCD_data[7..0]LVTTLLVTTLLVTTLDRAM_ADDR[11..0]LVTTLDRAM_BA_1,DRAM_BA_0PIN_U1IN_W4DRAM_CAS_NPIN_U2IN_W5IN_T3IN_U3PIN_V1IN_Y3DRAM_CKEIN_V4PIN_N3PIN_V2IN_Y4DRAM_CS_NPIN_W1IN_R6DRAM_DQ[15..0]PIN_T6PIN_R7PIN_W2IN_R5IN_T5DRAM_UDQM,DRAM_LDQMPIN_M5PIN_Y1IN_P6DRAM_RAS_NPIN_Y2IN_P5DRAM_WE_NPIN_N1IN_P3PIN_R8PIN_N2IN_N4PIN_PIN_W31PIN_PIN_N62PIN_R1PIN_R2PIN_T1PIN_T2CLOCKCyclone IIinstclk_0 reset_n in_port_to_the_button_pio_0[2..0] LCD_E_from_the_lcd_0 LCD_RS_from_the_lcd_0 LCD_RW_from_the_lcd_0 LCD_data_to_and_from_the_lcd_0[7..0] zs_addr_from_the_sdram_0[11..0] zs_ba_from_the_sdram_0[1..0] zs_cas_n_from_the_sdram_0 zs_cke_from_the_sdram_0 zs_cs_n_from_the_sdram_0 zs_dq_to_and_from_the_sdram_0[15..0] zs_dqm_from_the_sdram_0[1..0] zs_ras_n_from_the_sdram_0 zs_we_n_from_the_sdram_0 OUTPUTOUTPUTOUTPUTBIDIRVCCReset_nINPUTVCCPIN_R22LVTTLKEY[3..1]PIN_R21PIN_T22PIN_T21LVTTLLVTTLLVTTLINPUTVCCOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTBIDIRVCCOUTPUTOUTPUTOUTPUTSW[0]INPUTVCCin_port_to_the_switch_pio_0 inst1PIN_L22LVTTL

顶层总原理图

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: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 begin 17 CntH<=CntH; 18 CntL<=CntL+1'b1; 19 end

20 else if(CntL==9) 21 begin

22 CntH<=CntH+1'b1; 23 CntL<=4'b0000; 24 end 25 else 26 begin 27 CntH<=CntH; 28 CntL<=CntL+1'b1; 29 end 30 end 31 32 endmodule

模60计数器 //counter60.v 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 begin 10 if(~ncR) 11 Q<=4'b0000; 12 else if(~EN) 13 Q<=Q;

14 else if(Q==4'b1001) 15 Q<=4'b0000; 16 else 17 Q<=Q+1'b1; 18 end 19 endmodule 20

21 //counter6.v(BCD: 0--5) 22 module counter6(Q,ncR,EN,CP); 23 input CP,ncR,EN; 24 output reg [3:0]Q; 25

26 always @(posedge CP,negedge ncR) 27 begin 28 if(~ncR) 29 Q<=4'b0000; 30 else if(~EN) 31 Q<=Q;

32 else if(Q==4'b0101)

33 Q<=4'b0000; 34 else 35 Q<=Q+1'b1; 36 end

37 endmodule 38

39 //counter60.v(BCD:0--59) 40 module counter60(Cnt,ncR,EN,CP); 41 input CP,ncR,EN; 42 output [7:0]Cnt; 43 wire [7:0]Cnt; 44 wire ENP; 45

46 counter10 UC0(Cnt[3:0],ncR,EN,CP); 47 counter6 UC1(Cnt[7:4],ncR,ENP,CP); 48

49 assign ENP=(Cnt[3:0]==4'h9); 50 endmodule 闹钟

//bell.v 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 output [7:0]set_hr,set_min; 7 wire alarm_clock; 8 input _1khz,_500hz,_1hz; 9 input sethrkey,setminkey;

10 input ctrlbell;

11 input [7:0]hour,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_hr[7:4],set_hr[3:0],Vdd,sethrkey,_1hz); 19

20 //comparate the set time

21 _4bitcomparator SU4(hrh_equ,set_hr[7:4],hour[7:4]); 22 _4bitcomparator SU5(hrl_equ,set_hr[3:0],hour[3:0]); 23 _4bitcomparator SU6(minh_equ,set_min[7:4],minute[7:4]); 24 _4bitcomparator SU7(minl_equ,set_min[3:0],minute[3:0]); 25

26 assign time_equ=(hrh_equ && hrl_equ && minh_equ && minl_equ); 27 assign alarm_clock=ctrlbell?(time_equ&&(((second[0]==1'b1)&&_500hz) 28 ||((second[0]==1'b0)&&_1khz))):1'b0; 29 endmodule 30

31 //4bitcomparator.v

32 module _4bitcomparator(equ,a,b); 33 input [3:0]a,b; 34 output equ; 35

36 assign equ=(a==b); 37 endmodule

2.3元器件型号及逻辑门

芯片:EP2C20F484C7 1.2v 18752 315 239616 52 4 占用了3383个逻辑单元,占器件中18752个逻辑单元的18% Timeout period:100ms Timer counter size :32bits Pio:4 电容若干 开关若干 100khz晶振1块 蜂鸣器1个

三、设计过程中遇到的问题及方案

在连接电路时,用1HZ的信号输入时,发现数码管显示没有按预期的要求显示,结果得等一两分钟才显示一次,于是用是最后用时钟信号来代替晶振通过调节脉冲信号的大小,结果发现在200HZ下,数码管才能实现其功能。

在设计闹铃功能时,原先总是想把定时部分显示出来,结果老是不近人意,后来通过查阅很多资料发现介绍定时器设计时,看到用逻辑开关来控制时,突然灵机一动,于是找到一个逻辑开关,把一端接在+5v上,然后放置一示波器,观察其波形,当开关拨置上端时发现示波器显示为高电平。再将示波器接至数码管输入端时,发现4个输入端为8421码,于是想,是否可以将数码管输入端与逻辑开关组成比较器,后来真的解决了。

四、设计心得体会

经过几星期的努力,终于把这次课程设计做完了。虽然刚开始对何为SOPC一点都不懂,于是按部就班地上图书馆去查阅资料,上网去搜索终于有较表层的认识。但是这样远远不够的,还需要对数字闹钟的整体设计,包括具有什么功能,实现这些功能需要哪些元器件,还有软件与硬件的结合,代码的实现。这需要我再次翻开数电书,重新再学习一次。

此次课程设计让我认清了几点: 第一, 将理论付诸实践的困难。 第二, 查找资料的重要性。 第三, 细节决定成败。

第四, 查找故障的能力有待提高。

总的来说,电子钟的课程设计有利于培养我们对电子设计的兴趣,也让我发现了自身很多不足,学会了不少知识,帮我积累了不少经验。这对我以后的学习和工作都是一笔不可多得的财富。最后感谢老师一直以来的支持和指导,老师辛苦了!

参考文献:

[ 1 ] 康华先--- 电子技术基础(数字部分) ;第五版[M]高等教育出版社。 [ 2 ] 谢自美--- 《电子线路设计 实验 测试》;华中科技大学出版社。 [ 3 ] 谭浩强---《C程序设计》;清华大学出版社。

[ 4 ] 王建国---《SOPC设计基础与实践》;西安电子科技大学出版社

赣南师范学院2011--2012学年第一学期SOPC技术课程设计

行政班级 电子信息工程09级 学号 _0908020_ 姓名 胡雯莹 选课班级 电子信息工程09级 任课教师 管立新 成绩 _________

课程设计题目:基于SOPC技术数字闹钟 设计要求: 教师评语: 教师签字: 年 月 日

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务