国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化

這篇具有很好參考價(jià)值的文章主要介紹了IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1 腳本名稱

2 腳本路徑

3 腳本參數(shù)說明

4 腳本操作說明

5 腳本代碼


1 腳本名稱

ccode_standard

2 腳本路徑

/scripts/bin/ccode_standard

3 腳本參數(shù)說明

次序

參數(shù)名

說明

1

address

(./rfdig;.;..;./boot)

指定腳本執(zhí)行路徑(可以為腳本所在路徑的任意相對(duì)路徑)

help

腳本使用幫助,打印說明信息

2

all

運(yùn)行腳本后,腳本會(huì)解析全部rbus.cfg,并對(duì)參數(shù)1指定的目錄中的.c文件進(jìn)行寄存器配置代碼標(biāo)準(zhǔn)化修改

module_name_seca.cfg

運(yùn)行腳本后,腳本會(huì)解析參數(shù)2指定的rbus.cfg,并對(duì)參數(shù)1指定的目錄中的.c文件進(jìn)行寄存器配置代碼標(biāo)準(zhǔn)化修改

示例

命令:ccode_standard ?help

輸出ccode_standard使用幫助信息

命令:ccode_standard ?./rfdig ?rfdig_seca.cfg

對(duì)當(dāng)前路徑下的rfdig文件夾及其子文件夾下所有的.c文件中,有關(guān)rfdig_seca.cfg中的寄存器配置代碼進(jìn)行標(biāo)準(zhǔn)化修改;

命令:ccode_standard ?. ?crg_seca.cfg

對(duì)當(dāng)前路徑下的所有文件夾及其子文件夾下的所有.c文件中,所有有關(guān)crg_seca.cfg中的寄存器配置代碼進(jìn)行標(biāo)準(zhǔn)化修改;

命令:ccode_standard ?. ?all

對(duì)當(dāng)前路徑下的所有文件夾及其子文件夾下的所有.c文件中,所有模塊的寄存器配置代碼進(jìn)行標(biāo)準(zhǔn)化修改;

說明

配置文件module_name_seca.cfg是被驗(yàn)?zāi)K寄存器的詳細(xì)配置文件;腳本索引該文件的具體路徑為:

$PROJ_SRC/design/scripts/rbus_scripts/rbus_cfg/

使用該腳本前請(qǐng)先gen_rbus;

4 腳本操作說明

? ? ? ? 該腳本用于將如下所示的代碼標(biāo)準(zhǔn)化,加速ST用例調(diào)整,該腳本可以反復(fù)多次調(diào)用,不會(huì)產(chǎn)生異常問題:

IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源

  1. 使用腳本前,首先gen_rbus,source,產(chǎn)生腳本需要解析的rbus.cfg文件,以及環(huán)境變量$ENV{PROJ_SRC};
  2. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源
  3. 根據(jù)腳本存放路徑,指定腳本工作目錄,如下例所示,腳本存放于case目錄,我想修改rfdig文件夾下的.c文件,參考rfdig_seca.cfg;執(zhí)行:ccode_standard? ./rfdig? rfdig_seca.cfg ?>? 1.log
  4. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源
  5. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源
  6. 如圖所示,腳本只替換了有關(guān)rfdig的寄存器,iomux,crg等沒有替換:

  7. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源

  8. 如下例所示,腳本存放于case目錄,我想修改rfdig/rfdig_tc017文件夾下的.c文件,參考所有rbus.cfg文件;
  9. 執(zhí)行:ccode_standard ?./rfdig/rfdig_m33_tc017? all? > ?1.log

  10. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源

  11. 如圖所示,腳本不僅替換了有關(guān)rfdig的寄存器,iomux,crg等都有替換:

  12. IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源

    IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化,perl腳本,c語(yǔ)言,perl,IC驗(yàn)證,開源文章來源地址http://www.zghlxwxcb.cn/news/detail-799965.html

    ?

5 腳本代碼

#! /usr/bin/perl -w

#==========================================================
# PERL MODULE 
#==========================================================

use Cwd;
use File::Path;
use File::Find;

#==========================================================
# PERL FUNCTION GetOptions (get command parameters)
#==========================================================
$g_work_dir  = $ARGV[0];
$g_seca_fl   = $ARGV[1];

#our $work_dir  = 'rfdig_m33_tc017';

#==========================================================
# SCRIPT MAIN  
#==========================================================

our @seca_fl_list;
our @seca_name;
our @seca_type;
our @seca_width;
our @seca_init_value;
our @seca_with_field;
our @seca_field_list_bgn;
our @seca_field_list_end;
our @seca_field_name;
our @seca_field_width;
our @seca_field_bgn_idx;
our @seca_field_end_idx;

our $ccode_standard_mark = 0;

Main();

sub RegMem{
    @seca_name           = ();
    @seca_type           = ();
    @seca_width          = ();
    @seca_init_value     = ();
    @seca_with_field     = ();
    @seca_field_list_bgn = ();
    @seca_field_list_end = ();
    @seca_field_name     = ();
    @seca_field_width    = ();
    @seca_field_bgn_idx  = ();
    @seca_field_end_idx  = ();
    if (open(SECA_ID,"$g_seca_fl") or die "cannot open $g_seca_fl, no such file") {
        @seca_array = <SECA_ID>;
        my $i       = 0;
        my $j       = 0;
        my $rbus_ok = 0;
    
        foreach $seca_line (@seca_array) {
            $seca_line =~ s/[\n\r]*//g;
            if ($seca_line =~ m/^\s*field_(\S+)\s+\[(\S+)\]\s*$/) {
                if($rbus_ok eq 1) {
                    $seca_with_field[$i-1]     = 1 ;
                    $seca_field_list_bgn[$i-1] = $j;
                    $rbus_ok                   = 0 ;
                }
                $seca_field_list_end[$i-1] = $j;
                my $field_name_tmp   = "\L$1";
                my $field_name_size  = push(@seca_field_name ,$field_name_tmp);
                my $field_port_tmp   = $2;
                if ($field_port_tmp =~ m/(\d+):(\d+)/) {
                    push(@seca_field_bgn_idx,int($2));
                    push(@seca_field_end_idx,int($1));
                    push(@seca_field_width,(int($1)-int($2)+1));
                } else {
                    push(@seca_field_bgn_idx,int($field_port_tmp));
                    push(@seca_field_end_idx,int($field_port_tmp));
                    push(@seca_field_width,1);
                }
                #print ("seca_with_field[",$i-1,"]     = ",$seca_with_field[$i-1]     ,"\n");
                #print ("seca_field_list_bgn[",$i-1,"] = ",$seca_field_list_bgn[$i-1] ,"\n");
                #print ("seca_field_list_end[",$i-1,"] = ",$seca_field_list_end[$i-1] ,"\n");
                #print ("seca_field_name[",$j,"]       = ",$seca_field_name[$j]       ,"\n");
                #print ("seca_field_width[",$j,"]      = ",$seca_field_width[$j]      ,"\n");
                #print ("seca_field_bgn_idx[",$j,"]    = ",$seca_field_bgn_idx[$j]    ,"\n");
                #print ("seca_field_end_idx[",$j,"]    = ",$seca_field_end_idx[$j]    ,"\n");
                $j = $j + 1;
            }
            if ($seca_line =~ m/^\s*rbus_(\S+)\s+(\S+)\s+(\w+)\s+(\d+)('\w+)\s+(\S+)\s*$/) {
                #print ("before match string: ",$`,     "\n");
                #print ("match string       : ",$&,     "\n");
                #print ("after  match string: ",$',     "\n");
                #print ("seca_postfix       : ",$1,     "\n");
                #print ("seca_type          : ",$2,     "\n");
                #print ("seca_scope         : ",$3,     "\n");
                #print ("seca_width         : ",int($4),"\n");
                #print ("seca_init_value    : ",$5,     "\n");
                #print ("seca_prefix        : ",$6,     "\n");
                #print ("seca_name          : ","$6_$1","\n");
                $seca_name[$i]             = "\L$6_$1";
                $seca_type[$i]             = $2;
                $seca_width[$i]            = int($4);
                $seca_init_value[$i]       = $5;

                $seca_with_field[$i] = 0;
                $i = $i+1;
                $rbus_ok = 1;
            }
        }
    }
}

sub GenMacroDefine{
    #print "c file is              : $_[0]\n";
    #print "c macro_define file is : $_[1]\n";
    $ccode_standard_mark = 0;
    open(ORIEN_FILE,">>$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                for ( $i = 0; $i < @seca_name; $i = $i +1) {
                    if ($seca_with_field[$i] eq 1) {
                        if ($line =~ m/^\s*(\w+)\[($seca_name[$i])\]\s*=\s*0x(\w+)\s*;.*$/) {
                            $ccode_standard_mark = 1;
                            print ORIEN_FILE "\n"."http://"."$line";
                            my $seca_field_list_num  = $seca_field_list_end[$i] - $seca_field_list_bgn[$i] + 1;
                            for ($j = 0; $j < $seca_field_list_num; $j = $j+1) {
                                my $seca_field_width_tmp = $seca_field_width[$seca_field_list_bgn[$i]+$j];
                                my $seca_field_name_tmp  = "$seca_name[$i]"."_"."$seca_field_name[$seca_field_list_bgn[$i]+$j]";
                                my $seca_field_mask_tmp  = "$seca_field_name_tmp"."_mask ((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1)";
                                my $seca_field_shift_tmp = "$seca_field_name_tmp"."_shift $seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j]";
                                my $seca_field_bit_tmp   = "$seca_field_name_tmp"."_bit (1<<$seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j])";
                                if($seca_field_width_tmp eq 1){
                                    print ORIEN_FILE "#define $seca_field_bit_tmp\n";
                                } else {
                                    print ORIEN_FILE "#define $seca_field_mask_tmp\n";
                                    print ORIEN_FILE "#define $seca_field_shift_tmp\n";
                                }
                            }
                        }
                    }
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
    system ("awk '!a[\$0]++' $_[1] > $_[1]_tmp \&\& mv -f $_[1]_tmp $_[1]");
}

sub AddMacroDefine{
    #print "old c file is : $_[0]\n";
    #print "new c file is : $_[1]\n";
    #print "add   file is : $_[2]\n";
    my $add_ready = 0;
    open(ORIEN_FILE,">$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                if($line =~ m/^#include \"$_[2]\"$/) {

                } else {
                    print ORIEN_FILE "$line";
                }
                if ($add_ready eq 0) {
                    if ($line =~ m/^\s*\#include\s*\"\S+_define.c\"\s*$/) {
                        print ORIEN_FILE "\#include "."\"$_[2]\"\n";
                        $add_ready = 1;
                    }
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub GenSubContent{
    #print "old c file is : $_[0]\n";
    #print "new c file is : $_[1]\n";
    open(ORIEN_FILE,">>$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                my $line_match = 0;
                for ( $i = 0; $i < @seca_name; $i = $i + 1) {
                    if ($seca_with_field[$i] eq 1) {
                        if ($line =~ m/^(\s*)(\w+\[$seca_name[$i]\])\s*=\s*0x(\w+)\s*;.*$/) {
                            my $reg_value = hex($3);
                            if ($reg_value != 0) {
                                $line_match = 1;
                                print ORIEN_FILE "http://"."$line";
                                my $seca_field_list_num = $seca_field_list_end[$i] - $seca_field_list_bgn[$i] + 1;
                                for ($j = 0; $j < $seca_field_list_num; $j = $j+1) {
                                    my $seca_field_name_tmp    = "$seca_name[$i]"."_"."$seca_field_name[$seca_field_list_bgn[$i]+$j]";
                                    my $seca_field_mask_tmp    = "$seca_field_name_tmp"."_mask";
                                    my $seca_field_value       = (($reg_value) >> ($seca_field_bgn_idx[$seca_field_list_bgn[$i]+$j])) & 
                                                                 ((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1);
                                    my $seca_field_width_tmp   = $seca_field_width[$seca_field_list_bgn[$i]+$j];
                                    my $seca_field_shift_tmp   = "$seca_field_name_tmp"."_shift";
                                    my $seca_field_bit_tmp     = "$seca_field_name_tmp"."_bit";
                                    #print ("seca_field_mask_value = ",((1<<$seca_field_width[$seca_field_list_bgn[$i]+$j])-1),";");
                                    #print ("reg_value = ",$reg_value,";");
                                    #print ("seca_field_value = $seca_field_value\n");
                                    if($j eq 0){
                                      if ($j eq ($seca_field_list_num - 1)) {
                                        if($seca_field_width_tmp eq 1) {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) ;\n","$1","$2 =","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                        } else {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) ;\n","$1","$2 =","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                        }
                                      } else {
                                        if($seca_field_width_tmp eq 1) {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) |\n","$1","$2 =","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                        } else {
                                          printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) |\n","$1","$2 =","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                        }
                                      }
                                    } elsif($j eq ($seca_field_list_num - 1)) {                                                                                              
                                      if($seca_field_width_tmp eq 1) {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) ;\n","$1","    ","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                      } else {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) ;\n","$1","    ","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                      }
                                    } else {                                                                                                                                 
                                      if($seca_field_width_tmp eq 1) {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s * 0x%-8x)    %-51s) |\n","$1","    ","$seca_field_bit_tmp",$seca_field_value,"                     ");
                                      } else {
                                        printf ORIEN_FILE ("%s%-40s ((%-50s & 0x%-8x) << %-51s) |\n","$1","    ","$seca_field_mask_tmp",$seca_field_value,"$seca_field_shift_tmp");
                                      }
                                    }
                                }
                            }
                        }
                    }
                }
                if ($line_match eq 0) {
                    print ORIEN_FILE "$line";
                }
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub CopyFile{
    #print "source file name is $_[0]\n";
    #print "orien  file name is $_[1]\n";
    open(ORIEN_FILE,">$_[1]");
        if (open(SOURCE_FILE,"$_[0]")) {
            @context = <SOURCE_FILE>;
            foreach $line (@context) {
                print ORIEN_FILE "$line";
            }
            close SOURCE_FILE;
        }
    close ORIEN_FILE;
}

