搜档网
当前位置:搜档网 › DspBuilder中文教程1

DspBuilder中文教程1

DspBuilder中文教程1
DspBuilder中文教程1

第9章DSP Builder设计初步

利用EDA技术完成硬件设计的途径有多种,前面介绍的是利用QuartusII来完成的,最为典型的设计流程,包括设计项目编辑(如用VHDL)、综合、仿真、适配、编程。但是对于一些特定的设计项目,这个流程就会显得很不方便,甚至无能为力。例如涉及算法类(如DSP模块)及模拟信号处理与产生方面的系统设计。

Altera自2002年推出的DSP Builder则很好地解决了这些问题。

DSP Builder可以帮助设计者完成基于FPGA的不同类型的应用系统设计。除了图形化的系统建模外,DSP Builder还可以自动完成大部分的设计过程和仿真,直至把设计文件下载至FPGA开发板上。利用Matlab与DSP Builder进行模块设计也是SOPC技术的一个组成部分。本章以两个简单的电路模型设计为示例,详细介绍Matlab、DSP Builder、QuartusII 三个工具软件联合开发的设计流程。

9.1 Matlab/DSP Builder及其设计流程

DSP Builder是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级(算法仿真建模)和RTL级(硬件实现)两个设计领域的设计工具连接起来,都放在了Matlab/Simlink图形设计平台上,而将QuartusII作为底层设计工具置于后台,最大程度地发挥了对种工具的优势。DSP Builder依赖于MathWorks公司的数学分析工具Matlab/Simlink,以Simulink的Blockset出现。可以在Simulink中进行图形化设计和仿真,同时又通过SignalCompiler把Matlab/Simulink的模型设计文件(.mdl)转成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制综合与编译的tcl脚本。对于综合以及此后的处理都由QuartusII来完成。

