武汉理工大学FPGA第2章FPGA设计基础_第1页
武汉理工大学FPGA第2章FPGA设计基础_第2页
武汉理工大学FPGA第2章FPGA设计基础_第3页
武汉理工大学FPGA第2章FPGA设计基础_第4页
武汉理工大学FPGA第2章FPGA设计基础_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 FPGA设计基础2.1 Verilog HDL基础知识2.1.1概 述硬件描述语言HDL(Hardware Description Language )是一种用形式化方法来描述数字电路和数字逻辑系统的硬件描述语言,有两种类型:VHDL和Verilog HDL。 举个例子,在传统的设计方法中,对2输入的与门,我们可能需要到标准器件库中调出一个74系列的器件,但在硬件描述语言中,“& ”就是一个与门的形式描述,“C = A & B”就是一个2输入与门的描述,而“and”就是一个与门器件。Verilog HDL 语言具有这样的描述能力:设计的行为特性、设计的数据流特

2、性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言,可综合的Verilog模块可以构成一个可靠的复杂IP软核和固核模块。Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog 仿真器进行验证。Verilog HDL语言从C 编程语言中继承了多种操作符和结构。Verilog HDL 模型可以是实际电路的不同级别的抽象,主要指:(1)系统级(2)算法级(3)RTL级(4)门级(5)开关级,前三种属于行为级描述。VHDL侧重于系统级描述,从而更多的为系统级设计人员所采

3、用;Verilog侧重于电路级描述,从而更多的为电路级设计人员所采用。Verilog非常容易掌握,只需有C语言编程基础,就可很快上手。2.1.2 Verilog 与 C语言的比较 虽然Verilog语言是从C语言过渡而来的,其某些语法与C语言接近,但存在如下几方面的本质区别:1. Verilog是一种硬件语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真;C语言是一种软件语言,是控制硬件来实现某些功能;2. C语言只要是语法正确,都是可以编译执行的;而Verilog语言有可综合的限制,即在所有的verilog语句中,只有一部分可以被综合,而另外的部分则不能被综合,只能用来仿真;3. C语言

4、是一种软件编程语言,其基本思想是语句的循序执行,而Verilog语言的基本思想是模块的并行执行;4. 利用Verilog编程时,要时刻记得Verilog是硬件语言,要时刻将Verilog与硬件电路对应起来。Verilog语言是在C语言的基础之上发展起来的,他们有着类似的语意,C语言和Verilog的很多关键字和运算符都可以对应起来。表2-1中列出了常用的C与Verilog相对应的关键字与控制结构。表2-1 常用的C与Verilog相对应的关键字与控制结构CVerilog sub-functionmodule, function, task if-then-elseif-then-else Ca

5、seCase ,begin, end ForFor WhileWhile BreakDisable DefineDefine IntInt Printfmonitor, display,strobe表2-2列出了C与Verilog相对应的运算符。表2-2 常用的C与Verilog相对应的运算符 C Verilog功能 * * 乘 / / 除 + + 加 - - 减 % %取模 ! ! 反逻辑 && && 逻辑且 | |逻辑或 > > 大于 < < 小于 >= >= 大于等于 <= <= 小于等于 = = 等于 !=

6、 !=不等于 位反相 & & 按位逻辑与 | | 按位逻辑或 按位逻辑异或 按位逻辑同或 >> >> 右移 << <<左移 ?: ?:同等於if-else敘述2.1.3 采用自顶向下的设计方法随着技术的发展,一个芯片上往往集成了几十万到几百万个器件,传统的自底向上的设计方法已不太现实。因此,一个设计往往从系统级设计开始,把系统划分成几个大的基本的功能模块,每个功能模块再按一定的规则分成下一个层次的基本单元,如此一直划分下去。自顶向下的设计方法可用图2-1所示的树状结构表示。系统级的顶层模块模块A模块B模块C模块B1模块B2模块C1

7、图2-1 TOP-DOWN 设计思想通过自顶向下的设计方法,可实现设计的结构化,可使一个复杂的系统设计由多个设计者分工合作,还可以实现层次化的管理。2.1.4 模块模块(module)是Verilog 的基本描述单位,用于描述某个设计的功能或结构及与其他模块通信的外部端口。模块在概念上可等同于一个器件,尤如调用通用器件(与门、三态门等)或通用宏单元(计数器、ALU、CPU)等。因此,一个模块可在另一个模块中调用。一个设计是由一个个模块(module)构成的,模块是以module 开始,endmodule 结束,模块包括模块的端口定义部分和逻辑功能描述部分。模块的端口定义部分,即该模块的端口声明

8、定义了该模块的管脚名,是该模块与其他模块通讯的外部接口,相当于器件的pin 。模块的内容,包括I/O说明,内部信号、调用模块等的声明语句和功能定义语句。I/O说明定义了管脚信号的流向,信号的位宽(总线或单根信号线)。功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑),还可用来实例化一个器件。例如:3位加法器的形成语言为module addr (a, b, cin, count, sum); / /模块名及输入输出端口列表/ /input 2:0 a; / /定义信号流向及位宽/ / input 2:0 b;input cin;output count;output 2:0 sum;assig

9、n count,sum = a +b + cin; / /功能描述/ /endmodule2.1.5 Verilog HDL 基本语法Verilog HDL 的一些基本语法包括标识符、注释、格式、数字值集合、两种数据类型、运算符、表达式和一些基本的语句等。1. 标识符(1) 定义标识符( identifier)用于定义模块名、端口名、信号名等。 Verilog HDL 中的标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以下是标识符的几个例子:Count COUNT /与Count 不同R56_68FIVE$

10、(2) 关键词Verilog HDL 定义了一系列关键词,但要注意只有小写的关键词才是保留字。例如,标识符always (这是个关键词)与标识符ALWAYS(非关键词)是不同的。下面是常用的关键字:always and assign begin case default disable edge else end endcase endmodule endfunction endprimitive endspecify endtable endtask event for forever fork function if initial inout input integer join lar

11、ge module negedge nor not or output等等。(3) 书写规范建议以下是一些书写规范的要求:² 使用有意义的有效的名字如 Sum 、CPU_addr等;² 用下划线区分词;² 采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,Clk_CPU;低电平采用_n 后缀:Enable_n;² 统一一定的缩写,如全局复位信号 Rst; ² 同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致;² 自定义的标识符不能与保留字同名;² 参数采用大写,如SIZE 。2. 注释Verilog

12、HDL 中有两种注释方式,一种是以“/*”符号开始,“*/” 结束,在两个符号之间的语句都是注释语句,因此可扩展到多行。如:/* statement1 ,statement2,. .statementn */ 以上n个语句都是注释语句。另一种是以 / 开头的语句,它表示以 / 开始到本行结束都属于注释语句。3. 格式Verilog HDL 是区分大小写的,即大小写不同的标识符是不同的。另外其书写格式自由,即一条语句可多行书写,一行可写多个语句。空白(新行、制表符、空格)没有特殊意义。如 input A;input B;与input A;input B;是一样的。书写规范建议:一个语句一行。4.

13、 数字值集合下面介绍Verilog HDL的值集合、常量( 整型、实型、字符型)和变量等。(1) 值集合Verilog HDL中规定了四种基本的值类型,这四类基本值组成的Verilog HDL 中的常量。0:逻辑0或“假”;1:逻辑1或“真”;X:未知值;Z:高阻。注意,这四种值的解释都内置于语言中。如一个为z 的值总是意味着高阻抗,一个为0 的值通常是指逻辑0;在门的输入或一个表达式中为“z ”的值通常解释成“x ”;此外,x 值和z 值都是不分大小写的,也就是说,值0x1z 与值0X1Z 相同。(2)常量Verilog HDL 中有三种常量: 整型、实型、字符串型。下划线符号(_)可以随意

14、用在整数或实数中,它们就数量本身没有意义,可用来提高易读性,唯一的限制是下划线符号不能用作为首字符。下面主要介绍整型和字符串型。1)整型整型数可以按如下两种方式书写:A. 简单的十进制格式这种形式的整数定义为带有一个可选的“+”(一元)或“”(一元)操作符的数字序列。下面是这种简易十进制形式整数的例子。32 十进制数32-15 十进制数-15B. 基数表示法这种形式的整数格式为:size 'base valuesize 定义以位计的常量的位长;base 为o 或O(表示八进制),b 或B(表示二进制),d 或D(表示十进制),h 或H (表示十六进制);value 是基于base 的值

15、的数字序列,值x 和z 以及十六进制中的a 到f 不区分大小写。下面是一些具体实例。5 'O37 5 位八进制数(二进制 11111 )4'D2 4 位十进制数 (二进制0011)4 'B1x_01 4 位二进制数7'Hx 7位x(扩展的x), 即xxxxxxx4 'hZ 4 位z(扩展的z) , 即zzzz4'd-4 非法:数值不能为负8 'h 2A 在位长和字符之间,以及基数和数值之间允许出现空格3' b 001 非法: 和基数b 之间不允许出现空格(2+3)'b10 非法:位长不能够为表达式注意:x (或z )在十六

16、进制值中代表4 位x(或z ),在八进制中代表3 位x(或z ),在二进制中代表1 位x (或z )。如果定义的长度比为常量指定的长度长,通常在左边填0 补位。但是如果数最左边一位为x 或z ,就相应地用x 或z 在左边补位。例如:10'b10 左边添0 占位, 000000001010'bx0x1 左边添x 占位, x x x x x x x 0 x 1如果长度定义得更小,那么最左边的位相应地被截断。例如:3 ' b1001_0011 与3'b011 相等5'H0FFF 与5'H1F 相等2)字符串型字符串是双引号内的字符序列,字符串不能分成多

17、行书写。例如:"INTERNAL ERROR"" REACHED>HERE "用8 位ASCII 值表示的字符可看作是无符号整数,因此字符串是8 位ASCII 值的序列。为存储字符串“INTERNAL ERROR ”,变量需要8 * 1 4 位。r e g 1: 8*14 Message;. . .Message = "INTERNAL ERROR"5. 数据类型Verilog HDL 主要包括两种数据类型:线网类型(net type) 和寄存器类型(reg type)。(1) 线网类型1)wire 和 tri 定义线网类型主要

18、有wire和tri两种。线网类型用于对结构化器件之间的物理连线的建模,如器件的管脚,内部器件如与门的输出等。线网类型代表的是物理连接线,因此它不存贮逻辑值,必须由器件所驱动,通常由assign进行赋值。如 assign A = BC;当一个wire 类型的信号没有被驱动时,缺省值为Z(高阻)。信号没有定义数据类型时,缺省为 wire 类型。2)两者区别tri 主要用于定义三态的线网。(2) 寄存器类型 1)定义reg 是最常用的寄存器类型,寄存器类型通常用于对存储单元的描述,如D型触发器、ROM等。必须注意的是,reg 类型的变量,不一定是存储单元,如在always 语句中进行描述的变量必须用

19、reg 类型的变量。reg范围定义是可选的,如果没有定义范围,缺省值为1 位寄存器。例如:reg 3:0 Sat; / S a t 为4 位寄存器。reg Cnt; /1 位寄存器。2)寄存器类型的存储单元建模举例用寄存器类型来构建两位D触发器如下:reg 1:0 Dout ;. always(posedge Clk)Dout <= Din;.3)书写规范建议对数组类型,请按降序方式,如7:0 。6、 运算符和表达式常用的算术运算符主要是:加法(二元运算符):“+”;减法 (二元运算符): “-”;乘法(二元运算符):“*”;(1)算术操作结果的位数长度算术表达式结果的长度由最长的操作数

20、决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。考虑如下实例:reg 3:0 Arc, Bar, Crt;reg 5:0 Frx;. . .Arc = Bar + Crt;Frx = Bar + Crt;第一个加的结果长度由Bar、Crt 和A rc 长度决定,长度为4 位。第二个加法操作的长度由Frx 的长度决定(Frx 、Bat 和Crt 中的最长长度),长度为6 位。(2) 关系运算符关系运算符有:?>(大于) ?<(小于) ?>=(不小于) ?<=(不大于) = = (逻辑相等) != (逻辑不等)关系操作符的结果为真(1 )或假(0 )。如果操

21、作数中有一位为X 或Z ,那么结果为X 。例如:23 > 45 结果为假(0 ),而:52 < 8'hxFF 结果为x 。如果操作数长度不同,长度较短的操作数在最重要的位方向(左方)添0 补齐。例如:'b1000 > = 'b01110等价于:'b01000 > = 'b01110 结果为假(0 )。(3) 逻辑运算符逻辑运算符有:&& (逻辑与) | (逻辑或) !(逻辑非)用法为:(表达式1) 逻辑运算符 (表达式2) .这些运算符在逻辑值0(假) 或1(真) 上操作。逻辑运算的结果为0 或1 。例如, 假定C

