0

std_logic_vectorアドレスを保持する入力信号があります。メモリから読み取るために使用します。500 ビットを読み取る必要がありますが、メモリ データ バスは 256 ビット幅しかないため、256 ビットの 2 つの連続したチャンクを読み取る必要があります。これを行うには、信号に格納されているアドレスから 1 回目と、格納されているアドレスの 256 ビット (32 バイト) 後のアドレスから 2 回目を読み取ります。に定数を追加するにはどうすればよいですかstd_logic_vector:

ADRESS  : in std_logic_vector (0 to 31);

--code

--read first word:
dfmc_DDR2Interface_address <= ADRESS;
dfmc_DDR2Interface_read <= '1';

-- more code

--read second word (what I want to do)
dfmc_DDR2Interface_address <= ADRESS+32;
dfmc_DDR2Interface_read <= '1';
4

2 に答える 2

1

簡単な方法は、numeric_std_unsignedパッケージを使用することです。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std_unsigned.all;  -- if you add this...

entity add_integer_literal_to_slv_signal is
    port (
        address: in std_logic_vector(0 to 31);
        dfmc_DDR2Interface_address: out std_logic_vector (0 to 31);
        dfmc_DDR2Interface_read: out std_logic
    );
end;

architecture example of add_integer_literal_to_slv_signal is
begin
    --read first word:
    dfmc_DDR2Interface_address <= address;
    dfmc_DDR2Interface_read <= '1';

    -- more code

    --read second word (what I want to do)
    dfmc_DDR2Interface_address <= address + 256; -- ...this will work out of the box!
    dfmc_DDR2Interface_read <= '1';
end;

記録のために、numeric_std パッケージを適切に調べる必要があります。@JimLewis は、VHDL 2008 演算に関する優れたまとめを提供しています: http://www.gstitt.ece.ufl.edu/vhdl/refs/vhdl_math_tricks_mapld_2003.pdf

于 2013-10-20T15:44:57.253 に答える