毕业设计(论文)基于FPGA的任意小数分频器.doc

上传人:文库蛋蛋多 文档编号:2540234 上传时间:2023-02-20 格式:DOC 页数:32 大小:772KB
返回 下载 相关 举报
毕业设计(论文)基于FPGA的任意小数分频器.doc_第1页
第1页 / 共32页
毕业设计(论文)基于FPGA的任意小数分频器.doc_第2页
第2页 / 共32页
毕业设计(论文)基于FPGA的任意小数分频器.doc_第3页
第3页 / 共32页
毕业设计(论文)基于FPGA的任意小数分频器.doc_第4页
第4页 / 共32页
毕业设计(论文)基于FPGA的任意小数分频器.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《毕业设计(论文)基于FPGA的任意小数分频器.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于FPGA的任意小数分频器.doc(32页珍藏版)》请在三一办公上搜索。

1、基于FPGA的任意小数分频器成都电子机械高等专科学校摘要:论文分析了双模前置小数分频器的分频原理和电路实现。结合脉冲删除技术,提出了一种适于硬件电路实现的任意小数分频的设计方案,用Verilog HDL语言编程,在Quartus II下对此方案进行了仿真。Abstract:The paper analyzes the principle and circuit of the dual-mode pre-decimal divider. The combination of pulse removal technique, suitable for the realization of the

2、hardware circuit, any fractional frequency design, Verilog HDL language programming, this option in the Quartus II simulation.目录一、 FPGA的简介11、发展历史 12、FPGA的特点23、FPGA的优点34、FPGA与CPLD的区别4二、 Verilog HDL 的基础语言知识51、 HDL指南52、 语言 63、 数据类型114、 运算符14三、 Quartus II 使用简介161、 新建工程162、 程序建立183、 仿真19四、 分频器211、 分频器概述2

3、12、 分频器分类223、 基于FPGA的任意小数分频的实现 224、 RTL Viewer28五、结束语28参考文献29一、FPGA简介当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路,发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用

4、之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。1 发展历史早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(E2PROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。其后出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与或”表达式来描述,所以PLD能以乘积和的形式完成大量的组合逻辑功能。这一阶段的产品主要有PAL(可编程

5、阵列逻辑)和GAL(通用阵列逻辑)。 PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和E2PROM技术。还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。PLA器件既有现场可编程的,也有掩膜可编程的。在PAL的基础上又发展了一种通用阵列逻辑(GAL,Generic ArrayLogic),如GAL16V8、GAL22V10等。它采用了EPROM工艺,实现了电可擦除、电可改写,其输出结构

6、是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。为了弥补这一缺陷,20世纪80年代中期,Altera和Xilinx分别推出了类似于PAL结构的扩展型CPLD(Complex Programmable Logic Dvice)和与标准门阵列类似的FPGA(FieldProgrammable Gate Array),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。与

7、门阵列等其他ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品不需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产(一般在10 000件以下)之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。FPGA是英文Field Programmable Gate Arry的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足

8、,又克服了原有可编程器件门电路数有限的缺点。2 FPGA的基本特点FPGA采用了逻辑单元阵列(LOA,Logic Cell Arry)这样一个新概念,内部包括可配置逻辑模块(CLB,Configurable Logic Block)、输入输出模块(IOB,Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:(1)采用FPGA设计ASIC电路,用户不需要投片生产就能得到合用的芯片;(2)FPGA可做其他全定制或半定制ASIC电路的试样片:(3)FPGA内部有丰富的触发器和IO引脚;(4)FPGA是ASIC电路中设计周期最短、开发费用最低

9、、风险最小的器件之一;(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提高系统集成度和可靠性的最佳选择之一。目前FPGA的品种很多,有XILINX的xc系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。FPGA是由存放在片内RAM中的程序来设置其工作状态的。因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式采用不同的编程方式。加电时,FPGA芯片将EPROM中的数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失。因此,FPGA能够反复使用。FPGA的编

10、程不需专用的FPGA编程器,只需用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA、不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA有下面4种配置模式:(1)并行主模式为一片FPGA加一片EPROM的方式;(2)主从模式可以支持一片PROM编程多片FPGA:(3)串行模式可以采用串行PROM编程FPGA;(4)外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。3 FPGA的优点FPGA芯片都是特殊的ASIC芯片,除了具有ASIC的特点之外,还具有以下3个优点。随着超大规模集成电路(VLSI,

11、Very Large Scale IC)工艺的不断提高,单一芯片内部可以容纳上百万个晶体管,FPGACPLD芯片的规模也越来越大,其单片逻辑门数已达到上百万门,它所能实现的功能也越来越强,同时也可以实现系统集成。FPGACPLD芯片在出厂之前都做过百分之百的测试,不需要设计人员承担投片风险和费用,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能设计。所以,FPGACPLD的资金投入小,节省了许多潜在的花费。用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同的软件实现不同的功能。所以,用FPGAiCPLD试制样片,能以最快的速度占领市场。FPGACPLD软件

12、包中有各种输入工具和仿真工具及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,直至最后芯片的制作。当电路有少量改动时,更能显示出FPGACPLD的优势。电路设计人员使用FPGACPLD进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识,FPGACPLD软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。4、 FPGA与CPLD的区别尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。

13、换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。 CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。 在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。 FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。 CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编

14、程信息需存放在外部存储器上,使用方法复杂。 CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。 在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编 程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其 优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。 CPLD保密性

15、好,FPGA保密性差。 一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。 随著复杂可编程逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市常许多设计人员已经感受到 CPLD容易使用。时序可预测和速度高等优点,然而,在过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度 高达数十万门的CPLD所带来的好处。二、Verilog HDL的基础语言知识1、 HDL指南1.1 模块模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关

16、级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。在模块中,可用下述方式描述一个设计:1) 数据流方式;2) 行为方式;3) 结构方式;4) 上述描述方式的混合。1.2 时延Verilog HDL模型中的所有时延都根据时间单位定义。 下面是带时延的连续赋值语句实例。assign #2 Sum = A B;#2指2个时间单位。1.3 数据流描述方式用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。 连续赋值语句的语法为:assign delay