22、rd = 'b0; /0 为假 Dgs = 'b1; /1 为真那么Crd && Dgs 结果为0 (假) Crd | Dgs 结果为1 (真) !Dgs 结果为0 (假)(4) 按位逻辑运算符按位运算符有:?(一元非):(相当于非门运算)?&(二元与):(相当于与门运算)?|(二元或): (相当于或门运算)?(二元异或):(相当于异或门运算)? , (二元异或非即同或) :(相当于同或门运算)这些操作符在输入操作数的对应位上按位操作,并产生向量结果。例如:假定A = 'b0110;B = 'b0100;那么A | B 结果为0 1 1

23、0;A & B 结果为0 1 0 0如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,'b0110 'b10000 与下式的操作相同:'b00110 'b10000 结果为' b 1 0 11 0 。(5)条件运算符条件操作符根据条件表达式的值选择表达式,形式如下:cond_expr ? expr1 : expr2如果cond_expr 为真(即值为1 ),选择expr1 ;如果cond_expr 为假(值为0 ),选择expr2 。如果cond_expr 为x 或z ,结果将是按以下逻辑expr1 和expr2 按位操作的值:

24、0 与0 得0 ,1 与1 得1 ,其余情况为x 。(6)连接运算符连接操作是将小表达式合并形成大表达式的操作。形式如下:expr1, expr2, . . .,exprN例如:wire 7:0 Dbus;assign Dbus 7:4 = Dbus 0, Dbus 1, Dbus2, Dbus 3 ;/ /以反转的顺序将低端4 位赋给高端4 位。assign Dbus = Dbus 3:0, Dbus 7 : 4 ; / /高4 位与低4 位交换。由于非定长常数的长度未知, 不允许连接非定长常数。例如, 下列式子非法:Dbus,5 / /不允许连接操作非定长常数。(7)条件语句if 语句的语

25、法如下:if(condition_1)procedural_statement_1else if(condition_2)procedural_statement_2else procedural_statement_3如果对condition_1 求值的结果为非零值,那么procedural_statement_1 被执行,如果condition_1 的值为0 、x 或z ,那么procedural_statement_1 不执行。如果存在一个else 分支,那么这个分支被执行。例如:if(Sum < 60)beginGrade = C;Total_C = Total _c + 1;e

26、ndelse if(Sum < 75)beginGrade = B;Total_B = Total_B + 1;endelsebeginGrade = A;Total_A = Total_A + 1;end注意条件表达式必须总是被括起来。(8) case 语句case 语句是一个多路条件分支形式,其语法如下:case(case_expr)case_item_expr ,case_item_expr :procedural_statement. . . default:procedural_statementendcasecase 语句首先对条件表达式case_expr 求值,然后依次对各

27、分支项求值并进行比较,第一个与条件表达式值相匹配的分支中的语句被执行。可以在1 个分支中定义多个分支项;这些值不需要互斥。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。例如:case (HEX)4'b0001 : LED = 7'b1111001; / 14'b0010: LED = 7'b0100100; / 24'b0011: LED = 7'b0110000; / 34'b0100: LED = 7'b0011001; / 44'b0101: LED = 7'b0010010; / 54'b0110

28、: LED = 7'b0000010; / 64'b0111: LED = 7'b1111000; / 74'b1000: LED = 7'b0000000; / 84'b1001: LED = 7'b0010000; / 94'b1010: LED = 7'b0001000; / A4'b1011: LED = 7'b0000011; / B4'b1100: LED = 7'b1000110; / C4'b1101: LED = 7'b0100001; / D4'b

29、1110: LED = 7'b0000110; / E4'b1111: LED = 7'b0001110; / Fdefault :LED = 7'b1000000; / 0endcase书写建议:case 的缺省项必须写,防止产生锁存器。7. 例化语句(1) 例化语法一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块例化语句形式为:module_name instance_name(port_associations);信号端口可以通过位置或名称关联,但是关联方式不能够混合使用。端口关联形式如下:port_expr / /通过位置。.PortNa

