📄 floatingblocks.tdf
字号:
--floatingblocks.tdf
--Zhang Yuning
--2005.7.22
include "fran_pg.inc";
include "lpm_rom.inc";
include "lpm_compare.inc";
include "lpm_add_sub.inc";
SUBDESIGN floatingblocks
(
clk : INPUT;
blocksize[6..0] : INPUT;
act_vcounter[10..0] : INPUT;
act_hcounter[10..0] : INPUT;
hposition[10..0] : INPUT;
vposition[10..0] : INPUT;
henable : OUTPUT;
venable : 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,hend_add,vsta_add,vend_add,
hsta_sub_add,hend_sub_add,
vsta_sub_add,vend_add_sub
: lpm_add_sub WITH (
LPM_WIDTH = 12,
LPM_DIRECTION = "ADD",
ONE_INPUT_IS_CONSTANT = "NO",
LPM_PIPELINE = 0
);
hsta_sub,hend_sub,vsta_sub,vend_sub,
hsta_add_sub,hend_add_sub,
vsta_add_sub,vend_add_sub
: lpm_add_sub WITH (
LPM_WIDTH = 12,
LPM_DIRECTION = "SUB",
ONE_INPUT_IS_CONSTANT = "YES",
LPM_PIPELINE = 0
);
hsta_sub_sub,hend_sub_sub,
vsta_sub_sub,vend_sub_sub
: lpm_add_sub WITH (
LPM_WIDTH = 13,
LPM_DIRECTION = "SUB",
ONE_INPUT_IS_CONSTANT = "YES",
LPM_PIPELINE = 0
);
hsta_add_compare,hend_add_compare,
vsta_add_compare,vend_add_compare,
hsta_sub_compare,hend_sub_compare,
vsta_sub_compare,vend_sub_compare
: lpm_compare WITH (
LPM_WIDTH = 12,
ONE_INPUT_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 0
);
vload1, vload2,
hload1, hload2
: lpm_compare WITH (
LPM_WIDTH = 11,
ONE_INPUT_IS_CONSTANT = "YES",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 2
);
h_sta_end_compare,
v_sta_end_compare
: lpm_compare WITH (
LPM_WIDTH = 11,
ONE_INPUT_IS_CONSTANT = "NO",
LPM_REPRESENTATION = "UNSIGNED",
LPM_PIPELINE = 0
);
hloadblock,vloadblock : SRFF;
loadhsta[10..0],loadhend[10..0] :NODE;
loadvsta[10..0],loadvend[10..0] :NODE;
h_enable,v_enable :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;
---------------------------------------------------------------------------
hsta_add.dataa[]=(0,0,hposition[9..0]);
hsta_add.datab[]=(0,hsta_table.q[]);
hend_add.dataa[]=(0,0,hposition[9..0]);
hend_add.datab[]=(0,hend_table.q[]);
vsta_add.dataa[]=(0,0,vposition[9..0]);
vsta_add.datab[]=(0,vsta_table.q[]);
vend_add.dataa[]=(0,0,vposition[9..0]);
vend_add.datab[]=(0,vend_table.q[]);
hsta_add_sub.dataa[]=hsta_add.result[];
hsta_add_sub.datab[]=HAC;
hend_add_sub.dataa[]=hend_add.result[];
hend_add_sub.datab[]=HAC;
vsta_add_sub.dataa[]=vsta_add.result[];
vsta_add_sub.datab[]=VAC;
vend_add_sub.dataa[]=vend_add.result[];
vend_add_sub.datab[]=VAC;
hsta_sub.dataa[]=(0,0,hposition[9..0]);
hsta_sub.datab[]=(0,hsta_table.q[]);
hend_sub.dataa[]=(0,0,hposition[9..0]);
hend_sub.datab[]=(0,hend_table.q[]);
vsta_sub.dataa[]=(0,0,vposition[9..0]);
vsta_sub.datab[]=(0,vsta_table.q[]);
vend_sub.dataa[]=(0,0,vposition[9..0]);
vend_sub.datab[]=(0,vend_table.q[]);
hsta_sub_sub.dataa[]=hsta_sub.result[];
hsta_sub_sub.datab[]=4096-HAC;
hend_sub_sub.dataa[]=hend_sub.result[];
hend_sub_sub.datab[]=4096-HAC;
vsta_sub_sub.dataa[]=vsta_sub.result[];
vsta_sub_sub.datab[]=4096-VAC;
vend_sub_sub.dataa[]=vend_sub.result[];
vend_sub_sub.datab[]=4096-VAC;
---------------------------------------------------------------------------
--whether boundary exceeds, if add_sub.result,if not add.result
CASE hsta_add_compare.ageb IS
WHEN 0 =>
loadhsta_add[] = hsta_add.result[10..0];
WHEN 1 =>
loadhsta_add[] = hsta_add_sub.result[10..0];
END CASE;
CASE hend_add_compare.ageb IS
WHEN 0 =>
loadhend_add[] = hend_add.result[10..0];
WHEN 1 =>
loadhend_add[] = hend_add_sub.reuslt[10..0];
END CASE;
CASE vsta_add_compare.ageb IS
WHEN 0 =>
loadvsta_add[] = vsta_add.result[10..0];
WHEN 1 =>
loadvsta_add[] = vsta_add_sub.result[10..0];
END CASE;
CASE vend_add_compare.ageb IS
WHEN 0 =>
loadvend_add[] = vend_add.result[10..1];
WHEN 1 =>
loadvend_add[] = vend_add_sub.reuslt[10..0];
END CASE;
hsta_add_compare.dataa[] = hsta_add.result[];
hsta_add_compare.datab[] = HAC ;
hend_add_compare.dataa[] = hend_add.result[];
hend_add_compare.datab[] = HAC ;
vsta_add_compare.dataa[] = vsta_add.result[];
vsta_add_compare.datab[] = VAC ;
vend_add_compare.dataa[] = vend_add.result[];
vend_add_compare.datab[] = VAC ;
--whether boundary exceeds, if add_sub.result,if not add.result
CASE hsta_sub_compare.ageb IS
WHEN 0 =>
loadhsta_sub[] = hsta_sub.result[10..0];
WHEN 1 =>
loadhsta_sub[] = hsta_sub_sub.result[10..0];
END CASE;
CASE hend_sub_compare.ageb IS
WHEN 0 =>
loadhend_sub[] = hend_sub.result[10..0];
WHEN 1 =>
loadhend_sub[] = hend_sub_sub.reuslt[10..0];
END CASE;
CASE vsta_sub_compare.ageb IS
WHEN 0 =>
loadvsta_sub[] = vsta_sub.result[10..0];
WHEN 1 =>
loadvsta_sub[] = vsta_sub_sub.result[10..0];
END CASE;
CASE vend_sub_compare.ageb IS
WHEN 0 =>
loadvend_sub[] = vend_sub.result[10..1];
WHEN 1 =>
loadvend_sub[] = vend_sub_sub.reuslt[10..0];
END CASE;
hsta_sub_compare.dataa[] = hsta_sub.result[];
hsta_sub_compare.datab[] = HAC ;
hend_sub_compare.dataa[] = hend_sub.result[];
hend_sub_compare.datab[] = HAC ;
vsta_sub_compare.dataa[] = vsta_sub.result[];
vsta_sub_compare.datab[] = VAC ;
vend_sub_compare.dataa[] = vend_sub.result[];
vend_sub_compare.datab[] = VAC ;
---------------------------------------------------------------------------
CASE hposition[10] IS
WHEN 0 =>
loadhsta[] = loadhsta_add[];
loadhend[] = loadhend_add[];
WHEN 1 =>
loadhsta[] = loadhsta_sub[];
loadhend[] = loadhend_sub[];
END CASE;
CASE vposition[10] IS
WHEN 0 =>
loadvsta[] = loadvsta_add[];
loadvend[] = loadvend_add[];
WHEN 1 =>
loadvsta[] = loadvsta_sub[];
loadvend[] = loadvend_sub[];
END CASE;
h_enable.clk=clk;
CASE h_sta_end_compare.alb IS
WHEN 1 =>
h_enable.d = hload1.ageb AND hload2.alb;
WHEN 0 =>
h_enable.d = hload1.ageb OR hload2.alb;
END CASE;
v_enable.clk=clk;
CASE v_sta_end_compare.alb IS
WHEN 1 =>
v_enable.d = vload1.ageb AND vload2.alb;
WHEN 0 =>
v_enable.d = vload1.ageb OR vload2.alb;
END CASE;
hload1.dataa[] = act_hcounter[];
hload1.datab[] = loadhsta[];
hload1.clock = clk;
hload2.dataa[] = act_hcounter[];
hload2.datab[] = loadhend[];
hload2.clock = clk;
vload1.dataa[] = act_vcounter[];
vload1.datab[] = loadvsta[];
vload1.clock = clk;
vload2.dataa[] = act_vcounter[];
vload2.datab[] = loadvend[];
vload2.clock = clk;
hload1.clock = clk;
hload2.clock = clk;
vload1.clock = clk;
vload2.clock = clk;
h_sta_end_compare.dataa[]=loadhsta[];
h_sta_end_compare.datab[]=loadhend[];
v_sta_end_compare.dataa[]=loadvsta[];
v_sta_end_compare.datab[]=loadvend[];
---------------------------------------------------------------------------
CASE blocksize[6..0] IS
WHEN 0 =>
henable = GND;
venable = GND;
WHEN 101 =>
henable = GND;
venable = GND;
WHEN OTHERS =>
henable = h_enable.q;
venable = v_enable.q;
END CASE;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -