VHDL函数和过程、VHDL预定义包

VHDL函数和过程

对于在设计中多次使用的块,请使用VHDL函数和过程。这个内容类似于组合过程内容在中声明函数和过程:

•实体的声明性部分

•架构

•一个包

函数或过程由声明部分和主体组成。声明性部分规定:

•输入参数,可以不受给定界限的约束。

•输出和输入参数(仅限程序)

重要!除IEEE中定义的功能外,不支持分辨率功能std_logic_1164包。

包内声明的函数示例(VHDL)

文件名:function_package_1.vhd

从编码示例下载编码示例文件。

此编码示例声明了包中的ADD函数。ADD功能是单个位加法器,并被调用四次以创建一个4位加法器。以下示例使用了一个函数:

-- Declaration of a function in a package
--
-- function_package_1.vhd
--
package PKG is
function ADD(A, B, CIN : BIT) return BIT_VECTOR;
end PKG;
package body PKG is
function ADD(A, B, CIN : BIT) return BIT_VECTOR is
variable S, COUT : BIT;
variable RESULT : BIT_VECTOR(1 downto 0);
begin
S := A xor B xor CIN;
COUT := (A and B) or (A and CIN) or (B and CIN);
RESULT := COUT & S;
return RESULT;
end ADD;
end PKG;
use work.PKG.all;
entity function_package_1 is
port(
A, B : in BIT_VECTOR(3 downto 0);
CIN : in BIT;
S : out BIT_VECTOR(3 downto 0);
COUT : out BIT
);
end function_package_1;
architecture ARCHI of function_package_1 is
signal S0, S1, S2, S3 : BIT_VECTOR(1 downto 0);
begin
S0 <= ADD(A(0), B(0), CIN);
S1 <= ADD(A(1), B(1), S0(1));
S2 <= ADD(A(2), B(2), S1(1));
S3 <= ADD(A(3), B(3), S2(1));
S <= S3(0) & S2(0) & S1(0) & S0(0);
COUT <= S3(1);
end ARCHI;
Procedure Declared Within a Package Example
(VHDL)
Filename: procedure_package_1.vhd
The following example uses a procedure within a package:
-- Declaration of a procedure in a package
--
-- Download: procedure_package_1.vhd
--
package PKG is
procedure ADD(
A, B, CIN : in BIT;
C : out BIT_VECTOR(1 downto 0));
end PKG;
package body PKG is
procedure ADD(
A, B, CIN : in BIT;
C : out BIT_VECTOR(1 downto 0)) is
variable S, COUT : BIT;
begin
S := A xor B xor CIN;
COUT := (A and B) or (A and CIN) or (B and CIN);
C := COUT & S;
end ADD;
end PKG;
use work.PKG.all;
entity procedure_package_1 is
port(
A, B : in BIT_VECTOR(3 downto 0);
CIN : in BIT;
S : out BIT_VECTOR(3 downto 0);
COUT : out BIT
);
end procedure_package_1;
architecture ARCHI of procedure_package_1 is
begin
process(A, B, CIN)
variable S0, S1, S2, S3 : BIT_VECTOR(1 downto 0);
begin
ADD(A(0), B(0), CIN, S0);
ADD(A(1), B(1), S0(1), S1);
ADD(A(2), B(2), S1(1), S2);
ADD(A(3), B(3), S2(1), S3);
S <= S3(0) & S2(0) & S1(0) & S0(0);
COUT <= S3(1);
end process;
end ARCHI;
Recursive Functions Example (VHDL)
Vivado synthesis supports recursive functions. This coding example models an n! function.
function my_func(x : integer) return integer is begin
if R > 1 then
return (R*my_func(R-1));
else
return R;
end if;
end function my_func;

VHDL断言语句

-Assert合成选项支持断言语句。

小心!使用断言时应小心。Vivado只能支持不创建的静态断言或者是由行为创建的。例如,对常量或运算符的值执行断言/一般作品;然而,作为一种资产,if语句中信号的值是不起作用的。

VHDL预定义包

Vivado synthesis支持STD和IEEE中定义的VHDL预定义包标准库。这些库是预编译的,不需要用户编译,并且可以直接包含在HDL源代码中。

VHDL预定义标准包

默认情况下包括VHDL预定义的标准包,定义以下基本

VHDL类型:bit、bit_vector、integer、natural、real和boolean。

VHDL IEEE包

Vivado synthesis支持一些预定义的VHDL IEEE包,这些包在IEEE库和以下IEEE包:

•数字比特

○ 基于位的无符号和有符号矢量类型。

○ 重载的算术运算符、转换函数和这些的扩展函数类型。

•std_logic_1164

○ std_logic、std_ulogic、std_logic_vector和std_ulogic_vector类型。

○ 基于这些类型的转换函数。

•数字_std

○ 基于std_logic的无符号和有符号矢量类型。

○ 重载的算术运算符、转换函数和这些的扩展函数类型。相当于std_logic_arith。

•已修复_pkg

○ 用于固定变量和接点类型。

○ 使用ieee.fixed_pkg.all;

•浮动_pkg

○ 用于浮动变量和引脚类型。

○ 使用ieee.float_pkg.all;

VHDL旧版包

•std_logic_arith(Synopsys)

○ 基于std_logic的无符号和有符号矢量类型。

○ 重载的算术运算符、转换函数和这些的扩展函数类型。

•std_logic_sunsigned(Synopsys)

○ std_logic和std_logic_vvector的无符号算术运算符

•std_logic_signed(Synopsys)

○ std_logic和std_logic_vvector的有符号算术运算符

•std_logic_misc(Synopsys)

○ std_logic_1164包的补充类型、子类型、常量和函数,如and_reduce和or_reduce。

VHDL预定义的IEEE实型和IEEE数学

包装

VHDL预定义的IEEE真实类型和IEEE math_real包仅支持计算,例如泛型值的计算,并且不能用于描述可合成的功能。

VHDL实数常量

下表描述了VHDL实数常量。

VHDL实数函数

下表描述了VHDL实数函数:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/497089.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一位有着近 10 年 iOS 开发经验的全职爸爸如何高效管理时间?

名字: Mindr 开发者 / 团队: Florian Vates 平台: iOS, iPadOS, Android 正在开发中 请简要介绍下这款产品 有没有发现自己总是不断推迟待办事项的通知&#xff1f; Mindr 以一种全新的方法来解决这个问题&#xff0c;它直观的界面设计将待办事项的进度直接显示在桌面上&#x…

SD-WAN技术:优化国内外服务器访问的关键

在全球化的商业环境中&#xff0c;企业经常需要在国内访问国外的服务器。然而&#xff0c;由于地理位置和网络架构的限制&#xff0c;这种跨国访问往往会遇到速度慢、延迟高等问题。SD-WAN&#xff08;软件定义广域网&#xff09;技术的兴起&#xff0c;为企业提供了一种新的解…

docker 容器修改端口和目录映射

一、容器修改端口映射 一般在运行容器时&#xff0c;我们都会通过参数 -p&#xff08;使用大写的-P参数则会随机选择宿主机的一个端口进行映射&#xff09;来指定宿主机和容器端口的映射&#xff0c;例如 docker run -it -d --name [container-name] -p 8088:80 [image-name]…

软考51-上午题-【数据库】-索引

一、索引的定义 在数据库中&#xff0c;索引使得数据库程序无需对整个表进行扫描&#xff0c;就可以在其中找到所需数据。数据库中的索引是某个表中一列或者若干列&#xff0c;值的集合和相应的指向表中物理标识这些值的数据页逻辑指针清单。 二、索引的创建和删除 2-1、索引…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

echarts鼠标事件

鼠标事件支持方法 ECharts 支持常规的鼠标事件类型&#xff0c;包括 ‘click’、 ‘dblclick’、 ‘mousedown’、 ‘mousemove’、 ‘mouseup’、 ‘mouseover’、 ‘mouseout’、 ‘globalout’、 ‘contextmenu’ 事件 简单实例 // 基于准备好的dom&#xff0c;初始化EChar…

Springboot+vue图书管理系统(小白)

图书管理系统 简介&#xff1a;一个最简约的图书管理系统&#xff0c;适用于小白用来练手 前端&#xff1a;VueElementUIechars 后端&#xff1a;SpringbootMybatisMySQL 功能模块&#xff1a; 信息管理&#xff1a;公告信息 操作日志 用户管理&#xff1a;用户信息 图书…

【MySQL】学习和总结标量子查询

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-kLo6jykc7AcEVEQk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【C++私房菜】序列式容器的迭代器失效问题

目录 一、list的迭代器失效 二、vector的迭代器失效 1、空间缩小操作 2、空间扩大操作 三、总结 在C中&#xff0c;当对容器进行插入或删除操作时&#xff0c;可能会导致迭代器失效的问题。所谓迭代器失效指的是&#xff0c;原先指向容器中某个元素的迭代器&#xff0c;在…

【vue3学习笔记】Suspense组件;vue3中的其它改变

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P167节 《Suspense组件》笔记 想要学习suspense&#xff0c;先来了解静态组件与异步组件。 静态引入与异步引入&#xff1a; 在network中将网速调慢&#xff0c;观察在静态引入和异步引入模式下&#xff0c;两个组件的加载…

skiplist(高阶数据结构)

目录 一、概念 二、实现 三、对比 一、概念 skiplist是由William Pugh发明的&#xff0c;最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》 skiplist本质上是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;…

【JavaEE进阶】图书管理系统开发日记——捌

文章目录 &#x1f343;前言&#x1f38d;统一数据返回格式&#x1f6a9;快速入门&#x1f6a9;存在问题&#x1f388;问题原因&#x1f388;代码修改 &#x1f6a9;统一格式返回的优点 &#x1f340;统一异常处理&#x1f332;前端代码的修改&#x1f6a9;登录页面&#x1f6a…