版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/基本后端流程(漂流&雪擰)2010/7/32010/7/8本教程將通過一個8*8的乘法器來進行一個從verilog代碼到版圖的整個流程(當然只是基本流程,因為真正一個大型的設計不是那么簡潔就完成的),此教程的目的就是為了讓大家盡快了解數(shù)字IC設計的也許流程,為以后學習建立一個基礎。此教程只是本人探究試驗的結果,并不代表內容都是正確的,只是為了說明也許的流程,里面確定還有很多未完善并且有錯誤的地方,我在今后的學習當中會對其逐一完善和修正。此后端流程大致包括以下內容:邏輯綜合(邏輯綜合是干嗎的就不用說明了把?)設計的形式驗證(工具formality)形式驗證就是功能驗證,主要驗證流程中的各個階段的代碼功能是否一樣,包括綜合前RTL代碼和綜合后網(wǎng)表的驗證,因為如今IC設計的規(guī)模越來越大,假如對門級網(wǎng)表進行動態(tài)仿真的話,會花費較長的時間(規(guī)模大的話甚至要數(shù)星期),這對于一個對時間要求嚴格(設計周期短)的asic設計來說是不行容忍的,而形式驗證只用幾小時即可完成一個大型的驗證。另外,因為版圖后做了時鐘樹綜合,時鐘樹的插入意味著進入布圖工具的原來的網(wǎng)表已經(jīng)被修改了,所以有必要驗證和原來的網(wǎng)表是邏輯等價的。靜態(tài)時序分析(STA),某種程度上來說,STA是ASIC設計中最重要的步驟,運用primetime對整個設計布圖前的靜態(tài)時序分析,沒有時序違規(guī),則進入下一步,否則重新進行綜合。(PR后也需作signoff的時序分析)運用cadence公司的SOCencounter對綜合后的網(wǎng)表進行自動布局布線(APR)自動布局以后得到詳細的延時信息(sdf文件,由寄生RC和互聯(lián)RC所組成)反標注到網(wǎng)表,再做靜態(tài)時序分析,和綜合類似,靜態(tài)時序分析是一個迭代的過程,它和芯片布局布線的聯(lián)系特別緊密,這個操作通常是須要執(zhí)行很多次才能滿意時序需求,假如沒違規(guī),則進入下一步。APR后的門級功能仿真(假如須要)進行DRC和LVS,假如通過,則進入下一步。用abstract對此8*8乘法器進行抽取,產(chǎn)生一個lef文件,相當于一個hardmacro。將此macro作為一個模塊在另外一個top設計中進行調用。設計一個新的ASIC,其次次設計,我們須要添加PAD,因為沒有PAD,就不是一個完整的芯片,詳細操作下面會說。重復第4到7步邏輯綜合設計的8*8verilog代碼如下modulemux(clk,clr,data1,data2,dataout);inputclk,clr;input[7:0]data1,data2;outputreg[15:0]dataout;always@(posedgeclk)beginif(!clr)begindataout<=0;endelsebegindataout<=data1*data2;endendendmodule綜合之前,我們要選取庫,寫好約束條件,修改dc的啟動文件synopsys_dc.setup,目標庫選擇TSMC(此設計都是用TSMC18的庫)的typical.db。(選擇max庫會比較好)Dc的吩咐眾多,但是最基本的吩咐差不多,此設計的約束文件吩咐如下:create_clock-period10[get_portsclk]//用于時鐘的創(chuàng)建set_clock_latency-source-max0.2[get_portsclk]//外部時鐘到core的clk連線延時set_clock_latency-max0.1[get_portsclk]//core的clk到寄存器clk端的net連線延時set_clock_uncertainty-setup2[get_portsclk]//時鐘延時的不確定性,求setup違規(guī)時會被計算進去set_clock_uncertainty–hold1【all_clocks】set_input_delay-max0.5-clockclk[get_ports[list[remove_from_coll[all_inputs]clk]]//輸入延時,外部信號到input端的連線延時set_output_delay-max0.5-clockclk[all_outputs]//輸出延時set_driving_cell-lib_cellINVX4[all_inputs]//輸入端的驅動強度set_load-pin_load0.0659726[all_outputs]//輸出端的驅動力set_wire_load_model-nametsmc18_wl10-librarytypical//內部net的連線模型set_wire_load_modeenclosed//定義建模連線負載相關模式set_max_area0compilereport_timingreport_constraintchange_names-ruleverilog–hierset_fix_multiple_ports_net–allwrite-formatverilog-hier-outputmux.sv//輸出網(wǎng)表,自動布局布線須要write-formatddc-hier-outputmux.ddc//輸出ddcwrite_sdfmux.sdf//輸出延時文件,靜態(tài)時序分析時須要write_sdcmux.sdc//輸出約束信息,自動布局布線須要邏輯綜合啟動design_vision。Read->mux.v輸入約束文件。File->excutescript->verti.con之后會產(chǎn)生mux.sv,mux.sdc,mux.sdf,mux.ddc等文件時序分析綜合以后我們須要分析一下時序,看時序是否符合我們的要求,綜合事實上是一個setup時間的滿意過程,但是我們綜合的時候,連線的負載只是庫供應的(即上面的wire_load),并不是實際的延時,所以一般做完綜合以后,時間余量(slack)應當為時鐘的30%(閱歷值),以便為后面實際布局布線留下足夠的延時空間。因為假如slack太小,甚至接近于0,雖然我們看起來是沒有時序違規(guī)的,但是實際布局以后,時序確定無法滿意。運用report_timing吩咐,可以查看時序分析報告:****************************************Report:timing-pathfull-delaymax-max_paths1-sort_bygroupDesign:muxVersion:D-2010.03-SP1Date:FriJul212:29:442010****************************************OperatingConditions:typicalLibrary:typical(模型庫)WireLoadModelMode:enclosedStartpoint:data2[4](inputportclockedbyclk)Endpoint:dataout_reg_15_(risingedge-triggeredflip-flopclockedbyclk)PathGroup:clkPathType:maxDes/Clust/PortWireLoadModelLibrarymuxtsmc18_wl10typical(線載模型及庫)PointIncrPathclockclk(riseedge)0.000.00clocknetworkdelay(ideal)0.000.00inputexternaldelay0.500.50fdata2[4](in)0.010.51fmult_14/b[4](mux_DW_mult_uns_0)0.000.51fmult_14/U131/Y(INVX1)0.541.05rmult_14/U161/Y(NOR2X1)0.141.18fmult_14/U39/S(CMPR42X1)0.681.87fmult_14/U12/CO(ADDFX2)0.322.19fmult_14/U11/CO(ADDFX2)0.232.42fmult_14/U10/CO(ADDFX2)0.232.65fmult_14/U9/CO(ADDFX2)0.232.88fmult_14/U8/CO(ADDFX2)0.233.10fmult_14/U7/CO(ADDFX2)0.233.33fmult_14/U6/CO(ADDFX2)0.233.56fmult_14/U5/CO(ADDFX2)0.233.79fmult_14/U4/CO(ADDFX2)0.234.02fmult_14/U3/CO(ADDFX2)0.234.25fmult_14/U2/CO(ADDFX2)0.224.47fmult_14/product[15](mux_DW_mult_uns_0)0.004.47fdataout_reg_15_/RN(DFFTRXL)0.004.47fdataarrivaltime4.47clockclk(riseedge)10.0010.00clocknetworkdelay(ideal)0.3010.30clockuncertainty-0.1010.20dataout_reg_15_/CK(DFFTRXL)0.0010.20rlibrarysetuptime-0.1910.01datarequiredtime10.01datarequiredtime10.01dataarrivaltime-4.47slack(MET)5.55我們來看以上報告,dc報告的時候會顯示出關鍵路徑,即延時最大的路徑,時序分析包括兩段,前面一段是信號的延遲時間,即dataarrivaltime為4.47,下面是計算要求時間,也即相對于時鐘,設計所能忍受的最大延時,由于到達寄存器clk端延時,即clocknetworkdelay,所以設計增加了0.30的余量,同樣由于時鐘的不確定度(可能提前也可能延后0.1),我們取最壞狀況,就是時鐘超前0.1,則時間余量減去0.1,最終一個是門的建立時間要求,是0.19,最終得到數(shù)據(jù)的要求時間。Slack是要求時間減去到達時間的差值,slack越大越好。越大說明留給布局布線的時序越寬松。從報告中我們看出,時序余量為5.55,說明時序達到了要求,足夠滿意我們以后布局布線的時序要求。當然,我們有特地的時序分析工具,primetime,下面會略微介紹。形式驗證怎么保證綜合前和綜合后的網(wǎng)表邏輯功能是一樣的呢,對門級網(wǎng)表進行動態(tài)仿真,又太奢侈時間,于是,一款強大的驗證工具formality,給了我們很好的幫助。形式驗證數(shù)據(jù)打算:綜合前RTL代碼,綜合后的網(wǎng)表,綜合所用到的庫。驗證過程如下:首先我們打開formality,吩咐為fm_shell(吩咐行界面),formality(圖形界面)。初學者一般運用圖形界面,運用圖形界面的時候,工具會自動產(chǎn)生一個log文件,記錄吩咐,我們可以將這個文件內容做一個fms格式,這樣在下次驗證的時候可以運用吩咐界面。打開formality如下第一步:首先我們加入原RTL代碼,reference->read_designfile->verilog->mux.v,選擇好以后loadfile其次步:然后選擇庫,沒加庫之前,F(xiàn)M會自動加載和工藝無關的庫,所以我們要自己把自己的目標庫加上去,reference->readDBlibarary->DB,選擇typical.db第三步:設置top名reference->settopdesign我們選擇mux為top名同樣的方法對網(wǎng)表進行設置(其次個菜單欄implementation)然后轉到第四欄,點擊runmatching最終轉到第五欄,verify,假如網(wǎng)表無錯,會顯示驗證通過。3靜態(tài)時序分析靜態(tài)時序分析主要針對大型ASIC設計,4自動布局布線1)數(shù)據(jù)打算第一:須要綜合后的網(wǎng)表以剛好序約束文件mux.sv,mux.sdc其次:須要自動布局布線的物理庫(lef文件,這里用到tsmc18_6lm_cic.lef,tsmc18_6lm_antenna_cic.lef)為了能夠了解lef文檔的作用,這里對lef做簡潔的介紹,lef一般分為兩種:一種是技術物理庫,主要包含工藝信息,設計規(guī)則信息,金屬通孔信息等。下例是對金屬一層的定義,TYPE指明METAL1是可布線層,WIDTH定義的是METAL1的默認布線寬度,SPACING用于設定METAL1布線間距。DIRECTIONHORIZONTAL指明METAL1是用于水平走線,當然這并不意味著它不能垂直走線,在一些布線資源較少的區(qū)域,還是可以選擇垂直布線的。詳細介紹,可以參考相關技術文檔。LAYERMETAL1TYPEROUTING;WIDTH0.230;MAXWIDTH9.9;AREA0.202;SPACING0.230;SPACING0.6RANGE10.0100000.0;PITCH0.560;DIRECTIONHORIZONTAL;EDGECAPACITANCE9.1090e-05;ENDMETAL1另外一種就是單元物理庫,定義了單元庫中各單元的信息,文件又有兩部分一種是SITE語句對布局(placement)最小單位的定義,另一部分是采納MACRO語句對單元屬性及幾何形態(tài)的描述,下例是對一個和門為例來看看lef是如何描述它的。MACRO是單元定義的關鍵字,每一個MACRO代表一個單元。CLASScore說明該單元是用于芯片的核心區(qū),SIZE確定了單元的面積大小,比如5.04是代表該單元的高度,后面我們做單元供電route的時候,可以看到它們的寬度就是這個數(shù)值。再后面就是定義引腳A,B,Y,VDD,VSS等。MACROAND2X1CLASSCORE;FOREIGNAND2X10.0000.000;ORIGIN0.0000.000;LEQAND2XL;SIZE2.640BY5.040;SYMMETRYxy;SITEtsm3site;PINYDIRECTIONOUTPUT;PORTLAYERMETAL1;RECT2.3552.3802.5002.660;ENDENDYPINBDIRECTIONINPUT;PORTLAYERMETAL1;RECT0.8002.3151.2152.895;ENDENDBPINADIRECTIONINPUT;PORTLAYERMETAL1;RECT0.1501.8200.5652.315;ENDENDAPINVSSDIRECTIONINOUT;USEground;SHAPEABUTMENT;PORTLAYERMETAL1;RECT1.790-0.4002.6400.400;RECT1.450-0.4001.7900.575;RECT0.000-0.4001.4500.400;ENDENDVSSPINVDDDIRECTIONINOUT;USEpower;SHAPEABUTMENT;PORTLAYERMETAL1;RECT1.7554.6402.6405.440ENDENDVDDOBSLAYERMETAL1;RECT1.8351.9351.8852.355;ENDENDAND2X1第三:時序庫文件,typical.lib,也就是時序文件,定義了門的各種時序信息,某種意義來講,這個和綜合運用的db庫是等價的。2)布局布線過程:第一步:打開encounter把數(shù)據(jù)輸入,另外在advanced欄的Power相應位置填上VDD,和VSS。如下圖,設置完以后,記得把設置的配置文件做一個save以便于下次運用其次步:打開以后,我們可以看到芯片區(qū)域,左邊粉紅色的就是標準單元,中間那個就是我們要設計的區(qū)域,64%是指cell面積的占有率,一般來說限制在70%左右,布線的時候不會引起擁塞。另外我們須要對芯片進行略微的更改,F(xiàn)loorplan->specifyfloorplan.,將coretoIO那些項都填上45,留給電源環(huán)的放置。第三步:添加電源環(huán)設置如下圖,NET填寫VDD和VSS,layer選擇頂層的兩層金屬,寬度設置為20(這個不定,可以依據(jù)實際設計來定),offset選擇centerinchannel,則電源環(huán)會被設置在IO和core之間。之后電源環(huán)就加進去了,當然這是一個小電路,電源規(guī)劃比較簡潔,對于一個困難的電路,還須要橫豎添加stripes,降低IRdrop。第四步:自動布局以及布置標準單元,因為此設計較小,并沒有block,所以可以干脆進行標準單元的放置。Place->standardcellsandblocaks->OK然后我們發(fā)覺標準單元已經(jīng)被加進去了:第五步:布置好了以后,我們須要將電源,地,等接口先連接起來,首先我們在floorplan中選擇globalnetconnection,分別將VDD,VSS等都連接起來。然后我們須要specifyroute將電源和地線先連接起來,選擇route->specifyroute因為我們這個設計只有標準單元,所以我們只要選擇標準單元的布線即可:完成以后,點擊OK,會得到下面的圖:每行的row都有線連接到外面的電源環(huán)第六步:時鐘樹綜合(CTS),這是一個APR設計中最重要的一環(huán),為什么要進行時鐘樹綜合呢,簡潔地說,因為信號傳輸?shù)难訒r,我們須要讓相應路徑的時鐘路徑的也具有同樣的延時,通過添加時鐘緩沖器的方法,來消退各路徑的建立時間,詳細請參考相關書籍和資料。添加好時鐘樹以后的版圖如下:加了時鐘樹以后的版圖密集了很多,因為加了很多buf。時鐘樹的腳本:AutoCTSRootPinclkPeriod10nsMaxDelay500ps#set_clock_latencyMinDelay0ps#set_clock_latencyMaxSkew100psSinkMaxTran400psBufMaxTran400psObstructionNODetailReportYESPadBufAfterGateNORouteClkNetNOPostOptYESOptAddBufferYESOptAddBufferLimit100NoGatingNOBufferCLKBUFX1CLKBUFXLCLKBUFX2CLKBUFX3CLKBUFX4CLKBUFX8CLKBUFX12CLKBUFX16CLKBUFX20CLKINVXLCLKINVX1CLKINVX2CLKINVX3CLKINVX4CLKINVX8CLKINVX12CLKINVX16CLKINVX20END然后將腳本選中,并進行時鐘樹綜合。第七步:優(yōu)化設計,吩咐optDesign–postCTS,然后report_timing查看時序報告,確定無違規(guī),再進行完全布線。第八步:完全布線,route->nanoroute->route之后得到的版圖如下所示:第九步:保存設計,提取須要的數(shù)據(jù)。這里特殊留意提取gds文件的時候,須要指定庫文件中的streamOut.map文件,和mergegds(tsmc18_core.gds)文件,如圖所示保存網(wǎng)表,并將此版圖提取的網(wǎng)表做一次formality,和原代碼匹配勝利。再提取def文件,保存為mux.def5其次次靜態(tài)時序分析用版圖實際提取的延時文件進行6APR后仿真用modelsim對版圖提取的網(wǎng)表和sdf文件進行仿真。7用calibre對版圖進行DRC及其LVS驗證在做這步之前,我們須要把相關的文檔拷貝到icfb的工作書目下Encounter導出的gds文檔:這里是mux8.gds(留意merge庫的map文件)技術文檔如:,可以在廠家供應的庫中去找顯示文件:display.drfCaliber驗證文件:drc,lvs文檔第一步:將encounter的版圖數(shù)據(jù)導入virtuoso,打開icfb&,選擇file->import->stream然后將版圖信息和技術文件填入:導入勝利以后會出現(xiàn)我們所做的庫,mux就是我們encounter中所畫的版圖。我們把版圖打開:這就是我們所畫的版圖然后在此進行drc,和lvs,通過以后再進行下面的工作。其次步:drc檢查此處有錯,并不是邏輯有問題,是因為密度不夠的問題,須要在encounter階段加FILLER,F(xiàn)ILLER是和邏輯無關的,因為代工廠的流片加工要求,須要加的,密度不夠,加工簡潔引起問題。所以假如DRC報類似錯誤,假如是須要流片的版圖,除非代工廠同意,否則必需清除這些錯誤。第三步:lvs檢查1)Lvs檢查之前,我們須要把綜合后的verilog文件轉換成網(wǎng)表文件,用于lvs,方法如下:終端下執(zhí)行:v2lvs-vmux.v-ltsmc18_lvs.v-oCHIP.spi-stsmc18_lvs.spi-ccic_-ncalibre-lvs-spicelayout.spi-hier-autoCalibre-lvs-cur_soce,之后會得到一個CHIP.spi的網(wǎng)表文件。(此處的verilog的轉換是用庫中的lvs.cmd產(chǎn)生)2)用來lvs的網(wǎng)表我們選擇之前導出CHIP.spi:然后runlvs,匹配勝利!8用abstract對模塊進行抽取我們把8*8乘法器模塊用abstract工具導出lef,作為硬核,用于后面自動布局布線的調用,我們可以從今試驗中找到模數(shù)混合自動版圖的設計思想。AbstractDef=>Lef第一步:創(chuàng)建一個新的library,并關聯(lián)一個tf文件。其次步:導入standcell.gds注:(1)不須要輸入streamOut.map也不用點上(nomerge)不須要更改。TopCellName為空第三步:導入standcell.lef第四步:導入mux.def第五步:打開librarymanager在mux庫里打開mux的layout,并選擇tools=>layout。第六步:選擇Edit=>Search,點擊AddCriteria,如下設置,選擇aplly,在選擇ReplaceAll。第七步:保存退出第八步:打開abstract,并打開mux庫。然后把mux模塊從core導入到block當中,方法:點擊mux,然后cell=>move=>block=>OK。第九步:點擊GDS圖中l(wèi)abel,然后點擊Q查看Properity??纯词鞘裁磳樱缓罂纯聪旅娴膎et的Properity是什么層,以及是什么purpose。層:METAL3,Purpose:pin。詳細含義主要看abstractUG。<1>點擊,輸入MaptextlabelstopinsMaptextlabelstopins的書寫格式及含義參考abstractUG。<2>點擊<3>點擊<4>Exportlef<5>查看abstract.lef里面有沒有VDD和VSS之后我們得到一個該模塊的lef文件,下面我們就用這個模塊做一次調用。9將此macro作為一個模塊在另外一個top設計中進行調用。第一步:首先我們還是回到綜合,我們重新設計一個top,這個top將包含新的邏輯功能,之前的mux模塊,還有PAD模塊。這個設計的也許框圖如下:PDIDGZ為數(shù)字輸入IO口PDO04CDG為數(shù)字輸出IO口PVDD1DGZ為供電PAD高電端PVSS1DGZ為供電PAD的地電端Multiple為之前做的宏模塊Mux為新加邏輯其次步,代碼的改寫:我們重新編寫過verilog代碼(帶PAD),帶PAD做綜合有個好處,可以不用設置輸入輸出端口的驅動,因為PAD的驅動已經(jīng)很大了,這樣綜合出的結果更接近實際。新的verilog代碼如下:modulemux_1(clk,clr,a,b,y);//(這里我們引用了新的邏輯,留意這個mux_1和之前的沒半點關系,只是為了體現(xiàn)調用關系隨意加的一個而已)inputclk,clr;input[7:0]a,b;output[15:0]y;reg[15:0]y;always@(posedgeclk)beginif(!clr)beginy<=0;endelsebeginy<=a*b;endendendmodulemodulePAD(clk_pcb,clk_core,clr_pcb,clr_core,data1_pcb,data1_core,data2_pcb,data2_core,dataout_core,dataout_pcb);(這是PAD模塊,留意結合前面的框圖是想想是如何加的)inputclk_pcb,clr_pcb;outputclk_core,clr_core;input[7:0]data1_pcb,data2_pcb;output[7:0]data1_core,data2_core;input[15:0]dataout_core;output[15:0]dataout_pcb;PDIDGZPAD_CLK(.PAD(clk_pcb),.C(clk_core));PDIDGZPAD_CLR(.PAD(clr_pcb),.C(clr_core));PDIDGZPAD_DATA1_0(.PAD(data1_pcb[0]),.C(data1_core[0]));PDIDGZPAD_DATA1_1(.PAD(data1_pcb[1]),.C(data1_core[1]));PDIDGZPAD_DATA1_2(.PAD(data1_pcb[2]),.C(data1_core[2]));PDIDGZPAD_DATA1_3(.PAD(data1_pcb[3]),.C(data1_core[3]));PDIDGZPAD_DATA1_4(.PAD(data1_pcb[4]),.C(data1_core[4]));PDIDGZPAD_DATA1_5(.PAD(data1_pcb[5]),.C(data1_core[5]));PDIDGZPAD_DATA1_6(.PAD(data1_pcb[6]),.C(data1_core[6]));PDIDGZPAD_DATA1_7(.PAD(data1_pcb[7]),.C(data1_core[7]));PDIDGZPAD_DATA2_0(.PAD(data2_pcb[0]),.C(data2_core[0]));PDIDGZPAD_DATA2_1(.PAD(data2_pcb[1]),.C(data2_core[1]));PDIDGZPAD_DATA2_2(.PAD(data2_pcb[2]),.C(data2_core[2]));PDIDGZPAD_DATA2_3(.PAD(data2_pcb[3]),.C(data2_core[3]));PDIDGZPAD_DATA2_4(.PAD(data2_pcb[4]),.C(data2_core[4]));PDIDGZPAD_DATA2_5(.PAD(data2_pcb[5]),.C(data2_core[5]));PDIDGZPAD_DATA2_6(.PAD(data2_pcb[6]),.C(data2_core[6]));PDIDGZPAD_DATA2_7(.PAD(data2_pcb[7]),.C(data2_core[7]));PDO04CDGPAD_DATAOUT_0(.I(dataout_core[0]),.PAD(dataout_pcb[0]));PDO04CDGPAD_DATAOUT_1(.I(dataout_core[1]),.PAD(dataout_pcb[1]));PDO04CDGPAD_DATAOUT_2(.I(dataout_core[2]),.PAD(dataout_pcb[2]));PDO04CDGPAD_DATAOUT_3(.I(dataout_core[3]),.PAD(dataout_pcb[3]));PDO04CDGPAD_DATAOUT_4(.I(dataout_core[4]),.PAD(dataout_pcb[4]));PDO04CDGPAD_DATAOUT_5(.I(dataout_core[5]),.PAD(dataout_pcb[5]));PDO04CDGPAD_DATAOUT_6(.I(dataout_core[6]),.PAD(dataout_pcb[6]));PDO04CDGPAD_DATAOUT_7(.I(dataout_core[7]),.PAD(dataout_pcb[7]));PDO04CDGPAD_DATAOUT_8(.I(dataout_core[8]),.PAD(dataout_pcb[8]));PDO04CDGPAD_DATAOUT_9(.I(dataout_core[9]),.PAD(dataout_pcb[9]));PDO04CDGPAD_DATAOUT_10(.I(dataout_core[10]),.PAD(dataout_pcb[10]));PDO04CDGPAD_DATAOUT_11(.I(dataout_core[11]),.PAD(dataout_pcb[11]));PDO04CDGPAD_DATAOUT_12(.I(dataout_core[12]),.PAD(dataout_pcb[12]));PDO04CDGPAD_DATAOUT_13(.I(dataout_core[13]),.PAD(dataout_pcb[13]));PDO04CDGPAD_DATAOUT_14(.I(dataout_core[14]),.PAD(dataout_pcb[14]));PDO04CDGPAD_DATAOUT_15(.I(dataout_core[15]),.PAD(dataout_pcb[15]));PVDD1DGZvdd1();(現(xiàn)在不用加的)PVDD1DGZvdd2();PVDD1DGZvdd3();PVDD1DGZvdd4();PVSS1DGZvss1();PVSS1DGZvss2();PVSS1DGZvss3();PVSS1DGZvss4();PCORNERDGc1();PCORNERDGc2();PCORNERDGc3();PCORNERDGc4();endmodule#############################頂層模塊#########################moduletop(clock,clear,da1,da2,dataout_out);inputclock,clear;input[7:0]da1,da2;output[15:0]dataout_out;wireclk_core,clr_core;wire[7:0]data1_core,data2_core;wire[15:0]dataout_core;wire[15:0]y;PADPAD_TOP(.clk_pcb(clock),.clk_core(clk_core),.clr_pcb(clear),.clr_core(clr_core),.data1_pcb(da1),.data1_core(data1_core),.data2_pcb(da2),.data2_core(data2_core),.dataout_core(dataout_core),.dataout_pcb(dataout_out));mux_1mux_1(.clk(clk_core),.clr(clr_core),.a(data1_core),.b(data2_core),.y(y));muxmutiple(.clk(clk_core),.clr(clr_core),.data1(y[15:8]),.data2(y[7:0]),.dataout(dataout_core));(這里是對硬核的調用)endmodule第三步:邏輯綜合留意的是,我們在邏輯綜合之前,須要加如mux的db庫文件,此文件由encounter布局布線以后產(chǎn)生的延時文件再經(jīng)過pt靜態(tài)時序分析以后產(chǎn)生。我們給頂層模塊加如約束:Current_designtoplinkcreate_clock-period10[get_portsclock]set_clock_latency-source-max0.2[get_portsclock]set_clock_latency-max0.1[get_portsclock]set_clock_uncertainty-setup0.01[get_portsclock]set_input_delay-max0.5-clockclock[all_inputs]set_output_delay-max0.5-clockclock[all_outputs]#set_driving_cell-lib_cellINVX4[all_inputs]#set_load-pin_load0.0659726[all_outputs]set_wire_load_model-nametsmc18_wl10-librarytypicalset_wire_load_modeenclosedset_dont_touchmux(留意此處,就是綜合的時候不針對mux進行綜合,綜合工具會自動跨越邊界對其他邏輯進行綜合)set_dont_touch_network[all_clocks]compile-boundarychange_names-ruleverilog-hierwrite-formatverilog-hier-outputtop.svwrite-formatddc-hier-outputtop.ddcwrite_sdftop.sdfwrite_sdctop.sdc第四步:布局布線用綜合得到的網(wǎng)表(top.sv)和約束文件(sdc)。并將之前的mux模塊的lef文檔打算好。這里遇到了一個問題,在邏輯綜合之前的代碼我已經(jīng)加如了PAD的VDD,VSS和corner,但是綜合完以后就不見了,緣由不明,這時在布局之前就要手動添加上去。數(shù)據(jù)打算:頂層模塊網(wǎng)表文件:mux.sv物理庫文件:tsmc18_6lm_cic.lef(tech以及std的lef),mux_block.lef和PAD的lef時序文件:對應于上面的l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場施工防化學災害制度
- 應急物資裝備應急預案
- 醫(yī)療護理醫(yī)學培訓 吸痰護理技術課件
- DB6103T 87-2025企業(yè)簡易注銷登記服務規(guī)程
- XX村電排建設及維護合同書2025
- 個人股權抵押融資合同樣本
- 臨時促銷服務合同
- 中小企業(yè)融資合作合同協(xié)議
- 京東商城代運營合同模板
- 個人質押貸款合同模板
- 流行文化對青少年價值觀的影響研究
- 中國保險行業(yè)協(xié)會官方-2023年度商業(yè)健康保險經(jīng)營數(shù)據(jù)分析報告-2024年3月
- 設計質量管理和保證措施及設計質量管理和質量保證措施
- 2024電力系統(tǒng)安全規(guī)定
- 小學二年級語文上冊閱讀理解專項訓練20篇(含答案)
- 科技論文圖表等規(guī)范表達
- 高考寫作指導議論文標準語段寫作課件32張
- 2021年普通高等學校招生全國英語統(tǒng)一考試模擬演練八省聯(lián)考解析
- 華能火力發(fā)電機組節(jié)能降耗技術導則(2023年版)
- 基礎知識3500個常用漢字附拼音
- 企業(yè)易制毒化學品管理培訓
評論
0/150
提交評論