Line 25... |
Line 25... |
//
|
//
|
//typedef struct {
|
//typedef struct {
|
//bit [1] com;
|
//bit [1] com;
|
//bit [15:0] dat;
|
//bit [15:0] dat;
|
//} CDT_port;
|
//} CDT_port;
|
//
|
|
//module Cell_Dyna_Tree ( clk, glob_com, stageGlb, is_input, in_prev, in_next, out );
|
module Dyna_Tree ( clk, glob_com, dataIn, dataOut );
|
//
|
|
//parameter HBIT= 15;
|
parameter HBIT= 7;
|
//
|
parameter TREE_LEVEL= 4;
|
//
|
|
//input clk;
|
input clk;
|
//input glob_com;
|
input [1:0] glob_com;
|
//
|
|
//input stageGlb[3:0];
|
input [HBIT:0] dataIn;
|
//input candidateActive[3:0];
|
output [HBIT:0] dataOut;
|
//
|
|
//input parentPtr[3:0];
|
wire [HBIT:0] toLeft;
|
//input [HBIT:0] pntInQuestMsg [3:0];
|
wire [HBIT:0] toRight;
|
//input [HBIT:0] cldInQuestMsg [3:0];
|
wire [HBIT:0] fromLeft;
|
//output active = |parentPtr;
|
wire [HBIT:0] fromRight;
|
//output [HBIT:0] message;
|
|
//
|
Cell_DT_Inner #( HBIT ) inner ( clk, glob_com, dataIn, fromLeft, fromRight, dataOut, toLeft, toRight );
|
//output bit leftPtr [3:0];
|
|
//output bit rightPtr[3:0];
|
generate
|
//
|
if ( TREE_LEVEL >0 )
|
//wire leftRq; // have left subtree
|
begin
|
//wire rightRq; // have right subtree
|
Dyna_Tree #( HBIT, TREE_LEVEL-1 ) leftSubTree ( clk, glob_com, toLeft, fromLeft );
|
//
|
Dyna_Tree #( HBIT, TREE_LEVEL-1 ) rightSubTree ( clk, glob_com, toRight, fromRight );
|
////wire parentMsg= pntInQuestMsg[];
|
end
|
//
|
else
|
//Cell_DT_Inner #( HBIT ) inner ( clk, glob_com, parentMsg, leftMsg, rightMsg, message );
|
begin
|
//
|
assign fromLeft =1;
|
//always@(posedge clk )
|
assign fromRight=1;
|
//begin
|
end
|
// if ( leftRq )
|
endgenerate
|
// begin
|
|
// if ( leftPtr==0 ) // new child required
|
|
// begin
|
endmodule
|
// if ( stageGlb & ~candidateActive )
|
|
// begin
|
|
// leftPtr<= stageGlb;
|
typedef enum { VMS_NOMESSAGE=0,
|
// end
|
VMS_WRITE,
|
// end
|
VMS_READ
|
// end
|
} VMeta;
|
// else
|
|
// begin
|
module Cell_DT_Inner ( clk, glob_com, fromParent, fromLeft, fromRight, toParent, toLeft, toRight );
|
// leftPtr<= 0;
|
parameter HBIT= 7;
|
// end
|
|
// if (~hold)
|
input clk;
|
// begin
|
input [1:0] glob_com;
|
// higher <= ( cand_h > cand_l ) ? cand_h : cand_l;
|
|
// lower <= ( cand_h > cand_l ) ? cand_l : cand_h;
|
input [HBIT:0] fromParent;
|
// end
|
input [HBIT:0] fromLeft;
|
//end
|
input [HBIT:0] fromRight;
|
//endmodule
|
|
//
|
output [HBIT:0] toParent;
|
//
|
output [HBIT:0] toLeft;
|
//module Cell_DT_Inner ( clk, glob_com, parentMsg, leftMsg, rightMsg, message );
|
output [HBIT:0] toRight;
|
//parameter HBIT= 15;
|
|
//
|
reg [HBIT:0] value;
|
//input clk;
|
reg [HBIT:0] message;
|
//input [1:0]glob_com;
|
VMeta state;
|
//
|
|
//input [HBIT:0] parentMsg;
|
assign toParent= value + message;
|
//input [HBIT:0] leftMsg;
|
assign toLeft= message;
|
//input [HBIT:0] rightMsg;
|
assign toRight= value;
|
//output [HBIT:0] message;
|
|
//
|
always@(posedge clk )
|
//reg [HBIT:0] store;
|
begin
|
//reg [HBIT:0] tmp;
|
case( state )
|
//
|
VMS_NOMESSAGE: ;
|
//always@(posedge clk )
|
VMS_WRITE:
|
//begin
|
begin
|
// case( glob_com )
|
value <= fromParent +1;
|
// 2'h0: ;
|
message <= fromParent;
|
// 2'h1: ;
|
end
|
// 2'h2:
|
VMS_READ:
|
// begin
|
begin
|
// higher <= ( cand_h > cand_l ) ? cand_h : cand_l;
|
value <= fromLeft;
|
// lower <= ( cand_h > cand_l ) ? cand_l : cand_h;
|
message <= fromRight;
|
// end
|
end
|
// 2'h3: ;
|
2'h3: ;
|
// endcase
|
default: ;
|
//end
|
endcase
|
//
|
state <= VMeta'(glob_com);
|
//endmodule
|
end
|
//
|
|
//
|
endmodule
|
//
|
|
|
|
|
|