




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯SOC時序分析中的跳變點-基礎(chǔ)電子跳變點是所有重要時序分析工具中的一個重要概念。跳變點被時序分析工具用來計算設(shè)計節(jié)點上的時延與過渡值。跳變點的有些不同含義可能會被時序分析工程師忽略。而這在SOC設(shè)計后期,也就是要對時序簽字時可能會導(dǎo)致問題。后端設(shè)計工程師要知道跳變點的概念及其含義,這個非常重要。這也正是本文目的之所在。
1.跳變點定義:
跳變點可定義為邏輯高電平的百分比,作為測量壓擺率和時延值的參照。圖1(a)演示的是壓擺率跳變點。
圖1(a)
圖1(b)演示的是時延跳變點。
圖1(b)
跳變點用來描述標(biāo)準(zhǔn)單元或硬模塊(IP)等的引腳過渡值特征,同時檢查SoC時序。通常跳變點的值在時序模型(自由格式)中提及,時序分析工具在計算時延和壓擺率時會使用這些值。
2.如何固定跳變點:
在描述標(biāo)準(zhǔn)單元或硬模塊(IP)特征時,跳變點對于特定的技術(shù)節(jié)點是固定的。將跳變點固定的目的是確保測量的時延/壓擺率接近實際(Spice)的波形。如圖2(a)所示,當(dāng)跳變點位于切換波形的線性區(qū)(20%-80%)時,壓擺率值比位于非線性區(qū)(10%-90%)時要令人樂觀。
圖2(a)
通常情況下,在過渡跳變點位于線性區(qū)時,時序工具計算的單元時延更接近Spice結(jié)果。
同時,晶體管的電壓閾值(Vt)特性對于決定跳變點發(fā)揮了重要作用,因為輸出波形在輸入電壓超過晶體管的Vt值后會發(fā)生線性化[1]。
時延閾值在輸入和輸出波形的線性區(qū)是固定的。只要時延跳變點位于波形的線性部分,那么時延跳變點是20-80還是50-50都沒有關(guān)系。
3.自由格式提及的跳變點句法
下面給出的是典型時序模型(.liberty文件)的快照,以指示正在使用的跳變點
input_threshold_pct_rise:50;
input_threshold_pct_fall:50;
output_threshold_pct_rise:50;
output_threshold_pct_fall:50;
slew_lower_threshold_pct_rise:20;
slew_lower_threshold_pct_fall:20;
slew_upper_threshold_pct_rise:80;
slew_upper_threshold_pct_fall:80;
4.時序工具如何處理跳變點來計算時延
a)當(dāng)跳變點對于界面都相同時:
圖3(a)描述了驅(qū)動程序和負(fù)載具有相同時延閾值時的情況。
在給出的示例中,兩者都為50%。
圖3(a)
此時,,考慮壓擺率降級(由網(wǎng)絡(luò)引起)后,時序工具計算的驅(qū)動程序達到其50%的邏輯高值和負(fù)載達到其50%的邏輯高值時兩者之間的時間差。
類似的解釋對于特定單元的輸入和輸出產(chǎn)生的下降信號和時延同樣適用。壓擺率值根據(jù).lib中提及的變量進行計算。
b)當(dāng)跳變點對于一個界面而不同時
(i)20%比50%:
圖4(a)描述了驅(qū)動程序時延跳變點為20%而對負(fù)載單元跳變點為50%的情況。
在這種情況下,與負(fù)載信號相比,驅(qū)動程序的信號會快速達到其時延跳變點值。因此此類界面的網(wǎng)絡(luò)時延會大于驅(qū)動程序也達到50%情形下的時延[圖3(a)]。
圖4(a)
時序工具可通過線性或非線性擴展計算網(wǎng)絡(luò)上出現(xiàn)的額外時延。
(ii)50%比20%
圖4(b)描述了驅(qū)動程序跳變點為50%而負(fù)載單元的跳變點為20%的情形。
在這種情況下,與驅(qū)動信號相比,負(fù)載的信號會更早達到其時延跳變點值。這種情況通過時序工具借助擴展(線性或非線性)來進行處理。
圖4(b)
這里需要注意的是:在這種情況下,擴展會引起“負(fù)時延”。
應(yīng)注意:盡管現(xiàn)實世界不能在時域中后向穿越,但是時序工具需要將這種時延考慮在內(nèi),這樣,從開始點(在本例中為驅(qū)動單元的輸入引腳)到終端點(在本例中為負(fù)載單元的輸出引腳)的整體路徑時延接近現(xiàn)實世界時延(Spice)。
5.與跳變點相關(guān)的其他問題:
(i)SDF中的負(fù)時延:在通過時序工具完成擴展后產(chǎn)生的負(fù)時延將以標(biāo)準(zhǔn)時延格式(SDF)進行復(fù)制,用于門級模擬。不希望發(fā)生這種情況,因為門級模擬器無法處理負(fù)時延。
它們要么標(biāo)志錯誤消息要么表示此類情況的零時延。作為一種變通方法,可編寫一個腳本(附錄A),根據(jù)所計算的負(fù)時延,增加(或減少)負(fù)載單元(或驅(qū)動單元)時延。
(ii)端口和IO單元之間的附加時延:
通常時序工具端口到I/O單元的時延。在硅片上,該網(wǎng)絡(luò)作為接合線出現(xiàn)在芯片外部。因此,對于該網(wǎng)絡(luò)物理信息不能進行量化。
時序工具提供此類網(wǎng)絡(luò)的時延。原因包括:
a)由于沒有時序模型可用于端口,因此時序工具采用用戶定義的或默認(rèn)跳變點和電壓電平計算時延。
b)由于假定跳變點和端口w.r.tI/O單元跳變點的電壓電平值之間有差額。圖5(a)和圖5(b)描述了此類情況。
圖5(a)
圖5(b)
要克服這種情況,可執(zhí)行以下操作:
1)為與I/O單元的端口相同的端口定義運行條件。
2)編寫腳本為此類網(wǎng)解釋零時延。
(iii)帶有丟失跳變點的庫
如果我們擁有不包含跳變點閾值或電壓電平值的時序模型,那么來自/到此類模型的界面的時延可能不正確。因為時序工具使用跳變點和電壓電平的默認(rèn)值,分析這些路徑。作為一種變通方法,用戶應(yīng)在向負(fù)責(zé)庫的人員進行咨詢后,再定義跳變點。
6.如果不通過時序工具進行擴展會怎樣:激烈。這可能會導(dǎo)致芯片故障,因為使用時序工具計算的時延不接近Spice值。如果可以為跳變點不同的界面進行Spice分析,應(yīng)當(dāng)是一種很好的操作方法。
如果對SOC中所使用的所有模型(硬模塊)使用同樣的跳變點,應(yīng)當(dāng)是一種很好的操作方法。
這完全可以消除因閾值不同所產(chǎn)生的問題。
7.Spice合作關(guān)系:
對多閾值路徑進行Spice分析,是增強信心并解決時序問題的好方法。
盡管在Spice世界,閾值實際并不存在。在時序模型中使用它們是為了簡化時序分析工具。
時序工具提供一個選項,復(fù)制出特定時序路徑的spice網(wǎng)列表。除了spice網(wǎng)列表外,還復(fù)制出包含輸入矢量的激勵文件。復(fù)制出的spice網(wǎng)列表可能不包含針對時序路徑中標(biāo)準(zhǔn)單元和/或硬模塊的spice網(wǎng)列表。
Spice模擬工具可讀取復(fù)制的spice網(wǎng)列表和標(biāo)準(zhǔn)單元/硬模塊的spice網(wǎng)列表,然后提供激勵文件來模擬重要路徑。
需要通過分析生成的波形,查看路徑是否滿足時序要求。測量SPICE中此類路徑的時延和過渡值時需要謹(jǐn)記:要采用與時序模型中所提及的跳變點相同的跳變點。
8.擴展類型:
大多數(shù)行業(yè)標(biāo)準(zhǔn)工具使用線性或非線性擴展作為其運作方式
a)線性擴展:在該方法中,工具假定不同閾值的線性斜坡。
該方法使用相似三角形的概念擴展驅(qū)動程序到負(fù)載單元的時延。
b)非線性擴展:此時,工具使用電流源模型來定義坡道。這需要通過復(fù)雜的數(shù)學(xué)方程來計算時延。
總之,本文以跳變點定義開始,然后闡釋如何固定用于特定技術(shù)庫的跳變點。然后本文論述了時序工具如何解釋跳變點,以及當(dāng)驅(qū)動程序與負(fù)載單元跳變點不同時可能會引發(fā)的問題。
附錄A:在SDF中考慮負(fù)互連時延的腳本
#!/usr/local/bin/perl
print"\n***************RUNNINGPERLSCRIPT.negaTIvedelinsdf_assarray.pl****\n\n";
if(!exists$ARGV[0]||!exists$ARGV[1]){print"USAGE::negativedelinsdf_assarray.pl\n\n";exit;
}
open(FILEA,$ARGV[0])||die("ERROR::SDFfile$ARGV[0]cannotbeopenedforreADIng\n");
open(file1,"$ARGV[1]")||die("ERROR::file$ARGV[1]cannotbeopenedforwriting\n");
while()
{$line=$_;
$line1=$line;
$line=~s/^\s+//g;
if($line=~"INTERCONNECT.*-[0-9]")########FINDINGNEGATIVEINTERCONNECT######
{
@array1=split(/\s+/,$line);
$count=@array1;
if($count==4){##ToaccontforthefactthatonlyoneINTERCONNECTtripletispresent
$array1[$count]=$array1[$count-1];
$count=$count+1;
}
for($i=0;$i=$count-3;$i++)
{printfile1"$array1[$i]";}
$value2=$array1[$count-1];
$value1=$array1[$count-2];
$instance_name=$array1[2];
@instance=split(/\//,$instance_name);
$count2=@instance;
$pin_name=$instance[$count2-1];#######GETTINGLOADINSTANCEPINNAME###############
$instance_name=~s/\/[^(.*\/)][A-Z0-9a-z_\[0-9\]+]*$//g;#######GETTINGLOADINSTANCENAME###############
if($value1=~"::")
{$value1=~s/[()]//g;
@correct_value1=split(/::/,$value1);
$load_correct_value1_0{$instance_name}=$correct_value1[0];
$load_correct_value1_1{$instance_name}=$correct_value1[1];
if($correct_value1[0]=-0.0)#####NEGATIVECHANGEDTOZERODELAY######
{$correct_value1[0]="0.000";}
if($correct_value1[1]=-0.0)
{$correct_value1[1]="0.000";}
printfile1"($correct_value1[0]::$correct_value1[1])";
}
elsif($value1=~":[^:]")
{$value1=~s/[()]//g;
@correct_value1=split(/:/,$value1);
$load_correct_value1_0{$instance_name}=$correct_value1[0];
$load_correct_value1_1{$instance_name}=$correct_value1[1];
$load_correct_value1_2{$instance_name}=$correct_value1[2];
if($correct_value1[0]=-0.0)#####NEGATIVECHANGEDTOZERODELAY######
{$correct_value1[0]="0.000";}
if($correct_value1[1]=-0.0)
{$correct_value1[1]="0.000";}
if($correct_value1[2]=-0.0)
{$correct_value1[2]="0.000";}
printfile1"($correct_value1[0]:$correct_value1[1]:$correct_value1[2])";
}
else{printfile1"$value1";}
if($value2=~"::")
{$value2=~s/[()]//g;
@correct_value2=split(/::/,$value2);
$load_correct_value2_0{$instance_name}=$correct_value2[0];########NEGATIVECHANGEDTOZERODELAY#####
$load_correct_value2_1{$instance_name}=$correct_value2[1];
if($correct_value2[0]=-0.0)
{$correct_value2[0]="0.000";}
if($correct_value2[1]=-0.0)
{$correct_value2[1]="0.000";}
if($correct_value1[0]==$correct_value2[0]$correct_value1[1]==$correct_value2[1]){#PrintthesevaluesonlyiftheyarediffernetfromthealreadyprintedvaluesfortheINTERCONNECT
printfile1")\n";
}else{
printfile1"($correct_value2[0]::$correct_value2[1]))\n";
}
}
elsif($value2=~":[^:]")
{$value2=~s/[()]//g;
@correct_value2=split(/:/,$value2);
$load_correct_value2_0{$instance_name}=$correct_value2[0];########NEGATIVECHANGEDTOZERODELAY#####
$load_correct_value2_1{$instance_name}=$correct_value2[1];
$load_correct_value2_2{$instance_name}=$correct_value2[2];
if($correct_value2[0]=-0.0)
{$correct_value2[0]="0.000";}
if($correct_value2[1]=-0.0)
{$correct_value2[1]="0.000";}
if($correct_value2[2]=-0.0)
{$correct_value2[2]="0.000";}
if($correct_value1[0]==$correct_value2[0]$correct_value1[1]==$correct_value2[1]$correct_value1[2]==$correct_value2[2]){#PrintthesevaluesonlyiftheyarediffernetfromthealreadyprintedvaluesfortheINTERCONNECT
printfile1")\n";
}else{
printfile1"($correct_value2[0]:$correct_value2[1]:$correct_value2[2]))\n";
}
}
$load_instance{$instance_name}=$instance_name;##SAVEALLLOADINSTACESFORNEGDELAYINTHEASSOCIATIVEARRAY##
$load_pin{$instance_name.$pin_name}=$pin_name;##SAVEALLLOADPINSFORNEGDELAYINTHEASSOCIATIVEARRAY##
}
elsif($line=~"CELL"){
printfile1"$line";
$find=0;
}
elsif($line=~"INSTANCE")##CHECKINGCORRESPONDINGINSTANCESANDFINDFLAG=1IFFOUND######
{
printfile1"$line1";
@array2=split(/\s+/,$line);
$instance_name2=$array2[1];##GETTINGTHELOADINSTANCENAMEFOUNDHERE##########
$instance_name2=~s/[()]//g;
$instance_definition{$instance_name2}="$instance_name2";
if(exists$load_instance{$instance_name2})####COMPAREINSTANCENAMEWITHTHATSAVEDINASSOARRAY#####
{
if($load_instance{$instance_name2}eq"$instance_name2")
{$find=1;}
}
}
elsif($line=~"IOPATH"$find==1)##AFTERINSTANCESAREFOUNDCHECKINGFORCORRSPONDINGPINS######
{
@array4=split(/\s+/,$line);
if($array4[0]=~"COND"){##TakecareofCONDstatements
$pin_name2=$array4[3];
}else{
$pin_name2=$array4[1];
}
if($line=~"IOPATH"exists$load_pin{$instance_name2.$pin_name2}){
if($load_pin{$instance_name2.$pin_name2}eq"$pin_name2")
{
@array3=split(/\s+/,$line);
$count3=@array3;
@value_IOPATH="";#Thisistoinitializethearraytoblank
if($array3[0]=~"COND"){
for($j=5;$j=$count3;$j++){
$value_IOPATH[$j-5]=$array3[$j];
$value_IOPATH_width=@value_IOPATH;
if($count3==6){####IncasethereisonlyonetripletforCOND.*IOPATH
$value_IOPATH[1]=$value_IOPATH[0];
}
#$value1_IOPATH=$array3[5];
#$value2_IOPATH=$array3[6];
}
$constant_fields=4;
}elsif($array3[0]=~"IOPATH"){
for($k=3;$k=$count3;$k++){
$value_IOPATH[$k-3]=$array3[$k];
$value_IOPATH_width=@value_IOPATH;
if($count3==4){####IncasethereisonlyonetripletforIOPATH
$value_IOPATH[1]=$value_IOPATH[0];
}
#$value1_IOPATH=$array3[3];
#$value2_IOPATH=$array3[4];
}
$constant_fields=2;
}
for($i=0;$i=$constant_fields;$i++)
{printfile1"$array3[$i]";}
if($value_IOPATH[0]=~"::")####CORRECTORACCOMODATINGTHENEGDELAYVALUESHERE#########
{$value_IOPATH[0]=~s/[()]//g;
@correct_value1_IOPATH=split(/::/,$value_IOPATH[0]);
if(exists$load_correct_value1_0{$instance_name2}){
if($load_correct_value1_0{$instance_name2}0.0){#SothatonlynegativedelayvaluetripletischangedintheIOPATHsyntax
if(abs($load_correct_value1_0{$instance_name2})$correct_value1_IOPATH[0]){###theabsolutevaluetonegativedelayislargerthanthetimingofloadarc.######
$correct_value1_IOPATH[0]=$correct_value1_IOPATH[0]+$load_correct_value1_0{$instance_name2};
}else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}
}
}
if(exists$load_correct_value1_1{$instance_name2})
{if($load_correct_value1_1{$instance_name2}0.0){
if(abs($load_correct_value1_1{$instance_name2})$correct_value1_IOPATH[1]){
$correct_value1_IOPATH[1]=$correct_value1_IOPATH[1]+$load_correct_value1_1{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}}}
printfile1"($correct_value1_IOPATH[0]::$correct_value1_IOPATH[1])";
}
elsif($value_IOPATH[0]=~":[^:]")####CORRECTORACCOMODATINGTHENEGDELAYVALUESHERE#########
{$value_IOPATH[0]=~s/[()]//g;
@correct_value1_IOPATH=split(/:/,$value_IOPATH[0]);
if(exists$load_correct_value1_0{$instance_name2}){
if($load_correct_value1_0{$instance_name2}0.0){#SothatonlynegativedelayvaluetripletischangedintheIOPATHsyntax
if(abs($load_correct_value1_0{$instance_name2})$correct_value1_IOPATH[0]){
$correct_value1_IOPATH[0]=$correct_value1_IOPATH[0]+$load_correct_value1_0{$instance_name2};
}else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}
}
}
if(exists$load_correct_value1_1{$instance_name2}){
if($load_correct_value1_1{$instance_name2}0.0){#SothatonlynegativedelayvaluetripletischangedintheIOPATHsyntax
if(abs($load_correct_value1_1{$instance_name2})$correct_value1_IOPATH[1]){
$correct_value1_IOPATH[1]=$correct_value1_IOPATH[1]+$load_correct_value1_1{$instance_name2};
}else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}
}
}
if(exists$load_correct_value1_2{$instance_name2}){
if($load_correct_value1_2{$instance_name2}0.0){#SothatonlynegativedelayvaluetripletischangedintheIOPATHsyntax
if(abs($load_correct_value1_2{$instance_name2})$correct_value1_IOPATH[2]){
$correct_value1_IOPATH[2]=$correct_value1_IOPATH[2]+$load_correct_value1_2{$instance_name2};
}else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}
}
}
printfile1"($correct_value1_IOPATH[0]:$correct_value1_IOPATH[1]:$correct_value1_IOPATH[2])";
}
else{printfile1"$value_IOPATH[0]";}#Thisistoprintemptybracketsincaseriseandfalltripletsareempty
if($value_IOPATH[1]=~"::")
{$value_IOPATH[1]=~s/[()]//g;
@correct_value2_IOPATH=split(/::/,$value_IOPATH[1]);
if(exists$load_correct_value2_0{$instance_name2}){
if($load_correct_value2_0{$instance_name2}0.0)
{if(abs($load_correct_value2_0{$instance_name2})$correct_value2_IOPATH[0]){
$correct_value2_IOPATH[0]=$correct_value2_IOPATH[0]+$load_correct_value2_0{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}}}
if(exists$load_correct_value2_1{$instance_name2}){
if($load_correct_value2_1{$instance_name2}0.0)
{if(abs($load_correct_value2_1{$instance_name2})$correct_value2_IOPATH[1]){
$correct_value2_IOPATH[1]=$correct_value2_IOPATH[1]+$load_correct_value2_1{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}}}
if($correct_value1_IOPATH[0]==$correct_value2_IOPATH[0]$correct_value1_IOPATH[1]==$correct_value2_IOPATH[1]){#PrintthesevaluesonlyiftheyarediffernetfromthealreadyprintedvaluesfortheIOPATH
}else{
printfile1"($correct_value2_IOPATH[0]::$correct_value2_IOPATH[1])";
}
}
elsif($value_IOPATH[1]=~":[^:]")
{$value_IOPATH[1]=~s/[()]//g;
@correct_value2_IOPATH=split(/:/,$value_IOPATH[1]);
if(exists$load_correct_value2_0{$instance_name2}){
if($load_correct_value2_0{$instance_name2}0.0){
if(abs($load_correct_value2_0{$instance_name2})$correct_value2_IOPATH[0]){
$correct_value2_IOPATH[0]=$correct_value2_IOPATH[0]+$load_correct_value2_0{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}}}
if(exists$load_correct_value2_1{$instance_name2}){
if($load_correct_value2_1{$instance_name2}0.0){
if(abs($load_correct_value2_1{$instance_name2})$correct_value2_IOPATH[1]){
$correct_value2_IOPATH[1]=$correct_value2_IOPATH[1]+$load_correct_value2_1{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$instance_name2.$pin_name2}of$instance_name2issmallerthantheINTERCONNECTdelay\n";}}}
if(exists$load_correct_value2_2{$instance_name2}){
if($load_correct_value2_2{$instance_name2}0.0){
if(abs($load_correct_value2_2{$instance_name2})$correct_value2_IOPATH[2]){
$correct_value2_IOPATH[2]=$correct_value2_IOPATH[2]+$load_correct_value2_2{$instance_name2};}
else{print"IOPATHdelayfor$load_pin{$insta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉庫轉(zhuǎn)租簡易合同范本
- 2025年掃瞄隧道顯微鏡項目合作計劃書
- 廚具安裝銷售合同范本
- 化肥購銷合同范本
- 合伙開店合作合同范例
- 共同招商合作合同范本
- 合伙經(jīng)營合同范本格式
- 合成車間轉(zhuǎn)讓合同范本
- 吉林2009造價合同范本
- 棉被代加工合同范本
- 2025年高考百日誓師大會校長致辭(二)
- 2025年河南機電職業(yè)學(xué)院單招職業(yè)技能測試題庫及參考答案
- 2025年黑龍江能源職業(yè)學(xué)院單招職業(yè)傾向性測試題庫完整
- 學(xué)校垃圾處理運輸服務(wù)合同
- 廣西2025年01月南寧市良慶區(qū)公開考試招考專職化城市社區(qū)工作者筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 注塑產(chǎn)品生產(chǎn)流程
- 統(tǒng)編版(2025)七年級下冊道德與法治教學(xué)計劃
- 七年級數(shù)學(xué)下冊 第11章 單元測試卷(蘇科版 2025年春)
- 2024年天津市建筑安全員A證考試題庫及答案
- 2021年江蘇省公務(wù)員考試行測+申論真題及答案解析(A類卷)
- 2024年皖西衛(wèi)生職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
評論
0/150
提交評論