由于在FPGA上设计一个算法模型的复杂性,设计的性能(包括面积、速度、可靠性、设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink和QuartusII,DSP Builder针对不同情况提供了两套设计流程,即自动流程和手动流程。

图9-1是基于Matlab、DSP Builder、QuartusII等工具完成设计的流程框图。如图9-1所示,设计流程的第一步是在Matlab/Simulink中进行设计输入。即在Matlab的Simulink 环境中建立一个mdl模型文件,用图形方式调用DSP Builder和其他Simulink库中的图形模块,构成系统级或算法级设计框图,或称Simulink设计模型。在第二步,是利用Simulink 的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。在这两步中,与一般的Matlab Simulink建模过程几乎没有什么区别,所不同的是,设计模型库采用DSPBuilder 的Simulink库而已,同样也涉及到其他EDA软件。

第9章 DSP Builder设计初步309

图9-1 基于Matlab、DSP Builder、QuartusII等工具

第三步是DSP Builder设计实现的关键一步。由于EDA工具软件(诸如QuartusII、ModelSim)不能直接处理Matlab的.mdl文件,这就需要一个转换过程。通过SignalCompiler 把Simulink的模型文件(后缀为.mdl)转化成通用的硬件描述语言,VHDL文件。转换获得的HDL文件是基于RTL级的,即可综合的VHDL描述。

此后的步骤是对以上顶层设计产生的VHDL的RTL代码和仿真文件进行综合、编译适配以及仿真。为了针对不同用户的设计目的和设计要求,DSP Builder提供了两种不同的设计流程,主要可以分为自动流程和手动流程。

如果采用自动流程,几乎可以忽略硬件的具体实现过程,选择让DSP Builder自动调用QuartusII等EDA软件,完成综合(Synthesis)、网表(ATOM Netlist)生成和QuartusII适配,直至在Matlab中完成FPGA的配置下载过程。

但是,如果希望使用其它第3方的VHDL综合器和仿真器(除Synplify、LeonardoSpectrum和 QuartusII综合器及ModelSim外),或是希望完成特定的适配设置,如逻辑锁定、时序驱动编译、ESB特定功能应用等,可以选用手动流程设计。在此流程中,设计者可以灵活地指定综合、适配条件;手动地调用VHDL综合器进行综合,调用QuartusII 进行适配,调用ModelSim或者QuartusII进行仿真,最后用QuartusII产生相应的编程文件用于FPGA的配置。

EDA技术与VHDL

310

采用手动流程时,除了行为级仿真验证和设计输入外,其它过程与标准的基于VHDL 的EDA设计流程是完全一致的。首先由基于Matlab的DSP Builder设计流程得到 VHDL 文件(由Simulink模型文件*.mdl通过SignalCompilder转换而成),送入综合器进行综合。综合器可以是Synplify Pro,也可以是LeonardoSpectrum,或者采用Altera自己的QuartusII 综合器。在综合时,可能需要对综合器进行配置或者提供综合的约束条件,由于这个过程操作可能比较繁琐,所以DSP Builder的SignalCompiler相应提供了一个接口,针对设计,自动产生一个TCL脚本与综合器Synplify或者LeonardoSpectrum相接。综合器在综合操作后,会产生一个网表文件,以供下一个流程使用。这里产生的网表文件称为ATOM网表文件,主要是EDIF网表文件(.edf 电子设计交换格式文件)或VQM(.vqm Verilog Quartus Mapping File),它们是一种参数可设置的,并含有具体器件系列硬件特征(如逻辑宏单元LCs、I/O单元、乘积项、M4K、嵌入式系统块ESB等)的网表文件。QuartusII可以利用这些ATOM网表文件针对选定的具体器件进行适配,包括布线、布局、结构优化等操作,最后产生时序仿真文件和FPGA目标器件的编程与配置文件。在这一步,设计者可以在QuartusII中完成对Pin(引脚)的锁定,更改一些约束条件等。

如果用DSP Builder产生的设计模型只是庞大设计中的一个子模块,可以在设计中调用DSP Builder产生的VHDL文件,以构成完整的设计。同时,还可以使用QuartusII强大的LogicLock功能和SignalTap测试技术。在DSP Builder设计流程的最后一步,可以在DSP Builder中直接下载到FPGA用户开发板上,或者通过QuartusII完成硬件的下载、测试。

在图9-1的流程中,其中的VHDL仿真流程在设计中是不可或缺的。与DSP Builder 可以配合使用的HDL仿真器是ModelSim。DSP Builder在生成VHDL代码时,可以同时生成用于测试DSP模块的TestBench(测试平台)文件,DSP Builder生成的TestBench文件采用VHDL语言,测试向量与该DSP模块在Simulink中的仿真激励相一致。通过ModelSim 仿真生成的TestBench可以验证生成的VHDL代码与Simulink中设计模型的一致性。另外,DSP Builder在产生TestBench的同时,还产生了针对ModelSim仿真的Tcl脚本来简化用户的操作,如包含了来自Simulink平台上进行仿真的激励信号信息等,从而掩盖ModelSim 仿真时的复杂性。

在大部分情况下,QuartusII对来自DSP Builder的设计模块适配后,需要再次验证适配后网表与Simulink中建立的DSP模型的一致性。这就需要再次使用ModelSim进行仿真,这时仿真采用QuartusII适配后带延时信息的网表文件(EDIF格式、或者VHDL、Verilog 格式),即为时序仿真。

两种设计流程归纳起来有如下几个步骤:

自动流程:1、MATLAB/Simulink建模;2、系统仿真;3、DSP Builder完成VHDL转换、综合、适配、下载。

4、嵌入式逻辑分析仪实时测试

手动流程:1、MATLAB/Simulink建模;2、系统仿真;3、DSP Builder完成VHDL 转换、综合、适配;4、Modelsim对TestBench功能仿真;5、QuartusII直接完成适配(进

第9章 DSP Builder设计初步311

行优化设置);6、QuartusII完成时序仿真;7、引脚锁定;8、下载/配置与嵌入式逻辑分析仪等实时测试;9、对配置器件编程,设计完成。

考虑到实用的目的,本章重点介绍手动设计流程。

9.2 正弦信号发生器设计

本节中,以一个简单的可控正弦波发生模块的设计为例,详细介绍DSP Builder基于手动流程的的使用方法。图9-2所示是一个简单的正弦波发生器,主要由4个部分构成:InCount 是阶梯信号发生模块,产生一个按时钟线性递增的地址信号,送往SinLUT。SinLUT是一个正弦函数值的查找表(LUT:Look Up Table)模块,由递增的地址获得正弦波的量化值输出。由SinLUT输出的8位正弦波数据经过一个延时模块Delay后送往Product乘法模块,与SinCtrl相乘。由于SinCtrl是1位(bit)输入,SinCtrl通过Product就完成了对正弦波输出有无的控制。SinOut是整个正弦波发生器模块的输出,送往D/A即可获得正弦波的输出模拟信号。设计者在利用DSP Builder来进行相关设计时,关键的设计过程大都在Matlab 的图形仿真环境Simulink中进行。

图9-2 正弦波发生模块原理图

9.2.1 建立设计模型

首先需要建立一个新的设计模型,步骤如下:

1、打开Matlab环境

Matlab环境界面如图9-3所示。可以看到,Matlab的主窗口界面被分割成三个窗口:命令窗口(Command Window)、工作区(Workspace)、命令历史(Command History)。在命令窗口中,可以键入Matlab命令,同时获得Matlab对命令的响应信息、出错警告提示等。

EDA技术与VHDL 312

工作区

命令历史记录

命令窗口

工作目录图9-3 Matlab界面

2、建立工作库

在建立一个新的设计模型前,最好先建立一个新的文件夹,作为work(工作)目录,并把Matlab当前的work目录切换到新建的文件夹下。可以使用Windows在外部建立,也可以使用Matlab命令来直接完成这些操作,例如在Matlab主窗口中的命令窗口中键入:cd e:/

mkdir /myprj/sinwave

cd /myprj/sinwave

其中e:/myprj/sinwave是新建的文件夹,是用作Matlab工作目录的。Mkdir是一个建立新目录的Matlab命令,cd是切换工作目录的Matlab命令。具体过程可以参见图9-4(打开simulink)。通过改变Matlab主界面中的“Current Directory”的制定,同样可以改变Matlab 的当前工作目录。

3、了解simulink库管理器

当成功地把Matlab当前目录切换到新建的设计目录后(即键入cd /myprj/sinwave),键入命令:pwd,之后可以在Matlab命令窗口键入“simulink”命令,以开启Matlab的图形化建模仿真环境simulink。详见图9-4 (打开simulink)。图9-5是simulink的库管理器(Library Browser)。

第9章 DSP Builder设计初步313

图9-4 打开simulink

图9-5 simulink库管理器

在库管理器的左侧是simulink library列表,其中“Simulink”库是simulink的基本模型库。在库管理器的右侧是选中的library中的组件、子模块列表。当安装完DSP Builder后,在Simulink的库管理器中可以看到“Altera DSP Builder”字样出现在library列表中。在以下的DSP Builder应用中,主要是使用该库中的组件、子模型来完成各项设计,再使用

EDA技术与VHDL

314

“Simulink”库来完成模型的仿真验证。

注意,只有来自Altera DSP Builder元件库中的元件模块构成的电路系统或算法模型能被DSP Builder转化为VHDL程序

4. simulink的模型文件

在打开simulink库管理器后,需要新建一个simulink的模型文件(后缀为mdl),在simulink的库管理器中选择“File”菜单(图9-6),在出现的菜单项中选择“New”,在弹出的子菜单项中选择新建模型“model”。图9-6右边显示的就是新模型窗口。

图9-6 建立新模型

5、放置SignalCompilder

点击simulink库管理器左侧的库内树形列表中的Altera DSP Builder条,使之展开DSP Builder库,这时会出现一长串树形列表,对DSP builder库的子模块(Block)进行了分组,再次点击其中的AltLab项,展开AltLab,选中库管理器右侧的SignalCompilder组件,按住鼠标右键拖动SignalCompilder到新模型窗口中(图9-7)。

注意:当在simulink库管理器中选中模块(Block)后,在库管理器上方的提示栏中会显示对应模块的说明,有简单的功能介绍。

6、放置Increment Decrement

参照图9-2,将Increment Decrement模块放置到新模型中。Increment Decrement模块(图9-8)是DSP Builder库中Arithmetic(算术)模块。选中Altera DSP Builder库中的Arithmetic条,则在库管理器的右侧,可以看到Increment Decrement模块。按照放置SignalCompilder的方法,把Increment Decrement模块拖到新建模型窗口中。

7. 设置IncCount

用鼠标点击在新建模型窗口中的Increment Decrement模块下面的文字“Increment Decrement”,就可以修改文字内容,也就是可以修改模块名字。在这里不妨将其修改为“IncCount”(图9-8)。然后按照图9-2中描述的含义,把IncCount模块做成一个线性递增的地址发生器,这就需要对IncCount模块的参数进行相应的设置:双击新建模型中的

第9章 DSP Builder设计初步315

IncCount模块,打开IncCount的模块参数设置对话框:“Block Parameters:IncCount”,如图9-9所示。在参数设置对话框的上半部分是该模块的功能描述和使用说明;对话框的下半部分是参数设置部分,对于Increment Decrement模块共有下面几种参数可以设置: 总线类型(Bus Type);

输出位宽(Number of bits);

增减方向(Direction);

开始值(Starting Value);

是否使用控制输入(Use Control Inputs)

时钟相位选择(Clock Phase Selection)

图9-7 放置SignalCompiler 图9-8 递增递减模块改名为IncCount

图9-9 设置递增递减模块图9-10 LUT模块

对于总线类型(Bus Type),在下拉列表框中共有三种选择:

1、有符号整数(Signed Integer);如9等于二进制的1001,等于-7。

2、有符号小数(Signed Fractional);

3、无符号整数(Unsigned Integer)。例如9等于二进制的1001,等于9。

EDA 技术与VHDL

316在这里选择“signed Integer ”,即有符号整数。对于输出位宽,由于在后面接着的正弦查找表(Sin LUT )的地址为6位,所以输出位宽设为6。

IncCount 是一个按时钟增1的计数器,Direction 设为Increment (增量方式)。

Use Control Inputs 项可以不选。因为如果选中此项,此模块会出现两个输入端,分别是复位端和时钟使能端。通常在simulink 图中的元件的复位和时钟使能端以及都是分别默认接于低电平和高电平使能的,而时钟端是按全局时钟方式相连的。

Clock Phase Selection 可设置为1(二进制),其他设置采用Increment Decrement 模块的默认设置。设置完的对话框如图9-10。然后点击“OK ”按钮确认。

注意,若对DSP Builder 库中模块设置参数值不了解,可以在相应模块的参数设置对话框中点击“Help ”按钮(或按F1键),呼出相应帮助信息,以便了解详细的模块参数说明。

8、放置正弦查找表(SinLUT )

在Altera DSP Builder 库的Gate 库中找到查找表模块:LUT (图9-10)。把LUT 拖到新建模型窗口,按照IncCount 的做法把新调入的LUT 模块的名字修改成“SinLUT ”。

双击SinLUT 模块,打开模块参数设置对话框:“Block Parameters SinLUT ”,如图9-11所示。把输出位宽(Output[number of bits])改为8,查找表地址线位宽(LUT Address Width )设为6。总线数据类型Bus Type 选择为有符号整数Signed Integer ;在“MATLAB Array ”编辑框中输入计算查找表内容的计算式。在此可以直接使用sin (正弦)函数,在这里sin 函数的调用格式为:

sin ([起始值:步进值:结束值])

SinLUT 是一个输入地址为6位、输出值位宽为8的正弦查找表模块,且输入地址总线为有符号数,可以设置起始值为0、结束值为2π、步进值为6

22π。计算式可写成: 127*sin[0:2*pi/2^6]:2*pi]) 9-1

其中pi 即为常数π。上式的数值变化范围是-127 - +127 ,总值是256,恰好是8位二进制数最大值。但应注意,如果改变地址线宽,如8,以上的2的6次方要改成2的8次方,即:

127*sin[0:2*pi/2^8]:2*pi]) 9-2

如果将SinLUT 模块的总线数据类型设置为无符号整数Unsigned Integer ,且输出位宽(Output[number of bits])改为10,若想得到完整满度的波形输出,式5-1应该为下式:

511*sin[0:2*pi/2^6]:2*pi]) + 512 9-3

在“Use LPM ”处可以选择打勾,表示允许QuartusII 利用目标器件中的嵌入式RAM (在EAB 、ESB 或M4K 模块中)来构成SinLUT ,即将生成的正弦波数据放在嵌入式RAM 构成的ROM 中,这样可以节省大量逻辑资源。否则SinLUT 只能用芯片中的LCs 来构成。设置好的SinLUT 参数如图9-11所示。

第9章 DSP Builder 设计初步 317

图9-11 设置SinLUT 图9-12 Delay 模块及其参数设置窗

9、放置Delay 模块

在simulink 库管理器的Altera DSP Builder 库中,选中Storage 库下的Delay 模块,放置到新建模型窗口。Delay 模块(图9-12)是一个延时环节。在这里可以不修改其默认参数设置。其具体的默认参数设置见图9-12。

在Delay 模块的参数设置对话框中,参数“Depth ”是描述信号延时深度的参数。当Depth 为1,信号传输函数为1/z ,表现为通过Delay 模块的信号延时1个时钟周期;当Depth 为整数n ,其传输函数为n z

1,表现为通过Delay 模块的信号将延时n 个时钟周期。Delay 模块在硬件上可以采用寄存器(锁存器)来实现,这也就是为什么把Delay 模块放在Storage (存储单元)库中的原因。

Clock Phase Selection 参数主要是控制采样的。当设置为1时表示,每一主频脉冲后,数据都能通过,如果设置为01,则每隔一个脉冲通过一个数据;若设0011,表示每隔两个脉冲通过两个脉冲;0100表示Delay 在每隔第2个时钟时被使能通过,而在第1、3、4个时钟时被禁止通过,等等。

到现在为止,已经在新建模型中放置了4个模块,先按照图9-2把他们连接起来。把鼠标的指针移动到上述几个模块的输入输出端口上,鼠标指针就会变成十字形,这时按住鼠标左键,拖动鼠标就可以连线了。

10、放置端口SinCtrl

在simulink 库管理器的Altera DSP Builder 库中,选中IO & Bus 库,找到Input 模块,放置在新建模型窗口中。修改AltBus 模块的名字为SinCtrl 。SinCtrl 是一个1位输入端口。双击SinCtrl 模块,打开模块参数设置对话框,设置SinCtrl 的Bus Type 参数为“Single Bit ”,Node Type 参数为“Input Port ”,如图9-13所示。此端口模块将在产生的VHDL 文件中变成端口模式为“IN ”,数据类型为STD_LOGIC 的端口信号。

EDA技术与VHDL

318

图9-13 设置SinCtrl

11、放置Product模块

在simulink库管理器的Altera DSP Builder库中,选中Arithmentic库,找到Product模块(图9-14),用鼠标拖放到新建模型窗口中。在这里Product有两个输入,一个是经过一个Delay的SinLUT查表输出,另一个是外部一位端口SinCtrl。按算法逻辑来看,实现了SinCtrl对SinLUT查找表输出的控制。双击Product模块,打开模块参数设置对话框,设置Product的参数如图9-14。其中Pipeline(流水线)参数指定该乘法器模块使用几级流水线,即乘积延时几个时钟周期后出现。选中“Use LPM”,表示允许采用LPM模块。“Use Dedicated Circuitry”选项用于对FPGA中的专用模块的选择,如Stratix,CycloneII等器件中的专用DSP模块。

图9-14 设置乘法单元

12、放置输出端口SinOut

在simulink库管理器的Altera DSP Builder库中,选中IO & Bus库,找到Output模块(图9-15),放置在新建模型窗口中。修改模块的名字为SinOut。

SinOut是一个8位输出端口,接向FPGA的输出端口,与外面的8位D/A转换器相接,通过D/A把8位数据转换成1路模拟信号。双击SinOut模块,打开模块参数设置对话框,设置SinOut的Bus Type参数为“Signed Integer”,修改“number of bits”参数为8,如图9-15所示。该模块在VHDL文件中将变成OUT端口模式的标准位矢量:STD_LOGIC_VECTOR(7 DOWNTO 0).。

