一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 9652|回复: 3
收起左侧

SOPC技术应用

[复制链接]
发表于 2009-1-23 14:04 | 显示全部楼层 |阅读模式
第1节 SOPC开发流程和开发工具 8 I6 C: M  ^* l* w9 ?2 z9 A7 }# S
SOPC设计包括硬件和软件两部分。 $ G" C# ?" B- i2 ]
硬件设计:主要基于Quartus II和 SOPC Builder。 . }9 F% {0 w9 O
软件设计:基于Nios II IDE。2 o+ P2 B9 G3 k% w  r( k
http://www.eefocus.com/data/08-09/4155_1221817002/1223185828.jpg% v* Y5 t9 \' A+ h8 V! O
流程见图解析:- o% i% q6 x1 j" B
分析系统需求: 在进行SOPC开发之前,首先必须确定系统的需求,如应用系统需求的计算性能、需要的带宽和吞吐量、需求的接口类型以及是否需求多线程的软件等。
/ n' ~& J- o3 u+ [; f5 @建立Quartus II工程:每个开发过程开始时都应建立一个工程,Quartus II是以工程的方式对设计过程进行管理。在工程中建立顶层模块文件.bdf相当于传统电路设计中的电路板(PCB)。# O% F$ {8 s( O9 J
定义和生成系统:在SOPC Builder中添加需要的功能模块(Nios II及其标准外设模块),完成后生成一个系统模块。% x2 H; V2 I+ k; q
定制指令&定制外设逻辑:如果需要,用户可以定制指令和外设逻辑。(可参考第8章)
) p0 S/ K& Z' x) ^/ M" n自定义的功能模块:当设计中现有模块不能满足设计要求时,可设计自己的功能模块。并在顶层模块中使用; / |6 n9 `8 N9 U& A
集成SOPC生成的系统到Quartus II工程 :在顶层模块中,分别将SOPC Builder生成的系统模块、LPM功能模块以及用户自定义功能模块添加到顶层模块中;
) s+ ?5 i2 G( H9 E/ R* x& R连接各功能模块:然后将各个功能模块用连线连起来组成系统功能原理图
7 {9 W3 T- L6 |7 |+ `" k; a; f! n5 dAltera的LPM模块 :在Quartus II软件中包含了大量的Altera公司提供的LPM功能模块,相当与传统设计中除处理器以外的逻辑芯片(如74系列); $ A% s7 p; _- P& P; R# B+ E. B
选择FPGA型号并进行管脚分配 :为系统功能原理图选择芯片载体并为各个输入输出信号分配芯片的管脚;
1 U# K* B/ V+ ]/ u) Q4 Z( c5 K进行编译选项设置:设置编译选项,从而让编译器按照用户设定来进行编译;
/ G$ t9 E( i  d4 f编译硬件系统生成配置文件sof :编译系统生成硬件系统的配置文件*.sof和*.pof。编译系统是一个非常复杂的过程,包括优化逻辑的组合、综合逻辑、适配FPGA、布线以及时序分析等步骤。
5 ?  G3 h* J- U3 S9 T下载配置文件到FPGA器件:将配置文件.sof下载到FPGA,将可执行文件.elf下载到RAM。 ) [- z! O) W4 j# k: `" L
设置软件运行硬件环境属性:设置好软件运行的硬件环境属性后,便可进行编译、链接和调试、运行程序。
1 L# y% c. O$ k编译软件:对用户程序进行编译,生成可执行文件*.elf。 2 Z" t; X' B6 R
ISS运行/调试 :接下来在IDE的指令集仿真器(ISS)上仿真软件和运行/调试软件。
* Q4 j4 E* W0 v* O3 E3 Q. K  d在目标板上运行/调试软件 :在目标板上反复调试软件。
& T7 `0 @0 ?: O( \# @/ n使用IDE编程工具 烧写配置文件和软件代码 :最后利用IDE的编程工具将配置文件烧写到FPGA的配置芯片或Flash,将可执行文件*.elf编程到Flash中。 2 w- S2 I2 Z( _; k
$ G5 F  c: {% ?
(1)硬件开发
0 _+ }( Q  ?  ]0 J) [/ M" E
        用SOPC Builder软件从NiosII处理器内核和NiosII开发套件提供的外设列表中选取合适的CPU、存储器以及各外围器件,并定制和配置它们的功能; 分配外设地址及中断号; 设定复位地址;用户也可以添加用户自身定制指令逻辑到NiosII内核以加速CPU性能; 添加用户自己设计的IP模块。编译Quartus II工程,对HDL文件进行布局布线,从HDL源文件综合生成一个适合目标器件网表,生成FPGA配置文件(.sof);   V) F' t0 E7 O' X
用下载电缆(如 ByteBlaster II),将配置文件下载到目标板上。硬件校验完成后,可将新的硬件配置文件下载到目标板上的非易失存储器(如EPCS器件)。 8 H% u6 I8 m, N4 _$ A
http://www.eefocus.com/data/08-09/4155_1221817002/1223550096.jpg
! K& ]) P% r0 a! O5 A, u6 A+ f6 N(2)软件开发 1 N# E, d$ @  F/ F/ U
        软件开发使用Nios II IDE,它是一个基于Eclipse IDE架构的集成开发环境,它包括: 4 j" q1 Y! o% R8 f. @/ ]6 N; d+ u
        GNU开发工具(标准GCC编译器,连接器,汇编器和makefile工具等);
- C- a9 T. }0 h- N. ]        基于GDB的调试器,包括软件仿真和硬件调试; ( P, w. k* m& r4 s# c4 P* k
        提供用户一个硬件抽象层HAL;
5 z: G4 K( b7 k2 ~, j  |( H        提供嵌入式操作系统MicroC/OS-II和LwTCP/IP协议栈的支持;
$ H, Q; I" V/ s) q8 D( U/ E$ h        提供帮助用户快速入门的软件模板;
, ]8 `! v) e  H$ g, J( C  a! N. o        提供Flash下载支持(Flash Progrmmer 和QuartusII Programmer) ; n' l$ r: D2 G5 I, \
        使用SOPC Builder生成系统后,可以直接使用Nios II IDE开始设计C/C++应用程序代码。Altera提供外设驱动程序和硬件抽象层(HAL),使用户能够快速编写与低级硬件细节无关的Nios II程序; 除了应用代码,用户还可以在Nios II IDE 工程中设计和重新使用定制库。
& w3 [3 Y; c' q; \4 E4 G( W$ A, S6 |( y8 ^( S' B. g6 \+ b) ?. J. H: |
 楼主| 发表于 2009-1-23 14:07 | 显示全部楼层
第2节 SOPC硬件开发实例
( A6 M4 H  l' g+ b/ u6 JSOPC硬件开发实例
, y5 k/ x+ b2 o- K9 w. `$ B8 y第一步是要进行需求分析,根据这个要求来建立硬件系统。
& Z+ n# R. }# y2 i电子钟的设计要求:
5 {" {2 e' ^4 Y在液晶屏上显示日期、时间;
* r: c# P) g3 I/ K可以设置日期、时间;
/ h8 Z; z- f0 Q0 J6 H; K9 e
0 f+ E; s! J/ J根据系统要求实现的功能,电子钟的设计要用到的外围器件有: ! L1 L" D3 {2 e: K  J4 {) g
LCD:电子钟显示屏幕;
" @- [8 p; ^- [  p. m按键:电子钟设置功能键; 1 C& J, Y: R5 M( Q- ?, R( h9 R6 l6 g  j6 Y
Flash存储器:存储软、硬件程序; ! O; r4 y) C' Y5 i
SRAM存储器:程序运行时将其导入SRAM。 / j" N: P/ b0 x3 b( f% t8 B. U$ b
根据所要用到的外设、要实现的功能以及开发板的配置,在SOPC Builder中建立系统要添加的模块包括:Nios II CPU、定时器、按键PIO、LCD控制器、AVALON三态桥、外部RAM接口、外部Flash接口。' a/ w4 L$ v  @1 D* S6 }+ T- l
使用的开发环境如下:
$ H9 B& d/ k( M) JWinXP操作系统 $ c, Z9 B  D6 A
Nios II 6.0嵌入式处理器
& J2 R! i! E3 [# ]Quartus II 6.0 $ ^' b" x1 F; L0 B+ m  l% u
基于Cyclone II 的SOPC开发板
* Z0 X5 c5 T( @8 h2.2.1 创建工程0 K0 V; n9 K) _
进行完需求分析之后,进行硬件系统的创建。 7 h( q% S2 F9 ^- S9 p6 P
首先必须建立一个Quartus II 的工程, * p6 v# W* n. n+ }
步骤如下:
+ I1 d" c* z9 _) s; i" o# O# g$ L1. 开始程序AlteraQuartus II 6.1Quartus II 6.1(32 bit),启动Quartus II软件;
# ]1 G7 P$ A2 O9 d! Z# S3 u( G; }7 C, A$ k$ }- w
2.选择File菜单New Project Wizard,出现Introduction页面,该页面介绍所要完成的具体任务,点击next。 7 L/ V2 P  ~0 G9 ^) y+ |

5 ?9 r# P' o/ L5 [
3. 进行项目名称的设定、工作目录的选择。指定工程存放的目录,工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名也要求是英文名字,我们的工程名和顶层实体名为clock,选择Next。 8 T% b8 Q* y; ?3 q9 R. Y
4.可以为工程添加先期已经输入的设计文件,指定用户自定义的元件库的路径,这里我们没有事先输入好的文件,也没有自定义的元件库,点击Next进入下一步。
; G4 }, I* B5 M% g. h0 y
5. 用户指定目标器件,根据开发板的所使用的器件来选择,实际开发中,通过查看核心板的参考手册来获取所使用的器件具体型号,可以使用窗口右边的Filters来加快器件的选择,选择完毕点击Next。
6 l8 E( z+ n7 I7 R8 G6 l: p( |5 k$ i
6. 指定在Quartus II 之外的用于,设计输入、综合、仿真、时序分析的第三方EDA工具,Quartus II对第三方工具的支持比较完善。这里我们不做选择,直接点击Next。
          所见新工程的信息,确认所创建工程的主要信息,点击Finish完成工程的建立,在开发的过程中,还可以通过菜单assignmentSettings来对这些配置进行修改。 点击Finish按钮,Quartus II自动会打开这个工程,可以看到顶层实体名出现在工程导航窗口中。 . S0 A( z3 h+ k" F* b6 I
 楼主| 发表于 2009-1-23 14:09 | 显示全部楼层
创建完成工程之后,需要创建顶层实体。创建完顶层设计文件之后,使用SOPC Builder创建NIOS II 嵌入式处理器,添加、配置系统的外设IP,组成Nios II系统模块。 Nios II 系统模块设计完成之后要加入到该顶层实体中,然后进行其他片上逻辑的开发。6 E" r1 n9 s9 t$ I+ t. E
2.3.1 创建顶层实体
# y  j( B7 t3 m* u. Z& B(1)新建的工程窗口中,选择FileNew;
1 F, s# s6 V" n(2)在Device Design File页中,选择Block Diagram/Schematic File,即原理图文件,也可以选择硬件描述语言的文件形式。单击OK。
" j: w7 K, D: r1 \6 X( `9 P6 }(3)出现一个模块编辑窗口。
* E, v) c9 w: P: P
(4) 选择FileSave As,出现Save As对话框,显示的目录为之前设置的工程目录,文件名为之前设置的顶层实体名(由于这是工程的第一个文件,系统会默认为顶层设计实体的名字)。确定Add to Current Project选项被选中,点击Save文件被保存并被加入到工程中。
6 j5 M& y1 d, k2 h2 x3 D# p
1 V) X6 k3 I( P" e3 y5 z
2.3.2 创建Nios II系统模块( D; M6 S% N" c8 g+ j5 ^
        创建NIOS II系统模块需要使用SOPC Builder,它是Quartus II中的一个工具,使用SOPC Builder可以创建一个Nios II 系统模块,或者创建多主设备SOPC模块。一个完整Nios II的系统模块包括Nios II处理器和相关的系统外设。所以创建系统模块的流程是先创建一个系统,然后添加Nios II CPU和外设IP,然后进行相应的设置,最后生成实例,然后将其加入到工程的顶层实体中去。 + @/ T6 n5 C6 |
一、创建系统 3 O7 p. I4 u& ~5 t
启动SOPC Builder,选择ToolsSOPC Builder,出现图2-10的Create New System对话框。键入系统的名字,选择硬件描述语言Verilog或者是VHDL。
7 z$ u! g3 p, o. G
. x2 k5 Q% M3 U- F& ?' @3 b- V! S5 O) T5 U5 ]

' W' G9 |5 ~+ Z- ^8 F
二 、设置系统主频和指定目标FPGA ! l! ]8 o) U4 N0 e2 D) O5 A
        在Target栏中的Board部分指定我们这本书使用的核心开发板——Cyclone II (EP2C35)。也可以在Board部分选择Unspecified,然后在Device Family选择Cyclone II。
2 Z9 f+ Y& C7 M5 Q) v/ G" K用户需要设置系统的时钟频率,该频率用于计算硬件和软件开发中的定时,比如时钟分频或波特率。这里我们设成85MHz,还可以选择是否选用流水线。 # O: B# i$ T% d2 a/ r% }. ~3 k" G
三、加入Nios II CPU和 IP模块 1 z# R+ w" G! w8 f" I  H" {
        首先加入Nios II软核,Nios II 是软核CPU,共有三种类型的CPU可供选择:Nios II/e(经济型)、Nios II/s(标准型)和Nios II/f(快速型)。用户可以根据实际的情况进行选择。Nios II是一个用户可以自行进行定制的CPU,用户可以增加新的外设、新的指令等。
3 v, a* u9 M$ e1 r$ t添加Nios II CPU的步骤如下: $ j/ t* z  A# h# T" q
1. Avalon Components 下面选择Nios II Processor;
) f1 Q+ h# P9 r1 N8 y8 u: l2. 点击 Add,出现Nios II CPU的配置向导,共有三种类型的CPU可供选择;
9 C# H, E8 A: T  }$ u
        根据需要选择相应的一种Nios II核,我们选择标准型的Nios II核,Hardware Multiply选择none,不选择Hardware Divide点击Next,进入Caches & Tightly Coupled Memories设置窗口; , A4 E0 B* e# R( E) d& m2 w
         设置Nios II的Cache和与CPU直接相连的存储器端口(不通过Avalon总线),选择Instruction Cache为4Kbytes,不选中Include tightly coupled instruction master port(s) ,点击Next进入Advanced Features设置页面。 & d8 m* m/ t* z6 S
         Advanced Features的设置页面是Quartus II 6.1 版本才有的设置,这里不选择Include cpu_resetrequest and cpu_resettaken signals点击Next进入JTAG Debug Module设置。
