OpenCores
URL https://opencores.org/ocsvn/hive/hive/trunk

Subversion Repositories hive

[/] [hive/] [trunk/] [v01.09/] [cond_test.v] - Rev 2

Compare with Previous | Blame | View Log

/*
--------------------------------------------------------------------------------
 
Module : cond_test.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor tests for conditional jumps, etc.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- Parameterized register(s) test inputs.
- Parameterized register(s) @ output.
 
--------------------------------------------------------------------------------
*/
 
module cond_test
	#(
	parameter	integer							REGS_TST			= 0,		// reg option input to test
	parameter	integer							REGS_OUT			= 0		// reg option test to output
	)
	(
	// clocks & resets
	input			wire								clk_i,						// clock
	input			wire								rst_i,						// async. reset, active high
	// flags (combinatorial)
	input			wire								nez_i,						//	a != 0
	input			wire								ne_i,							//	a != b
	input			wire								ltz_i,						//	a < 0
	input			wire								lt_i,							//	a < b
	// tests (optionally registered)
	input			wire								tst_gt_i,					// > test
	input			wire								tst_lt_i,					// < test
	input			wire								tst_eq_i,					// = test
	input			wire								tst_ab_i,					// 1=a/b test; 0=a/z test
	// output (optionally registered)
	output		wire								tst_o							// 1=true; 0=false
	);
 
 
	/*
	----------------------
	-- internal signals --
	----------------------
	*/
	wire												tst_ab, tst_gt, tst_lt, tst_eq;
	wire												eqz, gtz;
	wire												eq, gt;
	wire					[2:0]						t_cat, az_cat, ab_cat;
	wire												res_az, res_ab, tst;
 
 
 
	/*
	================
	== code start ==
	================
	*/
 
 
	// input to test regs
	vector_sr
	#(
	.REGS			( REGS_TST ),
	.DATA_W		( 4 ),
	.RESET_VAL	( 0 )
	)
	tst_regs
	(
	.clk_i		( clk_i ),
	.rst_i		( rst_i ),
	.data_i		( { tst_ab_i, tst_gt_i, tst_lt_i, tst_eq_i } ),
	.data_o		( { tst_ab,   tst_gt,   tst_lt,   tst_eq } )
	);
 
 
	// concat tests
	assign t_cat = { tst_gt, tst_lt, tst_eq };
 
	// decode conditionals, & mask, | bit reduction => results
	assign eqz = ~nez_i;
	assign gtz = ~( ltz_i | eqz );
	assign az_cat = { gtz, ltz_i, eqz };
	assign res_az = |( t_cat & az_cat );
	//
	assign eq = ~ne_i;
	assign gt = ~( lt_i | eq );
	assign ab_cat = { gt, lt_i, eq };
	assign res_ab = |( t_cat & ab_cat );
 
	// select result
	assign tst = ( tst_ab ) ? res_ab : res_az;
 
 
	// result to output regs
	vector_sr
	#(
	.REGS			( REGS_OUT ),
	.DATA_W		( 1 ),
	.RESET_VAL	( 0 )
	)
	out_regs
	(
	.clk_i		( clk_i ),
	.rst_i		( rst_i ),
	.data_i		( tst ),
	.data_o		( tst_o )
	);
 
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.