v_moving_blocks.tdf

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

TDF
210
字号
-- h_moving_block.tdf-- Yuning.Zhang, 2005-07-14-- include "fran_pg.inc";include "lpm_rom.inc";include "lpm_compare";include "lpm_counter.inc";SUBDESIGN v_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 position,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 = 10,				                    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 = 10,				                    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 = 10,				                    LPM_DIRECTION = "SUB",				                    ONE_INPUT_IS_CONSTANT = "NO",				                    LPM_PIPELINE = 0				                    );		hloadblock,vloadblock	: SRFF;	hsta[9..0],hend[9..0]   : NODE;              	vsta[9..0],vend[9..0]   : NODE;    h_enable,v_enable       : NODE;	h_position_buffer[9..0] : DFFE;	BEGIN    CASE  blocksize[2..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;		h_position.dataa = (velocity[3..0]);	h_position.datab = h_position_buffer[9..0];		h_position_buffer.clk = clk;	h_position_buffer.ena = vout_pulse;	h_position_buffer.d   = h_position.rusult;		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;		----------------------------------------------------	CASE v_position 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 = hsta_r.result;	WHEN 1 =>	     hsta = hsta_l.result;	     hend = hend_l.result;	END CASE;		hsta_r.dataa[] = hsta_table.q[9..0];	hend_r.dataa[] = hend_table.q[9..0];	vsta_r.dataa[] = vsta_table.q[9..0];	vend_r.dataa[] = vend_table.q[9..0];	hsta_r.datab[] = h_position_buffer.q[9..0];	hend_r.datab[] = h_position_buffer.q[9..0];	vsta_r.datab[] = (v_position[6..0],0);	vend_r.datab[] = (v_position[6..0],0);    hsta_l.dataa[] = hsta_table.q[9..0];	hend_l.dataa[] = hend_table.q[9..0];	vsta_l.dataa[] = vsta_table.q[9..0];	vend_l.dataa[] = vend_table.q[9..0];	hsta_l.datab[] = h_position_buffer.q[9..0];	hend_l.datab[] = h_position_buffer.q[9..0];	vsta_l.datab[] = (v_position[6..0],0);	vend_l.datab[] = (v_position[6..0],0);		    --------------------------------------------------------    vload1.dataa[10..0] = act_vcounter[10..0];    vload1.datab[10..0] = (0,vsta);    vload1.clock = clk;    vload2.dataa[10..0] = act_vcounter[10..0];    vload2.datab[10..0] = (0,vend);    vload2.clock = clk;    --------------------------------------------------------    hload1.dataa[10..0] = act_hcounter[10..0];    hload1.datab[10..0] = hsta;    hload1.clock = clk;    hload2.dataa[10..0] = act_hcounter[10..0];    hload2.datab[10..0] = 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;        IF (blocksize) THEN       h_enable = hloadblock.q;       v_enable = vloadblock.q;            ELSE       h_enable = GND;       v_enable = GND;    END IF;       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 + -
显示快捷键?