打印

硬件描述语言VHDL

[复制链接]
1855|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjsxjtu|  楼主 | 2012-10-16 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数字系统设计分为硬件设计和软件设计, 但是随着计算机技术、超大规模集成电路(CPLD、FPGA)的发展和硬件描述语言(HDL, Hardware Description Language)的出现,软、硬件设计之间的界限被打破,数字系统的硬件设计可以完全用软件来实现,只要掌握了HDL语言就可以设计出各种各样的数字逻辑电路。







1.1

老的硬件设计方法



老的硬件设计方法有如下几个特征:



(1)
采用自下而上的设计方法




使用该方法进行硬件设计是从选择具体元器件开始,并用这些元器件进行逻辑电路设计,从而完成系统的硬件设计,然后再将各功能模块连接起来,完成整个系统的硬件设计,



(2)
采用通用逻辑元器件



通常采用74系列和CMOS4000系列的产品进行设计



(3)
在系统硬件设计的后期进行调试和仿真



只有在部分或全部硬件电路连接完毕,才可以进行电路调试,一旦考虑不周到,系统设计存在较大缺陷,则要重新设计,使设计周期延长。



(4)
设计结果是一张电路图



当设计调试完毕后,形成电原理图,该图包括元器件型号和信号之间的互连关系等等。




老的硬件设计方法已经使用了几十年,是广大电子工程师熟悉和掌握的一种方法,但是现在这种方法老了,不仅方法老了,就连使用的元器件也老了。







1.2

使用HTL的硬件设计方法




所谓硬件描述语言,就是利用一种人和计算机都能识别的语言来描述硬件电路的功能,信号连接关系及定时关系,它可以比电原理图更能表示硬件电路的特性。



该方法有如下特征:



(1)
支持自顶向下的设计方法




所谓自顶向下的设计方法就是从系统的总体要求出发,自顶向下分三个层次对系统硬件进行设计。




第一个层次是行为描述,所谓行为描述,实际就是对整个系统的数学模型的描述,在行为描述阶段,并不真正考虑其实际操作和算法怎么实现,而是考虑系统的结构和工作过程是否能达到系统设计规格书的要求。




第二个层次是数据流描述,又称为寄存器描述或RTL方式描述,该描述比行为描述更注重硬件的具体实现,通过该描述可以导出系统的逻辑表达式,为逻辑综合作准备,当然进行逻辑综合和逻辑综合工具的能力有关,当然设计人员还必须了解逻辑综合工具的说明和规定,




第三个层次为逻辑综合。该层次把RTL描述的程序转换成基本逻辑元件表示的文件,该文件就象老的设计方法中的电原理图。

相关帖子

沙发
xjsxjtu|  楼主 | 2012-10-16 21:08 | 只看该作者
(2)         采用大量的ASIC芯片
(3)         早期仿真以确定系统的可行性
(4)         使设计更容易
只需写出系统的HDL源程序文件,其它由计算机去做
(5)         全部设计文件就是HDL源程序文件


1.3  VHTL硬件设计语言
    当前ASIC制造商都自己开发了HDL语言,但是都不通用,只有美国国防部开发的VHDL语言成为了IEEE. STD_1076标准,并在全世界得到了承认。
该语言集成了各种HDL语言的优点,使数字系统设计更加简单和容易。VHDL语言是一个规模庞大的语言,在使用它之前完全学会它是很难的,本书介绍的只是VHDL语言的一部分。
1.4 VHDL语言的基本结构
VHDL语言通常包含实体(Entity),构造体(Architecture),配置(Configuration),包集合(Package),和库(Library)五部分.其中实体用于描述所设计的系统的外部接口信号;构造体用于描述系统内部的结构和行为;建立输入和输出之间的关系;配置语句安装具体元件到实体—结构体对,可以被看作是设计的零件清单;包集合存放各个设计模块共享的数据类型、常数和子程序等;库是专门存放预编译程序包的地方。如下详细介绍。