30、me (port_expr) / /通过名称。例如:module and (C,A,B);input A,B;output C;and A1 (T3, A, B ); /实例化时采用位置关联,T3对应输出端口C,A对应A,B对应B。and A2( /实例化时采用名字关联,.C是and 器件的端口,其与信号T3相连).C(T3),.A(A),.B(B);port_expr 可以是以下的任何类型:1) 标识符(reg 或net )如 .C(T3),T3为wire型标识符。2) 位选择 ,如 .C(D0),C端口接到D信号的第0bit 位。3) 部分选择 ,如 .Bus (Din5:4)。4) 上述

31、类型的合并,如 .Addr( A1,A21:0。5) 表达式(只适用于输入端口),如 .A (wire Zire = 0 )。注意:在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。(2) 悬空端口的处理在实际例化中,可能有些管脚没用到,可在映射中采用空白处理,如:DFF d1 (.Q(QS), .Qbar ( ), .Data (D ) ,.Preset ( ), / 该管脚悬空.Clock (CK); /名称对应方式。对输入管脚悬空的,则该管脚输入为高阻 Z,输出管脚被悬空的,该输出管脚废弃不用。(3) 不同端口长度的处理当端口和局部端口表达式的长度不同时,端口通过

32、无符号数的右对齐或截断方式进行匹配。8. 连续赋值语句数据流的描述是采用连续赋值语句(assign )语句来实现的。语法如下:assign net_type = 表达式;连续赋值语句用于组合逻辑的建模。等式左边是wire 类型的变量,等式右边可以是常量、由运算符如逻辑运算符、算术运算符参与的表达。例如:wire 3:0 Z, Preset, Clear; /线网说明assign Z = Preset & Clear; /连续赋值语句注意几个方面问题:(1)连续赋值语句的执行是:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号。(2)连续赋值语句之间是并行语句

33、,因此与位置顺序无关。9. 阻塞赋值语句与非阻塞赋值语句阻塞语句是顺序执行的,而非阻塞语句是同时执行的。总体上来讲,遵循大体原则:阻塞语句运用在组合逻辑电路设计中,而非阻塞语句运用在时序逻辑电路设计中。阻塞赋值语句,从字面上理解,该条语句阻塞了下面语句的执行,“=”用于阻塞的赋值,凡是在组合逻辑(如在assign 语句中)赋值的请用阻塞赋值。阻塞语句最能体现verilog HDL和C语言之间的血缘关系,比如,在时钟沿触发的always进程里,若先执行b=c,再执行a=b,那么本质上,在一个时钟沿触发里面,a=c成立,即是说,不要b变量,直接在进程里赋值a=c,结果是一样的。这和c语言中b=c,

34、a=b性质相同。非阻塞赋值操作符用小于等于号(即<=)表示,只能用于对寄存器类型变量进行赋值,因此只能用在“initial ”和“always”块等过程块中。10. 过程赋值语句Verilog HDL 中提供两种过程赋值语句 initial 和 always 语句。这两种语句之间的执行是并行的,即语句的执行与位置顺序无关。这两种语句通常与语句块(begin .end)相结合,则语句块中的执行是按顺序执行的。(1) initial 语句initial 语句只执行一次,即在设计被开始模拟执行时开始(0时刻)。通常只用在对设计仿真的测试文件中,用于对一些信号进行初始化和产生特定的信号波形。(2

35、) always 语句always 语句与initial 语句相反,是被重复执行,执行机制是通过对一个称为敏感变量表的事件驱动来实现的。always 语句可实现组合逻辑或时序逻辑的建模。例如:initialClk = 0 ;always #5 Clk = Clk;因为always 语句是重复执行的,因此,Clk 是初始值为0 的,周期为10 的方波。注意以下几点问题:1)对组合逻辑的always 语句,敏感变量必须写全,敏感变量指always 语句括号内的变量;2)对组合逻辑器件的赋值采用阻塞赋值 “=”;3)时序逻辑器件的赋值语句采用非阻塞赋值 “<=”,如上的 Q = D。2.2 嵌

36、入式处理器介绍2.2.1 嵌入式处理器的体系结构对于嵌入式系统,在硬件方面,最重要最核心的部分是处理器部分,图2-2是嵌入式处理器的体系结构示意图(虚线框中的单元只在高性能处理器中才有)。IQIRIDCU高级处理单元指令存储分支存储数据存储ALUFLPUAOUPFCUMMUPCMARSPMDRSRSARSFRSBIU地址总线数据总线控制总线内部总线内部总线 图2-2 嵌入式处理器的体系结构示意图表2-3中列出了通用存储器中的结构单元以及每一个单元的功能。表2-3 处理器中的结构单元及功能结 构 单 元功 能MAR(存储器地址寄存器)它保存将要从外部存储器取来的字节或者字的地址。处理器在开始一个

37、取周期之前,先把指令或者数据的地址发送给MARMDR(存储器数据寄存器)它保存从(或者要发送到)外部存储器或者I/O地址取来的字节或者字内部总线将处理器的所有结构单元内部相连。它的宽度可以是8、16、32或者64位地址总线这是一个外部总线,将地址从MAR发送到存储器、IO设备以及系统的其他单元数据总线是一个在读写操作过程中从一个地址中取来(或者发送到)指令或者数据字节的外部总线控制总线在处理器和存储器(或者设备)之间传送控制信号的外部总线BIU(总线接口单元)它是外部总线与处理器内部单元之间的接口单元IR(指令寄存器)它连续地将指令码(操作码)发送给处理器的执行单元结 构 单 元功 能ID(指

38、令译码器)它翻译IR接收到的指令操作码,并将它发送给处理器CUCU(控制单元)它控制着处理过程所需的所有总线行为和单元功能ARS(应用寄存器组)是一组在处理用户应用程序的指令过程中使用的片上寄存器。寄存器窗口1包含寄存器的一个子集,每一个子集包含一个软件例程的静态变量。寄存器文件是与单元(例如ALU或者FLPU)相结合的文件ALU(算术逻辑单元)根据IR中出现的当前指令,执行算术或者逻辑指令的单元PC(程序计数器)它产生了通过MAR从存储器获取地址的指令周期。当有规律地连续取指时,它的值自动增加。在80x86处理器中称为指令指针SRS(系统寄存器组)在处理监督系统程序的指令过程中使用的一组寄存

39、器SP(堆栈指针)它是一个地址指针,与存储器的栈顶对应IQ(指令队列)它是一个指令队列,作用是使得当一条指令执行完后,IR没有必要等待下一条指令PFCU(预取控制单元)这是一个控制将数据提前从存储器中取到I-缓存或者D-缓存中的单元。当处理器的执行单元需要指令和数据时,将指令和数据传送过去。处理器没有必要在执行指令之前才取数据I-缓存(指令缓存)它连续地将指令以FIFO的模式保存,就像一个指令队列。它使得处理器能够通过使用PFCU高速执行指令;处理器访问外部系统存储器的速度相对要慢很多BT 缓存 (分支目标缓存)当遇到分支指令时,例如jump、loop或者call,它协助准备好要执行的下一个指

40、令集。它的取单元能够预见I-缓存中的分支指令D-缓存(数据缓存)它保存从外部存储器预取来的数据。数据缓存通常将键(地址)和数值(字)共同保存在一个位置上。如果进行适当的配置,它还可以保存写穿透数据。写穿透数据意味着从执行单元获得执行结果,并将这个结果从缓存传回到相应的外部存储器地址中MMU(存储管理单元)它是管理存储器2的单元,负责执行过程所需要的指令或者数据(参见下面的注意2)FLPU(浮点处理单元)一个从ALU分离出来的单元,用于浮点处理,这是在微处理器或者DSP中快速执行数学函数的基本单元FRS(浮点寄存器组)专门用来以标准格式保存浮点数的寄存器组,FLPU使用它来保存数据和堆栈高级处理

41、单元这些单元用于多级流水处理、多路超标量处理,使得处理速度达到每个时钟周期能执行多条指令3。还有一个MAC4单元,用于计算过程中系数的相乘和累加AOU(原子操作单元)它使得当一个用户(编译器)指令分割成几个叫做原子操作的处理器指令后,在发生过程中断之前结束该指令的操作。这样就避免了各个例程和任务之间发生共享数据的问题注意:1. 当处理器并行运行多任务时,会自动完成一个任务到另外一个任务的快速切换。2. MMU(存储器管理单元)管理RAM存储器中的页,以及这些页在外部和内部高速缓存中的副本。管理必须做到当指令执行时,产生的页和高速缓存失败(失效)要尽量少。3. 由于高级处理单元的作用,指令周期时

42、间比时钟周期要短得多。4. DSP中必须要有MAC单元。5. 高性能处理器中的单元用斜体显示。几乎所有的处理器都具有图中实线框中的结构单元,高性能处理器在图中用虚线框中的结构单元表示。通常,性能是通过MIPS(百万指令/秒)或者MFLOPS(百万浮点指令操作/秒)或者Dhrystone/s来度量的。2.2.2 嵌入式处理器嵌入式微处理器的基础是通用计算机中的 CPU,在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的功能,这样可以大幅度减小系统体积和功耗。为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方

43、面一般都做了各种增强。 与工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点,但是在电路板上必须包括ROM、RAM、总线接口、各种外设等器件。嵌入式微处理器及其存储器、总线、外设等安装在一块电路板上,称为单板计算机。如 STD-BUS、PC104等。近年来,德国、日本的一些公司又开发出了类似“火柴盒”式名片大小的嵌入式计算机系列OEM产品,台湾研华公司也推出了类似的模组化系统 SOM(System On Module)。 嵌入式处理器目前主要有 Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM系列等。嵌入式微处理器又可分为CI

44、SC和RISC两类。大家熟悉的大多数台式PC 都是使用CISC微处理器的,如 Intel 的x86。RISC 结构体系有两大主流:Silicon Graphics 公司(硅谷图形公司)的 MIPS 技术和ARM 公司的 Advanced RISC Machines 技术,此外 Hitachi(日立公司)也有自己的一套 RISC 技术 SuperH。 RISC 和 CISC 是目前设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同。因此,在很多方面差异很大,主要有: (1) 指令系统:R

45、ISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在 RISC 机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而 CISC 计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。(2) 存储器操作:RISC 对存储器操作有限制,使控制简单化;而 CISC 机器的存储器操作指令多,操作直接。 (3) 程序:RISC 汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而 CISC 汇编语言程序编程相对简单,科学计算及复杂操作的程序设计相对容易

46、,效率较高。 (4) 中断:RISC 机器在一条指令执行的适当地方可以响应中断;而 CISC 机器是在一条指令执行结束后响应中断。 (5) CPU:RISC CPU 包含有较少的单元电路,因而面积小、功耗低;而 CISC CPU 包含有丰富的电路单元,因而功能强、面积大、功耗大。 (6) 设计周期:RISC 微处理器结构简单、布局紧凑、设计周期短、且易于采用最新技术,CISC 微处理器结构复杂,设计周期长。 (7) 用户使用:RISC 微处理器结构简单、指令规整、性能容易把握、易学易用,CISC微处理器结构复杂、功能强大、实现特殊功能容易。 (8) 应用范围:由于 RISC 指令系统的确定与特

47、定的应用领域有关,故 RISC 机器更适合于专用机,而 CISC 机器则更适合于通用机。2.2.3 嵌入式微控制器嵌入式微控制器又称单片机,顾名思义,就是将整个计算机系统集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成 ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM 等各种必要功能模块。为适应不同的应用需求,一般一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都是一样的,不同的是存储器和外设的配置及封装。这样可以使单片机最大限度地和应用需求相匹配,从

48、而减少功耗和成本。 与嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流,微控制器的片上资源一般比较丰富,适合于控制,因此称微控制器。 嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括 8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300 等。另外还有许多半通用系列,如支持 USB 接口的 MCU 8XC930/931、C540、C541等,目前MCU占嵌入式系统约 70的市场份额。 特别值得注意的是,近年来提供X86微处

49、理器的著名厂商AMD公司将Am186CC/CH/CU 等嵌入式处理器称之为Microcontroller,MOTOROLA 公司把以Power PC为基础的 PPC505 和 PPC555 列入了单片机行列,TI 公司亦将其 TMS320C2XXX 系列 DSP做为 MCU 进行推广。2.2.4 嵌入式 DSP处理器DSP 处理器对系统结构和指令进行了特殊设计,使其适合于执行 DSP 算法,编译效率较高,指令执行速度也较高。在数字滤波、FFT、谱分析等方面,DSP 算法正在大量进入嵌入式领域。DSP应用正从在通用单片机中以普通指令实现 DSP功能,过渡到采用嵌入式DSP处理器。嵌入式 DSP

50、处理器有两个发展来源,一是 DSP 处理器经过单片化、EMC 改造、增加片上外设成为嵌入式 DSP 处理器,TI 的 TMS320C2000/C5000 等属于此范畴;二是在通用单片机或片上系统(SOC)中增加 DSP 协处理器,例如 Intel的MCS-296。 推动嵌入式 DSP 处理器发展的一个重要因素是嵌入式系统的智能化,例如各种带有智能逻辑的消费类产品、生物信息识别终端、带有加解密算法的键盘、ADSL 接入、实时语音压解系统、虚拟现实显示等。这类智能化算法一般都具有运算量较大,特别是向量运算、指针线性寻址等较多的特点,而这些正是 DSP 处理器的长处所在。 嵌入式DSP处理器比较有代

51、表性的产品是 Texas Instruments的TMS320 系列和Motorola 的 DSP56000系列。TMS320 系列处理器包括用于控制的 C2000系列,移动通信的C5000系列,以及性能更高的C6000和C8000 系列。DSP56000 目前已经发展成为DSP56000、DSP56100、DSP56200和 DSP56300 等几个不同系列的处理器。DSP 的设计者们把重点放在了处理连续的数据流上。在嵌入式应用中,如果强调对连续的数据流的处理及高精度复杂运算,则应该选用 DSP 器件。2.2.5 嵌入式片上系统随着 VLSI 设计的普及化及半导体工艺的迅速发展,可以在一块硅

52、片上实现一个更为复杂的系统,这就是 System On Chip(SOC)。各种通用处理器内核将作为 SOC 设计公司的标准库,和许多其它嵌入式系统外设一样,成为 VLSI 设计中一种标准的器件,用标准的VHDL 等语言描述,存储在器件库中。用户只需定义出整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。 SOC 可以分为通用和专用两类。通用系列包括 Motorola 的 M-Core,某些 ARM 系列器件,Echelon 和 Mot

53、orola 联合研制的 Neuron 芯片等。专用 SOC 一般专用于某个或某类系统中,不为一般用户所知。一个有代表性的产品是 Philips 的 Smart XA,它将 XA 单片机内核和支持超过 2048 位复杂 RSA 算法的 CCU 单元制作在一块硅片上,形成一个可加载 JAVA或 C 语言的专用的 SOC,可用于公众互联网如 Internet 安全方面。2.2.6 FPGA嵌入式处理器1. PowerPC405PowerPC405是一个32位RISC硬核,它支持CoreConnect总线的标准外设集合。使用CoreConnect总线,可以方便地控制多个外设。PowerPC405处理器

54、模块包括IBM PowerPC405 RISC硬核,OCM控制器,时钟/控制逻辑和CPU-FPGA接口,CoreConnect总线等,PPC405结构如图2-3所示。图2-3 PPC405内核体系结构框图(1)内部结构IBM PowerPC 405 内核是一个32位的RISC 的CPU,集成了标量的5级管线,PowerPC405拥有各自独立的指令缓存和数据缓存,一个JTAG端口,跟踪式FIFO,多个计时器和一个内存管理单元(MMU)。(2)中央处理单元CPUPowerPC 405处理器的中央处理单元采用五级流水线操作,这五级流水线是取指、译码、执行、回写和装入写回。它的执行单元(Execute

55、 Unit)执行处理中的指令,包括进行整型运算约整型单元(IU)和进行浮点运算的浮点单元(FPU),浮整型单元包含算术逻辑单元(ALU)和通用寄存器(GRP)。通用寄存器(GPR)为操作数提供芯片上的资源,读出和写入指令通过存储器传输数据,其他指令存取这些寄存器作为源数据并记录执行结果。(3)OCM控制器增强的指令和数据片上存储器(OCM)控制器,直接与嵌入式块RAM接口。主要用于控制器PowerPC405内核与BlockRAM的高速连接,它支持64bit的指令BRAM连接和32bit的数据BRAM连接。在FPGA中是否采用ISBRAM和DSRAM可由用户设定。(4)时钟/控制逻辑时钟/控制逻辑主要用于PowerPC405内核的时钟信号,电源信号和初始信号。(5)高速缓冲单元Cache Units高速缓冲器可以配置为写回写入的、可高速缓存不可高速缓的、在每页或(存储)模块基础上保持数据连贯性不保持的。(6)高速缓存控制器 带有奇偶校验的独

温馨提示

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

评论

0/150

提交评论