如果选择AltBus模块,则其中的“Saturate”项如果选择“On”,则当输出大于有待表达的最大的正值或负值,则此输出即扩位到此最大的正值或负值。若此选项取为“Off”,则最高位MSB被截去。此选项对输入端口或常数节点类型是无效的。

“Round”项若选择“On”,则输出略去了所有高位的0位;若选为“Off”,则最低位LSB被截去。此选项不适用于输入和常数类型。

第9章 DSP Builder设计初步319

“Bypass Bus Format”项为“On”时,表示在Simulink中使用浮点数进行仿真。

图9-15 设置SinOut 图9-16 Step模块图9-17 Scope模型

13. 设计文件存盘

放置完SinOut模块后,按照图9-2,把新建模型窗口中的DSP Builder模块连接起来。这样就完成了一个正弦波发生器的DSP Builder模型设计。在进行仿真验证和SignalCompiler编译之前,先对设计进行存盘操作:点击新建模型窗口的“File”菜单,在下拉菜单中选择“Save”项,取名并保存。在这个例子中,对新建模型取名为Sinout,模型文件为sinout.mdl。在保存完毕后,新建模型窗口的标题栏就会显示模型名称。

注意,对模型文件取名,尽量用英文字母打头,不使用空格,不用中文,文件名不要过长。且只有对文件存盘后,才能使用SignalCompiler进行编译,把mdl文件转换为VHDL 文件。不过现在模型的正确性还是未知的,需要进行仿真验证。

9.2.2 Simulink模型仿真

Matlab的Simulink环境具有强大的图形化仿真验证功能。用DSP Builder模块设计好一个新的模型后,可以直接在simulink中进行算法级、系统级仿真验证。对一个模型进行仿真,需要施加合适的激励、一定的仿真步进和仿真周期,添加合适的观察点和观察方式。

1、加入仿真步进模块

首先加入一个Step模块,以模拟SinCtrl的按键使能操作。在Simulink库管理器中,展开simulink库,选中Sources库,把Sources库中的Step模块拖放到sinout模型窗口中(如图9-16)。参照图9-2,把step模块与SinCtrl输入端口相接。

注意,凡是来自Altera DSP Builder库以外的模块,SignalCompiler都不能将其变成硬件电路,即不会影响产生的VHDL程序,但在启动Simulink仿真后能影响后面产生的仿真激励文件。Step模块的情况正是如此。

2、添加波形观察模块

在simulink的库管理器中,展开simulink库,选中其中的Sinks库,把Scope(示波器,图9-17)模块拖放到sinout模型窗口中。双击该模块,打开的是一个Scope窗口(图9-18)。图中所示只有一个信号的波形观察窗口,而如若希望可以多观察几路信号,自然可以通过调用多个Scope模块的方法来实现,这里介绍通过修改scope参数来增加同一scope 中观察窗。

EDA技术与VHDL

320

3、Scope参数设置

用鼠标点击Scope模块窗口上侧工具栏的第二个工具按钮:“Parameters”参数设置。打开Scope参数设置对话框,见图9-19。在Scope参数设置对话框中共有两个选项页:“Gerneral”(通用)和“Data History”(数据历史)。在“Gerneral”选项页中,改变“Number of axes”参数为2。在点击“OK”按钮确认后,可以看到Scope窗口增加了两个波形观察窗。每个观察窗都可以分别观察信号波形,而且相对独立。然后将SinCtrl的信号接向Scope 的另一端(图9-21),以作信号比较。需要注意的是,此路信号在生成的VHDL文件中不会有相应语句,因为没有接上输出端口模块:AltBus或Output模块。

图9-18 Scope初始显示图9-19 设置Scope参数

4、设置仿真激励

按图9-2连接sinout模型的全图,准备开始仿真。在仿真前还需要设置一下与仿真相关的参数。先设置模型的仿真激励。在sinout模型图中只有一个输入端口SinCtrl,需要设置与此相连的Step模块:双击放置在sinout模型窗口中的Step模块,设置对输入端口SinCtrl 施加的激励。在打开的Step模块参数设置对话框中,可以看到下列参数(详见图9-20): 步进间隔(step time);

初始值(Initial value);

终值(Final value);

采样时间(Sample time)

在此设置“step time”为50;“Initial value”为50,即初始时,不输出正弦波;“Final Value”为1;“Sample time”为1。把最后两项选择:“Interpret vector parameters as 1-D”和“Enable zerocrossing dectection”都设为打勾。

在sinout模型编辑窗中(图9-21),点击“Simulation”菜单,在下拉菜单中选择“Simulation parameters”菜单项,如图9-22所示。随后,将弹出sinout模型的仿真参数设置对话框:“Simulation Parameters : sinout”。

仿真参数设置对话框中共有5个选项页:Solver、Workspace I/O、Diagnostics、Advanced、Real-Time Workshop。其中“Solver”选项页中完成仿真时,基本的时间设置、步进间隔和

第9章 DSP Builder设计初步321

方式、输出选项。在sinout模型中,可设置“Start time”为0.0,“Stop time”为500。其他设置按照默认。选项页的设置也按照默认设置。然后,点击“OK”按钮确认。

为了能更好的在波形观察窗中区分不同信号,可以在sinout模型中对连接线进行命名:双击对应的连接线,就会出现一个可以输入文本的小框,在框中输入信号的名称。

6、启动仿真

sinout模型编辑窗中,选择“Simulation”菜单,选“Start”项,开始仿真(图9-23)。等待仿真结束,双击Scope模块,打开scope观察窗。图9-24显示了仿真结果,SinOut信号是sinout模型的输出(scope观察窗中模拟了D/A的输出波形),SinCtrl信号是sinout模型的输入,可以看出SinOut受到了SinCtrl的控制。当SinCtrl为1时,SinOut波形是正弦波;当SinCtrl为0时,输出为0。在Scope观察窗中,可以使用工具栏中的按钮来放大缩小波形,也可以在波形上单击右键使用“Autoscale”,使波形自动适配波形观察窗,用鼠标左键,可以放大波形。图9-25是改成无符号输出的波形。

图9-20 设置Step

图9-21 sinout全图

EDA技术与VHDL

322

图9-22 simulink仿真设置图9-23 simulink仿真Start

图9-24 有符号输出波形(系统级仿真)图9-25 无符号输出波形(系统级仿真)

7、设计成无符号数据输出

由图9-24可以看出,输出的正弦波是有符号数据,它在正负127间变化,但一般的D/A器件的输入数据都是无符号的正数。因此,为了能在硬件系统上D/A的输出也能观察到此波形,必须对此输出作一些改进,以便输出无符号数。

