ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FPGA学习笔记04-VHDL语法基础-PROCEDURE&FUNCTION

2021-05-18 14:34:30  阅读:215  来源: 互联网

标签:FUNCTION std use FPGA VHDL 语句 logic integer ieee


1.  PROCEDURE(过程语句)和FUNCTION(函数语句)的区别

  PROCEDURE FUNCTION
返回值 多个返回值、不提供返回值 单个返回值
参数 输入、输出、双向参数 输入参数(信号,常量)
结构 过程首、过程体 函数首、函数体
位置 程序包、结构体、进程 程序包、结构体、进程
相似 顺序语句 顺序语句

 

2.  PROCEDURE(过程语句)

 1 library ieee;
 2 use ieee.std_logic_1164.all;
 3 use ieee.std_logic_arith.all;
 4 use ieee.std_logic_unsigned.all;
 5 
 6 PACKAGE TEST1 IS
 7 PROCEDURE OPERATE1 (a : in integer;b : out integer; c : INOUT integer);
 8 END PACKAGE TEST1;
 9 
10 PACKAGE BODY TEST1 IS
11     PROCEDURE OPERATE1 (a : in integer;b : out integer;c : INOUT integer)IS
12     BEGIN
13     b := 0;
14     c := 0;
15         if a>10 then
16             b := a+a+a;
17             c := 0;
18         else
19             c := a+a;
20             b := 0;
21         end if;
22     end OPERATE1;
23 END PACKAGE BODY TEST1;
 1 library ieee;
 2 use ieee.std_logic_1164.all;
 3 use work.TEST1.ALL;
 4 use ieee.std_logic_arith.all;
 5 use ieee.std_logic_unsigned.all;
 6 
 7 
 8 entity testa is
 9     port(
10         sysclk : in std_logic;
11         RST_N  : in std_logic;
12         r1     : out integer;
13         r2     : out integer
14             
15     );
16 end entity;
17 
18 architecture behav of testa is
19 20 21 
22 signal a1 : integer;
23 begin
24     
25 process(sysclk,RST_N)
26 begin
27     if RST_N = '0' then
28         a1 <= 0;
29     elsif rising_edge(sysclk) then
30         if a1 = 20 then
31             a1 <= 0;
32         else
33             a1 <= a1 + 1;
34         end if;
35     end if;
36 end process;
37 
38 process(a1)
39 
40 variable r3 : integer:=0;
41 variable r4 : integer:=0;
42 begin
43     OPERATE1(a1,r3,r4);
44     r1 <= r3;
45     r2 <= r4;
46 end process;
47 
48 end behav;

 

3.  FUNCTION(函数语句)

 1 library ieee;
 2 use ieee.std_logic_1164.all;
 3 --use work.TEST1.ALL;
 4 use ieee.std_logic_arith.all;
 5 use ieee.std_logic_unsigned.all;
 6 
 7 
 8 entity testa is
 9     port(
10         sysclk : in std_logic;
11         RST_N  : in std_logic;
12         r1     : out integer;
13         r2     : out integer
14             
15     );
16 end entity;
17 
18 architecture behav of testa is
19 signal a1 : integer RANGE 0 TO 15;
20 begin
21     
22 process(sysclk,RST_N)
23 begin
24     if RST_N = '0' then
25         a1 <= 0;
26     elsif rising_edge(sysclk) then
27         if a1 = 13 then
28             a1 <= 0;
29         else
30             a1 <= a1 + 1;
31         end if;
32     end if;
33 end process;
34 
35 process(a1)
36 function OPERATE1(a: integer RANGE 0 TO 15) RETURN INTEGER IS
37     begin
38     if (a>10) then
39         return 5;
40     else
41         return a;
42     end IF;
43     end  OPERATE1;
44 begin
45 r1 <= OPERATE1(a1);
46 end process;
47 end behav;

 

 备注:以上是两个较为简单理解的小例子,不能完全映射语句语法的各种情况;例如函数与过程语句的不同之处,如上文所说,就是输入参数的信号类型,输出参数的个数,定义和调用位置等;这里重点备注说明的是函数定义,函数可以程序包、结构体和进程中被定义,当在结构体和进程中可以不必定义函数首,当在程序包中定义时,要定义函数首;值得注意的是,函数的输入参数数据类型必须定义范围。  

4. 参考博文

【FPGA学习笔记】VHDL语言学习笔记(四)并行语句:并行赋值、process、子程序(procedure、function)_yang_jiangning的博客-CSDN博客

标签:FUNCTION,std,use,FPGA,VHDL,语句,logic,integer,ieee
来源: https://www.cnblogs.com/echo999/p/14780711.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有