1.4.1基本设计单元
VHDL的基本设计单元就是实体,无论数字电路复杂还是简单,都是由实体和构造体组成。
(1)实体说明
实体说明有如下结构:
ENTITY  实体名  IS
[端口说明]
END  实体名;
(VHDL语言中不分大小写字母)
其中:
     端口说明是对设计实体中输入和输出借口进行描述,格式如下:
     PORT(端口名(,端口名):方向 数据类型名;
              :
              :
             端口名(,端口名):方向 数据类型名);
     端口名是赋予每个系统引脚的名称,一般用几个英文字母组成。
端口方向是定义引脚是输入还是输出,见下表:
方向
说明
IN
输入到实体
OUT
从实体输出输出
INOUT
双向
BUFFER
输出(但可以反馈到实体内部)
LINKAGE
不指定方向


常用的端口数据类型有两种:BIT和BIT_VECTOR,当端口被说明为BIT时,只能取值“1”或“0”,
当端口被说明为BIT_VECTOR时,它可能是一组二进制数。
例:
   PORT(n0, n1, select: IN BIT;
         q: OUT BIT;
         bus: OUT BIT_VECTOR(7 DOWNTO 0));
本例中,n0, n1, select 是输入引脚,属于BIT型,q是输出引脚,BIT型,bus 是一组8位二进制总线,属于BIT_VECTOR,
例:
   LIBRARY IEEE;
   USE IEEE.STD_LOGIC.1164.ALL;
   ENTITY mm IS
      PORT(n0,n1,select: IN STD_LOGIC;
            Q          : OUT STD_LOGIC;
            Bus        : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
   END mm;
在此例中端口数据类型取自IEEE标准库(该库中有数据类型和函数的说明),其中STD_LOGIC 取值为“0”,“1”,“X”和“Z”。
因为使用了库所以在实体说明前要增加库说明语句。


(2) 构造体
   构造体是实体的一个重要部分,每一个实体都有一个或一个以上的构造体。
1) 一般说明
构造体格式如下:
ARCHITECTURE  构造体名 OF 实体名 IS
[定义语句] 内部信号,常数,数据类型,函数等的定义
BEGIN
[并行处理语句]
END 构造体名;
例:
   ENTITY nax IS
     PORT(a0,a1  : IN BIT;
           Sel   : IN BIT;
            Sh   : OUT BIT);
    END nax;
  ARCHITECTURE  dataflow OF nax IS
    BEGIN
       sh<=(a0 AND sel) OR (NOT sel AND a1);
    END dataflow;
构造体描述设计实体的具体行为,它包含两类语句:
l       并行语句  并行语句总是在进程语句(PROCESS)的外部,该语句的执行与书写顺序无关,总是同时被执行
l       顺序语句  顺序语句总是在进程语句(PROCESS)的内部,从仿真的角度,该语句是顺序执行的
一个构造体包含几个类型的子结构描述,这些描述是:
* BLOCK描述(块描述)
* PROCESS描述(进程描述)
* SUNPROGRAMS描述(子程序描述)

使用特权

评论回复
板凳
xjsxjtu|  楼主 | 2012-10-16 21:08 | 只看该作者
2) BLOCK语句描述
使用BLOCK语句描述的格式如下:
块标号:BLOCK
        BEGIN
         :
         :
        END BLOCK  块标号:


例:  二选一电路
   ENTITY mux IS
   PORT (d0,d1,sel: IN BIT;
          q: OUT BIT);
   END mux;
   ARCHITECTURE  connect OF mux IS
   SIGNAL tmp1,tmp2,tmp3: BIT;
   BEGIN
    cale:
    BLOCK
        BEGIN
        tmp1<=d0 AND sel;
        tmp2<=d1 AND (NOT sel);
        tmp3<=tmp1 OR tmp2;
        q<=tmp3;
      END BLOCK cale;
   END connect;
在对程序进行仿真时,BLOCK中的语句是并行执行的,与书写顺序无关,这一点和构造体中直接写的语句是一样的。

使用特权

评论回复
地板
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
3)  进程(PROCESS)描述
进程描述的格式如下:
[进程名]:PROCESS(信号1,信号2,。。。)
BEGIN
   :
   :
