0

私は自分のローリング/シフト機能を作っている学校の仕事のためにこれをやっています。以下は私が書いたコードですが、コンパイルしようとすると、rownum<=rol(rowcount,1); で構文エラーが発生します。

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

architecture main of proj is

function "rol" (a: std_logic_vector; n : natural)
                return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

signal rownum : std_logic_vector(2 downto 0);
signal rowcount : std_logic_vector(2 downto 0);

begin

process begin
wait until rising_edge(i_clock);
**rownum<=rol(rowcount,1);**

end process;

end architecture main;
4

2 に答える 2

1

ここで対処する必要があることがいくつかあります。

まず、エンティティ ステートメントが必要です。

entity  proj is
    port(
    i_clock : in std_logic
    );
end  proj;

これは、どのシグナルがエンティティの入力および出力であるかを宣言します。この場合、それはただの時計です。必要に応じて、rownum と rowcount の入力と出力も追加できます。

関数名は逆コンマであってはならず、既存の演算子をオーバーロードすることもお勧めできません。

function rol_custom (a: std_logic_vector; n : natural)
            return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

合成可能なコードは次のとおりです。

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

entity  proj is
    port(
    i_clock : in std_logic
    );
end  proj;

architecture main of proj is

function rol_custom (a: std_logic_vector; n : natural)
                return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

signal rownum : std_logic_vector(2 downto 0);
signal rowcount : std_logic_vector(2 downto 0);

begin

process begin
wait until rising_edge(i_clock);
rownum<=rol_custom(rowcount,1);

end process;

end architecture main;

ただし、これで合成する必要がありますが、rowcount に値が指定されていないため、結果は意味がありません。それを定義するために、特定の基準 (カウンター?) に基づいて信号を駆動するプロセスを追加するか、エンティティ定義に入力として追加することができます。

于 2013-02-18T02:32:00.933 に答える