本文是記錄項目過程中遇到的奇巧淫技,如有遺漏或者不足,請大家改正和補充,謝謝。
隨着深亞微米技術的普及與發展,leakage功耗在整個功耗中的比重越來越大,比如45nm下,已經占到了60%以上,所以低功耗解決方案應運而生。目前已經有一套標准的低功耗設計流程,流程有CPF(cadence主導)和UPF(synopsys主導)兩種,但技術趨勢是UPF會大一統,所以本篇將為那些仍舊使用ncverilog而不是vcs仿真工具的苦逼們提供一些參考。
目前常用的降低低功耗的方法有四種:多電壓域、時鍾門控、電源關斷和動態電壓頻率調整。其中的時鍾門控對驗證影響較小,大家應該都接觸過,而剩下的三個對驗證工作影響較大,需要用到各個EDA廠商的低功耗解決方案。
閑話就說這么多,那么cadence如何使用upf來實現低功耗流程的仿真驗證呢?
第一步,先得有UPF文件,根據設計需求,使用TCL建立腳本,建立和管理獨立電壓源、確定隔離、建立電平漂移等,一般是設計或者后端人員書寫,驗證工程師當然也可以寫,具體內容參考IEEE 1801。
第二步,仿真case中添加電源上電過程,使用$supply_on函數給相應VDD上電。
第三步,將UPF嵌入到仿真命令中,即:
irun -lps_1801 sim.upf -lps_assign_ft_buf -lps_iso_verbose ...
或者
1 ncvlog ... 2 ncelab -lps_1801 sim.upf -lps_assign_ft_buf -lps_iso_verbose ... 3 ncsim ...
相關options解釋如下:
①-lps_1801 filename: 指定符合IEEE 1801標准的UPF文件;
②-lps_assign_ft_buf: 指定assign賦值被當做buffer對待,而非默認的wire,好處是從always-on domain進入和穿過power-down domain的信號被force成x,便於debug;
③-lps_const_aon: 對處在power-down domain並且直接和always-on domain相連接的tie-high或者tie-low constant,不使能corruption功能;默認不使用該功能;
④-lps_enum_rand_corrupt:對於用戶定義的enum類型數據,在電源關斷后,隨機從枚舉列表中選擇一個值作為變量值;和該命令相類似的還有-lps_enum_right, -lps_implicit_pso等,因為不常用,就不一一介紹了;
⑤-lps_iso_verbose: 使能isolation的log功能,這個一般需要加上;
⑥...
其它的options請參考cadence的low-power simulation guide。
最后,運行仿真即可。
最后說一下low power流程驗證正確性和完備性的確認方法。
①增加的low power流程不能影響芯片本身功能的正確性,比如通過電源關斷來降低芯片功耗,則關斷再打開后,芯片還可以正常work。這部分可以利用原有的self-check驗證環境來確認。
②利用log文件分析,上述仿真命令-lps_verbose和UPF文件會為仿真輸出與low power相關的warning, error以及assertion信息,通過log文件可以check流程的正確性;
③自動的assertion checker分析,使用-lps_verify選項可以自動檢查電源關斷順序(隔離->復位->斷電)和電源打開過程(上電->解復位->解隔離),如不滿足該時序要求,會自動報錯;
④利用覆蓋率保證驗證完備性,使用-lps_vplan選項依據UPF文件生成low power驗證計划,通過simvision提供的coverage接口,得到low power相關的功能覆蓋率;