END PROCESS 进程名;
* 一般用于组合电路进程模式:
__进程标记:
PROCESS (__信号名, __信号名, __信号名)
VARIABLE __变量名 : STD_LOGIC;
VARIABLE __变量名 : STD_LOGIC;
BEGIN
--  指定信号
--  指定变量
--  过程调用
--  如果语句
--  CASE语句
--  循环语句
END PROCESS __进程标记;
* 用于时序电路进程模式:
__进程标记:
PROCESS (__信号名, __信号名, __信号名)
VARIABLE __变量名 : STD_LOGIC;
VARIABLE __变量名 : STD_LOGIC;
BEGIN
WAIT UNTIL __时钟信号 = '1';
--  指定信号
--  指定变量
--  过程调用
--  如果语句
--  CASE语句
--  循环语句
END PROCESS __进程标记;
例:
   ENTITY mux1 IS
   PORT (d0,d1,sel: IN BIT;
          q       : OUT BIT);
   END mux1;
   ARCHITECTURE  connect OF mux1 IS
BEGIN
cale:
  PROCESS(d0,d1,sel)
  VARIABLE tmp1,tmp2,tmp3   : BIT;--在进程中定义的变量
     BEGIN
        tmp1:=d0 AND sel; --输入端口向变量赋值
        tmp2:=d1 AND (NOT sel);
        tmp3:=tmp1 OR tmp2;
        q<=tmp3;
      END PROCESS cale;
   END connect;
在PROCESS中的语句是顺序执行的,这一点和BLOCK中的语句是不一样的。
当PROCESS所带的信号量发生变化时,PROCESS中的语句就会执行一遍。

使用特权

评论回复
5
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
4)子程序描述
子程序的概念和其它高级程序中子程序的概念相同,在VHDL中有两种类型:
l       过程(Procedure)
l       函数(Function)
1.     过程的格式:
PROCEDURE 过程名(参数1,参数2。。。。) IS
[定义变量语句]
BEGIN
  [顺序处理语句]
END 过程名;
例:
   PROCEDURE vector_to_int
      (z      : IN STD_LOGIC_VECTOR;
       x_flag : OUT BOOLEAN;
       q      : IN INTEGER) IS
   BEGIN
      q:=0;
      x_flag:=FALSE;
      FOR i IN z RANGE LOOP
         q:=q*2;
            IF(z(i)=1)  THEN
              q:=q+1;
             ELSEIF (z(i)/=10) THEN
               x_flag:=TRUE;
             END IF;
       END LOOP;
END vector_to_int;
在过程中,语句是顺序执行的。

使用特权

评论回复
6
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
2.函数
函数的格式:
FUNCTION 函数名(参数1,参数2。。。。) RETURN 数据类型名 IS
[定义变量语句]
BEGIN
  [顺序处理语句]
RETURN [返回变量名];
END 函数名;
在VHDL 语言中函数的参数都是输入信号,
例:
FUNCTION  min(x,y:INTEGER ) RETURN INTEGER IS
BEGIN
    IF X<Y THEN
       RETURN(x);
    ELSE
       RETURN(y);
     END IF;
END min;


1.4.2        2 包、库和配置


(1)库
库是经编译后的数据的集合,它存放包定义、实体定义、构造定义和配置定义。
在设计单元内的语句可以使用库中的结果,所以,库的好处就是设计者可以共享已经编译的设计结果,在VHDL中有很多库,但他们相互独立。
IEEE库:在IEEE库中有一个STD_LOGIC的包,它是IEEE正式认可的包。
STD库:STD库是VHDL的标准库,在库中有名为STANDARD的包,还有TEXTIO包。若使用STANDARD包中的数据可以不按标准格式说明,但是若使用TEXTIO包,则需要按照如下格式说明:
LIBRARY STD;
USE STD.TEXTIO.ALL
另外还有ASIC库、WORK库和用户自定义库等。
库的使用:
在使用库之前,一定要进行库说明和包说明,库和包的说明总是放在设计单元的前面:
LIBRARY  库名;
USE LIBRARY name.package.name.ITEM.name
例:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL
该例说明要使用IEEE库中的1164包中所有项目
库的作用范围:
库的作用范围从一个实体说明开始到它所属的结构体、配置为止,当有两个实体时,第二个实体前要另加库和包的说明。

使用特权