最简单的方法是将图9-24中的波形向上平移127,即对输出的数据加上127即可。

即对图9-21中的SinLUT的波形数据公式可以改为:127*sin[0:2*pi/2^6]:2*pi]) + 128 。

此外,图中相关模块的有符号设置全部改为无符号设置。

也可以在原来电路的基础上增加一些模块。图9-26就是改进后的电路,其功能即在原输出的有符号数据上加上了128。原理是将乘法器输出的8位有符号数的最高位取反并以无符号数输出。图9-25即是产生的仿真波形,可以看出整个波形在0以上。以下将对图中出现的新模块的用法作一说明。

8、各模块功能说明

图9-26中的新添模块都来自Altera DSP Builder的IO&Bus库。

SinOut1与SinOut类似,都是总线模块AltBus,只是设定为有符号内部节点模块(图9-27),此模块在VHDL文件中将变成内部信号Signal定义。

ExtractBit模块的功能是将总线中一指定位提取出来。在这里它将8位输出总线的最高

第9章 DSP Builder设计初步323

位提取出来,其参数设置如图9-28所示。

BusConversion是总线变换模块,其功能是将总线中指定数位提取出来。在这里它将8位输出总线的低7位提取出来,即将第0位至第6位提取输出,其参数设置如图9-29所示。

BusConcatenation是总线合并模块,其功能是将两个总线按要求合并成一个总线,其输出位宽数等于输入的两个总线位数之和,参数设置如图9-30所示。

SinOut模块的设置基本不变,只是将有符号整数改成无符号整数输出(图9-31)。

Not模块是反相器模块,设置如图9-32所示。

图9-26 无符号整数Signed Integer输出电路

图9-27 SinOut1模块设置图9-28 ExtractBit模块设置

图9-29 BusConversion模块设置图9-30 BusConcatenation模块设置

图9-31 SinOut1模块设置图9-32 NOT模块设置

EDA技术与VHDL

324

9.2.3 SignalCompiler使用方法

在Simulink中完成仿真验证后,就需要把设计转到硬件上加以实现。这是整个DSP Builder设计流程中最关键的一步,据此可以获得针对FPGA的VHDL RTL代码。

1、分析当前的模型

双击sinout模型中的SignalCompiler模块,将出现如图9-33所示的对话框,点击“Analyze”(分析)按钮后,SignalCompiler就会对sinout模型进行分析,检查模型有无错误,并在Matlab主窗口弹出对话框,并给出相关信息。若有错误存在,SignalCompiler就会停止分析过程,并把错误信息显示在Matlab主窗口的“Command Window”命令窗口中;反之,在分析过程结束后,打开SignalCompiler窗口(图9-34)。如果有警告(Warning)存在,同错误一样把警告信息显示在命令窗口。

Simulink具有较为强大的错误定位能力,对许多错误可以在simulink模型中直接定位,用不同的颜色提示有错误的Simulink模块(Block)。当SignalCompiler分析当前DSP模型有错误时,必须去除错误才能继续DSP Builder流程。

2、设置Signal Compiler

在图9-34中显示了Signal Compiler窗口,大致上可以分为三个功能部分:

左侧的项目设置选项“Project Setting Options”

右侧的硬件编译流程“Hardware Compilation”

下方的信息框“Messages”

SignalCompiler的设置都集中在项目设置选项部分。在“Device”下拉选择框中选择需要的器件系列,默认为Stratix系列器件,对此可以修改。在此选为Cyclone系列。

图9-33 双击SignalCompiler 图9-34 打开SignalCompiler窗口注意,在“Device”中只能选择器件系列,不能制定具体的器件型号,这需由QuartusII

第9章 DSP Builder设计初步325

自动决定使用该器件系列中的某一个具体型号的器件,或在手动流程中由用户指定。

在“Device”下拉选择框中,有一个“DSP Board”的选择,这是一个特殊的选项,是针对具体的DSP开发板的。

“Synthesis”(综合)下拉选择框可以选择综合器,共有三个选择:

“LeonardoSpectrum”:Mentor的LeonardoSpectrum综合器

“Synpilfy”:Synpilicity的Synpilfy Pro或Synpilfy综合器

“Quartus II”:Altera的FPGA/CPLD开发集成环境,内含综合功能

在这个例子中,可选择Quartus II。

“Optimization”(优化)下拉选择框,指明在综合、适配过程中的优化条件,是对面积(Area)优化还是速度(Speed)优化的选择,即资源占用优先还是性能优先。

项目设置选项(“Project Setting Options”)部分的下侧是一些选项页,其中

“Main Clock”中指定系统主时钟的周期;

“Reset”是系统复位信号的设置

“SignalTapII”是嵌入式逻辑分析仪SignalTap设置

“TestBench”是仿真测试文件生成的选择

“SOPC info”是SOPC相关设置

在这里,不妨指定Main Clock的周期为50ns,点击的右边箭头找到“TechBench”选项页,选择“Generate Stimuli for VHDL Testbench”生成含激励的仿真测试文件,用于VHDL仿真。

3、把模型文件MDL转换成VHDL

当设置好“Device”和“Synthesis”后,右侧的硬件编译“Hardware Compilation”部分就会列出一个操作流程,见图9-34。分别为:

1. “Convert MDL to VHDL”:转换MDL文件为VHDL文件;

2. “Synthesis”:对转换好的VHDL文件进行综合;

3. “QuartusII”Quartus编译适配,生成编程文件

图9-34中的第4步是隐去的,这一步实现在simulink中,完成FPGA的硬件配置下载。这需要DSP开发板的支持,当“Device”选为“DSP Board”时,该一步才显示出来。

按步骤,先点击步骤1的图标,完成simulink文件(*.mdl)到VHDL文件的转换。转换完成后,在“Messages”信息提示框中,会显示“Generated top level “sinout.vhd” files”,即顶层文件sinout.vhd完成转换。若有错误,在“Messages”信息提示框中会显示简短的出错提示(出错的原因多数是授权文件的安装或文件本身有问题)。sinout模型生成的VHDL 文件“sinout.vhd”可以在文件夹e:/myprj/sinwave中找到。

4、综合(Synthesis)

点击步骤2的图标,完成综合过程。在这个例子中是调用QuartusII来完成综合过程的,在综合后生成ATOM Netlist(原子网表),供适配器使用。“Messages”给出了相关信息:此设计项目使用了23个逻辑宏单元、11个引脚、512个RAM位(恰好等于SinLUT模块

EDA技术与VHDL

326

中数据的容量)。

5、QuartusII适配

点击步骤3的图标,调用QuartusII完成编译适配过程,生成编程文件:pof文件和sof 文件。编程文件可以直接用于FPGA的编程配置。不过,按现在这个流程,采用的是自动(Auto)器件,管脚pin是自动指定的。

