2013-02-27 91 views
1

我想知道是否有一种方法来检查只有我感兴趣的位的std逻辑载体的VHDL。我的最新尝试如下所示:VHDL:如何检查矢量的选定位

IF (vectorname = "1-00") THEN 

action 

END IF; 

我在这里只想检查向量的位3,1和0。位2在这种情况下是不相关的。我认为-会起作用,因为它“不关心”,但它不会。

任何简单的方法?我知道这可能与STD_MATCH,但我想采取不同的方法。

+0

'如果(vectorname(3)= '1' 和vectorname(1 DOWNTO 0)=“00)then'好的问题,但我从来没有想过更好的编码方式,我期待看到其他解决方案。 – vermaete 2013-02-27 09:10:29

+0

VHDL-2008可以吗?'='运算符应该与' - '一起工作吗?但是,它可以在模拟器中工作,但如果综合工具没有在2008年那么远,你再次被阻塞。 – vermaete 2013-02-27 10:13:20

回答

1

std_match怎么了?这是“正确”的方式做到这一点恕我直言,我不能马上想到的理由“采取不同的方法” ......

0

第一种方式(也vermaete回答为注释):

IF vectorname(3) = '1' AND vectorname(1 DOWNTO 0) = "00" THEN 
    action 
END IF; 

...上述工作,如果它在一个进程内。如果没有,使用这样的事情:

my_output <= "11111111" WHEN vectorname(3) = '1' AND vectorname(1 DOWNTO 0) = "00" ELSE "00000000"; 

方式二:

SIGNAL bits_i_care_about : STD_LOGIC_VECTOR(2 DOWNTO 0); 


bits_i_care_about <= vectorname(3) & vectorname(1 DOWNTO 0); 

p_my_process : PROCESS(bits_i_care_about) 
BEGIN 
    IF bits_i_care_about = "100" THEN 
    action 
    END IF; 
END PROCESS;