如何索引到vhdl标准逻辑向量?
我有以下声明:如何索引到vhdl标准逻辑向量?,vhdl,Vhdl,我有以下声明: signal count:STD_LOGIC_VECTOR (3 downto 0); signal txbuff:STD_LOGIC_VECTOR (7 downto 0); dout是一种std_逻辑输出 我使用的是IEEE.NUMERIC_STD.ALL 我想使用向量计数作为txbuff的索引。在我尝试过的许多事情中,有以下几点: count<=std_logic_vector(unsigned(count)-1); dout<=txbuff(unsigned
signal count:STD_LOGIC_VECTOR (3 downto 0);
signal txbuff:STD_LOGIC_VECTOR (7 downto 0);
std_逻辑
输出count<=std_logic_vector(unsigned(count)-1);
dout<=txbuff(unsigned(count));
count我们实际上希望将数字转换为整数,而不是无符号
或有符号
要做到这一点,我们可以使用To_integer
,如numeric\u std
中所定义。下面是一个例子:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
entity conv_test is Port (
data_in : in std_logic_vector(7 downto 0);
data_sel : in std_logic_vector(2 downto 0);
data_out : out std_logic
);
end conv_test;
architecture Behavioral of conv_test is
begin
data_out <= data_out(to_integer(unsigned(data_sel)));
end Behavioral;
ieee库;
使用ieee.std_logic_1164.ALL;
使用ieee.numeric_std.ALL;
实体conv_测试是端口(
数据输入:标准逻辑向量(7到0);
数据选择:标准逻辑向量(2到0);
数据输出:输出标准逻辑
);
结束conv_试验;
conv_测试的架构是
开始
data\u out您需要使用to\u integer函数转换为整数。检查参数化MUX:
architecture RTL of MUX is
begin
-----------------------------------------------------------------------
-- MUX_RTL
-----------------------------------------------------------------------
-- Implements a multiplexer
-----------------------------------------------------------------------
MUX_RTL: process(DATA_IN, ADDR_IN)
variable ADDR_IN_INT : integer range 0 to 2**ADDR_WIDTH-1; -- holds the integer value of the address
begin
ADDR_IN_INT := to_integer(unsigned(ADDR_IN));
DATA_OUT <= DATA_IN(ADDR_IN_INT);
end process MUX_RTL;
end architecture RTL;
MUX的RTL架构是
开始
-----------------------------------------------------------------------
--多路复用器
-----------------------------------------------------------------------
--实现多路复用器
-----------------------------------------------------------------------
MUX\U RTL:进程(数据输入,地址输入)
变量ADDR_IN_INT:整数范围0到2**ADDR_WIDTH-1;--保存地址的整数值
开始
ADDR_IN_INT:=to_整数(无符号(ADDR_IN));
DATA\u OUT您需要一个整数作为索引类型。(或者对于其他数组,可以使用任何离散类型,例如枚举)
其他答案已经向您展示了如何使用类型转换函数实现这一点:我要问的是,为什么不将“count”设置为整数,比如自然范围0到15
?它将合成同样的内容,并使代码更简洁。注意count的长度为4,可以索引2**4个元素,而txbuff的长度仅为8(8个元素)。使用较大的整数索引可能会导致切片名dout