首页 > 解决方案 > VHDL中的连接运算符:比较数组的元素并制作向量

问题描述

我想要做的事情如下:

我取了一个数组的几个元素,将它们与一个固定值进行比较,并尝试从中创建一个向量。

这是一段代码:

architecture behav of main_ent is
... 
type f_array is array(0 to 8) of std_logic_vector(7 downto 0);
signal ins_f_array: f_array;
signal sel_sig_cmd : std_logic_vector(3 downto 0); 
...
process begin
sel_sig_cmd <= ((ins_f_array(4) = x"3A")&(ins_f_array(3)= x"3A")&(ins_f_array(2)= x"3A")&(ins_f_array(1)= x"3A"));

....
end process;
...

这应该给出类似sel_sig_cmd = 1000或者可能是1011 等的东西。但这不起作用。这段代码有其他选择吗?

欢呼

塔希尔

标签: vhdl

解决方案


这是因为 VHDL 中的 = 函数返回布尔值,而不是 std_logic。在 VHDL '93 中,除了手动设置每个位之外,没有任何整洁的方法可以做到这一点:

sel_sig_cmd(3) <= '1' when (ins_f_array(4) = x"3A") else '0'
sel_sig_cmd(2) <= '1' when (ins_f_array(3) = x"3A") else '0'
-- etc

但在 VHDL 2008 中,有关系运算符 (?= ?/= 等),在比较时返回 std_logic。所以你的代码变成:

sel_sig_cmd <= (   (ins_f_array(4) ?= x"3A")
                 & (ins_f_array(3) ?= x"3A")
                 & (ins_f_array(2) ?= x"3A")
                 & (ins_f_array(1) ?= x"3A") );

推荐阅读