【转载】关于conv_std_logic_vector 和 conv_integer 这两个函数的使用问题

源地址:http://blog.sina.com.cn/s/blog_622ef24f0100qlct.html

std_logic_arith
This is the library that defines some types and basic arithmetic operations for representing integers in standard ways. This is a Synopsys extention. The source code is instd_logic_arith.vhd and is freely redistributable.

The unsigned type
The signed type
The arithmetic functions: +, -, *
The comparison functions: <, <=, >, >=, =, /=
The shift functions: shl, shr
The conv_integer function
The conv_unsigned function
The conv_signed function
The conv_std_logic_vector function

-------------------------------------------------------------------------------------------------------------------------------

The conv_integer function
function conv_integer(arg: integer) return integer;
function conv_integer(arg: unsigned) return integer;
function conv_integer(arg: signed) return integer;
function conv_integer(arg: std_ulogic) return small_int;
These functions convert the arg argument to an integer. If the argument contains any undefined elements, a runtime warning is produced and 0 is returned.

The function provided by the std_logic_arith library can't convert a std_logic_vector to an integer because it is impossible to determine if it represents an unsigned or signed value.Functions that do this are included in the std_logic_unsigned and std_logic_signed libraries.

Examples
signal b : std_logic;
signal u1 : unsigned (3 downto 0);
signal s1 : signed (3 downto 0);
signal i1, i2, i3 : integer;
...
u1 <= "1001";
s1 <= "1001";
b <= 'X';
wait for 10 ns;
i1 <= conv_integer(u1); --     9
i2 <= conv_integer(s1); --     -7
i3 <= conv_integer(b);   -- warning produced in simulator

 

以上蓝字说明了一切

1.前一个包含在std_logic_arith.all程序包中

2.后一个在std_logic_unsigned 和std_logic_signed 中都有包含

计算机中的运算都是用2进制补码的,本人总结,在做算法时候,包含std_logic_signed 这个包比较好,这样conv_integer 就把需要转换的数据变成了带符号的整数,然而std_logic_unsigned就把需要转换的数据变成了无符号的整数。

3. conv_std_logic_vector 函数的转换结果是将被转换的数据先转换成2进制补码形式,然后取其低“位长”,作为输出。

如:a<=conv_std_logic_vector(-79,6)----(-79)2c=(10110001)

b<=conv_std_logic_vector(-2,6)-----(-2)2c=(11111110)

c<=conv_std_logic_vector(100,6)-----(100)2c=(01100100)

输出结果:a=110001,b=111110,c=100100