评论回复
7
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
(2)包
    通常在一个实体中对数据类型、常量等进行的说明只可以在一个实体中使用,为使这些说明可以在其它实体中使用,VHDL提供了程序包结构,包中罗列VHDL中用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义,它是一个可编译的设计单元,也是库结构中的一个层次,使用包时可以用USE语句说明,例如:
    USE IEEE.STD_LOGIC_1164.ALL
程序包分为包头和包体,包结构的格式如下:
1) 包头格式:
PACKAGE 包名 IS
   [说明语句]
END  包名
包头中列出所有项的名称。
2) 包体格式:
PACKAGE BODY 包名 IS
   [说明语句]
END 包名;
包体给出各项的具体细节。
例:包头
USE STD.STD.LOGIC.ALL
PACKAGE logic IS
    TYPE three_level_logic IS (‘0’,’1’,’z’); //数据类型项目
    CONSTANT unknown_value : three_level_logic :=’0’;//常数项目
    FUNCTION invert (input: three_level_logic)//函数项目
    RETURN three_level_logic;
END logic;
例:包体
PACKAGE BODY logic IS
  FUNCTION invert (input: three_level_logic)//函数项目描述
  BEGIN
   CASE input IS
      WHEN ‘0’ => RETURN ‘1’;
      WHEN ‘1’ => RETURN ‘0’;
      WHEN ‘Z’ => RETURN ‘Z’;
   END CASE;
  END invert;
END logic
该包使用例:
USE logic.three_level_logic, logic.invert; //使用数据类型和函数两个项目
ENTITY  inverter IS
   PORT(x: IN three_level_logic ;
         y: OUT three_level_logic);
END inverter;
ARCHITECTURE inverter_body OF inverter IS
BEGIN
  kk:  
  PROCESS
        BEGIN
           Y<=invert(x) AFTER 10ns;
           WAIT ON x;
     END PROCESS;
  END inverter_body;

使用特权

评论回复
8
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
(2) 配置
用于在多构造体中的实体中选择构造体,例如,在做RS触发器的实体中使用了两个构造体,目的是研究各个构造体描述的RS触发器的行为性能如何,但是究竟在仿真中使用哪一个构造体的问题就是配置问题。
配置语句格式:
CONFIGURATION  配置名  OF 实体名 IS
[说明语句]
END 配置名;
例:最简单的配置
CONFIGURATION  配置名  OF 实体名 IS
 FOR 被选构造体名
  END FOR;
END 配置名;  
例:
ENTITY rs IS
PORT(set,reset:IN BIT;
      q,qb: BUFFER BIT);
END rs;
ARCHITECTURE rsff1 OF rs IS
     COMPONENT nand2
        PORT(a,b: IN BIT;
             c:  OUT BIT);
     END COMPONENT;
BEGIN
   U1:nand2 PORT MAP(a=>set, b=>qb, c=>q)
   U2:nand2 PORT MAP(a=>reset, b=>q, c=>qb)
END rsff1;


ARCHITECTURE rsff2 OF rs IS
BEGIN
  q<=NOT(qb AND set);
  qb<=NOT(q AND reset);
END rsff2
两个构造体,可以用配置语句进行设置:
CONFIGRATION rscon OF rs IS //选择构造体rsff1
FOR rsff1
END FOR;
END rscon;

使用特权

评论回复
9
xjsxjtu|  楼主 | 2012-10-16 21:09 | 只看该作者
1.4.3           VHDL中使用的数据类型和运算操作
VHDL可以象其它高级语言一样定义数据类型,但还可以用户自己定义数据类型。


(1)信号、常量和变量
信号:通常认为信号是电路中的一根线
常数:可以在数字电路中代表电源、地线等等
变量:可以代表某些数值
1.常数
常数的描述格式:
CONSTANT 常数名:数据类型:=表达式
例:
  CONSTANT Vcc: REAL:=5.0;
  CONSTANT DALY: TIME:=100ns;
  CONSTANT FBUS: BIT_VECTOR:=”0101”;
2.变量
变量只能在进程、函数和过程中使用,一旦赋值立即生效。
变量的描述格式:
VARIABLE  变量名:数据类型 约束条件:=表达式
例:
   VARIABLE  x, y: INTEGER;
   VARIABLE  count: INTEGER RANGE 0 TO 255:=10;