另外,点击图9-34的“Report File”按纽,将获得详细的报告文件。sinout模型对应的报告文件为sinout_DspBuilder_Report.html。在DSP Builder报告文件中,详尽地描述了模型相关的设置情况、编译结果、生成文件列表说明、注意点等等,而且对使用在sinout模型中的模块分别进行了说明(图9-35)。

注意,对于手动设计流程,适配步骤已没有必要,通常只须完成前面两个步骤即可。

图9-35 sinout工程处理信息

9.2.4 使用ModelSim进行RTL级仿真

在simulink中进行的仿真是属于系统验证性质的,是对mdl文件进行的仿真,并没有对生成的VHDL代码进行过仿真。事实上,生成VHDL描述的是RTL级的,是针对具体的硬件结构的,而在Matlab的simulink中的模型仿真是算法级(系统级)的。两者之间有可能存在软件理解上差异。转换后的VHDL代码实现可能与mdl模型描述的情况不完全相符。这就需要针对生成的RTL级VHDL代码进行功能仿真。

当在SignalCompiler窗口选项页中设定后,DSP

第9章 DSP Builder设计初步327

Builder在“MDL to VHDL”过程中会自动生成针对HDL仿真器ModelSim的测试文件。因此,在这里,需要使用ModelSim对生成的VHDL代码进行功能仿真。ModelSim是一个基于单内核的Verilog/VHDL混合仿真器,是Mentor Graphics的子公司Model Technology 的产品。

打开ModelSim环境,图9-36是ModelSim的主窗口。选择主窗口上的菜单“Tools”→“Execute Macro…”,在打开的文件选择对话框中,切换到sinout模型sinout.mdl所在的目录,接着选择tb_sinout.tcl来执行。其中,tb_sinout.tcl是DSP Builder的SignalCompiler 产生,若不存在,可再重复一次5.2.3小节的流程。如果一切配置正常的话,ModelSim就开始执行tcl脚本:tb_sinout.tcl,开启仿真,随后就自动打开“wave”窗口,显示仿真结果(图9-37)。

图9-36 准备执行tcl文件图9-37 ModelSim仿真结果不过图中显示的仿真波形与simulink中的仿真结果没有可比性。点击“wave”窗口工具栏上的图标,使之显示全部波形。在此可以把“wave”窗口中的“/tb_sinout/osinout”

信号改成类似模拟信号的显示格式。先用鼠标选中“/tb_sinout/osinout”信号。在“wave”窗口的“View”菜单中选择“Signal Properties”,打开“Wave Signal Properties”对话框(图9-38)。在“View”选项页中,修改“Radix”为Unsigned(无符号数);在“Format”选项页中(图9-39),修改下列几项:“Format”选择Analog;“Height”为100;“Analog Display”中“Scale”为0.4。

点击“OK”确定后,如图9-40所示。可以看到与simulink里的仿真结果基本一致。

Spring_Security-3.0.1_中文自学教程

Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发者以这一版本的文档为参考。 另:Spring Security 从2010-01-01 以后,版本控制从SVN 换成了GIT,我们在翻译文档的时候,主要是根据SVN 的变化来进行文档内容的比对,这次换成GIT 后,感觉缺少了之前那种文本比对工具,如果有对GIT 熟悉的朋友,还请推荐一下文本比对的工具,谢谢。 序言 I. 入门 1. 介绍 1.1. Spring Security 是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1. 2. Web - spring-security-web.jar 1.4.1.3. Config - spring-security-config.jar 1.4.1.4. LDAP - spring-security-ldap.jar 1.4.1.5. ACL - spring-security-acl.jar 1.4.1.6. CAS - spring-security-cas-client.jar 1.4.1.7. OpenID - spring-security-openid.jar 1.4. 2. 获得源代码 2. Security 命名空间配置 2.1. 介绍 2.1.1. 命名空间的设计 2.2. 开始使用安全命名空间配置 2.2.1. 配置web.xml 2.2.2. 最小 配置 2.2.2.1. auto-config 包含了什么? 2.2.2.2. 表单和基本登录选项 2.2. 3. 使用其他认证提供器 2.2. 3.1. 添加一个密码编码器 2.3. 高级web 特性 2.3.1. Remember-Me 认证 2.3.2. 添加HTTP/HTTPS 信道安全 2.3.3. 会话管理 2.3.3.1. 检测超时 2.3.3.2. 同步会话控制 2.3.3.3. 防止Session 固定攻击 2.3.4. 对OpenID 的支持 2.3.4.1. 属性交换

学习SpringMVC系列教程(一)Spring MVC入门

2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。 2.2、Spring Web MVC能帮我们做什么 √让我们能非常简单的设计出干净的Web层和薄薄的Web层; √进行更简洁的Web层的开发;

√天生与Spring框架集成(如IoC容器、AOP等); √提供强大的约定大于配置的契约式编程支持; √能简单的进行Web层的单元测试; √支持灵活的URL到页面控制器的映射; √非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); √非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; √提供一套强大的JSP标签库,简化JSP开发; √支持灵活的本地化、主题等解析; √更加简单的异常处理; √对静态资源的支持; √支持Restful风格。 2.3、Spring Web MVC架构

Java经典入门教程 强推

java基础教程:Java基础 疯狂代码 https://www.sodocs.net/doc/ea6482036.html,/ ?:http:/https://www.sodocs.net/doc/ea6482036.html,/BlogDigest/Article75483.html Java简介 Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。 Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版 ),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。 2009年04月20日,oracle(甲骨文)宣布收购sun。 1991年,Sun公司的James Gosling。Bill Joe等人,为电视、控制考面包机等家用电器的交互操作开发了一个Oak(一种橡树的名字)软件,他是Java的前身。当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,得以研发和发展。为了促销和法律的原因,1995年Oak更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。很快Java被工业界认可,许多大公司如IBM Microsoft.DEC等购买了Java的使用权,并被美国杂志PC Magazine评为1995年十大优秀科技产品。从此,开始了Java应用的新篇章。 Java的诞生时对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响: (1)软件4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重要性并可即插即用等分布式计算模式的需求。 (2)基于构建开发方法的崛起,引出了CORBA国际标准软件体系结构和多层应用体系框架。在此基础上形成了Java.2平台和.NET平台两大派系,推动了整个IT业的发展。 (3)对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我,B2B的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。 (4)对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。 总之,目前以看到了Java对信息时代的重要性,未来还会不断发展,Java在应用方面将会有更广阔的前景。 ; JAVA-名字起源 Java自1995诞生,至今已经14年历史。Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。 据James Gosling回忆,最初这个为TV机顶盒所设计的语言在Sun内部一直称为Green项目。我们的新语言需要一个名字。Gosling注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。 在命名征集会上,大家提出了很多名字。最后按大家的评选次序,将十几个名字排列成表,上报给商标律师。排在第一位的是Silk(丝绸

最全最经典spring_mvc教程

spring mvc学习教程(一)-入门实例 引言 1.MVC:Model-View-Control 框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。 2.简要概述springmvc Spring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。 一、入门实例 1. 搭建环境 在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用: org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包 org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。 org.springframework.core-3.0.5.RELEASE.jar:spring核心包 org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。 后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。 2.编写HelloWorld实例 步骤一、建立名为springMVC_01_helloword,并导入上面列出的jar 包。 步骤二、编写web.xml配置文件,代码如下: spring

Spring中文开发详细手册

Spring开发教程 Spring教程 (1) Spring框架概述 (2) Spring是什么? (2) Spring的历史 (3) Spring的使命(Mission Statement) (3) Spring受到的批判 (3) Spring包含的模块 (4) 总结 (5) Spring的IoC容器 (6) 用户注册的例子 (6) 面向接口编程 (7) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (9) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (10) 什么是控制反转/依赖注入? (10) 依赖注入的三种实现形式 (11) BeanFactory (13) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (22)

名词解释 容器: 框架: 框架 容器 组件: 服务: Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实

Spring框架入门教程

Spring基础入门 一、基础知识 1.依赖注入、控制反转 依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中 控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。 2.spring 的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦。 (2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服务等等。 (3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。 (4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。 (5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。 3.常用技术 控制反转/依赖注入---面向切入编程---与主流框架的整合、管理--- 二、实例拓展 1.准备搭建环境 dist\spring.jar lib\jakata-commons\commons-loggin.jar 如果使用了切面编程,还需下列jar 文件: lib\aspectj\aspectjweaver.jar 和aspectjrt.jar lib\cglib\cglib-nodep-2.1.3.jar 如果使用了jsr-250 中的注解,还需要下列jar 文件: lib\j2ee\common-annotations.jar 2.搭建并测试环境 建立名为spring_01_base项目,根据需求导入jar包。建立一个Junit测试单元SpringEnvTest,测试代码如下: @Test public void testEnv() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); } beans.xml 配置文件在此省略(见下)。运行此测试如无错,则说明环境搭建成功。 说明:beans.xml 可以在类路径下进行配置,也可以在具体的目录下配置。可以是一个配置文件,也可以是多个配置文件组成String 数组传入。 3.实例 作如下准备工作:(1)建立UseDao接口,代码如下: package com.asm.dao; public interface UserDao { void save(); }

Spring基础教程

Spring教程 作者:钱安川(Moxie)

Spring教程 (1) Spring框架概述 (3) Spring是什么? (3) Spring的历史 (4) Spring的使命(Mission Statement) (4) Spring受到的批判 (4) Spring包含的模块 (5) 总结 (6) Spring的IoC容器 (6) 用户注册的例子 (7) 面向接口编程 (8) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (10) 重构第四步-IoC容器 (11) 控制反转(IoC)/依赖注入(DI) (11) 什么是控制反转/依赖注入? (11) 依赖注入的三种实现形式 (12) BeanFactory (14) BeanFactory管理Bean(组件)的生命周期 (15) Bean的定义 (16) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问..................................................................................... 错误!未定义书签。Spring的声明式事务..................................................................................... 错误!未定义书签。Spring对其它企业应用支持......................................................................... 错误!未定义书签。 名词解释 容器: 框架: 组件: 服务:

Spring教程

Spring教程

Spring教程 (1) Spring框架概述 (3) Spring是什么? (3) Spring的历史 (4) Spring的使命(Mission Statement) (4) Spring受到的批判 (4) Spring包含的模块 (4) 总结 (6) Spring的IoC容器 (6) 用户注册的例子 (7) 面向接口编程 (8) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (10) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (11) 什么是控制反转/依赖注入? (11) 依赖注入的三种实现形式 (12) BeanFactory (14) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (18) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (21) 名词解释 容器: 框架: 组件: 服务:

Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 ■容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ■框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它

Spring3.0 MVC 中文教程

Spring3 MVC - 3到Spring MVC框架简介 Spring3 MVC框架简介 Spring MVC是Spring的框架的Web组件。它提供了丰富的功能,为建设强大的Web应用程序。Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。 Spring3.0 MVC系列 ?第1部分:到Spring 3.0 MVC框架简介 ?第2部分:在Spring 3.0 MVC创建Hello World应用程序 ?第3部分:在Spring 3.0 MVC的形式处理 ?第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程 ?第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse ?第6部分:Spring3 MVC示例教程Spring主题 ?第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的 在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。相反,它往往是最好直接绑定到业务对象。 请求处理生命周期 Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。Spring DispatcherServlet DispatcherServlet是Spring IoC容器完全集成,并允许我们使用的每一个Spring的其他功能。

Spring深入浅出教程

一、理论知识 1.依赖注入、控制反转 依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中 控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。 2.spring 的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦。 (2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服务等等。 (3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。 (4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。 (5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。 3.常用技术 控制反转/依赖注入---面向切入编程---与主流框架的整合、管理--- 二、基本实例 1.准备搭建环境 dist\spring.jar lib\jakata-commons\commons-loggin.jar 如果使用了切面编程,还需下列jar 文件: lib\aspectj\aspectjweaver.jar 和aspectjrt.jar lib\cglib\cglib-nodep-2.1.3.jar 如果使用了jsr-250 中的注解,还需要下列jar 文件: lib\j2ee\common-annotations.jar 2.搭建并测试环境 建立名为spring_01_base项目,根据需求导入jar包。建立一个Junit测试单元SpringEnvTest,测试代码如下: @Test public void testEnv() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); } beans.xml 配置文件在此省略(见下)。运行此测试如无错,则说明环境搭建成功。 说明:beans.xml 可以在类路径下进行配置,也可以在具体的目录下配置。可以是一个配置文件,也可以是多个配置文件组成String 数组传入。 3.实例 作如下准备工作:(1)建立UseDao接口,代码如下: package com.asm.dao; public interface UserDao { void save(); } (2)建立UserDao接口的实现类,UserDaoImpl package com.asm.dao.impl;

尚学堂视频教程马士兵Spring文档

尚学堂马士兵Spring文档 课程内容 1.面向接口(抽象)编程的概念与好处 2.IOC/DI的概念与好处 a)inversion of control b)dependency injection 3.AOP的概念与好处 4.Spring简介 5.Spring应用IOC/DI(重要) a)xml b)annotation 6.Spring应用AOP(重要) a)xml b)annotation 7.Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要) a)opensessionInviewfilter(记住,解决什么问题,怎么解决) 8.Spring JDBC 面向接口编程(面向抽象编程) 1.场景:用户添加 2.Spring_0100_AbstractOrientedProgramming a)不是AOP:Aspect Oriented Programming 3.好处:灵活 什么是IOC(DI),有什么好处 1.把自己new的东西改为由容器提供 a)初始化具体值 b)装配 2.好处:灵活装配

Spring简介 1.项目名称:Spring_0200_IOC_Introduction 2.环境搭建 a)只用IOC i.spring.jar , jarkata-commons/commons-loggin.jar 3.IOC容器 a)实例化具体bean b)动态装配 4.AOP支持 a)安全检查 b)管理transaction Spring IOC配置与应用 1.FAQ:不给提示: a)window – preferences – myeclipse – xml – xml catalog b)User Specified Entries – add i.Location: D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\sprin g-beans-2.5.xsd ii.URI: file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resource s/spring-beans-2.5.xsd iii.Key Type: Schema Location iv.Key: https://www.sodocs.net/doc/ea6482036.html,/schema/beans/spring-beans-2.5.xsd 2.注入类型 a)Spring_0300_IOC_Injection_Type b)setter(重要) c)构造方法(可以忘记) d)接口注入(可以忘记) 3.id vs. name a)Spring_0400_IOC_Id_Name b)name可以用特殊字符 4.简单属性的注入 a)Spring_0500_IOC_SimpleProperty b) 5.

Spring入门教程

Spring入门教程 中国软件评测中心陈兵1.Spring简介 (1)Spring是什么 Spring是轻量级的J2EE应用程序开源框架。它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring 框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案Spring不会特别去提出一些子框架来与现有的OpenSource框架竞争,除非它觉得所提出的框架够新够好,例如Spring有自己的 MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架。 Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模块不应该依赖低层模块,而是模块都必须依赖于抽象」是IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不应依赖于容器,而是容器服务于应用程序」也是IoC的一种表现。回想一下面向对象的设计原则:OCP原则和DIP原则。 Spring的核心即是个IoC/DI的容器,它可以帮程序设计人员完成组件(类别们)之间的依赖关系注入(连结),使得组件(类别们)之间的依赖达到最小,进而提高组件的重用性,Spring是个低侵入性(invasive)的框架,Spring中的组件并不会意识到它正置身于Spring中,这使得组件可以轻易的从框架中脱离,而几乎不用任何的修改,反过来说,组件也可以简单的方式加入至框架中,使得组件甚至框架的整合变得容易。 Spring最为人重视的另一方面是支持AOP(Aspect-Oriented Programming),

spring中文API文档

这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进行修正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发者以这一版本的文档为参考。 另:Spring Security 从2010-01-01 以后,版本控制从SVN 换成了GIT,我们在翻译文档的时候,主要是根据SVN 的变化来进行文档内容的比对,这次换成GIT 后,感觉缺少了之前 那种文本比对工具,如果有对GIT 熟悉的朋友,还请推荐一下文本比对的工具,谢谢。 序言 I. 入门 1. 介绍 1.1. Spring Security 是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1. 2. Web - spring-security-web.jar 1.4.1.3. Config - spring-security-config.jar 1.4.1.4. LDAP - spring-security-ldap.jar 1.4.1.5. ACL - spring-security-acl.jar 1.4.1.6. CAS - spring-security-cas-client.jar 1.4.1.7. OpenID - spring-security-openid.jar 1.4. 2. 获得源代码 2. Security 命名空间配置 2.1. 介绍 2.1.1. 命名空间的设计 2.2. 开始使用安全命名空间配置 2.2.1. 配置web.xml 2.2.2. 最小 配置 2.2.2.1. auto-config 包含了什么? 2.2.2.2. 表单和基本登录选项 2.2. 3. 使用其他认证提供器 2.2. 3.1. 添加一个密码编码器 2.3. 高级web 特性 2.3.1. Remember-Me 认证 2.3.2. 添加HTTP/HTTPS 信道安全 2.3.3. 会话管理 2.3.3.1. 检测超时 2.3.3.2. 同步会话控制 2.3.3.3. 防止Session 固定攻击 2.3.4. 对OpenID 的支持 2.3.4.1. 属性交换 2.3.5. 添加你自己的filter

spring经典中文教程

’ OpenDoc Series Spring开发指南

文档说明 参与人员: 作者联络 见权权权权权 xiaxin(at)https://www.sodocs.net/doc/ea6482036.html, (at) 为email @ 符号 发布记录 版本日期作者说明 0.5 2004.6.1 夏昕第一预览版 0.6 2004.9.1 夏昕补充“持久层”内容。 OpenDoc版权说明 本文档版权归原作者所有。 在免费、且无任何附加条件的前提下,可在网络媒体中自由传播。 如需部分或者全文引用,请事先征求作者意见。 如果本文对您有些许帮助,表达谢意的最好方式,是将您发现的问题和文档改进意见及时反馈给作者。当然,倘若有时间和能力,能为技术群体无偿贡献自己的所学为最好的回馈。 另外,笔者近来试图就日本、印度的软件开发模式进行一些调研。如果诸位可以赠阅日本、印度软件研发过程中的需求、设计文档以供研究,感激不尽!

Spring开发指南 前言 2003年年初,笔者在国外工作。其时,一位与笔者私交甚好的印度同事Paradeep从公司离职去斯坦福深造,临走送给笔者一本他最钟爱的书籍作为纪念。 工作间隙,时常见到他摩娑此书,摇头不止(印度人习惯和中国人相反,摇头代表肯定、赞同,相当于与中国人点头。笔者刚开始与印度同僚共事之时,每每组织项目会议,一屋子人频频摇头,让笔者倍感压力……J)。 下班后,带着好友离职的失落,笔者夹着这本书走在回家的路上,恰巧路过东海岸,天色依然明朗,随意坐上了海边一家酒吧的露天吧台,要了杯啤酒,随手翻弄着书的扉页,不经意看见书中遍布的钢笔勾画的线条。 “呵呵,Paradeep这家伙,还真把这本书当回事啊”,一边笑着,一边摊开了此书,想看看到底是怎样的书让这样一个聪明老练的同事如此欣赏。 从此开始,这本书伴随笔者度过了整整一个月的业余时间…….. 这本书,也就是出自Rod Johnson的: 《Expert One-on-One J2EE Design and Development》 此书已经由电子工业出版社出版,译版名为《J2EE设计开发编程指南》。 半年后,一个新的Java Framework发布,同样出自Rod Johnson的手笔,这自然引起了笔者极大的兴趣,这就是SpringFramework。 SpringFramework实际上是Expert One-on-One J2EE Design and Development一书中所阐述的设计思想的具体实现。在One-on-One一书中,Rod Johnson倡导J2EE实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21开发包)。而SpringFramework正是这一思想的更全面和具体的体现。Rod Johnson在interface21开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。 本文正是针对SpringFramework的开发指南,讲述了SpringFramework的设计思想以及在开发中的实际使用。同时穿插了一些笔者在项目实作中的经验所得。

相关主题