gamma_cor_array_sクラスが定数ではないのはなぜですか? GAMMA_COR
はクラス定数でDEPH
なので、フリップフロップは不要で、gamma_cor_sを使用する場所を初期化する関数を作成し、エンティティ/アーキテクチャのペアを使用しないでください。
gamma_cor_sの値がrising_edge(CLK)後(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
あるれるとおり
library ieee;
use ieee.std_logic_1164.all;
use work.mytypes.all; -- type gamma_cor_array
entity gam_cor_tb is
end entity;
architecture foo of gam_cor_tb is
signal clk: std_logic := '0';
constant DEPH: natural := 4;
constant GAMMA_COR: real := 1.0;
signal gamma_cor_array_s:
gamma_cor_array (2 ** DEPH - 1 downto 0) ;
begin
CLOCK:
process
begin
wait for 10 ns;
clk <= not clk;
wait for 10 ns;
wait; -- one ping only
end process;
DUT:
entity work.gamma_correction
generic map (
DEPH => DEPH,
GAMMA_COR => GAMMA_COR
)
port map (
clk => clk,
gamma_cor_array_s => gamma_cor_array_s
);
MONITOR:
process (gamma_cor_array_s)
begin
for i in 0 to (2 ** DEPH - 1) loop
report "gamma_cor_array_s(" & integer'image(i) & ") = " &
integer'image(gamma_cor_array_s(i));
end loop;
end process;
end architecture;
結果:
gamma_corrections.vhdl:13:75 @は0ms(レポート注): gamma_cor_array_s(0) = 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポートノート):gamma_cor_array_s(1)= 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポート メモ):gamma_cor_array_s = 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポートノート):gamma_cor_array_s(3 (レポートの注釈):gamma_cor_array_s(4)= 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポート の注釈):gamma_cor_array_s(5)= 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポートノート):gamma_cor_array_s(6) = 0 gamma_corrections.vhdl:75:13:@ 0ms :(レポートノート):gamma_cor_array_s(7)= 0 gamma_corrections.vhdl:75 (レポートノート):gamma_cor_array_s(9) = 0 gamma_corrections.vhdl:75:13:@ 0ms :(レポート 注)gamma_cor_array_s(8)= 0 gamma_corrections.vhdl:75:13: @ 0ms :(レポートノート):gamma_cor_array_s(10)= 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポート ノート):gamma_cor_array_s(11)= 0 gamma_corrections。gamma_cor_array_s(12) = 0 gamma_corrections.vhdl:75:13:@ 0ms:(レポートノート):gamma_cor_array_s(13)= 0 gamma_corrections.vhdl:75:13 (レポートノート):gamma_cor_array_s(15) = 0 gamma_corrections.vhdl:75:13:@ 10ns(レポート 注):gamma_cor_array_s(14)= 0 gamma_corrections.vhdl:75:13:@ 0ms: (レポートノート):gamma_cor_array_s(0)= 0 gamma_corrections.vhdl:75:13:@ 10ns:(レポート メモ):gamma_cor_array_s(1)= 1 gamma_corrections.vhdl:75:13:@ 10ns: (レポートのノート):gamma_cor_array_s(3)= 3 gamma_corrections.vhdl:75:13:@ 10ns:(レポート メモ):gamma_cor_array_s(3)= gamma_cor_array_s(2) = 2 gamma_corrections.vhdl:75:13: 4)= 4 gamma_corrections.vhdl:75:13:@ 10ns :(レポートノート):ガンマgamma_cor_array_s(6)= 6 gamma_corrections.vhdl:75:13:@ 10ns:(レポート の注釈):gamma_cor_array_s(6)= gamma_cor_array_s(5) = 5 gamma_corrections.vhdl:75:13: = 7 gamma_corrections.vhdl:75:13:@ 10ns:(レポートノート):gamma_cor_array_s(8) = 8 gamma_corrections.vhdl:75:13:@ 10ns :(レポートノート):gamma_cor_array_s(9)= 9 gamma_corrections。 VHDL:13:75( 音符を報告):gamma_cor_array_s(10)= 10 gamma_corrections.vhdl:13:75(レポート注): gamma_cor_array_s(11)= 11 gamma_corrections.vhdl:75 10nsの@ 10nsの@ :13:( 音符を報告):gamma_cor_array_s(12)= 12 gamma_corrections.vhdl:75:13:10nsの@:(レポート注): gamma_cor_array_s(13)= 13 gamma_corrections.vhdl:75:13 @ 10nsの: @ 10ns :(レポート 注):あなたは、64個のフリップフロップを宣言し、すべてにそれらを初期化し gamma_cor_array_s(15)= 15
:75:13:10nsの@:(レポートノート)gamma_cor_array_s(14)が14 gamma_corrections.vhdlを= '0'、そのうち30個だけが '1'に変更されました - あなたはすべての警告を表示しませんでした(ここでは無視できます)。実数型の使用は移植性がありません(実数値は近似値です)。
エンティティgamma_correctionのコンテキスト句は次のようになります。
library ieee;
ieee.std_logic_1164.all; -- for type std_logic, function rising_edge
use ieee.math_real.all; -- for function "**" [integer, real return real]
use work.mytypes.all; -- for type gamma_cor_array
UNISIMへの参照が必要とされていません。定数を初期化する代わりに、別のエンティティとアーキテクチャで発生した信号を使用するため
:
architecture fum of gam_cor_tb is
signal clk: std_logic := '0';
constant DEPH: natural := 4;
constant GAMMA_COR: real := 1.0;
-- signal gamma_cor_array_s:
-- gamma_cor_array (2 ** DEPH - 1 downto 0) ;
function gamma_correct return gamma_cor_array is -- added pure function
use ieee.math_real.all;
variable gamma_cor_array_s: gamma_cor_array(2 ** DEPH - 1 downto 0);
begin
for i in 0 to (2 ** DEPH - 1) loop
gamma_cor_array_s(i) := integer (
((real(i)/real (2 ** DEPH - 1)) ** GAMMA_COR) *
real(2 ** DEPH - 1)
);
end loop;
return gamma_cor_array_s;
end function;
constant gamma_cor_array_s: -- previously a signal
gamma_cor_array (2 ** DEPH - 1 downto 0) := gamma_correct;
begin
-- CLOCK:
-- process
-- begin
-- wait for 10 ns;
-- clk <= not clk;
-- wait for 10 ns;
-- wait; -- one ping only
-- end process;
-- DUT:
-- entity work.gamma_correction
-- generic map (
-- DEPH => DEPH,
-- GAMMA_COR => GAMMA_COR
-- )
-- port map (
-- clk => clk,
-- gamma_cor_array_s => gamma_cor_array_s
-- );
MONITOR:
process -- (gamma_cor_array_s)
begin
for i in 0 to (2 ** DEPH - 1) loop
report "gamma_cor_array_s(" & integer'image(i) & ") = " &
integer'image(gamma_cor_array_s(i));
end loop;
wait;
end process;
end architecture;
機能仕様は、以前エンティティgamma_correctionに汎用定数として渡された定数の範囲内にあることが必要です。
この関数は、ガンマ補正を決定するルックアップテーブルである定数を初期化するために使用されます。
イベントに基づいてプロセス間で値を伝達するシグナルがないことに注意してください。あなたはgamma_cor_array_sを割り当てましたが、値は決して変更されませんでした(エンティティgamma_correctionのアーキテクチャのプロセスのドライバ)。
出力値は次のとおり
gamma_corrections.vhdl:126:13:@は0ms(レポート注):gamma_cor_array_s(0) = 0 gamma_corrections.vhdl:126:13:@は0ms :(gamma_cor_array_s(1)= 1 gamma_corrections.vhdl:126:13:@ 0ms:(レポート メモ):gamma_cor_array_s(2)= 2 gamma_corrections.vhdl:126:13:@ 0ms :(レポートノート): gamma_cor_array_s(3) = 3 gamma_corrections。gamma_cor_array_s(4)= 4 gamma_corrections.vhdl:126:13:@ 0ms:(レポート メモ):gamma_cor_array_s(5)= 5 gamma_corrections.vhdl:126:vhdl:126:13: gamma_cor_array_s(6) = 6 gamma_corrections.vhdl:126:13:@ 0ms:(レポートノート):gamma_cor_array_s(7)= 7 gamma_corrections.vhdl:126:13:@ 0ms: gamma_cor_array_s(8)= 8 gamma_corrections.vhdl:126:13:@ 0ms:(レポートノート):gamma_cor_array_s(9) = 9 gamma_corrections.vhdl:126:13:@ 0ms :(レポートノート):gamma_cor_array_s(10)= 10 gamma_corrections.vhdl:126:13:@ 0ms:(レポート 注):gamma_cor_array_s(11)= 11 gamma_corrections.vhdl:126:13:@ 0ms:(レポートノート): gamma_cor_array_s (12)= 12 gamma_corrections.vhdl:126:13:@ 0ms:(レポート 注):126:13:@は0ms(レポート注): gamma_cor_array_s(14)= 14 gamma_corrections.vhdl:126:13:@は0ms( 音符を報告)gamma_cor_array_s(13)13 gamma_corrections.vhdlを= :gamma_cor_array_s(15)は、クロックの立ち上がりエッジの後、前の信号の値と一致15
を=。
それはXSTでのいくつかのため、これらの警告を報告し
ありがとうございます。あなたは私をたくさん助けてくれました。私はすべての私の友人にあなたのサイトをお勧めします... –
[良い質問](https://stackoverflow.com/help/how-to-ask)良い答えを引き付けることができます。その結果は単なる質問と答え以上のものになります。彼らは、同じまたは同様の問題を持つ人のためのリソースになることができます。 – user1155120