FPGA之道(25)VHDL数据类型转换函数与数据对象的属性

举报
李锐博恩 发表于 2021/07/15 03:15:37 2021/07/15
【摘要】 文章目录 数据类型转换函数数据对象的属性数值类属性 Signal属性 数据类型转换函数 在VHDL的众多数据类型中,归根到底,它们都是要用二进制数来表示的,所以它们之间几乎都是可以相互转换的。在有些情况下,这种转换是必须的,例如,我们需要用外部输入的一个4bits逻辑向量作为索引去数组中取数据,那么在VHDL代码层级上,从逻辑向量到整数的转换就必然进...

数据类型转换函数

在VHDL的众多数据类型中,归根到底,它们都是要用二进制数来表示的,所以它们之间几乎都是可以相互转换的。在有些情况下,这种转换是必须的,例如,我们需要用外部输入的一个4bits逻辑向量作为索引去数组中取数据,那么在VHDL代码层级上,从逻辑向量到整数的转换就必然进行。需要注意的是,在FPGA硬件资源上,数据都是二进制形式,没有什么转换的概念,转换的概念是说给编译器、仿真器等将我们的思想解释成数字电路的工具听的。
通常,FPGA的相关开发、仿真工具都会隐含的帮我们完成一些数据的类型转换,就好比C语言中的float到int的隐含转换。通常这种转换后编译器会报一个warning给我们,以便提醒我们注意。有些时候,编译器的转换结果是我们想要的,但是还有些时候,编译器的转换思路是错的,或者是不符合我们的特殊要求,这就给代码带来了隐患。因此在这个时候,我们就需要人为的告诉编译器我们想怎样对待代码中的数据。VHDL数据类型转换函数有很多,但其实常用的并不多,所以这里我只列出一些比较常用的供大家参考。

conv_std_logic_vector(x, y) 		integer、unsigned、signed转换为std_logic_vector
conv_integer(x) std_logic_vector、unsigned、signed转换为integer

to_std_logic_vector(x)			bit_vector转换为std_logic_vector
to_bit_vector(x) std_logic_vector转换为bit_vector
to_std_logic(x) bit转换为std_logic
to_bit(x) std_logic转换位bit

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

上述系统函数中,x参数为待转换的变量或常数,而y为转换成新类型后的位宽

数据对象的属性

数值类属性

这类属性包括:'left, 'right, 'low, 'high, 'length等,其中,

left表示数组的左边界;
right表示数组的右边界;
low表示数组的下边界;
high表示数组的上边界;
length表示数组的长度。

例如,

signal A : std_logic_vector(7 downto 0);
signal B : std_logic_vector(0 to 3);
则,
A'left=7; A'right=0; A'low=0; A'high=7; A'length=8;
B'left=0; B'right=3; B'low=0; B'high=3; B'length=4;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

除此以外,low和high两个属性还可以表示某种类型的最小、最大值

Signal属性

'event属性是一个针对信号量的属性,它是附着在信号量上的,而不是信号的类型上。它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上,则其取值为Ture,否则为False。有事件发生,对于FPGA中的信号来说,其实就是值改变。利用此属性可判断时钟信号的变化情况。

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/104272385

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。