sub FindConfigFile{
    if (-f $File::Find::name) {
        if ($_ =~ m/^(\w+_sec[a-z]\.cfg)$/) {
            #print "find file is $1 \n";
            push(@seca_fl_list,$1); 
        }
    }
}

sub FindWanted{
    if (-f $File::Find::name) {
        if ($_ =~ m/(\S+)\.c$/) {
            print "process file: $File::Find::name \n";
            GenMacroDefine("$_","$1"."_macro_define.h");
            unlink "$1"."_macro_define.h";
            if($ccode_standard_mark eq 1) {
                unlink "$_".".tmp";
                GenSubContent("$_","$_".".tmp");
                #AddMacroDefine("$_".".tmp","$_","$1"."_macro_define.h");
                system ("mv -f $_.tmp $_");
                unlink "$_".".tmp";
            }
        }
    }
}

sub Main{
    my $cur_dir  = getcwd;
    my $proj_src = $ENV{PROJ_SRC};
    my $seca_dir = "$ENV{PROJ_SRC}/design/scripts/rbus_scripts/rbus_cfg/";
    if($g_seca_fl eq "all") {
        chdir($seca_dir) or die "$seca_dir was not found!!! please gen_rbus firstly.";
        find(\&FindConfigFile,"$seca_dir");
    } else {
        push(@seca_fl_list,$g_seca_fl);
    }
    #for ($i = 0; $i < @seca_fl_list; $i = $i+1) {
    #    print "seca_fl_list[$i] = $seca_fl_list[$i] \n";
    #}
    for ($z = 0; $z < @seca_fl_list; $z = $z + 1) {
        print "read config_file : $seca_fl_list[$z]\n";
        $g_seca_fl = "$seca_dir"."$seca_fl_list[$z]";
        RegMem();
        chdir($cur_dir) or die "$cur_dir does not exist!!!";
        find(\&FindWanted,"$cur_dir/$g_work_dir");
    }
}

