h_moving_blocks.tdf

来自「基于fpga的屏幕测试程序」· TDF 代码 · 共 212 行

TDF
212
字号
-- h_moving_block.tdf
-- Yuning.Zhang, 2005-07-14
-- 


include "fran_pg.inc";
include "lpm_rom.inc";
include "lpm_compare";
include "lpm_counter.inc";
include "lpm_add_sub.inc";

SUBDESIGN h_moving_blocks
(
	clk			    	: INPUT ;
	vout_pulse          : INPUT ;
	act_vcounter[10..0]	: INPUT ;
	act_hcounter[10..0] : INPUT ;

	v_position[7..0]    : INPUT ;   --first bit denotes direction,verticle position, 
	velocity[4..0]      : INPUT ;   --First bit denotes direction;
	
	blocksize[4..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
				               );
				
    vload1, vload2,
    hload1, hload2
     			: lpm_compare WITH (
				                    LPM_WIDTH = 11,
									ONE_INPUT_IS_CONSTANT = "YES",
									LPM_REPRESENTATION = "UNSIGNED",
									LPM_PIPELINE = 2
									);
									
	h_position : lpm_add_sub WITH (
				                    LPM_WIDTH = 11,
				                    LPM_DIRECTION = "ADD",
				                    ONE_INPUT_IS_CONSTANT = "NO",
				                    LPM_PIPELINE = 0
				                    );
				
	hsta_r,hend_r,vsta_u,vend_u
	           : lpm_add_sub WITH (
				                    LPM_WIDTH = 11,
				                    LPM_DIRECTION = "ADD",
				                    ONE_INPUT_IS_CONSTANT = "NO",
				                    LPM_PIPELINE = 0
				                    );
	
	hsta_l,hend_l,vsta_d,vend_d
	           : lpm_add_sub WITH (
				                    LPM_WIDTH = 11,
				                    LPM_DIRECTION = "SUB",
				                    ONE_INPUT_IS_CONSTANT = "NO",
				                    LPM_PIPELINE = 0
				                    );
	
	hloadblock,vloadblock	: SRFF;
	hsta[10..0],hend[10..0]   : NODE;              
	vsta[10..0],vend[10..0]   : NODE;
    h_enable,v_enable       : NODE;
	h_position_buffer[10..0] : DFFE;
	
BEGIN
%
    CASE  blocksize[4..0] IS
    WHEN 31      =>
	hsta_table.address[] = 102;
	hend_table.address[] = 102;
	vsta_table.address[] = 102;
	vend_table.address[] = 102;
	WHEN OTHERS =>
	hsta_table.address[] = (0,0,blocksize[4..0]);
	hend_table.address[] = (0,0,blocksize[4..0]);
	vsta_table.address[] = (0,0,blocksize[4..0]);
	vend_table.address[] = (0,0,blocksize[4..0]);	
	END CASE;
	
	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;
	
	h_position.dataa[] = (0,0,0,0,0,0,0,velocity[3..0]);
	h_position.datab[] = h_position_buffer[10..0].q;
	
	h_position_buffer[].clk = clk;
	h_position_buffer[].ena = vout_pulse;
	h_position_buffer[].d   = h_position.result[];
		
	----------------------------------------------------
	CASE v_position[7] IS
	WHEN 0 =>
	     vsta[] = vsta_u.result[];
	     vend[] = vend_u.result[];
	WHEN 1 =>
	     vsta[] = vsta_d.result[];
	     vend[] = vend_d.result[];
	END CASE;

	CASE velocity[4] IS
	WHEN 0 =>
	    hsta[] = hsta_r.result[];
	    hend[] = hend_r.result[];
	WHEN 1 =>
	     hsta[] = hsta_l.result[];
	     hend[] = hend_l.result[];
	END CASE;
	
	hsta_r.dataa[] = hsta_table.q[10..0];
	hend_r.dataa[] = hend_table.q[10..0];
	vsta_u.dataa[] = vsta_table.q[10..0];
	vend_u.dataa[] = vend_table.q[10..0];
	hsta_r.datab[] = h_position_buffer[10..0].q;
	hend_r.datab[] = h_position_buffer[10..0].q;
	vsta_u.datab[] = (0,0,v_position[6..0],0,0);
	vend_u.datab[] = (0,0,v_position[6..0],0,0);

    hsta_l.dataa[] = hsta_table.q[10..0];
	hend_l.dataa[] = hend_table.q[10..0];
	vsta_d.dataa[] = vsta_table.q[10..0];
	vend_d.dataa[] = vend_table.q[10..0];
	hsta_l.datab[] = h_position_buffer[10..0].q;
	hend_l.datab[] = h_position_buffer[10..0].q;
	vsta_d.datab[] = (0,0,v_position[6..0],0,0);
	vend_d.datab[] = (0,0,v_position[6..0],0,0);
	
	
    --------------------------------------------------------
    vload1.dataa[10..0] = act_vcounter[10..0];
    vload1.datab[10..0] = vsta[10..0];
    vload1.clock = clk;

    vload2.dataa[10..0] = act_vcounter[10..0];
    vload2.datab[10..0] = vend[10..0];
    vload2.clock = clk;

    --------------------------------------------------------
    hload1.dataa[10..0] = act_hcounter[10..0];
    hload1.datab[] = hsta[];
    hload1.clock = clk;

    hload2.dataa[10..0] = act_hcounter[10..0];
    hload2.datab[] = hend[];
    hload2.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 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 + -
显示快捷键?