http://www.eefocus.com/data/08-09/4155_1221817002/1223437930.jpg
        共有4个调试级别可供选择,这里选择Level1即可,该级别支持软件的断点调试。JTAG调试模块要占用较多的逻辑资源,如果整个系统调试完毕了可以选用No Debugger以减少系统占用资源点击Next进入自定义指令的设置。
, }/ [/ z, v2 Y! z' p: w. V' _        因为本例不用到任何的自定义指令,这里不作任何的设置,点击Finish完成CPU模块的添加。 2 }3 [7 t+ C$ L$ W+ S2 u

& e+ v0 h# H! B' u/ E5 l5 D/ L1 w
除了Nios II CPU,电子钟设计需要添加的IP模块包括:
/ `0 l; z, i( DTimer   w5 d3 Q, k& F. T! T8 B2 k
Button PIO ( S7 e4 I2 {6 G4 D% j/ Q
LCD控制器 1 Z: G1 N& k2 f) X4 u
External RAM Bus . }, t+ i3 B. q& @! V+ G, Z# |- z
External Flash Bus * J7 f4 r/ n' |) g6 _5 Q
External RAM interface 2 Y2 ?  ^$ E  @
External Flash Interface ( N1 w* h: J/ {6 u
1. 添加定时器
) E, U3 r  R6 q+ W3 ^" a0 r# c5 G定时器和Nios II CPU一样,用户可以对其进 行定制。添加定时器的步骤如下:
$ V$ w7 u' V! Z* {5 }(1)在Avalon components下的other库中选 择Interval Timer并单击Add,Avalon_Timer-timer_0的向导窗口出现; % j8 p0 b' J5 F& v  L
(2)配置定时器,点击Finish,完成定时器的添加。 ; G" r! d+ j% _8 V
(3)可以对Timer进行重命名,我们这里取缺省的名字。 " B; T* P( d% O. w6 L5 K
2. 添加Button PIO 7 \. S2 W6 W3 g& `: u% i0 z( }
(1)在 Avalon components下的other下选择PIO,单击Add,出现Avalon PIO-PIO_0的向导;
- [- W# J" j$ I2 S, n(2)在Basic Settings页中,设置width=4bits,direction为Input Ports Only; 8 q: u( n  y- \
(3)在Input Options页中,在Edge Capture Register下选中Synchronously Capture,然后选择Either Edge; 2 v7 L0 f6 @% V% m+ b6 i: T1 u; H
(4)在Interrupt下选中Generate IRQ,然后选择Edge;
* ~; W3 o3 h9 _2 `(5)点击Finish,返回到Altera SOPC Builder NIOS2的窗口;
7 Z$ Q' D3 ?2 P(6)右键单击Module Name下的pio_0,从菜单选择rename,重命名为button_pio.
2 i: J: j8 r, C3 {" f3. 添加LCD控制器
7 t, `5 F7 }4 i3 ?(1)在图2-11的窗口中的左侧的Avalon components下的display库中选择Character LCD(162, Optrex 16027),单击Add;
( Q* S3 s$ |% F$ ?, ](2)Module Name下出现,lcd_16027_0;
+ U/ n- n8 I. X$ C* |, p(3)将其重命名lcd_display。 0 w% e# d3 l0 y: B; o
4.添加外部RAM接口 ) @# a$ U* R+ C2 u+ s$ F1 C
(1)Avalon components下的Memory下面选择Cypress CY7C1380C SSRAM,单击Add,出现SSRAM (Cypress CY7C1380C)-ext_ssram的向导; ! C- V+ D' k$ y9 U9 |
(2)在Timing Parameters下面设置Read Latency 为2 clocks,在SSRAM下面设置Memory Size为2Mbytes ( `" k7 I& K) B( A6 _
(3)单击Finish,返回到Altera SOPC Builder NIOS2的窗口; & C# R3 \' o7 o+ s
(4)右键单击Module Name下的ssram_0,从菜单选择rename,重命名为ext-ssram。
" L: g5 K! X0 A# ~# b9 w% r
5. 添加外部闪存接口
- q, f: A/ W: ?0 E$ N! S$ l( ](1)在Avalon components下的Memory下面选择Flash Memory(Common Flash Interface),单击Add,出现外部闪存接口向导; 1 ~( n5 A2 {$ I6 B( Q
(2)在Attributes页中,可以在Presets列表中选择相应的闪存的接口,这些闪存的接口都是经过测试的,如果列表中没有,用户可以自己定义闪存的Size和Data Width; 9 E: J4 H" q& M& f; j& N6 l1 a
(3)在timing页中,可以设置闪存的读写时序要求,可以设置Setup, Waite, hold时间等参数,通常保留缺省的设置; 9 i6 L" k4 ^; ~* m1 O
(4)如应用选择的闪存接口不在列表中,需要自己定义Size和Data Width,和时序要求; 7 Y5 t; }# `1 A7 Y( l6 }& ~
(5)点击Finish,返回到Altera SOPC Builder NIOS2的窗口,Module Name出现cfi_flash_0,对其重命名为ext_flash。 7 d* i* I+ g4 H$ g! _! q

' Y' }( N$ v2 X* O3 m, L  C* r
6. 添加外部RAM总线和外部flash总线(Avalon三态总线桥
$ X( n- w3 K! S! s. Q2 a为了使Nios II 系统能与开发板上的外部存储器通信,必须在Avalon总线和外部存储器之间加入Avalon三态桥。
0 I% k; D- A/ e$ m& x( N6 v步骤如下:
+ u. S& x8 ?6 j5 G( K0 H5 ~% w(1) 在Bridge下,选择Avalon Tri-State Bridge,点击Add,出现Avalon Tri-State Bridge – tri_state_bridge_0向导; ( c. R; q& I1 s# V8 u
(2) Registered选项默认为选中;
, k7 ^9 d" X0 O9 _7 r0 p& G9 x5 L(3)单击Finish,返回到Altera SOPC Builder NIOS2的窗口;
; S- S! }# g+ t( w2 ]* R4 D9 V( W
(4) 将其重命名为ext_ssram_bus;
0 u4 E+ `# v  ]" X3 F(5) 重复前三个步骤,在添加一个Avalon三态总线桥,并重命名为ext_flash_bus.
7 c9 c% M- g! b7 y7 n; L3 V7.添加JTAG UART
' @) l: {& [* d/ V& L; x4 U
(1)在Avalon components下的Communication下选择 JTAG UART,点击ADD,出现添加向导。 - C9 n4 H8 @4 c( U0 P* I
(2)按照缺省设置,点击Finish。 - L4 T) w$ Q+ G' A; s
(3) 将其重命名为JTAG_UART.
) H2 R# {7 a# O6 m8. Nios II系统的连接   v7 d# i; {1 y' c' P! T
        主要是外部RAM接口要和RAM的三态桥连接,外部的Flash接口要和flash的三态桥连接。所有添加的IP连接都是系统自动完成的,除了上面提到的三态桥和外部存储器的接口的连接之外,其它的连接用户不用修改,但对于三态桥和外部存储器接口的连接,系统的自动连接可能和用户的开发板不匹配,用户需要进行手动的更改。针对我们所用的开发板的情况进行的设置,因为本书用到的开发板外部的SRAM和外部的Flash没有使用共用的数据线和地址线,所以必须为它们分别添加一个三态桥。 ' O5 z) H0 J0 `8 `( \5 V
2.3.3分配IP模块的地址和中断号
        在以上添加IP的过程中,SOPC Builder为各个IP模块分配了一个默认的基地址,用户可以改变这些默认的分配。如果用户自己分配的地址出现冲突,SOPC Builder会给出警告,用户可以按照下面的步骤来进行分配和解决地址冲突问题。
; [2 x/ b  S. I, f8 q4 j  F下面我们给出一种自定义的地址分配实例,将闪存的基地址设定为0x00000000,步骤如下:
8 p9 G, x2 ~. Y- [1 m7 j; M(1)单击Flash外设的Base栏,将地址改为0x0,然后回车,这时SOPC Builder的消息框中出现错误的提示信息,这是因为闪存的地址和其它的外设地址发生了冲突。
7 O( d( Z8 `. \8 x$ b; }$ j9 k(2)选择Module菜单中的Lock Base Address操作,一个挂锁的图标出现在闪存基地址的旁边。
& ?$ k* _0 X/ z6 U/ ]/ A/ ^(3)选择System菜单中的Auto Assign Base Address操作,来解决外设的地址分配冲突问题,SOPC Builder调整其它外设的地址来避开与闪存地址的冲突,错误提示的消息就会消失了。
5 Q4 C) m1 r$ Q* K8 ](4)用户可以手动修改各个外设的中断号,中断号越低,中断优先级越高,用户也可以采用自动分配中断号,选择System菜单中的Auto Assign IRQs,但SOPC Builder不处理软件操作,采用自动分配中断的策略不一定是最优的,用户最好是根据自己的应用来确定外设的中断优先级,采用手动的分配。
" x1 g2 T$ v: T% P2.3.4 配置NIOS II 系统
系统的IP模块添加完成之后,还需要对系统进行配置。点击Nios II More “cpu_0” Settings 页,用户可以进行如下的设置:
2 t4 D3 W) n: n; X# A
Reset Address:可以选择存放Boot Loader的存储器和设置Boot Loader在存储器中的偏移,我们这里选择ext_flash,偏移选择默认;
8 r- P- V7 E9 n. Y" jException Address:可以选择存放异常向量表的存放的存储器和设置异常向量表在存储器中的偏移,我们选择ext_ssram,偏移选择默认; % b8 Z& K6 w" H: }  W7 Y
Break Location:如果NIOS II 包含有一个JTAG Debug模块,SOPC Builder会显示这项内容。其Memory Module总是JTAG Debug Module,Offset 固定为0x20, 地址由JTAG debug module基地址决定。用户不能修改Break Location的各个域的内容。 9 M, J9 h+ u* L& B4 @! W6 L) f
2.3.5 生成NIOS II并加入到工程中
NIOS II系统是工程的一部分,我们首先是生成它,然后加入到工程中去,然后将整个工程下载到FPGA芯片中去。单击System Generation,在Option下进行如下的设置: 8 T  Y) O  B! Z. ^
选中 HDL,会生成系统模块的硬件语言文件。 * \, J. w( p- s
选中 Simulation,如果安装了ModelSim软件,会生成用于仿真的相应的文件。
# ]8 z4 |& K- A7 L1 A& @单击 Generate,SOPC Builder会提示生成系统的进程,系统生成完成时会提示”SUCCESS: SYSTEM GENERATION COMPLETED”。单击exit 退出SOPC Builder。
( y8 j3 }6 l" R$ s2 }
        系统生成完成之后,SOPC Builder为这个定制的NIOS II系统模块创建了一个符号,要把Nios II系统加入到工程中去,遵循如下的步骤: ; e( t* o3 G5 R8 g
(1)在 Quartus II软件中,打开顶层实体(BDF格式),在BDF窗口中任意处双击,出现 Symbol对话框;
) j  f, G/ \5 C. t(2)在Symbol对话框中单击Project来展开工程目录,其下出现NIOS2(本例采用的系统名),选中它,右侧出现了系统的符号表示; % g$ b$ i/ a3 A- h" ]) o
(3)单击OK,Symbol对话框关闭,NIOS2的符号轮廓被附着在鼠标的指针上。 ; o+ o% J; w' D; c# `; ?
(4)BDF窗口中任意空白处单击一下,NIOS2的符号出现在BDF窗口中,这样我们创建的系统已经被加入到工程中了。
8 m" i. o; ~6 s# Y2 {; ~! p
6 a9 ~5 x6 o7 t$ R
2.3.6 加入引脚和嵌入式锁相环
除了NIOS II系统之外,可能还要有其它的硬件逻辑,我们这里加入一个嵌入式锁相环,嵌入式锁相环有两个时钟输出,一个输出SSRAM提供时钟,另一个时钟的输出为NIOS II CPU提供时钟,然后添加输入、输出、双向引脚,以实现和FPGA外部的外设进行通信。 2 A; Q; L3 z# _- X- [
加入嵌入式锁相环的步骤如下:
2 {! E; H4 U) j3 M& Y(1) 点击ToolsMegaWizard Plug-In Manager,出现MegaWizard Plug-In Manager向导Page1窗口,点击next
在MegaWizard Plug-In Manager Page2 窗口中的IO下面选择ALTPLL,器件选择Cyclone II,输出文件类型选择VHDL,文件名为ssram_pll,选中Return to this page for another create operation,然后点击Next,出现MegaWizard Plug-In Manager-ALTPLL [Page 3of 9]; 2 d7 ~9 i+ Q' d' q, u7 ?
在MegaWizard Plug-In Manager-ALTPLL [Page 4 of 10]窗口中,不做任何选择,点击next;
9 i: W  _  F+ d( A# A: [在MegaWizard Plug-In Manager-ALTPLL [Page 5 of 10]窗口中,单击next; 9 ?* m" |8 X% w7 i1 C8 x
在MegaWizard Plug-In Manager-ALTPLL [Page 6 of 10]窗口中,设置c0输出时钟,首先选中Use this clock选项,设置时钟频率为85MHz,占空比为50%。点击Next会进入c1输出时钟的设置; ( T: {, \+ ?2 \# |
         嵌入式PLL可提供3个输出时钟,我们使用其中的两个,MegaWizard Plug-In Manager-ALTPLL [Page 7 of 10]窗口中,在c1时钟的设置页面上,选中Use this clock选项,设置时钟频率为85MHz,点击Next;
; Z/ I) t7 x8 G  ^
在MegaWizard Plug-In Manager-ALTPLL [Page 8 of 10]窗口中,不选中Use this clock选项,即我们不使用c2时钟,点击Next; $ n9 n+ ]- U& Y( K  ?) r
在MegaWizard Plug-In Manager-ALTPLL [Page 9 of 10]窗口中,给出了用于仿真必须要产生的文件,点击Next; 6 H3 X5 |( O. c8 h6 I# u
在MegaWizard Plug-In Manager-ALTPLL [Page 10 of 10]窗口中,给出了用户选择要产生的文件,不做改变,采用默认配置,点击Finish完成PLL的生成。 6 R0 h! ?" Q8 E" O/ \
在顶层实体的bdf窗口中双击鼠标,出现Symbol添加窗口,在project下面选择刚才建立的ssram_pll,点击OK。ssram_pll的轮廓会附着在鼠标上,点击bdf窗口的空白处,将嵌入式锁相环加入到了工程中。
1 A% @% p; V# F+ A% p引脚添加的步骤如下:
% c- s; p9 ]$ Q/ s. a7 l/ q(1)在顶层实体的bdf窗口的空白处双击鼠标,出现Symbol添加窗口,在altera/quartus/libraries下面选择primitives,再在其下选择pin,在其中有三种类型的引脚,有bidir,input,output,分别为双向、输入和输出引脚,选择相应类型的引脚,点击OK。 ; o' r9 K" A/ {) B
(2)点击bdf窗口的空白处,即将引脚加入到了工程中。
* e$ F/ t- ?9 o(3)重复上面的步骤添加为各个端口添加相应类型的引脚。
* b# @. k" @, o( ?. {
连接引脚和命名引脚 8 |  \6 R3 l1 s5 M5 ~0 ~& g
第一个加入的引脚的名称缺省为pin_name,之后加入的引脚名称依次为pin_name1,pin_name2向上递增,为了便于理解和记忆,需要对引脚重新命名,使其和其传输的信号联系起来。
% X) j( Z* T% R- e/ A6 G命名引脚的方法如下:
(1) 双击引脚的“pin_namen”部分,pin_namen的文字变成高亮,可以对其编辑。 3 J" K2 y4 ?. s8 i: n" c% e
(2) 对其他的引脚重复以上的操作,修改成具有意义的名字。
! Y+ z9 @, Q2 w$ J) G4 z(3) 对于总线型的引脚,引脚名称之后要标识出总线的位数,如ddr_a[12..0],在引脚名称之后加上方括号,然后写上最高位和最低位,用两个..隔开。
6 a/ V# c' I$ U& E- c& B3 Q(4)将嵌入式锁相环和系统模块等连接起来,并将引脚连接到相应的端口上。
3 c( z0 t1 C2 f/ ?$ Y* X1 b# h* {6 [

0 Z& B; Y4 U  Z3 ?- s2 b9 i; @5 h* ~3 P: ?5 v, j; V
[ 本帖最后由 kenson 于 2009-1-23 14:17 编辑 ]
 楼主| 发表于 2009-1-23 14:22 | 显示全部楼层
第4节 设计优化 4 J7 ?" L' ]  v9 ?. o5 E
设计优化主要包括节省占用FPGA的面积和提高设计系统运行速度两个方面。这里的“面积”是指一个设计所消耗的FPGA的逻辑资源的数量,一般以设计占用的等价逻辑门数来衡量。“速度”是指设计的系统在目标芯片上稳定运行时能够达到的最高频率,它与设计的时钟周期、时钟建立时间、时钟保持时间、时钟到输出端口的延迟时间等诸多因素有关。
0 a' Q: s" F3 N- A3 _1 b2.4.1 面积与速度的优化
+ ?, p) U$ e7 L9 s7 Q/ k打开我们刚才的工程——clock,然后选择Assignment菜单下的Settings命令,弹出设置窗口。在对话框的左边的Category栏下,列出了很多可设置的对象,包括EDA Tools Settings、Compilation Process Settings、Analysis & Synthesis Settings、Fitter Settings、Timing Settings、Simulation Settings等等,选中要设置的项目,窗口的右边显示供设置的选项和参数。
: }" I8 g, Y3 m# x/ `+ u7 f6 C在Analysis & Synthesis Settings页面,用于对设计在分析与综合时的优化设置。在该页面的Optimization Techniques栏中,提供了Speed、Balanced和Area3种优化选择,其中Balanced是软件缺省的优化选择。如果对Speed或Area有特殊的要求,则选中相应的选项。
/ y/ \# d4 h2 W) }
. ~4 C2 u) S$ E2 j* W0 A* A7 f  K2.4.2 时序约束与设置/ {7 ]" r* l4 c$ g; k& k
选择Settings下面的Timing Analysis Settings,然后选择Classic Timing Analyzer Settings。在此页面中,可以对设计的延迟约束、时钟频率等做设置。延迟约束(Delay Requirements)设置包括tsu(建立时间)、tco(时钟到输出的延迟)、tpd(传输延迟)和th(保持时间)的设置。一般来说,用户要根据目标芯片的特性及PCB板走线的实际情况,给出设计需要满足的时钟频率、建立时间、保持时间和传输延迟时间等参数。对一些简单的应用,对时序要求不严格 ,可以不做设置。
4 J' x5 K4 H6 R# H- c. h0 t/ m: F$ ?
2.4.3 Fitter设置
" ]; k" i# N+ ?' b( Y4 Y: T在Ssettings对话框中,用鼠标左键单击Category栏目中的Fitter Settings项,出现Fitter Settings设置页面。此页面用于布局布线器的控制。 ) `( Z5 x4 P# Z7 p. Z
在这里需要设置的主要是布局布线的策略(Fitter Effort),有三种模式可供选择:标准模式(Standard Fit)、快速模式(Fast Fit)和自动模式(Auto Fit)。标准模式需要的时间比较长,但可以实现较高的最高频率(fmax);快速模式可以节省50%的编译时间,但会使最高频率有所降低;自动模式在达到设计要求的条件下,自动平衡最高频率和编译时间。 + W0 F! u8 d* q$ w9 b, z0 B
, s; l8 q7 q! P) R" c

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-28 16:18 , Processed in 0.056712 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表