3

可変長 vector がありますstd_logic_vector(X downto 0)X/2現在、下位ビットが 1 で他のビットが 0 になるように、リセット用の定数をパッケージに定義しようとしています。

たとえば、3 ビットのベクトル ( X=3) は定数"011"になり、4 ビットのベクトルは定数 になり"0011"ます。

VHDL パッケージでこれを行うにはどうすればよいですか? 以下のコードは、私がやろうとしていることを説明しています。

type Entry_Type is record
  state : std_logic_vector(X-1 downto 0);
end record;
constant Entry_Constant : Entry_Type := <???>;
4

2 に答える 2

5

必要に応じてレコード タイプを初期化するには、少なくとも 2 つの選択肢があります。1 つは初期化関数を使用しており、もう 1 つは集計で N の値を使用しています。

関数は、カスタム データ型を初期化する優れた方法です。あなたの場合、値default_entry_from_width(n)を返すfunction を作成できます。entry_type

type entry_type is record
    state: std_logic_vector;
end record;

function default_entry_from_width(width: natural) return entry_type is
    variable return_vector: std_logic_vector(width-1 downto 0);
begin
    for i in return_vector'range loop
        return_vector(i) := '1' when i <= width/2 else '0';
    end loop;
    return (state => return_vector);
end;

constant ENTRY_1: entry_type := default_entry_from_width(3);  -- return 011
constant ENTRY_2: entry_type := default_entry_from_width(4);  -- return 0011

もう 1 つの方法は、事前に定義された N の値を使用して、集計で定数を初期化することです。

constant N: natural := 4;
constant ENTRY_3: entry_type := (
    state => (
        N-1 downto N/2 => '1',
        N/2-1 downto 0 => '0'
    )
);
于 2013-10-13T21:39:50.113 に答える
2

次のような意味です。

library ieee;
use ieee.std_logic_1164.all;
package vector_length is
    constant X:    natural := 3;  -- Entry_Type.state length
    type Entry_Type is
        record 
            state : std_logic_vector(X-1 downto 0);
        end record;
    constant entry_default: Entry_Type := 
             (state => 
                 (X-1 downto NATURAL(REAL((X-1)/2) + 0.5) =>'0', others => '1')
             );
end package vector_length;

library ieee;
use ieee.std_logic_1164.all;
use work.vector_length.all;

entity fum is
end entity;

architecture foo of fum is
    signal entry:   Entry_Type := entry_default;
    signal default: std_logic_vector (X-1 downto 0);
begin
TEST:
    process
    begin
        default <= entry.state;
        wait for 100 ns;  -- so it will show up in a waveform display
        wait;
    end process;
end architecture;

X=3 のデフォルト値は「011」、X=4 のデフォルト値は「0011」の条件を満たします。

デフォルト値は、型宣言ではなく、サブタイプ (エントリ) が宣言されている場所に割り当てられることに注意してください。

(丸めるのが面倒でした)。

于 2013-10-13T22:01:43.060 に答える