串联 VHDL(2 个 8 位向量)
Concatenation VHDL (2 8-bit vectors)
我只是想知道,如何将两个 8 位向量连接成一个 16 位向量,其中 odata_H 具有 MSB,odata_L 具有 LSB?任何帮助,将不胜感激。矢量是 ADT7420 温度传感器发出的数据点。
signal BCD: std_logic_vector(11 downto 0);
signal Bin_Temp: std_logic_vector(7 downto 0);
signal Bin_Acc: std_logic_vector(7 downto 0);
signal Buff_Temp: std_logic_vector(7 downto 0);
signal Buff_Acc: std_logic_vector(7 downto 0);
signal odata_L: std_logic_vector(7 downto 0);
signal odata_H: std_logic_vector(7 downto 0);
signal notEN: std_logic;
signal odataT: std_logic_vector(15 downto 0);
begin
odataT <= odata_H & odata_L;
Bin_Temp <= odataT(8 downto 1);
notEN <= not(EN);
我不知道为什么在这种情况下串联显然不起作用。尽管如此,实现它的另一种方法是使用 numeric_std 库的 resize()
函数。
library ieee;
use ieee.numeric_std.all;
[...]
odataT <= std_logic_vector(resize(signed(odata_H), odata_L'length));
串联 (odata_H, odata_L)
的大小将调整为 length
的长度(在本例中为 16)。
当然 unsigned
而不是 signed
是可能的,如果适用的话。
我只是想知道,如何将两个 8 位向量连接成一个 16 位向量,其中 odata_H 具有 MSB,odata_L 具有 LSB?任何帮助,将不胜感激。矢量是 ADT7420 温度传感器发出的数据点。
signal BCD: std_logic_vector(11 downto 0);
signal Bin_Temp: std_logic_vector(7 downto 0);
signal Bin_Acc: std_logic_vector(7 downto 0);
signal Buff_Temp: std_logic_vector(7 downto 0);
signal Buff_Acc: std_logic_vector(7 downto 0);
signal odata_L: std_logic_vector(7 downto 0);
signal odata_H: std_logic_vector(7 downto 0);
signal notEN: std_logic;
signal odataT: std_logic_vector(15 downto 0);
begin
odataT <= odata_H & odata_L;
Bin_Temp <= odataT(8 downto 1);
notEN <= not(EN);
我不知道为什么在这种情况下串联显然不起作用。尽管如此,实现它的另一种方法是使用 numeric_std 库的 resize()
函数。
library ieee;
use ieee.numeric_std.all;
[...]
odataT <= std_logic_vector(resize(signed(odata_H), odata_L'length));
串联 (odata_H, odata_L)
的大小将调整为 length
的长度(在本例中为 16)。
当然 unsigned
而不是 signed
是可能的,如果适用的话。