4.本人做了这样的转换conv_std_logic_vector (conv_integer (data),16),data是16范围内的有符号数,但是接口是32位的标准矢量形式(std_logic_vector(31 downto 0)刚开始包括的是std_logic_unsigned 包,发现数据变得面目全非了,想来想去,认为conv_integer (data)的原因,就该了下包,结果就正确了。

转载于:https://www.cnblogs.com/blue-box/articles/4240766.html

VHDL程序设计——移位相加型乘法器 --移位相加型乘法器的VHDL表述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY MULT4B is GENERIC (S: INTEGER := 4); --使用GENERIC语句,将常量S定义为整数4 PORT( R : OUT STD_LOGIC_VECTOR(2*S DOWNTO 1); --8位的R 阅读详情

相关推荐

2、VHDL的STD_LOGIC_ARITH包常见数据类型转换

将数据类型为integer,unsigned,signed,std_logic或std_ulogic的操作数p转换成integer类型,不包括STD_LOGIC_VECTOR。:将数据类型为integer,signed,std_logic或std_ulogic的操作数p转换成宽度为b的unsigned的数据类型。:将数据类型为integer,unsigned,std_logic或std_ulogic的操作数p转换成宽度为b的signed的数据类型。例:integer转换成std_logic_vector。

baidu_39362132的博客 2554

VHDL数据类型转换

std_logic_vector 是标准逻辑矢量,定义的是长度大于1的变量,需要确定赋值方向 (n downto 0) o (0 to n)。 std_logic 是长度为1的逻辑 与bit 相似,只是 bit 只能是'0 ’和'1‘ 而 std_logic有以下九种状态:U'——初始值,'X'——不定,'0'——0,'1'——1,'Z'——高阻,'W'——弱信号不定,'L'——弱信号0,'H'—...

yqq654101的博客 3947

VHDL细节笔记(含std_logic Libraries标准库的技术手册)

q '0'); 表示将q的所有位赋值为0,当q位数较多时比较方便。。。 信号属性函数:用来得到有关信号的行为功能信息; 信号‘event:当前的一个相当小的时间间隔内有信号事件发生,则返回’true’,否则返回‘false’; 关于conv_std_logic_vector 和 conv_integer 这两个函数的使用问题

以中有足乐者... 6297

VHDL:conv_std_logic_vector的用法

std_logic_arith程序包里定义的数据转换函数:conv_std_logic_vector(A,位长)--INTEGER,SINGER,UNSIGNED转换成std_logic_vector。        由于参考书上都没有具体说明,本以为是将原来的数据类型按位矢量输出,结果按这种用法编写的滤波器在接实际信号时,却使用输出图像全部反色,经modelsim波形仿真之后,才发现滤波器结构

blog 3万+

VHDL学习笔记——数据类型转换

对象分类 信号:通过信号赋值语句改变值; 常量:初始化后不能改变; 变量:通过变量赋值语句改变值; 文件:内部存储一组某种数据的对象; 对象类型 标量类型:单一不可再分,数值/枚举型 混合类型:数组型/记录型(数组内元素同一类型、记录内元素不同类型) 访问类型:对象的访问方式(类似指针) 文件类型:文件值为代表该文件的文件序号; 被保护类型:多进程访问同一变量时,提供原子访问与排他访问。 IEEE库数据类型转换函数 程序包 函数名 功能 std_logic_1164 to_stdlo

akadiao的博客 4019

保姆级避坑指南:用Keil和J-Flash搞定凌思微LE5010蓝牙芯片的首次程序下载

本文提供了一份详细的保姆级避坑指南,帮助开发者使用Keil和J-Flash工具完成凌思微LE5010蓝牙芯片的首次程序下载。文章重点解决了算法文件混淆、协议栈漏烧和仿真器连接异常等常见问题,并详细介绍了开发环境配置、协议栈烧录和下载接口的物理层奥秘,助力开发者高效完成蓝牙开发任务。

weixin_28739079的博客 467

VHDL中常用函数类型转换程序包

STD_LOGIC_1164程序包的转换函数有:     TO_STD_LOGIC_VECTOR(a); --由BIT_VECTOR 转换成STD_LOGIC_VECTOR     TO_BIT_VECTOR(a); --由STD_LOGIC_VECTOR 转换成BIT_VECTOR     TO_STD_LOGIC(a); --由BI...

weixin_30924087的博客 807

VideoPose3D | 环境搭建

文章目录环境要求下载PyTorch基本步骤验证安装问题修复数据集设置Human3.6MCPN detections配置wget命令安装CPN评估环境测试问题测试报错 无法识别参数3 3 3 3卡在最后评估 主要参考:GitHub / facebookresearch / VideoPose3D 环境要求 Dependencies Make sure you have the followin...

D0 8655

vhdl 类型转换

CONV_INTEGER(A) 由STD_LOGIC_VECTOR转换成INTEGER。TO_BITVECTOR(A) 由STD_LOGIC_VECTO转换为BIT_VECTOR。移位的类型必须为std_logic_vector j<= std_logic_vector(i sll 1);TO_STDLOGICVECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTOR。SRL 逻辑右移 ---- 实现数据右移,左端补0;

z529904088的博客 850

【Linux】实际项目应该如何完成?--安防监控系统项目的总结

到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。...

修成真的博客 6726

72-dify案例分享-揭秘!如何用 Dify 实现多语言 PDF 文档原格式翻译

本文围绕 Dify 1.6 + 版本,演示搭建 PDF 文档翻译 Agent:配置 MCP 服务、构建 Agent 并以 URL 传文件测试,实现高效翻译,展现 MCP 跨工具复用与简化集成的优势,助力 AI 应用开发。

个人技术 2285

VHDL语法

VHDL语法1 常用函数 1 常用函数 (1) conv_std_logic_vector -- conv_std_logic_vector 是一个函数 :将十进制数转换成二进制补码 frequncy <= conv_std_logic_vector(19600,16); --将十进制数转化为16bit的二进制补码 ...

梦 醉了谁的博客 2911

别再算错了!深入SAP FI后台,看懂外币清账时汇兑损益的自动计算逻辑

刚接手一家跨国企业的SAP财务模块优化项目时,我遇到了一个棘手案例:每月末外币清账产生的汇兑损益金额总是与财务团队的预期存在差异。最令人困惑的是,系统似乎"擅自"计算出了1989.11元的损益,而财务人员反复手工验算都无法复现这个数字。这让我意识到,要真正掌握SAP FI的外币处理能力,必须深入理解系统后台的汇兑损益计算逻辑——不是停留在操作层面,而是穿透到算法内核。这个过程的精妙之处在于,损益金额不是简单比较两个时点的市场汇率,而是反映业务执行全周期的汇率影响。:损益金额与手工计算不符。

weixin_32932149的博客 473

FPGA学习-VHDL和Verilog中数组定义、初始化、赋值方法

赋值源:赋值源是赋值的主体,它可以是一个数值,也可以是一个逻辑或运算表达式。方法:实际应用里,通常需要在上电复位过程中对变量进行初始化,如果数组个数少时,直接赋初始值即可,但是数组个数多时,可以用循环实现赋值,通常的循环语句有FOR LOOP和WHILE LOOP。VHDL和Verilog数组的定义、初始化、赋值的方法不只一种,以下是本人常用的方法,可能不是最方便的,但是比较好理解,文中包含了源代码和modelsim仿真,供大家参考学习。可以直接赋值,如果变量为矢量时,需要将矢量转为整型。

jk_101的博客 1万+

3、提升管壳式换热器能效:双螺旋盘管的应用研究

本研究探讨了在管壳式热交换器中应用双螺旋盘管以提升能效的可行性。通过实验对比双螺旋与单螺旋盘管的热传递效率,结果显示双螺旋盘管达到54.33%的效率,显著优于单螺旋的48.88%。双螺旋结构不仅增大了换热面积,还因产生剪切应力而减少结垢,延长运行周期。采用NTU方法评估热传递性能,验证了该设计在工业应用中的高效性与实用性,建议在制冷、空调、石油精炼等领域推广使用。

k8s6orchestrator的博客 107

OCR文字识别领域经典论文总结

本篇将介绍文字识别经典论文,内容包括文字检测、文字识别、端到端识别等方法,具体将分别对论文算法简介、思路、代码等几个部分展开介绍。目前各部分只举例经典论文,算法没有全部写完,后续会将在此部分基础上更新更多论文综述及代码实战部分。.................................

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1万+

VHDL的几个语法结构分析记录

1、--GENERIC可以用来指定一些全局的变量,它要放在entity之后,port口映射之前 entity ethernet is generic( --GENERIC语句指定的参数是全局的 MIIM_PHY_ADDRESS : t_phy_address := (others => '0'); MIIM_RESET_WAIT_TICKS : natural

baowxz的专栏 3001

Android 12.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

在android12.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右滑出控制中心模块,接下来分析下 状态栏下滑坐标等相关功能代码分析

安卓兼职framework和app工程师的博客 2768

VHDL语法入门 (八) 函数和过程

然而从应用角度来看,process是直接在主代码中使用,而函数和过程主要为建库而使用,他们用于存储常用的代码以达到代码重用和共享的目的。函数经常存放在包集中(目的是为了进行有效的代码分割,代码共享和代码重用),但也可以放在主代码中(既可以放在entity中,也可以放在architecture中)。前面我们介绍过函数内部wait语句,信号声明和元件调用是不可综合的,对于过程来说,如果一个过程在一个process中进行了声明,那么其内部可以声明信号。参数的个数是任意的,可以没有参数。注意,警告,错误和失败。

EfunStudy的博客 4502

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VHDL数据类型的转换

在VHDL程序中,不同类型的对象不能代入,因此要进行类型转换.类型转换的方法有: (1)类型标记法.用类型名称来实现关系密切的标量类型之间的 转换. 例如: VARIABLE x:INTEGER; VARIABLE y:REAL; 使用类型标记(即类型名)实现类型转换时,可采用赋值语句: x :=INTEGER(y); y :=REAL(x). (2)类型函数法. VHDL程序包中

victorzheng2012的专栏 2426

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VHDL中的数据转换函数conv_std_logic_vector的用法

转换后的数据是原数据的二进制补码形式 VHDL中的数据转换函数conv_std_logic_vector的用法 std_logic_arith程序包里定义的数据转换函数:conv_std_logic_vector(A,位长)--INTEGER,SINGER,UNSIGNED转换成std_logic_vector。 由于参考书上都没有具体说明,本以为是将原来的数

kittyonly777的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VHDL语法入门 (二) 数据类型

-用户定义整数--用户定义的整数子集--用户定义的自然数--用户定义枚举类型--用户定义的std_logic--用户定义的bit_logic数据类型--range表示取值范围没有约束,natural range表示数据值约束在自然数范围--枚举数据类型,常用于有限状态机通常枚举类型的数据会自动进行编码,除非用户进行了特别声明。

EfunStudy的博客 6795

verilog always语法_Verilog代码转VHDL代码经验总结

Verilog语言和VHDL语言是两种不同的硬件描述语言,但并非所有人都同时精通两种语言,所以在某些时候,需要把Verilog代码转换为VHDL代码。本文以通用的XHDL工具为例对Verilog转换到VHDL过程中存在的问题进行了总结,欢迎批评指正。当我们刚开始学习FPGA时,一定会遇到一个问题:学习Verilog还是VHDL?等我们学习FPGA到一定程度参加面试时,面试者也会问你一个问...

weixin_39519072的博客 1471

VHDL中数组赋值写法

VHDL中数组赋值写法 VHDL中不允许对数组直接赋值 ,先对变量赋值,再由变量赋值给数组才可以。参考代码中对iram_128_t_mem(i) 赋值写法。 library IEEE; use IEEE.std_logic_1164.all; entity iram_128_t is port ( WE : in std_logic; CLK : in std_logic; ADDR : in std_logic_vector(6 downto 0); DATA : in std_log

qq_37960317的博客 1万+
下一篇: VHDL:信号、端口以及和Verilog的区别
dianhuo7207
博客等级 码龄11年 6粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值