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

Subversion Repositories numbert_sort_device

[/] [numbert_sort_device/] [trunk/] [main/] [dynamic_tree.sv] - Diff between revs 7 and 8

Show entire file | Details | Blame | View Log

Rev 7 Rev 8
Line 61... Line 61...
function logic [1:0] CH_NUM( logic [3:0] k );
function logic [1:0] CH_NUM( logic [3:0] k );
CH_NUM = k[1:0];
CH_NUM = k[1:0];
endfunction
endfunction
 
 
typedef enum bit[3:0] {         VMS_EMPTY=4'h0,
typedef enum bit[3:0] {         VMS_EMPTY=4'h0,
 
                                                VMS_BUSY,
                                                VMS_READY,
                                                VMS_READY,
                                                VMS_PROCESS,
 
                                                VMS_BOMB,
                                                VMS_BOMB,
 
 
                                                VMS_READ,
                                                VMS_READ,
                                                VMS_APPLY,
                                                VMS_APPLY,
                                                VMS_STOP                //      end of tree
                                                VMS_STOP                //      end of tree
Line 123... Line 123...
                        if ( !value )
                        if ( !value )
                        begin   //      writing left
                        begin   //      writing left
                                value <=  fromParent;//==VK_APPLY || fromParent==VK_EMPTY || fromParent==VK_K0 ? fromParent : VK_DUMMY5;                //      write self
                                value <=  fromParent;//==VK_APPLY || fromParent==VK_EMPTY || fromParent==VK_K0 ? fromParent : VK_DUMMY5;                //      write self
                                if ( fromParent && CH_NUM( fromParent )==0 )
                                if ( fromParent && CH_NUM( fromParent )==0 )
                                begin
                                begin
                                        message.msg <= VMS_READY;
                                        message.msg <= fromParent;
                                        message.tgt <= TO_PARENT;
                                        message.tgt <= TO_PARENT;
                                        state       <= VMS_READY;
                                        state       <= VMS_READY;
                                end
                                end
                        end
                        end
                        else if ( CH_NUM( value )!=0 && ~fromLeft[0] )
                        else if ( CH_NUM( value )!=0 && fromLeft==0 )
                        begin                                                           //      write left
                        begin                                                           //      write left
                                message.msg <= fromParent;
                                message.msg <= fromParent;
                                message.tgt <= TO_LEFT;
                                message.tgt <= TO_LEFT;
                        end
                        end
                        else if ( CH_NUM( value )==2 && ~fromRight[0] )
                        else if ( CH_NUM( value )==2 && fromRight==0 )
                        begin                                                           //      begin writing right
                        begin                                                           //      begin writing right
                                message.msg <= fromParent;
                                message.msg <= fromParent;
                                message.tgt <= TO_RIGHT;
                                message.tgt <= TO_RIGHT;
                        end
                        end
                        else
                        else
                        begin
                        begin
                                message.msg <= VMS_READY;
                                message.msg <= VMS_BUSY;
                                message.tgt <= TO_PARENT;
                                message.tgt <= TO_PARENT;
                                state       <= VMS_READY;
                                state       <= VMS_BUSY;
                        end
                        end
                end
                end
 
 
                VMS_READ:
                VMS_BUSY:
                begin
                begin
                        if ( message.msg == VK_EOF )
                        if ( fromLeft && ( CH_NUM( value )==1 || fromRight ) )
                        begin
                        begin
                                message.msg <= VMS_READY;               //      end read 2
                                if ( value != VK_APPLY )
 
                                begin
 
                                        message.msg <= value;
                                state       <= VMS_READY;
                                state       <= VMS_READY;
                        end
                        end
//                      else if ( message.msg == VMS_READY && value != VK_TRANSIT )
                                else
//                      begin
 
//                              message.msg <= value;           //      read self
 
//                              message.tgt <= TO_PARENT;
 
//                      end
 
                        else if ( CH_NUM( value )==0 )
 
                        begin
                        begin
                                message.msg <= VK_EOF;          //      end read 1.1
                                        case (step)
 
                                        0:
 
                                        begin
 
                                                message.msg <= VMS_READ;
 
                                                message.tgt <= TO_RIGHT;
 
                                                step <= 1;
                        end
                        end
                        else if ( ~step[0] && fromLeft == VMS_READY )
                                        1:
 
                                        begin
 
                                                message.msg <= VMS_APPLY;
 
                                                message.tgt <= TO_LEFT;
 
                                                step <= 2;
 
                                        end
 
                                        2:
 
                                        begin
 
                                                if ( fromRight == VK_EOF )
 
                                                begin
 
                                                        step <= 3;
 
                                                        message.msg <= VK_EMPTY;
 
                                                end
 
                                                else
                        begin
                        begin
                                message.msg <= VMS_READ;                //      command left
 
                                message.tgt <= TO_LEFT;
                                message.tgt <= TO_LEFT;
 
                                                        message.msg <= fromRight;
 
                                                end
                        end
                        end
                        else if ( ~step[0] && fromLeft != VK_EOF )
                                        3:
 
                                        begin
 
                                                value       <= VK_TRANSIT;
 
                                                state       <= VMS_BUSY;
 
                                                message.msg <= VMS_BOMB;
 
                                                message.tgt <= TO_RIGHT;
 
                                                step <= 0;
 
                                        end
 
                                        endcase
 
                                end
 
                        end
 
                end
 
 
 
                VMS_READ:
 
                begin
 
                        if ( message.msg == VK_EOF )
 
                        begin
 
                                message.msg <= value;           //      end read 2
 
                                state       <= VMS_READY;
 
                                step <= 0;
 
                        end
 
                        else if ( step==0 && fromLeft != VK_EOF )
                        begin
                        begin
                                message.msg <= fromLeft;                //      transfer left
                                message.msg <= fromLeft;                //      transfer left
                                message.tgt <= TO_PARENT;
                                message.tgt <= TO_PARENT;
                        end
                        end
                        else if ( CH_NUM( value )==1 )
                        else if ( CH_NUM( value )==1 )
                        begin
                        begin
 
                                message.tgt <= TO_PARENT;
                                message.msg <= VK_EOF;          //      end read 1.2
                                message.msg <= VK_EOF;          //      end read 1.2
                        end
                        end
                        else if ( fromRight == VMS_READY )
                        else if ( step==0 )
                        begin
                        begin
                                message.msg <= VMS_READ;                //      command right
                                message.msg <= VMS_READ;                //      command right
                                message.tgt <= TO_RIGHT;
                                message.tgt <= TO_RIGHT;
                                step[0] <= 1;
                                step <= 1;
                        end
                        end
                        else if ( fromRight != VK_EOF )
                        else if ( fromRight != VK_EOF )
                        begin
                        begin
                                message.msg <= fromRight;               //      transfer right
                                message.msg <= fromRight;               //      transfer right
                                message.tgt <= TO_PARENT;
                                message.tgt <= TO_PARENT;
                        end
                        end
                        else
                        else
                        begin
                        begin
                                message.msg <= VK_EOF;          //      end read 1.3
                                message.msg <= VK_EOF;          //      end read 1.3
                                step[0] <= 0;
 
                        end
                        end
 
 
 
 
                end
                end
 
 
Line 208... Line 245...
                                state           <= VMS_EMPTY;
                                state           <= VMS_EMPTY;
                                value           <= VK_EMPTY;
                                value           <= VK_EMPTY;
                        end
                        end
                        VMS_READ:                                               //      read self
                        VMS_READ:                                               //      read self
                        begin
                        begin
                                if ( value != VK_TRANSIT )
                                if ( CH_NUM( value )==0 )
                                begin
                                begin                                                                   //      begin 1
                                        message.msg <= value;
                                        message.msg <= VK_EOF;          //      end read 1.1
                                        message.tgt <= TO_PARENT;
 
                                end
                                end
 
                                else
 
                                begin                                                                   //      begin 2
 
                                        message.msg <= VMS_READ;        //      command left
 
                                        message.tgt <= TO_LEFT;
 
                                end
 
                                if ( value != VK_TRANSIT || step==1 )
 
                                begin
                                state       <= VMS_READ;
                                state       <= VMS_READ;
 
                                        step                    <= 0;
 
                                end
 
                                else
 
                                        step <= 1;
                        end
                        end
                        VMS_APPLY:                                              //      apply string from parent to itself
                        VMS_APPLY:                                              //      apply string from parent to itself
                        begin
                        begin
                                if ( CH_NUM( value )!=0 )
                                if ( CH_NUM( value )!=0 )
                                begin
                                begin
Line 246... Line 293...
                                        end
                                        end
                                        endcase
                                        endcase
                                end
                                end
                        end
                        end
                        default:
                        default:
 
                        if ( value == VK_TRANSIT )
                        begin
                        begin
                                message.msg <= VMS_READY;
                                message.msg <= fromLeft;
 
                                message.tgt <= TO_PARENT;
 
                        end
 
                        else
 
                        begin
 
                                message.msg <= value;
                                message.tgt <= TO_PARENT;
                                message.tgt <= TO_PARENT;
                        end
                        end
                        endcase
                        endcase
                end
                end
 
 
Line 262... Line 315...
                        message.tgt <= TO_CHILDREN;
                        message.tgt <= TO_CHILDREN;
                end
                end
                else
                else
                begin
                begin
                        message.msg <= VK_EMPTY;
                        message.msg <= VK_EMPTY;
                        state       <= VMS_READY;
                        state       <= VMS_BUSY;
                        value                   <= VK_APPLY;	//	Sxyz -> _`_ (`xz) (`yz)
                        value                   <= VK_APPLY;	//	Sxyz -> _`_ (`xz) (`yz)
                end
                end
                endcase
                endcase
        end
        end
        default:                                                                //      reset mode
        default:                                                                //      reset mode

powered by: WebSVN 2.1.0

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