hmovingbars0721.tdf

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

TDF
196
字号
-- hmovingbars.tdf
-- Yuning.Zhang
-- 2005-07-20

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

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

VARIABLE
									
	sta_table : LPM_ROM WITH (
				               LPM_WIDTH = 11,
				               LPM_WIDTHAD = 7,
				               LPM_ADDRESS_CONTROL = "REGISTERED",
			                   LPM_OUTDATA = "REGISTERED",
				               LPM_FILE = HSTA_TABLE_NAME
				               );
	end_table : LPM_ROM WITH (
				               LPM_WIDTH = 11,
				               LPM_WIDTHAD = 7,
				               LPM_ADDRESS_CONTROL = "REGISTERED",
				               LPM_OUTDATA = "REGISTERED",
				               LPM_FILE = HEND_TABLE_NAME
				              );
	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 = "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,end_add_sub
	           : 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;
	moving_buffer[10..0]        : NODE;
	sta_moving_buffer[10..0]    : NODE;
    end_moving_buffer[10..0]    : NODE;
    h_enable                    : NODE;
 
BEGIN

	sta_table.address[] = blocksize[];
	end_table.address[] = blocksize[];
	sta_table.inclock  = clk;
	end_table.inclock  = clk;
	sta_table.outclock = clk;
	end_table.outclock = clk;
	
	------------------------------------------------------------------------------
	--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[] = HAC-1;	
    sub_moving.datab[] = add_moving_buffer[].q;
    -------------------------------------------------------
    CASE velocity[5] IS
    WHEN 0 =>
         moving_buffer[] = add_moving_buffer[].q;
    WHEN 1 =>
         moving_buffer[] = sub_moving.result[];      
    END CASE;
	
	------------------------------------------------------------------------------
	---
	------------------------------------------------------------------------------
	sta_add.dataa[] = (0,sta_table.q[]);
	sta_add.datab[] = (0,moving_buffer[]);
	end_add.dataa[] = (0,end_table.q[]);
	end_add.datab[] = (0,moving_buffer[]);
	
	sta_add_sub.dataa[] = sta_add.result[];
	sta_add_sub.datab[] = HAC ;
	end_add_sub.dataa[] = end_add.result[];
	end_add_sub.datab[] = HAC ;
	------------------------------------------------------------------------------
	--
	------------------------------------------------------------------------------
    sta_add_compare.dataa[] = sta_add.result[];
    sta_add_compare.datab[] = HAC;
    CASE sta_add_compare.ageb IS
    WHEN 1 =>
         sta_moving_buffer[]= sta_add_sub.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[] = HAC;
    CASE end_add_compare.ageb IS
    WHEN 1 =>
         end_moving_buffer[]= end_add_sub.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 => 
       henable=GND;
    WHEN OTHERS =>
       henable=h_enable;
    END CASE; 
 
END;

⌨️ 快捷键说明

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