#!/usr/bin/perl

use strict;

my $t_old ;
my $t ;
my $tt ;
my $inst ;
my $interf;
my $funct;
my $nfunc;
my $transid; 
my $transaction_mode = 1;

my %wire = ( "CMM->RRM"  => "w00" ,"RRM->CMM"  => "w01",
			 "RRC->RRM"  => "w02" ,"RRM->RRC"  => "w03",
			 "PUSU->RRM" => "w06" ,"RRM->PUSU" => "w07"
			  );
			 
my %old_value = ( 	"CMM->RRM"  => "x" ,"RRM->CMM"  => "x",
			 		"PUSU->RRM" => "x" ,"RRM->PUSU" => "x",
			      	"RRC->RRM"  => "x" ,"RRM->RRC"  => "x" );

my %value = ( 		"CMM->RRM"  => "..." ,"RRM->CMM"  => "...",
			 		"PUSU->RRM" => "..." ,"RRM->PUSU" => "...",
			      	"RRC->RRM"  => "..." ,"RRM->RRC"  => "..." );

open( FDOUT, ">wave.vcd" );

printf( FDOUT "\$comment 
Affichage des echanges du RRM avec le RRC et le CMM             
utiliser GTKwave pour visualiser ce fichier   
->	http://linux-workshop.com/bybell/ver/wave/gtkwave9x.html         
\$end
\$timescale
	1us            
\$end

\$version
 	timing simulation 
\$end

\$var real  1 w00 CMM-->RRM	    \$end
\$var real  1 w01 RRM-->CCM	    \$end
\$var real  1 w02 RRC-->RRM 	\$end
\$var real  1 w03 RRM-->RRC     \$end
\$var real  1 w04 transaction   \$end
\$var real  1 w05 instance      \$end
\$var real  1 w06 PUSU-->RRM 	\$end
\$var real  1 w07 RRM-->PUSU    \$end

\$enddefinitions \$end
" );


#open( FDIN, "<toto.res" ) ;
open( FDIN, "cat cmm2rrm.txt rrc2rrm.txt pusu2rrm.txt rrm2cmm.txt rrm2rrc.txt rrm2pusu.txt | sort -n |" ) ;
while( <FDIN>)
{
	chomp ;
	( $t, $interf, $inst, $funct, $nfunc, $transid ) = split ;
	
	$t_old = $t-0.1 if ($t_old ==0 ) ;
	
	foreach my $k ( keys %old_value )
	{
		$value{$k} = "..." ;
	}
	
	$value{"$interf"}=$funct;
	
	if ( $transaction_mode == 1)
	{
		printf( FDOUT "#%d\n",   $tt *1e6 ) ;
	}
	else
	{
		printf( FDOUT "#%d\n",   ( ($t -$t_old) *1e6) ) ;
	}
	
	printf( FDOUT "r%d w04\n", $transid ) ;
	printf( FDOUT "r%d w05\n", $inst ) ;

	foreach my $k ( keys %old_value )
	{
		if ( $value{$k} ne $old_value{$k}) 
		{
			printf( FDOUT "s%s %s\n",   $value{$k}, $wire{$k} ) ;
		}
		
		$old_value{$k} = $value{$k} ;
	}
	
	$tt+=0.1;
	
}

foreach my $k ( keys %old_value )
{
	$value{$k} = "..." ;
}


if ( $transaction_mode == 1)
{
	printf( FDOUT "#%d\ns... w04\n",   ($tt+0.1 )*1e6  ) ;
}
else
{
	printf( FDOUT "#%d\ns... w04\n",   int( ($t+0.1 -$t_old) *1e6  )) ;
}

foreach my $k ( keys %old_value )
{
	if ( $value{$k} ne $old_value{$k}) 
	{
		printf( FDOUT "s%s %s\n",   $value{$k}, $wire{$k} ) ;
	}
}

if ( $transaction_mode == 1)
{
	printf( FDOUT "#%d\ns... w04\n",   ($tt+0.2 )*1e6  ) ;
}
else
{
	printf( FDOUT "#%d\ns... w04\n",   int( ($t+0.2 -$t_old) *1e6  )) ;
}
	
close(FDIN);
close(FDOUT);