17、 LHS_net = RHS_ expression;右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值, 缺省时延为0。请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。1.4 行为描述方式设计的行为功能使用下述过程语句结构描述:1) initial语句:此语句只执行一次。2) always语句:此语句总是循环执行, 或者说

18、此语句重复执行。只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。时延可以细分为两种类型:1) 语句间时延: 这是时延语句执行的时延。2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。1.5 结构化描述形式在Verilog HDL中可使用如下方式描述结构:1) 内置门原语(在门级);2) 开关级原语(在晶体管级);3) 用户定义的原语(在门级);4) 模块实例 (创建层次结

19、构)。1.6 混合设计描述方式在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。2、语言2.1 标识符 VerilogHDL中的标识符(identifier)可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另

20、外,标识符是区分大小写的。转义标识符(escaped identifier )可以在一条标识符中包含任何可打印字符。转义标识符以(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。Verilog HDL定义了一系列保留字,叫做关键词,它仅用于某些上下文中另外,转义标识符与关键词并不完全相同。标识符initial 与标识符initial(这是个关键词)不同。注意这一约定与那些转义标识符不同。 2.2 注释 在Verilog HDL中有两种形式的注释。 /*第一种形式:可以扩展至 多行 */ /第二种形式:在本行结束。 2.3 格式 Verilog HDL区分大小写。也就是

21、说大小写不同的标识符是不同的。此外,Verilog HDL是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义 2.4 系统任务和函数 以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制可在设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在0时刻执行,即不允许延迟,而任务可以带有延迟。 $display (Hi, you have reached LT today); /* $display 系统任务在新的一行中显示。*/ $time /该系统任务返回当前的模拟时间。 2.

22、5 编译指令 以(反引号)开始的某些标识符是编译器指令。在Verilog语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如下: * define, undef * ifdef, else, endif * default_nettype * include * resetall * timescale * unconnected_drive, nounconnected_drive* celldefine, endcelldefine2.6 值集合 Verilog HDL有下列四种基本的值: 1) 0:逻辑0或“假

23、” 2) 1:逻辑1或“真” 3) x:未知 4) z:高阻 注意这四种值的解释都内置于语言中。如一个为z的值总是意味着高阻抗,一个为0的值通常是指逻辑0。 在门的输入或一个表达式中的为“z”的值通常解释成“x”。此外,x值和z值都是不分大小写的,也就是说,值0x1z与值0X1Z相同。Verilog HDL中的常量是由以上这四类基本值组成的。 Verilog HDL中有三类常量: 1) 整型 2) 实数型3) 字符串型 下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有意义。它们能用来提高易读性;唯一的限制是下划线符号不能用作为首字符。 2.6.1 整型数 整型数可以按如下两种方式书

24、写: 1) 简单的十进制数格式 2) 基数格式 1). 简单的十进制格式 这种形式的整数定义为带有一个可选的 “+”(一元)或 “”(一元)操作符的数字序列。下面是这种简易十进制形式整数的例子。 32 十进制数32 15 十进制数15 这种形式的整数值代表一个有符号的数。负数可使用两种补码形式表示。因此32在5位的二进制形式中为10000,在6位二进制形式中为110001;15在5位二进制形式中为10001,在6位二进制形式中为110001。 2). 基数表示法 这种形式的整数格式为: size base value size 定义以位计的常量的位长;base为o或O(表示八进制),b或B(表

25、示二进制),d或D(表示十进制),h或H(表示十六进制)之一;value是基于base的值的数字序列。值x和z以及十六进制中的a到f不区分大小写。 2.6.2 实数 实数可以用下列两种形式定义: 1) 十进制计数法;例如 2.0 5.678 11572.12 0.1 2. /非法:小数点两侧必须有1位数字 2) 科学计数法; 这种形式的实数举例如下: 23_5.1e2 其值为23510.0; 忽略下划线 3.6E2 360.0 (e与E相同) 5E4 0.0005 Verilog语言定义了实数如何隐式地转换为整数。实数通过四舍五入被转换为最相近的整数。 2.6.3 字符串 字符串是双引号内的字

26、符序列。字符串不能分成多行书写。例如: INTERNAL ERROR REACHEDHERE 反斜线 ( ) 用于对确定的特殊字符转义。 n 换行符 t 制表符 字符本身 字符 206 八进制数206对应的字符 2.7 数据类型 Verilog HDL 有两大类数据类型。 1) 线网类型。net type 表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,网线的缺省值为z。 2) 寄存器类型。register type表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一

27、个赋值被保存下来。寄存器类型的变量具有x的缺省值。 2.7.1 线网类型 线网数据类型包含下述不同种类的线网子类型。 * wire * tri * wor * trior * wand * triand * trireg * tri1 * tri0 * supply0 2.7.2 向量和标量线网 在定义向量线网时可选用关键词scalared 或vectored。如果一个线网定义时使用了关键词vectored, 那么就不允许位选择和部分选择该线网。换句话说,必须对线网整体赋值(位选择和部分选择在下一章中讲解)。例如: wire vectored 3:1 Grb; /不允许位选择Grb2和部分选择

28、Grb 3:2 wor scalared 4:0 Best; /与wor 4:0 Best相同,允许位选择Best 2和部分选择Best 3:1。 如果没有定义关键词,缺省值为标量。 2.7.3 寄存器类型 有5种不同的寄存器类型。* reg * integer * time * real * realtime 1. reg寄存器类型 寄存器数据类型reg是最常见的数据类型。reg类型使用保留字reg加以说明,形式如下: reg msb: lsb reg1, reg2, . . . regN; msb和lsb 定义了范围,并且均为常数值表达式。范围定义是可选的;如果没有定义范围,缺省值为1位寄

29、存器。例如: reg 3:0 Sat; /Sat为4 位寄存器。 reg Cnt; /1位寄存器。 reg 1:32 Kisp, Pisp, Lisp; 寄存器可以取任意长度。寄存器中的值通常被解释为无符号数, 例如: reg 1:4 Comb; . . . Comb = 2; /Comb 的值为14(1110),1110是2的补码。 Comb = 5; /Comb的值为15(0101)。 2. 存储器 存储器是一个寄存器数组。存储器使用如下方式说明: reg msb: 1sb memory1 upper1: lower1, memory2 upper2: lower2,. . . ; 3.

30、Integer寄存器类型 整数寄存器包含整数值。整数寄存器可以作为普通寄存器使用,典型应用为高层次行为建模。使用整数型说明形式如下: integer integer1, integer2,. . . intergerN msb:1sb ; msb和lsb是定义整数数组界限的常量表达式,数组界限的定义是可选的。注意容许无位界限的情况。一个整数最少容纳32位。但是具体实现可提供更多的位。 4. time类型 time类型的寄存器用于存储和处理时间。time类型的寄存器使用下述方式加以说明。 time time_id1, time_id2, . . . ,time_idN msb:1sb; msb和

31、lsb是表明范围界限的常量表达式。如果未定义界限,每个标识符存储一个至少64位的时间值。时间类型的寄存器只存储无符号数。例如: time Events 0:31; /时间值数组。 time CurrTime; /CurrTime 存储一个时间值。 2.8 参数 参数是一个常量。参数经常用于定义时延和变量的宽度。使用参数说明的参数只被赋值一次。参数说明形式如下: parameter param1 = const_expr1, param2 = const_expr2, . . . , paramN = const_exprN;3、数据类型 3.1 操作数 操作数可以是以下类型中的一种: 1) 常

