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

📄 hmovingbars.tdf

📁 基于fpga的屏幕测试程序
💻 TDF
字号:
-- hmovingbars.tdf
-- Based on Zhang Yuning's original work
-- Reworked by Chai Lin
-- 2006-08-27

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

SUBDESIGN hmovingbars
(   HAC[10..0]			: INPUT ;
	clk			    	: INPUT ;
	vout_pulse          : INPUT ;
	act_hcounter[10..0] : INPUT ;
	
	blocksize[6..0]		: INPUT ;
	h_sta[11..0]	    : INPUT ;
	h_end[11..0]	    : INPUT ;
   	velocity[5..0]      : INPUT ;  --First bit denotes direction; 
	
    henable            : OUTPUT;
)

VARIABLE
	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 = "NO",
				                    LPM_PIPELINE = 0
				                    );
	sub_moving_initial_12b
	          : lpm_add_sub WITH (
				                    LPM_WIDTH = 12,
				                    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_12b,
	end_add_sub_12b
	           : 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;
	h_ena_dff					: DFF;
	moving_buffer[10..0]        : NODE;
	sta_moving_buffer[10..0]    : NODE;
    end_moving_buffer[10..0]    : NODE;
    h_enable                    : NODE;
	h_ena                    	: NODE;
 
BEGIN
	
	------------------------------------------------------------------------------
	--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[] = sub_moving_buffer[].q;	
    sub_moving.datab[] = (0,0,0,0,0,0,velocity[4..0]);
	sub_moving_initial_12b.dataa[] = (0,HAC[]) + (0,sub_moving.result[]);
	sub_moving_initial_12b.datab[] = 2048;
	CASE sub_compare.ageb IS
	    WHEN 0 =>
	         sub_moving_buffer[].d = sub_moving.result[]; 
	    WHEN 1 =>
	         sub_moving_buffer[].d = sub_moving_initial_12b.result[10..0] ;
    END CASE;       
    sub_moving_buffer[].clk = clk;
    sub_moving_buffer[].ena = vout_pulse;

    sub_compare.dataa[]  = sub_moving.result[] ;
    sub_compare.datab[]  = HAC[] ;
    sub_compare.clock    = clk ;
	------------------------------------------------------------------------------    
	CASE velocity[5] IS
    WHEN 0 =>
         moving_buffer[] = add_moving_buffer[].q;
    WHEN 1 =>
         moving_buffer[] = sub_moving_buffer[].q;      
    END CASE;
	
	------------------------------------------------------------------------------
	sta_add.dataa[] = h_sta[];
	sta_add.datab[] = (0,moving_buffer[]);
	end_add.dataa[] = h_end[];
	end_add.datab[] = (0,moving_buffer[]);
	
	sta_add_sub_12b.dataa[] = sta_add.result[];
	sta_add_sub_12b.datab[] = (0,HAC[]) ;
	end_add_sub_12b.dataa[] = end_add.result[];
	end_add_sub_12b.datab[] = (0,HAC[]) ;
	------------------------------------------------------------------------------
    sta_add_compare.dataa[] = sta_add.result[];
    sta_add_compare.datab[] = (0,HAC[]);
    CASE sta_add_compare.ageb IS
    WHEN 1 =>
         sta_moving_buffer[]= sta_add_sub_12b.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[] = (0,HAC[]);
    CASE end_add_compare.ageb IS
    WHEN 1 =>
         end_moving_buffer[]= end_add_sub_12b.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 => 
       h_ena=GND;
    WHEN 101=>
       h_ena=GND;
    WHEN OTHERS =>
       h_ena=h_enable;
    END CASE; 
	
	h_ena_dff.clk	=	clk;
	h_ena_dff.d		=	h_ena;	
 	henable=h_ena_dff.q;
END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -