vivado VHDL Support

介绍

本章介绍AMD Vivado™合成和

注意支持的任何例外情况。VHDL紧凑地描述了复杂的逻辑,并允许您:

•描述系统的结构:如何将系统分解为子系统,以及如何这些子系统是相互连接的。

•使用熟悉的语言形式指定系统的功能。

•在硬件中实施和编程之前,模拟系统设计。

•根据更多抽象规范。

有关更多信息,请参阅IEEE VHDL语言参考手册(LRM)。

支持和不支持的VHDL数据类型

某些VHDL数据类型是预定义包的一部分。有关他们在哪里的信息编译,以及如何加载它们,请参阅VHDL预定义包。该类型在IEEE std_logic_1164包中定义。

不支持的数据类型

VHDL支持仅用于计算的标准包中定义的真实类型,例如泛型值的计算。

重要!不能定义real类型的可合成对象。

VHDL数据类型

VHDL预定义枚举类型

Vivado综合支持以下预定义的VHDL枚举类型。

VHDL用户定义枚举类型

您可以创建自己的枚举类型。用户定义的枚举类型通常描述有限状态机(FSM)的状态。

用户定义枚举类型编码示例(VHDL)

type STATES is (START, IDLE, STATE1, STATE2, STATE3) ;

VHDL整数类型

整数类型是预定义的VHDL类型。Vivado合成在32位上实现一个整数默认情况下。为了更紧凑的实现定义可应用值的精确范围,其中类型MSB在8到15的范围内。您还可以利用预定义的自然类型和正类型,重载整数类型

VHDL多维数组类型

Vivado synthesis支持VHDL多维数组类型。

建议:尽管尺寸数量没有限制,但描述的数量不超过三维。

多维数组类型的对象可以传递给函数并在组件中使用实例化。可以描述的多维数组类型的对象是信号,

常量和变量。

完全约束阵列类型编码示例

数组类型必须在所有维度上都受到完全约束。

subtype WORD8 is STD_LOGIC_VECTOR (7 downto 0);
type TAB12 is array (11 downto 0) of WORD8;
type TAB03 is array (2 downto 0) of TAB12;
Array Declared as a Matrix Coding Example
You can declare an array as a matrix.
subtype TAB13 is array (7 downto 0,4 downto 0) of STD_LOGIC_VECTOR (8
downto 0);
Multi-Dimensional Array Signals and Variables
Coding Examples
1. Make the following declarations:
subtype WORD8 is STD_LOGIC_VECTOR (7 downto 0);
type TAB05 is array (4 downto 0) of WORD8;
type TAB03 is array (2 downto 0) of TAB05;
signal WORD_A : WORD8;
signal TAB_A, TAB_B : TAB05;
signal TAB_C, TAB_D : TAB03;
constant CNST_A : TAB03 := (
("00000000","01000001","01000010","10000011","00001100"),
("00100000","00100001","00101010","10100011","00101100"),
("01000010","01000010","01000100","01000111","01000100"));
2. You can now specify:
• A multi-dimensional array signal or variable:
TAB_A <= TAB_B; TAB_C <= TAB_D; TAB_C <= CNST_A;
• An index of one array:
TAB_A (5) <= WORD_A; TAB_C (1) <= TAB_A;
• Indexes of the maximum number of dimensions:
TAB_A (5) (0) <= '1'; TAB_C (2) (5) (0) <= '0'
• A slice of the first array
TAB_A (4 downto 1) <= TAB_B (3 downto 0);
• An index of a higher level array and a slice of a lower level array:
TAB_C (2) (5) (3 downto 0) <= TAB_B (3) (4 downto 1); TAB_D (0) (4) (2
downto 0)
\\ <= CNST_A (5 downto 3)
3. Add the following declaration:
subtype MATRIX15 is array(4 downto 0, 2 downto 0) of
STD_LOGIC_VECTOR (7 downto 0);
signal MATRIX_A : MATRIX15;
4. You can now specify:
• A multi-dimensional array signal or variable:
MATRIXA <= CNST_A
• An index of one row of the array:
MATRIXA (5) <= TAB_A;
• Indexes of the maximum number of dimensions
MATRIXA (5,0) (0) <= '1';

VHDL记录类型代码示例

•记录类型的字段也可以是记录类型。

•常量可以是记录类型。

•记录类型不能包含属性。

•Vivado合成支持记录信号的聚合分配。以下代码snippet就是一个例子:

type mytype is record field1 : std_logic; field2 : std_logic_vector (3
downto 0);
end record;

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

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

相关文章

个人博客系列-前端部署-创建框架(4)

项目环境介绍 Vue3 Vite TypeScript 服务器&#xff1a;阿里云contos node版本&#xff1a;v18.18.2 npm版本&#xff1a;v10.2.4 执行下面一行命令&#xff0c;创建vue3框架 npm create vuelatest修改端口&#xff1a;9528&#xff0c; 此步骤可以忽略&#xff08;使用默…

前端学习——JS学习

文章目录 1. 定义变量&#xff0c;关键字 var、let、const2. 定义变量&#xff0c;数据类型3. 数组变量的操作4. 对象的操作5. JSON 字符串 1. 定义变量&#xff0c;关键字 var、let、const 这里主要是对var、let做比较 /** 1. var存在变量提升、let不存在变量提升 **/ cons…

MFC 配置Halcon

1.新建一个MFC 工程&#xff0c;Halcon 为64位&#xff0c;所以先将工程改为x64 > VC 目录设置包含目录和库目录 包含目录 库目录 c/c ->常规 链接器 ->常规 > 链接器输入 在窗口中添加头文件 #include "HalconCpp.h" #include "Halcon.h"…

robots.txt 文件规则

robots.txt 是一种用于网站根目录的文本文件&#xff0c;其主要目的在于指示网络爬虫&#xff08;web crawlers&#xff09;和其他网页机器人&#xff08;bots&#xff09;哪些页面可以抓取&#xff0c;以及哪些页面不应该被抓取。可以看作是网站和搜索引擎机器人之间的一个协议…

强大的文本绘图——PlantUML

PlantUML是一款开源工具&#xff0c;它允许用户通过简单的文本描述来创建UML图&#xff08;统一建模语言图&#xff09;。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言&#xff08;DSL&#xff09;&am…

Unet 高阶分割网络实战、多类别分割、迁移学习(deeplab、resnet101等等)

1、前言 Unet 图像分割之前介绍了不少&#xff0c;具体可以参考 图像分割专栏 为了实现多类别的自适应分割&#xff0c;前段时间利用numpy的unique函数实现了一个项目。通过numpy函数将mask的灰度值提取出来&#xff0c;保存在txt文本里&#xff0c;这样txt里面就会有类似0 1…

RisingWave最佳实践-利用Dynamic filters 和 Temporal filters 实现监控告警

心得的体会 刚过了年刚开工&#xff0c;闲暇之余调研了分布式SQL流处理数据库–RisingWave&#xff0c;本人是Flink&#xff08;包括FlinkSQL和Flink DataStream API&#xff09;的资深用户&#xff0c;但接触到RisingWave令我眼前一亮&#xff0c;并且拿我们生产上的监控告警…

快速排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述&#xff1a; 快速排序法的名字由来&#xff0c;排序步骤是什么&#xff0c;最坏情况下的排序次数如何计算得来的呢&#xff1f; 问题解答&#xff1a; 快速排序法的名字来源于其排序速度快的特点。它是由英国计算机科学家 Tony Hoare 于1960年提出的&#xff0c;最…

劫持已经存在的DLL

这里找到一个成功加载的 这里先把原来程序正常的dll改名为libEGL1.dll&#xff0c;然后将我们自己的dll改名为libEGL.dll 然后再重新执行程序&#xff0c;这里同样是弹出了窗口

C++的string容器->基本概念、构造函数、赋值操作、字符串拼接、查找和替换、字符串比较、字符存取、插入和删除、子串

#include<iostream> using namespace std; #include <string> //string的构造函数 /* -string(); //创建一个空的字符串 例如: string str; -string(const char* s); //使用字符串s初始化 -string(const string& str); //使…

每日一学—由面试题“Redis 是否为单线程”引发的思考

文章目录 &#x1f4cb; 前言&#x1f330; 举个例子&#x1f3af; 什么是 Redis&#xff08;知识点补充&#xff09;&#x1f3af; Redis 中的多线程&#x1f3af; I/O 多线程&#x1f3af; Redis 中的多进程&#x1f4dd; 结论&#x1f3af;书籍推荐&#x1f525;参与方式 &a…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…