⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatingblocks.tdf

📁 基于fpga的屏幕测试程序
💻 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 + -