movingblocks.tdf
来自「基于fpga的屏幕测试程序」· TDF 代码 · 共 248 行
TDF
248 行
-- moving_block.tdf
-- Yuning.Zhang, 2005-07-18
--
include "fran_pg.inc";
include "lpm_rom.inc";
include "lpm_compare";
--include "lpm_counter.inc";
include "lpm_add_sub.inc";
SUBDESIGN movingblocks
(
clk : INPUT ;
vout_pulse : INPUT ;
act_vcounter[10..0] : INPUT ;
act_hcounter[10..0] : INPUT ;
h_position[11..0] : INPUT ; --First bit denotes direction;
v_position[11..0] : INPUT ;
hvel[5..0] : INPUT ; --First bit denotes direction;
vvel[5..0] : INPUT ;
blocksize[6..0] : INPUT ;
red_in[9..0] : INPUT ;
green_in[9..0] : INPUT ;
blue_in[9..0] : INPUT ;
red_out[9..0] : OUTPUT;
green_out[9..0] : OUTPUT;
blue_out[9..0] : OUTPUT;
)
VARIABLE
hsta_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = HSTA_TABLE_NAME
);
hend_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = HEND_TABLE_NAME
);
vsta_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = VSTA_TABLE_NAME
);
vend_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = VEND_TABLE_NAME
);
hsta_add_position,hend_add_position,
vsta_add_position,vend_add_position,
h_moving,v_moving,
hsta_add,hend_add,vsta_add,vend_add
: lpm_add_sub WITH (
LPM_WIDTH = 11,
LPM_DIRECTION = "ADD",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
hsta_sub_position,hend_sub_position,
vsta_sub_position,vend_sub_position,
hsta_sub,hend_sub,vsta_sub,vend_sub
: lpm_add_sub WITH (
LPM_WIDTH = 11,
LPM_DIRECTION = "SUB",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
vload1, vload2,
hload1, hload2
: lpm_compare WITH (
LPM_WIDTH = 11,
ONE_INPUT_IS_CONSTANT = "NO",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 2
);
hloadblock,vloadblock : SRFF;
h_enable,v_enable : NODE;
h_moving_buffer[10..0] : DFFE;
v_moving_buffer[10..0] : DFFE;
BEGIN
hsta_table.address[] = blocksize[];
hend_table.address[] = blocksize[];
vsta_table.address[] = blocksize[];
vend_table.address[] = blocksize[];
hsta_table.inclock = clk;
hend_table.inclock = clk;
vsta_table.inclock = clk;
vend_table.inclock = clk;
hsta_table.outclock = clk;
hend_table.outclock = clk;
vsta_table.outclock = clk;
vend_table.outclock = clk;
------------------------------------------------------------------------------
--Effection of Position ------------------------------------------------------
------------------------------------------------------------------------------
hsta_add_position.dataa[]=hsta_table.q[];
hsta_sub_position.dataa[]=hsta_table.q[];
hend_add_position.dataa[]=hend_table.q[];
hend_sub_position.dataa[]=hend_table.q[];
vsta_add_position.dataa[]=vsta_table.q[];
vsta_sub_position.dataa[]=vsta_table.q[];
vend_add_position.dataa[]=vend_table.q[];
vend_sub_position.dataa[]=vend_table.q[];
hsta_add_position.datab[]=h_position[10..0];
hsta_sub_position.datab[]=h_position[10..0];
hend_add_position.datab[]=h_position[10..0];
hend_sub_position.datab[]=h_position[10..0];
vsta_add_position.datab[]=v_position[10..0];
vsta_sub_position.datab[]=v_position[10..0];
vend_add_position.datab[]=v_position[10..0];
vend_sub_position.datab[]=v_position[10..0];
CASE h_position[11] IS
WHEN 0 =>
hsta_add.dataa[] = hsta_add_position.result[];
hsta_sub.dataa[] = hsta_add_position.result[];
hend_add.dataa[] = hend_add_position.result[];
hend_sub.dataa[] = hend_add_position.result[];
WHEN 1 =>
hsta_add.dataa[] = hsta_sub_position.result[];
hsta_sub.dataa[] = hsta_sub_position.result[];
hend_add.dataa[] = hend_sub_position.result[];
hend_sub.dataa[] = hend_sub_position.result[];
END CASE;
CASE v_position[11] IS
WHEN 0 =>
vsta_add.dataa[] = vsta_add_position.result[];
vsta_sub.dataa[] = vsta_add_position.result[];
vend_add.dataa[] = vend_add_position.result[];
vend_sub.dataa[] = vend_add_position.result[];
WHEN 1 =>
vsta_add.dataa[] = vsta_sub_position.result[];
vsta_sub.dataa[] = vsta_sub_position.result[];
vend_add.dataa[] = vend_sub_position.result[];
vend_sub.dataa[] = vend_sub_position.result[];
END CASE;
------------------------------------------------------------------------------
--EFFECT OF MOVING
------------------------------------------------------------------------------
hsta_add.datab[] = h_moving_buffer[].q;
hsta_sub.datab[] = h_moving_buffer[].q;
hend_add.datab[] = h_moving_buffer[].q;
hend_sub.datab[] = h_moving_buffer[].q;
vsta_add.datab[] = v_moving_buffer[].q;
vsta_sub.datab[] = v_moving_buffer[].q;
vend_add.datab[] = v_moving_buffer[].q;
vend_sub.datab[] = v_moving_buffer[].q;
h_moving.dataa[] = h_moving_buffer[].q;
h_moving.datab[] = (0,0,0,0,0,0,hvel[4..0]);
h_moving_buffer[].d = h_moving.result[];
h_moving_buffer[].clk=clk;
h_moving_buffer[].ena=vout_pulse;
v_moving.dataa[]= v_moving_buffer[].q;
v_moving.datab[]=(0,0,0,0,0,0,vvel[4..0]);
v_moving_buffer[].d = v_moving.result[];
v_moving_buffer[].clk=clk;
v_moving_buffer[].ena=vout_pulse;
CASE hvel[5] IS
WHEN 0 =>
hload1.datab[] = (0,hsta_add.result[9..0]) ;
hload2.datab[] = (0,hend_add.result[9..0]) ;
WHEN 1 =>
hload1.datab[] = (0,hsta_sub.result[9..0]) ;
hload2.datab[] = (0,hend_sub.result[9..0]) ;
END CASE;
CASE vvel[5] IS
WHEN 0 =>
vload1.datab[] = (0,0,vsta_add.result[8..0]) ;
vload2.datab[] = (0,0,vend_add.result[8..0]) ;
WHEN 1 =>
vload1.datab[] = (0,0,vsta_sub.result[8..0]) ;
vload2.datab[] = (0,0,vend_sub.result[8..0]) ;
END CASE;
------------------------------------------------------------------------------
--
------------------------------------------------------------------------------
hload1.dataa[10..0] = act_hcounter[10..0];
hload1.clock = clk;
hload2.dataa[10..0] = act_hcounter[10..0];
hload2.clock = clk;
vload1.dataa[10..0] = act_vcounter[10..0];
vload1.clock = clk;
vload2.dataa[10..0] = act_vcounter[10..0];
vload2.clock = clk;
hloadblock.clk = clk;
hloadblock.S = hload1.aeb;
hloadblock.R = hload2.aeb;
vloadblock.clk = clk;
vloadblock.S = vload1.aeb;
vloadblock.R = vload2.aeb;
CASE blocksize[] IS
WHEN 0 =>
h_enable = GND;
v_enable = GND;
WHEN 101 =>
h_enable = GND;
v_enable = GND;
WHEN OTHERS =>
h_enable = hloadblock.q;
v_enable = vloadblock.q;
END CASE;
red_out[] = red_in[] AND h_enable AND v_enable;
green_out[]= green_in[] AND h_enable AND v_enable;
blue_out[] = blue_in[] AND h_enable AND v_enable;
END;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?