2015-05-27 97 views
0

我有以下的輸入信號:VHDL DOWNTO不正確MSB

addr : IN STD_LOGIC_VECTOR(9 DOWNTO 0); 

據我所知,這意味着地址(9)是最顯著位。 但是,當運行模擬和分配,比如說,128吧,我得到如下:

0(9) 0(8) 0(7) 0(6) 0(5) 0(4) 0(3) 1(2) 0(1) 0(0) 

含義,最顯著位實際上是地址(0)。

在Quartus 9.1中,通過仿真通過矢量波形完成賦值。我給它分配一個任意值。

這裏是.vhd文件,在這裏我用這個的一部分:

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

ENTITY ram_256x4B IS 
PORT(clk, wr_en : IN STD_LOGIC; -- clock, write control signal 
    addr : IN STD_LOGIC_VECTOR(9 DOWNTO 0); -- read and write addresses 
    d : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- data to be written 
    q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- memory read output 
END ram_256x4B; 

ARCHITECTURE comportamental OF ram_256x4B IS 

SIGNAL addr_validation_bits : STD_LOGIC; 

BEGIN 
addr_validation_bits <= addr(9) & addr(8); 

END comportamental; 

如果看重的是addr 2,我希望addr(9)addr(8)0,而是他們01 , 分別。

+0

'9 downto 0'使位0成爲最右邊的位。如果你認爲最右邊的位是最重要的位,那麼'9 downto 0'也會使位0成爲MSB。如果你想讓位9成爲最右邊的位,使用'0到9'。 – godel9

+0

我想最右邊的位是0,但也是LSB。假設我給這個向量位賦值2,我想要的結果是0000000010,最左邊的位是9,最右邊的是0. –

+0

你如何賦值128? – Paebbels

回答

1

此分配與128

architecture ... 
    signal addr : STD_LOGIC_VECTOR(9 downto 0); 
begin 
    addr <= std_logic_vector(to_unsigned(128, addr'length)); 
end; 

addr(7)一個STD_LOGIC_VECTOR是 '1',所有其他位爲 '0'。