Почему не является параметром gamma_cor_array_s? GAMMA_COR
- это константа класса, равная DEPH
, вам не нужны флип-флопы, напишите функцию для инициализации gamma_cor_s, где она используется, и не используйте пару сущность/архитектура.
Как значения gamma_cor_s являются (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
после rising_edge (CLK):
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: 75: 13: @ 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 (2) = 0 gamma_corrections.vhdl: 75: 13: @ 0ms: (примечание к отчету): gamma_cor_array_s (3) = 0 gamma_corrections.vhdl: 75: 13: @ 0ms: (примечание к отчету): 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 : 13: @ 0ms: (отчет примечание): gamma_cor_array_s (8) = 0 gamma_corrections.vhdl: 75: 13: @ 0ms: (примечание к отчету): gamma_cor_array_s (9) = 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.vhdl: 75: 13: @ 0ms: (примечание к отчету): gamma_cor_array_s (12) = 0 gamma_corrections.vhdl: 75: 13: @ 0ms: (примечание к отчету): gamma_cor_array_s (13) = 0 gamma_corrections.vhdl: 75: 13 : @ 0ms: (отчет примечание): gamma_cor_array_s (14) = 0 gamma_corrections.vhdl: 75: 13: @ 0ms: (примечание к докладу): gamma_cor_array_s (15) = 0 gamma_corrections.vhdl: 75: 13: @ 10ns : (примечание к отчету): 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 (2) = 2 gamma_corrections.vhdl: 75: 13: @ 10ns: (примечание к отчету): gamma_cor_array_s (3) = 3 gamma_corrections.vhdl: 75: 13: @ 10ns: (отчет примечание): gamma_cor_array_s (4) = 4 gamma_corrections.vhdl: 75: 13: @ 10ns: (примечание к отчету): гамма _cor_array_s (5) = 5 gamma_corrections.vhdl: 75: 13: @ 10ns: (примечание к отчету): gamma_cor_array_s (6) = 6 gamma_corrections.vhdl: 75: 13: @ 10ns: (отчет примечание): gamma_cor_array_s (7) = 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: 75: 13: @ 10ns: (отчет примечание): gamma_cor_array_s (10) = 10 gamma_corrections.vhdl: 75: 13: @ 10ns: (примечание к отчету): gamma_cor_array_s (11) = 11 gamma_corrections.vhdl: 75 : 13: @ 10ns: (отчет примечание): gamma_cor_array_s (12) = 12 gamma_corrections.vhdl: 75: 13: @ 10ns: (примечание к отчету): gamma_cor_array_s (13) = 13 gamma_corrections.vhdl: 75: 13: @ 10ns: (отчет примечание): gamma_cor_array_s (14) = 14 gamma_corrections.vhdl: 75: 13: @ 10ns: (Докладная записка): gamma_cor_array_s (15) = 15
Вы объявляете 64 шлепки, инициализировать их все «0», и только 30 из них изменены на «1» - вы не указали все предупреждения (которые здесь можно игнорировать). Использование типа real не переносится (реальные значения являются приблизительными).
Предложение контекст для объекта 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.vhdl: 126: 13: @ 0ms: (примечание к отчету): gamma_cor_array_s (4) = 4 gamma_corrections.vhdl: 126: 13: @ 0ms: (отчет примечание): gamma_cor_array_s (5) = 5 gamma_corrections.vhdl: 126: 13: @ 0ms: (примечание к отчету): 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: (отчет примечание): gamma_cor_array_s (13) = 13 gamma_corrections.vhdl: 126: 13: @ 0ms: (Докладная записка): gamma_cor_array_s (14) = 14 gamma_corrections.vhdl: 126: 13: @ 0ms: (отчет примечание) : gamma_cor_array_s (15) = 15
, который соответствует значению предыдущего сигнала после нарастающего фронта часов.
Это можно сделать gamma_cor_array_s сигнала, при условии динамического назначения, это требует, чтобы все задания выполняются в одном процессе (одновременное заявление будет разработать процесс присвоения)
Благодарим за совет. Ты мне очень помог. Я порекомендую ваш сайт всем своим друзьям ... –
[хороший вопрос] (https://stackoverflow.com/help/how-to-ask) может привлечь хорошие ответы. Результат может быть не просто вопросом и ответом. Они могут быть ресурсом для тех, кто имеет одинаковые или похожие проблемы. – user1155120