VHDL中的子结构 为了使设计简化,避免重复的工作,VHDL 中通常使用子结构来规范一些常用的运算或 简单的功能模块; function函数:用于表达常用的运算; procedure过程:用于表达简单的元件; 子结构中的执行语句都应为顺序语句
VHDL中的子结构 为了使设计简化,避免重复的工作,VHDL 中通常使用子结构来规范一些常用的运算或 简单的功能模块; function函数:用于表达常用的运算; procedure过程:用于表达简单的元件; 子结构中的执行语句都应为顺序语句
VHDL中的函数: function 在赋值类语句中,经常引用函数来表 达常用的运算组合或类型转换,以达 到代码重用和共享的目的; 函数主要由参量表、说明部分和顺序 执行部分构成
VHDL中的函数:function 在赋值类语句中,经常引用函数来表 达常用的运算组合或类型转换,以达 到代码重用和共享的目的; 函数主要由参量表、说明部分和顺序 执行部分构成
函数的编写格式 function函数名(信号列表) return return-type is declarations and definitions; --ii 明部分 begin sequentia|- statement-功能部分 ●●●●●● sequential-statement end function-name
函数的编写格式 function 函数名 (信号列表) return return-type is declarations and definitions;--说 明部分 begin sequential-statement;--功能部分 …… sequential-statement; end function-name;
函数的编写实例 采用函数表达,设计 inhibit门 P277(表4-36) architecture dat of inhibit is function butnot(a, b: bit) return bit is begin if b=0 then return a, else return“0’; end if; end butnot; egin z<=butnot(, y) end dat:
函数的编写实例 采用函数表达,设计inhibit门 P.277(表4-36) architecture dat of inhibit is function butnot (a,b:bit) return bit is begin if b='0' then return a; else return ‘0’; end if; end butnot; begin z<=butnot (x,y); end dat;
函数的编写特点 1函数可以看作是一种多输入/单输出的电路 模块; 2函数信号表中带有若干形式参量,在调用 时由实际信号取代,实现主程序向函数的输 入;在函数内部,信号被作为常量对待
函数的编写特点 1 函数可以看作是一种多输入/单输出的电路 模块; 2 函数信号表中带有若干形式参量,在调用 时由实际信号取代,实现主程序向函数的输 入;在函数内部,信号被作为常量对待;
函数的编写特点 3函数内部可以定义局部使用的类型、常量 变量、函数、过程;但不能定义信号 函数的输入只能是常数或信号,在函数中被 作为in模式,不能改变; 函数中不能有out模式的数据对象,运算结 果通过 return语句赋值给函数名输出
函数的编写特点 3 函数内部可以定义局部使用的类型、常量、 变量、函数、过程;但不能定义信号; 函数的输入只能是常数或信号,在函数中被 作为in模式,不能改变; 函数中不能有out模式的数据对象,运算结 果通过return语句赋值给函数名输出
函数的编写特点 4函数应用时,为了进行运算,可在函数体 中设置变量,在函数执行过程中为该变量赋 值;用 return语句可以将该变量值返回(赋 值给函数名);该变量应与规定的返回类型 一致;函数定义中可以设置多个返回语句 但在一次调用中,只有一个返回语句带回函 数值
函数的编写特点 4 函数应用时,为了进行运算,可在函数体 中设置变量,在函数执行过程中为该变量赋 值;用return语句可以将该变量值返回(赋 值给函数名);该变量应与规定的返回类型 一致;函数定义中可以设置多个返回语句, 但在一次调用中,只有一个返回语句带回函 数值;
数据类型转换函数的实例 从 std_logic_vector到 Integer:p.279(表4-38) function cony integer(x: std logic vector) return integer is variable result: integer; begin result:=U for I in x'range loop result = result*2 case x(iis when 0L=> null; when ' 1H=> result =result+1 when others = null: end case; end loop; return result: end conv integer;
数据类型转换函数的实例 从std_logic_vector到integer:p.279(表4-38) function conv_integer (x: std_logic_vector) return integer is variable result: integer; begin result := 0; for I in x'range loop result :=result*2; case x(i) is when '0'|'L' => null; when '1'|'H' => result := result+1; when others => null; end case; end loop; return result; end conv_integer;
数据类型转换函数的实例 程序中的一些语法解释: xrange属性描述:返回由x的位数所指定的数据范圃 ab:将两个(或多个)信号(变量)并列的表达形式; =>:case语句的表达形式,当出现左边值时,执行右 边的语句;注意与“大于等于区分 nul:关键词语句,表示不执行任何操作; 用单引号所括的字母H、"L等必须大写;
数据类型转换函数的实例 程序中的一些语法解释: x'range 属性描述:返回由x的位数所指定的数据范围; a|b : 将两个(或多个)信号(变量)并列的表达形式; => : case语句的表达形式,当出现左边值时,执行右 边的语句;注意与“大于等于”区分; null:关键词语句,表示不执行任何操作; 用单引号所括的字母'H'、'L'等必须大写;
数据运算函数的实例 整数与逻辑位的加法; function+(a:integer, b: bit)return integer is begin if (b=1)then return a+1; ese return a end if: end
数据运算函数的实例 整数与逻辑位的加法; function "+" (a:integer,b:bit) return integer is begin if (b = '1') then return a+1; else return a; end if; end "+";