hmovingbars0721.tdf
来自「基于fpga的屏幕测试程序」· TDF 代码 · 共 196 行
TDF
196 行
-- hmovingbars.tdf
-- Yuning.Zhang
-- 2005-07-20
include "fran_pg.inc";
include "lpm_rom.inc";
include "lpm_compare";
include "lpm_counter.inc";
include "lpm_add_sub.inc";
SUBDESIGN hmovingbars
(
clk : INPUT ;
vout_pulse : INPUT ;
-- start_h_aeb : INPUT ;
act_hcounter[10..0] : INPUT ;
blocksize[6..0] : INPUT ;
velocity[5..0] : INPUT ; --First bit denotes direction;
henable : OUTPUT;
)
VARIABLE
sta_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = HSTA_TABLE_NAME
);
end_table : LPM_ROM WITH (
LPM_WIDTH = 11,
LPM_WIDTHAD = 7,
LPM_ADDRESS_CONTROL = "REGISTERED",
LPM_OUTDATA = "REGISTERED",
LPM_FILE = HEND_TABLE_NAME
);
add_moving: lpm_add_sub WITH (
LPM_WIDTH = 11,
LPM_DIRECTION = "ADD",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
sub_moving: lpm_add_sub WITH (
LPM_WIDTH = 11,
LPM_DIRECTION = "SUB",
ONE_INPUT_IS_CONSTANT = "YES",
LPM_PIPELINE = 0
);
add_compare,--sub_compare,
load1,load2
: lpm_compare WITH (
LPM_WIDTH = 11,
ONE_INPUT_IS_CONSTANT = "NO",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 2
);
sta_add,end_add
: lpm_add_sub WITH (
LPM_WIDTH = 12,
LPM_DIRECTION = "ADD",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
sta_add_sub,end_add_sub
: lpm_add_sub WITH (
LPM_WIDTH = 12,
LPM_DIRECTION = "SUB",
ONE_INPUT_IS_CONSTANT = "YES",
LPM_PIPELINE = 0
);
sta_add_compare,end_add_compare
: lpm_compare WITH (
LPM_WIDTH = 12,
ONE_INPUT_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 0
);
sta_end_compare
: lpm_compare WITH (
LPM_WIDTH = 11,
ONE_INPUT_IS_CONSTANT = "NO",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 1
);
add_moving_buffer[10..0] : DFFE;
--sub_moving_buffer[10..0] : DFFE;
moving_buffer[10..0] : NODE;
sta_moving_buffer[10..0] : NODE;
end_moving_buffer[10..0] : NODE;
h_enable : NODE;
BEGIN
sta_table.address[] = blocksize[];
end_table.address[] = blocksize[];
sta_table.inclock = clk;
end_table.inclock = clk;
sta_table.outclock = clk;
end_table.outclock = clk;
------------------------------------------------------------------------------
--EFFECT OF MOVING
------------------------------------------------------------------------------
add_moving.dataa[] = add_moving_buffer[].q;
add_moving.datab[] = (0,0,0,0,0,0,velocity[4..0]);
CASE add_compare.ageb IS
WHEN 0 =>
add_moving_buffer[].d = add_moving.result[];
WHEN 1 =>
add_moving_buffer[].d = add_moving.result[]-HAC ;
END CASE;
add_moving_buffer[].clk=clk;
add_moving_buffer[].ena=vout_pulse;
add_compare.dataa[] = add_moving.result[] ;
add_compare.datab[] = HAC ;
add_compare.clock = clk ;
sub_moving.dataa[] = HAC-1;
sub_moving.datab[] = add_moving_buffer[].q;
-------------------------------------------------------
CASE velocity[5] IS
WHEN 0 =>
moving_buffer[] = add_moving_buffer[].q;
WHEN 1 =>
moving_buffer[] = sub_moving.result[];
END CASE;
------------------------------------------------------------------------------
---
------------------------------------------------------------------------------
sta_add.dataa[] = (0,sta_table.q[]);
sta_add.datab[] = (0,moving_buffer[]);
end_add.dataa[] = (0,end_table.q[]);
end_add.datab[] = (0,moving_buffer[]);
sta_add_sub.dataa[] = sta_add.result[];
sta_add_sub.datab[] = HAC ;
end_add_sub.dataa[] = end_add.result[];
end_add_sub.datab[] = HAC ;
------------------------------------------------------------------------------
--
------------------------------------------------------------------------------
sta_add_compare.dataa[] = sta_add.result[];
sta_add_compare.datab[] = HAC;
CASE sta_add_compare.ageb IS
WHEN 1 =>
sta_moving_buffer[]= sta_add_sub.result[10..0];
WHEN 0 =>
sta_moving_buffer[]= sta_add.result[10..0];
END CASE;
end_add_compare.dataa[] = end_add.result[];
end_add_compare.datab[] = HAC;
CASE end_add_compare.ageb IS
WHEN 1 =>
end_moving_buffer[]= end_add_sub.result[10..0];
WHEN 0 =>
end_moving_buffer[]= end_add.result[10..0];
END CASE;
---------------------------------------------------------------------------
--
---------------------------------------------------------------------------
sta_end_compare.dataa[] = sta_moving_buffer[];
sta_end_compare.datab[] = end_moving_buffer[];
sta_end_compare.clock =clk;
load1.dataa[] = act_hcounter[];
load1.datab[] = sta_moving_buffer[];
load1.clock = clk ;
load2.dataa[] = act_hcounter[];
load2.datab[] = end_moving_buffer[];
load2.clock = clk ;
CASE sta_end_compare.alb IS
WHEN 1 =>
h_enable = load1.ageb AND load2.alb;
WHEN 0 =>
h_enable = load1.ageb OR load2.alb;
END CASE;
CASE blocksize[] IS
WHEN 0 =>
henable=GND;
WHEN OTHERS =>
henable=h_enable;
END CASE;
END;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?