movingramps.tdf

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

TDF
191
字号
--Yuning.Zhang
--2005.7.15

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

-- AvD, one ROM (moverampgb) replaced by GND because I need an EAB for more important purposes

SUBDESIGN movingramps
(
	clk						: INPUT ;
	start_h_aeb				: INPUT ;
	vout_pulse				: INPUT ;
	act_vcounter[10..0]		: INPUT ;
	speed[1..0]				: INPUT ;
	red[9..0]				: OUTPUT;
	gre[9..0]				: OUTPUT;
	blu[9..0]				: OUTPUT;
)

VARIABLE
	
	moverampwa : LPM_ROM WITH (
				LPM_WIDTH = 8,
				LPM_WIDTHAD = 10,
				LPM_ADDRESS_CONTROL = "REGISTERED",
				LPM_OUTDATA = "REGISTERED",
				LPM_FILE = "moverampwa.mif"
				);

	moverampwb : LPM_ROM WITH (
				LPM_WIDTH = 8,
				LPM_WIDTHAD = 10,
				LPM_ADDRESS_CONTROL = "REGISTERED",
				LPM_OUTDATA = "REGISTERED",
				LPM_FILE = "moverampwb.mif"
				);

	moverampga : LPM_ROM WITH (
				LPM_WIDTH = 8,
				LPM_WIDTHAD = 10,
				LPM_ADDRESS_CONTROL = "REGISTERED",
				LPM_OUTDATA = "REGISTERED",
				LPM_FILE = "moverampga.mif"
				);

%	moverampgb : LPM_ROM WITH (
				LPM_WIDTH = 8,
				LPM_WIDTHAD = 10,
				LPM_ADDRESS_CONTROL = "REGISTERED",
				LPM_OUTDATA = "REGISTERED",
				LPM_FILE = "moverampgb.mif"
				);
%
	ramp_counter : lpm_counter WITH (
				LPM_WIDTH = 10,
				LPM_DIRECTION = "UP"
				);

	ramp_counter_compare : lpm_compare WITH (
				LPM_WIDTH = 10,
				ONE_INPUT_IS_CONSTANT = "YES",
				LPM_REPRESENTATION = "UNSIGNED",
				LPM_PIPELINE = 2
				);
				
	start_pointer_compare : lpm_compare WITH (
				LPM_WIDTH = 10,
				ONE_INPUT_IS_CONSTANT = "YES",
				LPM_REPRESENTATION = "UNSIGNED",
				LPM_PIPELINE = 0
				);

	start_point : lpm_add_sub WITH (
				LPM_WIDTH = 10,
				LPM_DIRECTION = "ADD",
				ONE_INPUT_IS_CONSTANT = "NO",
				LPM_PIPELINE = 0
				);
				
	move_rampr[9..0]		: DFF;
	move_rampg[9..0]		: DFF;
	move_rampb[9..0]		: DFF;
	start_point_buffer[9..0]: DFFE;
	node_A[10..0]			: NODE;
	node_B[10..0]			: NODE;

BEGIN
	CASE speed[] IS
	WHEN 0 =>
		start_point.dataa[9..0] = 0;
	WHEN 1 =>
		start_point.dataa[9..0] = 5;
	WHEN 2 =>
		start_point.dataa[9..0] = 6;
	WHEN 3 =>
		start_point.dataa[9..0] = 10;
	END CASE;

	start_point.datab[9..0] = start_point_buffer[9..0].q;
	
	IF NOT(start_pointer_compare.ageb)
	THEN
		start_point_buffer[9..0].d = start_point.result[9..0];
	ELSE
		start_point_buffer[9..0].d = GND;
	END IF;
	
	moverampwa.address[9..0]	= ramp_counter.q[9..0];
	moverampwa.inclock			= clk;
	moverampwa.outclock 		= clk;

	moverampwb.address[9..0]	= ramp_counter.q[9..0];
	moverampwb.inclock			= clk;
	moverampwb.outclock 		= clk;

	moverampga.address[9..0]	= ramp_counter.q[9..0];
	moverampga.inclock			= clk;
	moverampga.outclock 		= clk;

%	moverampgb.address[9..0]	= ramp_counter.q[9..0];
	moverampgb.inclock			= clk;
	moverampgb.outclock 		= clk;
%
	ramp_counter.sload = start_h_aeb;
	ramp_counter.clock = clk;
	ramp_counter.data[9..0] = start_point_buffer[9..0].q;
	ramp_counter.sclr = ramp_counter_compare.aeb AND NOT (start_h_aeb);

	start_point_buffer[].clk = clk;
	start_point_buffer[].ena = vout_pulse;  --start_v.aeb;

	ramp_counter_compare.dataa[9..0] = ramp_counter.q[9..0];
	node_A[10..0] = HAC-3;  --849
	ramp_counter_compare.datab[9..0] = node_A[9..0];
	ramp_counter_compare.clock = clk;

	start_pointer_compare.dataa[9..0] = start_point_buffer[9..0].q;
	node_B[10..0] = HAC-6;  --846
	start_pointer_compare.datab[9..0] = node_B[9..0];


	CASE (act_vcounter[8..6]) IS
	WHEN 0 =>
	  move_rampr[9..2].d = moverampwa.q[7..0];
	  move_rampg[9..2].d = moverampwa.q[7..0];
	  move_rampb[9..2].d = moverampwa.q[7..0];
	WHEN 1 =>
	  move_rampr[9..2].d = moverampwb.q[7..0];
	  move_rampg[9..2].d = moverampwb.q[7..0];
	  move_rampb[9..2].d = moverampwb.q[7..0];
	WHEN 2 =>
	  move_rampr[9..2].d = moverampwb.q[7..0];
--	  move_rampg[9..2].d = moverampgb.q[7..0];
	  move_rampg[9..2].d = GND;
	  move_rampb[9..2].d = GND; 	  
	WHEN 3 =>
	  move_rampr[9..2].d = moverampwa.q[7..0];
	  move_rampg[9..2].d = moverampga.q[7..0];
	  move_rampb[9..2].d = GND; 	  
	WHEN 4 =>
	  move_rampr[9..2].d = moverampwa.q[7..0];
	  move_rampg[9..2].d = moverampwa.q[7..0];
	  move_rampb[9..2].d = moverampwa.q[7..0];
	WHEN 5 =>
	  move_rampr[9..2].d = moverampwb.q[7..0];
	  move_rampg[9..2].d = moverampwb.q[7..0];
	  move_rampb[9..2].d = moverampwb.q[7..0];
	WHEN OTHERS =>
	  move_rampr[9..2].d = GND;
	  move_rampg[9..2].d = GND;
	  move_rampb[9..2].d = GND;
	END CASE;
	
	move_rampr[1..0].d = GND;
	move_rampg[1..0].d = GND;
	move_rampb[1..0].d = GND;
	
	move_rampr[].clk = clk;
	move_rampg[].clk = clk;
	move_rampb[].clk = clk;
	
	red[] = move_rampr[];
	gre[] = move_rampg[];
	blu[] = move_rampb[];
	
END;

⌨️ 快捷键说明

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