3.信号
信号除了没有方向的概念以外几乎和端口概念一致。
信号的描述格式:
SIGNAL  信号名:数据类型 约束条件:=表达式
例:
   SIGNAL sys_clk: BIT:=’0’;
   SIGNAL ground: BIT:=’0’
在程序中,信号值输入信号时采用代入符”<=”,而不是赋值符“:=”,同时信号可以附加延时。
信号传送语句:
   s1<=s2 AFTER 10ns
信号是一个全局量,可以用来进行进程之间的通信
4.信号与变量的区别
信号赋值可以有延迟时间,变量赋值无时间延迟
信号除当前值外还有许多相关值,如历史信息等,变量只有当前值
进程对信号敏感,对变量不敏感
信号可以是多个进程的全局信号,但变量只在定义它之后的顺序域可见
   信号可以看作硬件的一根连线,但变量无此对应关系


1.4.4          VHDL中的数据类型
(1)         标准数据类型
1.整数(INTEGER)
范围:-2147483547---2147483646
2.实数(REAL)
范围:-1.0E38---1.0E38
   书写时一定要有小数。
3.位(BIT)
在数字系统中,信号经常用位的值表示,位的值用带单引号的‘1’和‘0’来表示
明确说明位数值时:BIT‘(‘1’)
4.位矢量(BIT_VECTOR)
   位矢量是用双引号括起来的一组位数据
  “010101”
5.布尔量(BOOLEAN)
只有“真”和“假”两个状态,可以进行关系运算
6.字符(CHARACTER)
   字符量通常用单引号括起来,对大小写敏感
明确说明1是字符时:
CHARACTER‘(‘1’)
7.字符串(STRING)
   字符串是双引号括起来的一串字符:
    “laksdklakld”
8.时间(TIME)
时间的单位:fs,ps,ns,ms,sec,min,hr
例: 10 ns
整数数值和单位之间应有空格
9.错误等级(SEVERITY LEVEL)
用来表示系统的状态,它共有4种:
NOTE(注意)
WARNING(警告)
ERROR(错误)
FAILURE(失败)
10.  大于等于零的整数(NATURAL)、正整数(POSITIVE)
只能是正整数
数据除定义类型外,有时还需要定义约束范围。
例:
   INTEGER RANGE 100 DOWNTO 0
   BIT_ VECTOR (3 DOWNTO 0)
   REAL RANGE 2.0 TO 30.0

使用特权

评论回复
10
xjsxjtu|  楼主 | 2012-10-16 21:10 | 只看该作者
(2)用户定义的数据类型
用户定义的数据类型的一般格式:
TYPE  数据类型名 {,数据类型名} 数据类型定义
不完整的数据类型格式:
TYPE  数据类型名 {,数据类型名};
可由用户定义的数据类型为:
* 枚举(ENUMERATED)
格式:TYPE 数据类型名 IS(元素、元素、…);
例1: TYPE week IS(Sun,Mon,Tue,wed,Thu,Fri,Sat);
例2: TYPE STD_LOGIC IS
       (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-‘);
* 整数(INTEGER)
格式:TYPE 数据类型名 IS 数据类型定义 约束范围
例:TYPE  digit IS INTEGER RANGE 0 TO 9
* 实数(REAL)
格式:TYPE 数据类型名 IS 数据类型定义 约束范围
例:TYPE  current IS REAL RANGE -1E4 TO 1E4
* 数组(ARRAY)
格式:TYPE  数据类型名 IS ARRAY  范围 OF 原数据类型名;
例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;
TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;
TYPE instruction IS (ADD,SUB,INC,SRL,SRF,LDA,LDB);
SUBTYPE digit IS INTEGER 0 TO 9;
TYPE indflag IS ARRAY (instruction ADD TO SRF) OF digit;
   数组常在总线、ROM和RAM中使用。
* 时间(TIME)
格式: TYPE 数据模型名不副实 IS 范围
       UNITS 基本单位
       单位;
       END UNITS;
TYPE time RANGE –1E18 TO 1E18
UNITS
  fs;
