2015-05-27 95 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'。