32、数 2) 参数 3) 线网 4) 寄存器 5) 位选择 6) 部分选择 7) 存储器单元 8) 函数调用 3.1.1 常数 前面的章节已讲述了如何书写常量。下面是一些实例。 256,7 /非定长的十进制数。 4b10_11, 8h0A /定长的整型常量。1b1, hFBA /非定长的整数常量。90.00006 /实数型常量。 BOND /串常量;每个字符作为8位ASCII值存储。 表达式中的整数值可被解释为有符号数或无符号数。如果表达式中是十进制整数,例如,12被解释为有符号数。如果整数是基数型整数(定长或非定长),那么该整数作为无符号数对待。 3.1.2 参数 前一章中已对参数作了介绍。参数

33、类似于常量,并且使用参数声明进行说明。下面是参数说明实例。 parameter LOAD = 4d12, STORE = 4d10; LOAD 和STORE为参数的例子,值分别被声明为12和10。 3.1.3 线网 可在表达式中使用标量线网(1位)和向量线网(多位)。下面是线网说明实例。 wire 0:3 Prt; /Prt 为4位向量线网。 wire Bdq; /Bbq 是标量线网。 线网中的值被解释为无符号数。在连续赋值语句中, assign Prt = -3; Prt被赋于位向量1101,实际上为十进制的13。在下面的连续赋值中, assign Prt = 4HA; Prt被赋于位向量1

34、010,即为十进制的10。 3.1.4 寄存器 标量和向量寄存器可在表达式中使用。寄存器变量使用寄存器声明进行说明。例如: integer TemA, TemB; reg 1:5 State; time Que 1:5; 整型寄存器中的值被解释为有符号的二进制补码数,而reg寄存器或时间寄存器中的值被解释为无符号数。实数和实数时间类型寄存器中的值被解释为有符号浮点数。 3.1.5 位选择 位选择从向量中抽取特定的位。形式如下: net_or_reg_vector bit_select_expr 下面是表达式中应用位选择的例子。 State 1 & State 4 /寄存器位选择。 Prt 0

35、| Bbq /线网位选择。 如果选择表达式的值为x、z,或越界,则位选择的值为x。例如State x值为x。 3.1.6 部分选择 在部分选择中,向量的连续序列被选择。形式如下: net_or_reg_vector msb_const_expr:1sb_const_expr 其中范围表达式必须为常数表达式。 3.1.7 存储器单元 存储器单元从存储器中选择一个字。形式如下: memory word_address 例如: reg 1:8 Ack, Dram 0:63; . . . Ack = Dram 60; /存储器的第60个单元。 不允许对存储器变量值部分选择或位选择。 3.1.8 函数调

36、用 表达式中可使用函数调用。函数调用可以是系统函数调用(以$字符开始)或用户定义的函数调用。例如: $time + SumOfEvents (A, B) /*$time是系统函数,并且SumOfEvents是在别处定义的用户自定义函数。*/ 3.2 操作符 Verilog HDL中的操作符可以分为下述类型: 1) 算术操作符 2) 关系操作符 3) 相等操作符 4) 逻辑操作符 5) 按位操作符 6) 归约操作符 7) 移位操作符 8) 条件操作符 9) 连接和复制操作符 下表显示了所有操作符的优先级和名称。操作符从最高优先级(顶行)到最低优先级(底行)排列。同一行中的操作符优先级相同。 除条

37、件操作符从右向左关联外,其余所有操作符自左向右关联。下面的表达式: A + B - C等价于(A + B ) - C /自左向右而表达式: A ? B : C ? D : F等价于A ? B : (C ? D : F) /从右向左 圆扩号能够用于改变优先级的顺序,如以下表达式: (A ? B : C) ? D : F4、运算符 4.2.1 算术操作符 算术操作符有: * +(一元加和二元加) * (一元减和二元减) * *(乘) * /(除) * %(取模) 整数除法截断任何小数部分。 取模操作符求出与第一个操作符符号相同的余数。如果算术操作符中的任意操作数是X或Z,那么整个结果为X。例如: b10x1 + b01111 结果为不确定数bxxxxx 1. 算术操作结果的长度 算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。 2. 无符号数和有符号数 执行算术操作和赋值时,注意哪些操作数为无符号数、哪些操作数为有符号数非常重要。无符号数存储在: * 线网 * 一般寄存器 * 基数格式表示形式的整数 有符号数存储在: * 整数寄存器 * 十进制形式的整数 4.2.2 关系操作符 关系操作符有: * (大于) * =(不小于) * =(不大于) 关系操作符的结果为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号