FPGA之道(25)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

上述系统函数中,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;

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

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


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值