ps=1000 fs;
ns=1000 ps;
us=1000 ns;
ms=1000 us;
sec=1000 ms;
min=60 sec;
hr=60 min;
END UNITS;
* 记录(RECODE)
将不同的数据类型放在一块,就是记录类型数据
格式:TYPE 数组类型名 IS RECORD
      元素名:数据类型名;
      元素名:数据类型名;
      :
      :
END RECORD;
例:TYPE bank IS RECORD
addr0: STD_LOGIC_VECTOR(7 DOWNTO 0);
addr1: STD_LOGIC_VECTOR(7 DOWNTO 0);
r0: INTEGER;
END RECORD;
存取(ACCESS)
文件(FILE)

使用特权

评论回复
11
xjsxjtu|  楼主 | 2012-10-16 21:10 | 只看该作者
(3)数据类型的转换
数据类型转换函数有VHDL语言的包提供,例如:STD_LOGIC_1164,STD_LOGIC_ARITH等等
转换函数见表:
函数
说明
STD_LOGIC_1164包
TO_STDLOGICVECTOR(A)
TO_BITVECTOR(A)
TO_LOGIC(A)
TO_BIT(A)


由BIT_VECTOR转换成STD_LOGIC_VECTOR
由STD_LOGIC_VECTOR转换成BIT_VECTOR
由BIT转换成STD_LOGIC
由STD_LOGIC转换成BIT
STD_LOGIC_ARITH包
CONV_STD_LOGIC_VECTOR(A,位长)
CONV_INTEGER(A)


由INTEGER,UNSIGNED和SIGNED转换成
STD_LOGIC_VECTOR
由UNSIGNED和SIGNED转换成INTEGER
STD_LOGIC_UNSIGNED包
CONV_INTEGER


STD_LOGIC_VECTOR转换成INTEGER


例:由STD_BIT_VECTOR转换成INTEGER
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
USE IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITY add5 IS
   PORT(num: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
            :
            :
    );
  END add5;
ARCHITECTURE rtl OF add5 IS
SIGNAL in_num: INTEGER RANGE 0 TO 5;
     :
     :
BEGIN
      In_num<=CONV_INTEGER(num);
END rtl;


(5)有关BIT_VECTOR和STD_BIT_VECTOR 的语句例:
SIGNAL a: BIT_VECTOR(11 DOWNTO 8);
SIGNAL b: STD_LOGIC_VECTOR(11 DOWNTO 0);
a<=X”A8”; 十六进制可以赋予位矢量
b<=X”A8”;  十六进制不可以赋予逻辑矢量,所以此句错,逻辑量中只能赋予二进制
b<=TO_STDLOGICVECTOR(X”AF7”);十六进制变换
b<=TO_STDLOGICVECTOR(O”5177”); 八进制变换
b<=TO_STDLOGICVECTOR(B”1010_1111_0111”); 三位二进制变换
  
(6)         IEEE标准“STD_LOGIC”和”STD_LOGIC_VECTOR”
1993年制定的标准IEEE STD1164 对STD_LOGIC的值做如下规定:
‘U’初始值
‘X’不定
‘0’0
‘1’1
‘Z’高阻
‘W’弱信号不定
‘L’ 弱信号0
‘H’ 弱信号1
‘-’不可能情况


1.4.5 VHDL语言的运算操作符




优先级别
类型
操作符
说明














































逻辑运算符
AND
逻辑与
OR
逻辑或
NAND
逻辑与非
NOR
逻辑或非
XOR
逻辑异或
关系运算符
=
等号
/=
不等号
<


小于
>


大于
<=
小于等于
>=
大于等于
加、减、并置运算符
+

-

&
并置
正负运算符
+

-

乘除法运算符
*

/

MOD
取模
REM
取余


**
指数
ABS
取绝对值
NOT
取反


(1)逻辑运算符

使用特权

评论回复
12
GoldSunMonkey| | 2012-10-16 21:37 | 只看该作者
谢谢分享

使用特权

评论回复
13
flttxlj| | 2012-10-16 22:53 | 只看该作者
学习了

使用特权

评论回复
14
wvirtue| | 2012-10-17 21:01 | 只看该作者
学习了

使用特权

评论回复
15
GoldSunMonkey| | 2012-10-17 21:08 | 只看该作者
**太长了,很不容易一下子看完啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

328

主题

1073

帖子

2

粉丝