到了這里,關(guān)于IC驗(yàn)證——perl腳本ccode_standard——c代碼寄存器配置標(biāo)準(zhǔn)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【FPGA/數(shù)字IC】Multiport RAM,多讀多寫寄存器-——基于FPGA BRAM的多端口地址查找表與FPGA BRAM的資源分析

    【FPGA/數(shù)字IC】Multiport RAM,多讀多寫寄存器-——基于FPGA BRAM的多端口地址查找表與FPGA BRAM的資源分析

    目錄 背景 手寫Multiport Ram Multiport RAM 代碼方案 資源評(píng)估 Multiport RAM 資源利用的優(yōu)化 資源評(píng)估 防止讀寫沖突的組合邏輯設(shè)計(jì)(寫優(yōu)先) 仿真和時(shí)序 單口寫數(shù)據(jù) 單端口讀數(shù)據(jù) 多口讀相同數(shù)據(jù) 多口同時(shí)讀不同數(shù)據(jù) 背景 ????????在多端口交換機(jī)的設(shè)計(jì)中,交換機(jī)的每個(gè)端口

    2024年04月26日
    瀏覽(38)
  • 04 4bit移位寄存器設(shè)計(jì)與功能驗(yàn)證(附源碼)

    04 4bit移位寄存器設(shè)計(jì)與功能驗(yàn)證(附源碼)

    寫在前面,4位右移移位寄存器,顧名思義使用四個(gè)觸發(fā)器級(jí)聯(lián),從一次輸入到輸出,只移動(dòng)了3位,而不是4位。比如輸入是1101,輸出時(shí)為0001,而不是0000。 虛擬機(jī):VMware -14.0.0.24051 環(huán)?境:ubuntu 18.04.1 腳?本:makefile(點(diǎn)擊直達(dá)) 應(yīng)用工具:vcs 和 verdi 行為級(jí)描述 結(jié)構(gòu)級(jí)描述

    2024年02月05日
    瀏覽(20)
  • Git Bash環(huán)境下用perl腳本獲取uuid值

    Git Bash環(huán)境下用perl腳本獲取uuid值

    在Linux環(huán)境下,比如在ubuntu就直接有uuidgen命令直接獲取uuid值。在Windows環(huán)境下常用的git bash中沒有對(duì)應(yīng)的命令,略有不便。這里用腳本寫一個(gè)uuidgen,模擬Linux環(huán)境下的uuidgen命令。 腳本命名為uuidgen,放在 git bash home目錄下的bin子目錄。然后直接輸入uuidgen就能獲取了,和ubuntu環(huán)境

    2024年02月04日
    瀏覽(23)
  • 【效率提升-Perl腳本】根據(jù)Verilog文件自動(dòng)生成tb文件

    【效率提升-Perl腳本】根據(jù)Verilog文件自動(dòng)生成tb文件

    在數(shù)字IC設(shè)計(jì)過程中,根據(jù)頂層生成testbench時(shí)存在很多重復(fù)性工作,因此為了提高工作效率,特地開發(fā)此腳本。 相應(yīng)的python腳本見鏈接: 【效率提升—Python腳本】根據(jù)Verilog文件自動(dòng)生成tb文件 學(xué)習(xí)更多IC知識(shí),請(qǐng)關(guān)注

    2024年02月13日
    瀏覽(21)
  • perl腳本語(yǔ)言學(xué)習(xí)1——基礎(chǔ)篇:變量、數(shù)組、哈希數(shù)組、循環(huán)、文件、函數(shù)

    2023.3.18 今天下載虛擬機(jī)把電腦磁盤內(nèi)容弄到亂七八糟,難受 發(fā)現(xiàn)每次學(xué)習(xí)遇到一個(gè)坎,感覺面前是一座大山,越過去之后又對(duì)前途充滿了希望 perl:practical extraction report language 實(shí)用提取和報(bào)表語(yǔ)言 從字面上看主要與文本處理相關(guān) 變量定義: my 存儲(chǔ) 數(shù)字、字符、字符

    2024年02月12日
    瀏覽(23)
  • 【數(shù)字IC驗(yàn)證進(jìn)階】SoC系統(tǒng)驗(yàn)證和IP模塊驗(yàn)證的區(qū)別及側(cè)重點(diǎn)分析

    芯片驗(yàn)證其實(shí)有很多種,現(xiàn)在分工也很細(xì)了,包括ip驗(yàn)證和Soc驗(yàn)證等等,像現(xiàn)在還不是很熱門的dft,formal,都是。偏的不講,就說ip和soc。 很多小公司做的都是soc,因?yàn)楹?jiǎn)單,有錢買IP就行。去了就是soc驗(yàn)證 ,個(gè)別小公司,會(huì)自己開發(fā)一些自己的ip, 掛到soc中去 ,也會(huì)涉及到

    2024年02月07日
    瀏覽(24)
  • IC驗(yàn)證工程師工作一周年的體會(huì)

    轉(zhuǎn)眼之間自己已經(jīng)工作一周年了,作為一名驗(yàn)證工程師,這一年里面感覺自己雖然有了一定的成長(zhǎng),但是成長(zhǎng)的還是比較緩慢的,接下來從個(gè)人的角度說說我現(xiàn)在對(duì)從IC驗(yàn)證的一些體會(huì)。 一.要養(yǎng)成良好的工作習(xí)慣 (1)自己在工作中發(fā)現(xiàn)很多時(shí)候都是可以偷懶的,有時(shí)候?qū)憥?/p>

    2024年02月08日
    瀏覽(17)
  • 數(shù)字IC驗(yàn)證——PSS可移植測(cè)試用例

    數(shù)字IC驗(yàn)證——PSS可移植測(cè)試用例

    PSS是Accellera組織定義的測(cè)試用例生成規(guī)范,其思想是定義一個(gè)抽象模型,EDA工具可以從中生成適用于每個(gè)設(shè)計(jì)層次結(jié)構(gòu)和每個(gè)驗(yàn)證平臺(tái)的測(cè)試,即PSS定義了統(tǒng)一的測(cè)試場(chǎng)景,而場(chǎng)景的使用可以橫跨不同驗(yàn)證層次和配置。 這種特性決定了PSS本身是不可執(zhí)行的,用戶需要EDA工具分

    2024年02月10日
    瀏覽(11)
  • perl腳本調(diào)用openssh不能正確執(zhí)行(ctl_dir /root/.libnet-openssh-perl/ is not secure)的原因排查

    在使用perl腳本的時(shí)候,通過Net::OpenSSH去獲取執(zhí)行節(jié)點(diǎn)的信息是一種常用的方法。在某個(gè)環(huán)境中,執(zhí)行命令的時(shí)候出錯(cuò),下面展示一下相關(guān)的代碼 在這段代碼執(zhí)行的時(shí)候,直接返回“fail: cann’t access by ssh” 通過手動(dòng)的方式進(jìn)行驗(yàn)證,在當(dāng)前節(jié)點(diǎn)通過ssh方式是可以正常登錄指定

    2024年02月14日
    瀏覽(17)
  • IIS perl python cbrother php腳本語(yǔ)言配置及簡(jiǎn)單測(cè)試樣例程序

    IIS perl python cbrother php腳本語(yǔ)言配置及簡(jiǎn)單測(cè)試樣例程序

    上篇筆記寫了 IIS 配置 CGI, IIS CGI配置和CGI程序FreeBasic, VB6, VC 簡(jiǎn)單樣例_Mongnewer的博客-CSDN博客 這篇在IIS上配置一些腳本語(yǔ)言。為了操作方便,每種語(yǔ)言在站點(diǎn)下分設(shè)文件夾。 1. IIS perl配置 Perl CGI方式是曾經(jīng)流行的做法。先下載一個(gè)開源的 Perl.exe 解釋器,在免費(fèi)的 sambar 服務(wù)器

    2024年02月09日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包