movingramps.tdf
来自「基于fpga的屏幕测试程序」· TDF 代码 · 共 191 行
TDF
191 行
--Yuning.Zhang
--2005.7.15
include "fran_pg.inc";
include "lpm_rom.inc";
include "lpm_counter.inc";
include "lpm_compare.inc";
include "lpm_add_sub.inc";
-- AvD, one ROM (moverampgb) replaced by GND because I need an EAB for more important purposes
SUBDESIGN movingramps
(
clk : INPUT ;
start_h_aeb : INPUT ;
vout_pulse : INPUT ;
act_vcounter[10..0] : INPUT ;
speed[1..0] : INPUT ;
red[9..0] : OUTPUT;
gre[9..0] : OUTPUT;
blu[9..0] : OUTPUT;
)
VARIABLE
moverampwa : LPM_ROM WITH (
LPM_WIDTH = 8,
LPM_WIDTHAD = 10,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = "moverampwa.mif"
);
moverampwb : LPM_ROM WITH (
LPM_WIDTH = 8,
LPM_WIDTHAD = 10,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = "moverampwb.mif"
);
moverampga : LPM_ROM WITH (
LPM_WIDTH = 8,
LPM_WIDTHAD = 10,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = "moverampga.mif"
);
% moverampgb : LPM_ROM WITH (
LPM_WIDTH = 8,
LPM_WIDTHAD = 10,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = "moverampgb.mif"
);
%
ramp_counter : lpm_counter WITH (
LPM_WIDTH = 10,
LPM_DIRECTION = "UP"
);
ramp_counter_compare : lpm_compare WITH (
LPM_WIDTH = 10,
ONE_INPUT_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 2
);
start_pointer_compare : lpm_compare WITH (
LPM_WIDTH = 10,
ONE_INPUT_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 0
);
start_point : lpm_add_sub WITH (
LPM_WIDTH = 10,
LPM_DIRECTION = "ADD",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
move_rampr[9..0] : DFF;
move_rampg[9..0] : DFF;
move_rampb[9..0] : DFF;
start_point_buffer[9..0]: DFFE;
node_A[10..0] : NODE;
node_B[10..0] : NODE;
BEGIN
CASE speed[] IS
WHEN 0 =>
start_point.dataa[9..0] = 0;
WHEN 1 =>
start_point.dataa[9..0] = 5;
WHEN 2 =>
start_point.dataa[9..0] = 6;
WHEN 3 =>
start_point.dataa[9..0] = 10;
END CASE;
start_point.datab[9..0] = start_point_buffer[9..0].q;
IF NOT(start_pointer_compare.ageb)
THEN
start_point_buffer[9..0].d = start_point.result[9..0];
ELSE
start_point_buffer[9..0].d = GND;
END IF;
moverampwa.address[9..0] = ramp_counter.q[9..0];
moverampwa.inclock = clk;
moverampwa.outclock = clk;
moverampwb.address[9..0] = ramp_counter.q[9..0];
moverampwb.inclock = clk;
moverampwb.outclock = clk;
moverampga.address[9..0] = ramp_counter.q[9..0];
moverampga.inclock = clk;
moverampga.outclock = clk;
% moverampgb.address[9..0] = ramp_counter.q[9..0];
moverampgb.inclock = clk;
moverampgb.outclock = clk;
%
ramp_counter.sload = start_h_aeb;
ramp_counter.clock = clk;
ramp_counter.data[9..0] = start_point_buffer[9..0].q;
ramp_counter.sclr = ramp_counter_compare.aeb AND NOT (start_h_aeb);
start_point_buffer[].clk = clk;
start_point_buffer[].ena = vout_pulse; --start_v.aeb;
ramp_counter_compare.dataa[9..0] = ramp_counter.q[9..0];
node_A[10..0] = HAC-3; --849
ramp_counter_compare.datab[9..0] = node_A[9..0];
ramp_counter_compare.clock = clk;
start_pointer_compare.dataa[9..0] = start_point_buffer[9..0].q;
node_B[10..0] = HAC-6; --846
start_pointer_compare.datab[9..0] = node_B[9..0];
CASE (act_vcounter[8..6]) IS
WHEN 0 =>
move_rampr[9..2].d = moverampwa.q[7..0];
move_rampg[9..2].d = moverampwa.q[7..0];
move_rampb[9..2].d = moverampwa.q[7..0];
WHEN 1 =>
move_rampr[9..2].d = moverampwb.q[7..0];
move_rampg[9..2].d = moverampwb.q[7..0];
move_rampb[9..2].d = moverampwb.q[7..0];
WHEN 2 =>
move_rampr[9..2].d = moverampwb.q[7..0];
-- move_rampg[9..2].d = moverampgb.q[7..0];
move_rampg[9..2].d = GND;
move_rampb[9..2].d = GND;
WHEN 3 =>
move_rampr[9..2].d = moverampwa.q[7..0];
move_rampg[9..2].d = moverampga.q[7..0];
move_rampb[9..2].d = GND;
WHEN 4 =>
move_rampr[9..2].d = moverampwa.q[7..0];
move_rampg[9..2].d = moverampwa.q[7..0];
move_rampb[9..2].d = moverampwa.q[7..0];
WHEN 5 =>
move_rampr[9..2].d = moverampwb.q[7..0];
move_rampg[9..2].d = moverampwb.q[7..0];
move_rampb[9..2].d = moverampwb.q[7..0];
WHEN OTHERS =>
move_rampr[9..2].d = GND;
move_rampg[9..2].d = GND;
move_rampb[9..2].d = GND;
END CASE;
move_rampr[1..0].d = GND;
move_rampg[1..0].d = GND;
move_rampb[1..0].d = GND;
move_rampr[].clk = clk;
move_rampg[].clk = clk;
move_rampb[].clk = clk;
red[] = move_rampr[];
gre[] = move_rampg[];
blu[] = move_rampb[];
END;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?