在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1974|回复: 1

[原创] perl 脚本0

[复制链接]
发表于 2012-10-31 00:29:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 sally8512152 于 2012-10-31 01:11 编辑

package SET;
my @checker;
my $deep;
sub new {
    my $class = shift;
    my $name  = shift @_;
    my $type  = shift @_;
    my $point_op_set_name  = shift @_;
    my $point_op_dcd_name  = shift @_;
    my $point_op_dcd_value = shift @_;
    my $point_op_dcd_len   = shift @_;
    my $point_op_dcd_orint = shift @_;
    my $worksheet          = shift @_;
   
    my @op_set_name = @$point_op_set_name;
    my @op_dcd_name  = @$point_op_dcd_name;
    my @op_dcd_value = @$point_op_dcd_value;
    my %op_dcd_len   = %$point_op_dcd_len;
    my %op_dcd_orint = %$point_op_dcd_orint;
   
    my $ref =   { "Name" => $name,
                  "Type" => $type,
                  "P_op_set_name"  => \@op_set_name,
                  "P_op_dcd_name"  => \@op_dcd_name,
                  "P_op_dcd_value" => \@op_dcd_value,
                  "P_op_dcd_len"   => \%op_dcd_len,
                  "P_op_dcd_orint" => \%op_dcd_orint
                };
    bless($ref);
    return $ref;
}
sub clear {
    my $self = shift;
    while(my ($key,$value) = each %{$self->{"P_op_dcd_len"}}){
        $deep += $value;      
    }
    print "deep = $deep\n";
    @checker = ''; #clear the @checker for new set
    for(my $i=0;$i<(2**$deep);$i++){  #initial the @checker
        $checker[$i] = 0;
    }   
}
sub build{
    my $self = shift;
    my @op_dcd_name  = @{$self->{"P_op_dcd_name"}};
    my @op_dcd_value = @{$self->{"P_op_dcd_value"}};
    my %op_dcd_orint = %{$self->{"P_op_dcd_orint"}};
    my %op_dcd_len   = %{$self->{"P_op_dcd_len"}};
   
    my %op_dcd_value_num;
    my %op_big_value_array;
    my @check_bin;
    my $check_num = 1;
   
    foreach my $name (@{$self->{"P_op_dcd_name"}}){
        if($op_dcd_value[$op_dcd_orint{$name}] eq 'z'){
            print "$name value is,",$op_dcd_value[$op_dcd_orint{$name}],"\n";
            for(my $i=0;$i<2**($op_dcd_len{$name});$i++){
                #$op_big_value_array->{$name}->{$i}=$i;
                $op_big_value_array->{$name}->{0}="00";
                $op_big_value_array->{$name}->{1}="01";
                $op_big_value_array->{$name}->{2}="10";
                $op_big_value_array->{$name}->{3}="11";
                $op_dcd_value_num{$name}         =2**($op_dcd_len{$name});
            }
            #for(my $i=0;$i<2**($op_dcd_len{$name});$i++){
            #    print $i,"=",$op_big_value_array->{$name}->{$i}=$i,"\n";
            #}
        }
        elsif($op_dcd_value[$op_dcd_orint{$name}] =~ /[\d,x]+/i){
            if($op_dcd_value[$op_dcd_orint{$name}] =~ /x+/i){
                print "$name value has x,",$op_dcd_value[$op_dcd_orint{$name}],"\n";
                #from x_change function
                $op_big_value_array->{$name}->{0}=101;
                $op_big_value_array->{$name}->{1}=111;
                $op_dcd_value_num{$name}         =2;
            }
            else{
                print "$name value is num only,",$op_dcd_value[$op_dcd_orint{$name}],"\n";
                $op_big_value_array->{$name}->{0}=1;
                $op_dcd_value_num{$name}         =1;
            }            
        }
        else{
            die("Error: Value format is wrong!\n");
        }
        
        #my %tmp = %{$op_big_value_array->{$name}};
        while( my ($key,$value) = each %{$op_big_value_array->{$name}}){
            print "key=$key , value=$value\n";
        }
        $check_num *= $op_dcd_value_num{$name};
        print "total num = $check_num\n";
    }
   
    my $name_num = 0;
    foreach my $name (@{$self->{"P_op_dcd_name"}}){
        my $offset = 0;
        my $line_0 = 0;
        if($name_num == 0){            
            while($op_big_value_array->{$name}->{$line_0} ne ''){               
                $check_bin[$line_0] = $op_big_value_array->{$name}->{$line_0};
                $line_0++;                 
            }   
            $name_num = 1;
        }
        else{
            my @tem_arr;
            foreach my $v_0 (@check_bin){
                my $line_1 = 0;
                print "2========",$op_big_value_array->{$name}->{0},"==========================\n";
                while($op_big_value_array->{$name}->{$line_1} ne ''){
                    $tem_arr[$line_1+$offset] = "$v_0"."$op_big_value_array->{$name}->{$line_1}";
                    print "tem[",$line_1+$offset,"] =",$tem_arr[$line_1+$offset],"\n";
                    $line_1++;
                }               
                $line_0++;
                $offset = $line_0*$line_1;
            }
            @check_bin = @tem_arr;
        }
        my $i =0;
        foreach my $v_0 (@check_bin){
            print "check_bin[$i] =",$check_bin[$i],"\n";
            $i++
        }
    }
   
   
}
1
 楼主| 发表于 2012-10-31 01:12:37 | 显示全部楼层
#! /usr/bin/perl

use class_set;
#    my $class = shift;
#    my $name  = shift @_;
#    my $type  = shift @_;
#    my $point_op_name  = shift @_;
#    my $point_op_value = shift @_;
#    my $point_op_len   = shift @_;
#    my $point_op_orint = shift @_;

my $worksheet;

my @set_name= qw(sh op rd hw rm);
my @op_name = qw(sh op hw);
my %op_len  =("sh" => 2,
              "op" => 1,
              "hw" => 3
              );
my @op_value;
    $op_value[0] = 'z';
    $op_value[1] = 1;
    $op_value[2] = "1x1";
my %op_orint = ("sh" => 0,
                "op" => 1,
                "hw" => 2
                );   

my $set = SET->new("ADD","32-bit_FP/SIMD",\@set_name,\@op_name,\@op_value,\%op_len,\%op_orint,$worksheet);
$set->clear;
$set->build;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 22:08 , Processed in 0.030222 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表