Мегафункции ПЛИС
Модуль гамма-коррекции телевизионного сигнала, выводимого на монитор
Описание:
Файл инициализации памяти tvgamma.mif сгенерирован для случая вывода сигнала на монитор с электронно-лучевой трубкой (ЭЛТ).
Для LCD-мониторов коэффициенты будут другими.
Временная диаграмма входных и выходных сигналов прилагается (в формате симулятора пакета Quartus II).
Задержка потока данных 2 такта clk_tv.
Для генерации файла инициализации памяти tvgamma.mif написал программу GammaCorrector.exe (184 Кб). Имеется возможность выбрать требуемую разрядность коэффициентов коррекции. Исходный текст программы на Borland C++ можно скачать здесь (1 Кб).
Параметры:
DATA_WIDTH - разрядность шины данных (бит)
Входные порты:
clk_tv - вход тактовых импульсов
enable_correct - вход включения коррекции ("1" - включено, "0" - выключено)
in_data_valid - строб входной шины данных
in_data - входная шина данных
Выходные порты:
out_data_valid - строб выходной шины данных
out_data - выходная шина данных
Исходный текст
TITLE "TV GAMMA CORRECTION";
INCLUDE "altsyncram";
PARAMETERS
(
DATA_WIDTH = 10 --Data Bus Width
);
CONSTANT NUM_WORDS = 2^DATA_WIDTH;
SUBDESIGN tv_gamma
(
clk_tv : INPUT; --TV Pixel Clock
enable_correct : INPUT; --Enable Gamma-Correction
in_data_valid : INPUT; --Valid Input Data Bus
in_data[DATA_WIDTH-1..0] : INPUT; --Input Data Bus
out_data_valid : OUTPUT; --Valid Output Data Bus
out_data[DATA_WIDTH-1..0] : OUTPUT; --Output Data Bus
)
VARIABLE
tvcorrect : altsyncram WITH (
INTENDED_DEVICE_FAMILY = "Stratix",
WIDTH_A = DATA_WIDTH,
WIDTHAD_A = DATA_WIDTH,
NUMWORDS_A = NUM_WORDS,
OPERATION_MODE = "ROM",
OUTDATA_REG_A = "CLOCK0",
ADDRESS_ACLR_A = "NONE",
OUTDATA_ACLR_A = "NONE",
WIDTH_BYTEENA_A = 1,
INIT_FILE = "tvgamma.mif",
LPM_HINT = "ENABLE_RUNTIME_MOD=NO",
LPM_TYPE = "altsyncram"
);
tvdata1_rg[DATA_WIDTH-1..0] : DFF;
tvdata2_rg[DATA_WIDTH-1..0] : DFF;
valid_tv1_ff : DFF;
valid_tv2_ff : DFF;
BEGIN
tvcorrect.clock0 = clk_tv;
tvcorrect.address_a[] = in_data[];
tvdata1_rg[].clk = clk_tv;
tvdata1_rg[].d = in_data[];
tvdata2_rg[].clk = clk_tv;
tvdata2_rg[].d = tvdata1_rg[].q;
if enable_correct then
out_data[] = tvcorrect.q_a[];
else
out_data[] = tvdata2_rg[].q;
end if;
valid_tv1_ff.clk = clk_tv;
valid_tv1_ff.d = in_data_valid;
valid_tv2_ff.clk = clk_tv;
valid_tv2_ff.d = valid_tv1_ff.q;
out_data_valid = valid_tv2_ff.q;
END;
Скачать исходники можно здесь (архив RAR, 4Кб).
При любом полном или частичном воспроизведении, копировании и распространении материалов сайта - активная ссылка на ресурс www.radiotract.ru обязательна.
Комментарии