前介紹過了了芯片設計全流程介紹(芯片設計全流程詳解包括:正向流程和反向流程)。由于當時的經驗十分有限,所以對于正向設計,特別是對于從RTL級代碼開始的設計介紹得不是很清楚。經過這一段時間的學習,對于從RTL級代碼開始的Asic芯片設計有了更多的認識,現在總結一下,一方面給自己整理思路,另一方面也希望拋磚引玉,讓大家各抒己見,分享一下各自的設計經驗,促進我們的共同進步。
筆者原本打算詳細的介紹學習中的收獲,將各類知識點寫成文章,但經過反復考量之后,發現這種詳細照搬別人知識的做法其實沒什么意思。與其原封不動的轉述別人書中的內容,不如直接提供參閱的書目,這樣就免得在轉述別人的知識的時候誤解作者想要表達的真正意義。所以本系列的文章,筆者將個人學習的經驗加以整合,將經驗知識點羅列出來,并附加所參閱的書籍。另外涉及到實踐操作過程的章節,將會把具體使用的工具羅列出來,并附上一些參考性的代碼和腳本。
本系列文章主要分為十二個部分,分別為:
(一)工具及書籍文檔推薦
(二)軟件環境搭建
(三)RTL設計
(四)驗證
(五)工藝庫說明
(六)形式驗證
(七)綜合
(八)可測性設計
(九)低功耗設計
(十)靜態時序分析
(十一)數模混合仿真
(十二)可測性設計
介紹這么多,不是顯得個人有多少經驗,其實本人也只是菜鳥,關注這么多內容,主要是為了讓自己的知識儲備更全面一下,這樣考慮設計問題的時候遺漏的東西會更少一些。在本系列文章中,每個章節的詳略是不同的,主要是跟個人工作經驗有關,有介紹得簡單的地方,麻煩大家幫忙補充。每個部分的內容基本采用“理論+工具+示例”的行文結構,有些EDA工具筆者沒有使用過的就暫不能提供實例了。
一、前言
對于RTL級的Asic設計所涉及到的軟件是非常之多的,筆者也并沒有每一個都使用過。
二、工具介紹
RTL代碼規則檢查工具:nlint,spyglass。這兩個軟件主要是用于檢查代碼的語法和語義錯誤的,并且比其他的工具能檢測出更多的問題,比如說命名規格,時序風險,功耗等。詳細介紹請參考軟件的使用教程,nlint有Windows版和linux版,軟件的linux版本和使用教程可以在eetop上搜索到。
RTL代碼仿真工具:這類仿真工具有較多的組合,比如說:qustasim/modelsim,NC_verilog+Verdi,VCS+DVE,VCS+Verdi等等。目前筆者使用的組合是VCS+Verdi。這兩個軟件是業內主流的仿真軟件,還可以結合UVM庫進行仿真,當然這是驗證方法學的內容。
綜合工具:Design Complier。最常用的綜合工具,沒有之一,該軟件主要是將RTL代碼“翻譯+優化+映射”成與工藝庫對應的門級網表。并且還包含功耗分析軟件Power Complier和邊界掃描寄存器插入軟件 BSD Complier。
可測性設計:DFT Complier + TetraMAX。軟件在DC之后使用,DFT Complier 用于將設計的內部寄存器替換成掃描寄存器并組成一條或多條掃描鏈,TetraMAX是用于自動生成測試向量的。
形式驗證工具:Formality、Conforml(candence出品)。等價性驗證工具,主要是在DFT Complier插入掃描鏈之后進行驗證,另外,在版圖綜合時鐘樹,插入BUFFER之后,也需要用該工具進行等效性驗證。
靜態時序分析工具: Prime Time。業界最常用的時序分析工具之一,該軟件包括功耗分析PTPX工具,功耗分析必備。cadence也有對應的時序分析工具——Encounter Timing System。
自動布局布線工具(APR):ICC,Enconter。其中Encounter是Cadence公司的。
數模混合仿真: nanosim + VCS,nanosim的升級版為XA。
這是一篇有關于synopsysEDA工具軟件的介紹,希望對于EDA軟件的用途不清楚的伙伴有幫助。http://bbs.eetop.cn/thread-151171-1-1.html
三、書籍推薦
《Verilog HDL 硬件描述語言》
《設計與驗證Verilog HDL》
《企業用verilog代碼風格規范》
《verilog語言編碼風格》
《verilogHDL代碼風格規范》
《Verilog HDL高級數字設計》
《Soc設計方法與實現》
《高級ASIC芯片綜合》
《華為Verilog典型電路設計》
《數字IC系統設計》
《數字集成電路--電路、系統與設計》
《專用集成電路設計實用教程》
《集成電路靜態時序分析與建模》
《CMOS集成電路后端設計與實戰》
《makefile教程》
《鳥哥的私房菜》
《SystemVerilog與功能驗證》
《UVM實戰》
《通信IC設計(上下冊)》
《數字圖像處理與圖像通信》
《數字信號處理的FPGA實現中文版》
各類Synopsy userguide,EETOP有16年版的。
三、工藝庫說明
使用DC,PT,FM,ICC或者ENCOUNTER軟件需要工藝庫文件,主要包括數字邏輯單元文件,符號庫,綜合庫,寄生電容參數庫,版圖文件LEF,milkway庫等等。
有關工藝庫各文件夾的作用,筆者將會在將“工藝庫說明”的章節進行詳細介紹,如果有遺漏還請大家包涵。
一、前言
個人的環境如下:1、vmware 12;2、RHEL6.5系統;3、synopsys軟件,Lib Complier,VCS,Verdi,Desgin Complier,PrimeTime,Formality,ICC。一共7個軟件,幾乎都是15年版本的。
二、步驟
環境搭建需要準備以下三件事:
1,vmware12虛擬機安裝;安裝教程如下。https://jingyan.baidu.com/article/215817f78879c21edb142379.html
2, RHEL6.5操作系統安裝,當然也可以使用CentOs6.5,安裝教程如下。http://www.linuxidc.com/Linux/2016-05/131701.htm ——》RHEL6.5
https://www.kafan.cn/edu/488101.html ——》Centos6.5
a、安裝vmware tools。在虛擬機中把系統安裝好了之后,需要安裝vmware tools,安裝教程如下,http://www.linuxidc.com/Linux/2015-08/122031.htm ,安裝該軟件之后才可以啟用共享文件夾以利于RHEL6.5與windows系統進行文件交換。
b、更新YUM源,RHEL和Centos都需要更新YUM源,操作步驟一致,YUM是一個鏈接到軟件庫的一個軟件,隨后安裝軟件需要用到。https://jingyan.baidu.com/article/b24f6c8239c6aa86bee5da60.html
注意:該教程某些步驟可能會失效,需要結合自己具體的情況使用。安裝好YUM之后,可以使用yum install gvim命令測試一下。
c、安裝GCC,G++,這兩個軟件在VCS+Verdi仿真時會調用到。命令:yum install gcc
命令:yum install gcc-c++
3、 Synopsys軟件安裝
Synopsys軟件安裝教程,鏈接如下:https://wenku.baidu.com/view/c02c271d9b6648d7c0c74670.html
http://bbs.eetop.cn/thread-553702-1-1.html
高版本和低版本的Synopsy軟件安裝步驟一致,區別在于license的問題。用EETOP上的最新license即可使用15版的軟件。在使用RHEL操作系統需要懂一些SHELL腳本,makefile腳本,這樣便于提高操作效率,后文會提到。
注意:此外還需要修改四個文件的hostname,使得這四處的hostname保持一致。
a、synopsys.dat中的第一行hostname;
b、synopsys.bashrc中的export SNPSLMD_LICENSE_FILE=27000@localhost行,“@”符號后的hostname;
c、/etc/sysconfig/network配置文件中hostname;
d、/etc/hosts配置文件中的127.0.0.1這一行的 ,第三個參數hostname;
這四個hostname一定要一致,才能正確啟動DC,PT,FM,ICC,VCS,VERDI軟件。
在啟動DC,PT,FM,ICC,VCS,VERDI軟件之前需要先啟動Synopsys的license管理器。
有關軟件的使用教程可以參考官方的userguide。或者EETOP上,小伙伴們的教程。
(三)工藝庫說明
(略,請點擊閱讀原文查看)
數字電路設計
RTL設計所需要的理論知識龐雜而繁多,本文所介紹的內容均由個人參閱了許多書籍之后加以整合的,很多內容本人也不是很熟,只是羅列出來作為參考學習的資料。主要有三個部分的內容,第一部分主要是數字電路設計的基礎,這是在大學時期應該予以掌握的內容,第二部分是進階的學習內容附帶一個專業方向——MCU,第三部分是有關于各類算法處理的專業知識,需要更多的復合型知識,例如通信方向需要有較好的數學功底—傅立葉變換。由于這部分內容實在太多,個人沒有能力也沒有必要將每一部分的內容都詳細的羅列出來,所以這里只是整理出一些需要把握的關鍵點。至于具體的內容,還請大家按照個人需求,參閱推薦的各類書籍。
一、基礎
組合邏輯與時序邏輯:布爾代數,卡諾圖,基本與非門,鎖存器,觸發器,沖突與冒險。——《Verilog HDL高級數字設計》
Verilog語言基礎:數值類型,表達式與運算符,assign語句,always語句,if-else語句,case語句,阻塞與非阻塞。——《Verilog HDL 硬件描述語言》
狀態機:一段式、二段式、三段式狀態機的區別;獨熱碼、二進制碼、格雷碼的區別及應用場合。——《Verilog HDL高級數字設計》
同步電路和異步電路:兩者的本質,異步電路跨時鐘域,亞穩態。——IC_learner博客
復位與時鐘:同步復位、異步復位、異步復位同步釋放的區別,時鐘分頻——二分頻、三分頻、任意整數分頻,門控時鐘,時鐘切換。——《深入淺出玩轉FPGA》,百度文檔
數據通路與控制通路:本質上任何數字電路都可以劃分為簡單的兩種類型——控制通路與數據通路,控制通路的核心是狀態機,數據通路是各類算術處理算法、并行總線等等。——《Verilog HDL高級數字設計》
Testbench驗證:無論什么電路,最終都需要驗證其功能的正確性。Testbench的結構主要由a,復位和時鐘,b,激勵產生電路,c,系統監視器,d,結果比較電路,e,波形產生函數,f,待驗證的MODULE等主要模塊組成,其中,b是最重要的模塊,一切驗證都是從激勵信號開始的。——《verilogHDL代碼風格規范》。初學者推薦使用windows版qustasim 或者modelsim 仿真工具,簡單又方便,以后可學習使用VCS+Verdi(比較折騰人)。
二、進階
代碼風格:良好的代碼風格很有必要,參考一下企業用的代碼風格,有助于個人養成良好的編碼習慣。——《企業用verilog代碼風格規范》《verilog語言編碼風格》
基本常用電路:具備以上龐雜的理論基礎之后,需要積累一些常用的基礎電路。——《華為Verilog典型電路設計》
接口電路,I2C,UART,SPI:接口電路是中小規模芯片常用的對外接口電路,無論是與上位機(PC)通信還是控制其它芯片。I2C從機常用于EEPROM芯片中,主機可以直接使用單片機模擬,ARM單片機直接集成了I2C主機,I2C的IP代碼網絡上有現成的;UART是全雙工電路,宏晶單片機通過UART進行燒錄,SPI電路最常用于SD卡上。——《Verilog HDL高級數字設計》《通信IC設計(上下冊)》有簡單的UART和SPI的代碼。
RISC,8051 MCU ——IP:通過下載EETOP上相關的IP及文檔來學習。
三、專業
數值的表示方法:浮點數,定點數的表示辦法——《Verilog HDL高級數字設計》《通信IC設計(上下冊)》
算術處理算法:浮點數的加法、乘法電路設計。——《Verilog HDL高級數字設計》
通信算法:FIR濾波器,IIR濾波器,傅立葉變換,冗余編碼等等各種通信方向必須掌握的。——《通信IC設計(上下冊)》《數字信號處理的FPGA實現》
圖像處理算法:靜態圖像,動態圖像去噪。——《數字圖像處理與圖像通信》
SOC:SOC類芯片的組成結構,AMBA總線,IP復用,SV驗證。——《Soc設計方法與實現》
四、工具:
文檔代碼編輯器:GVIM,Notpad++
RTL設計規則檢查:Nlin,spyglass
五、示例
下列代碼為UART全雙工串口示例代碼,代碼來源于《Verilog HDL高級數字設計》,隨后的章節將會使用到該示例代碼,代碼功能細節需結合書籍了解。
下面的代碼已經過modelsim驗證。
UART發送器:
module UART_XMTR #(
parameter word_size = 8
)(
output Serial_out,
input [word_size - 1 : 0] Data_Bus,
input Load_XMT_datareg,
Byte_ready,
T_byte,
Clock,
rst_b
);
Control_Unit M0( Load_XMT_DR, Load_XMT_shftreg,start,shift,clear,
Load_XMT_datareg,Byte_ready,T_byte,BC_lt_Bcmax,
Clock,rst_b);
Datapath_Unit M1( Serial_out,BC_lt_Bcmax,Data_Bus,Load_XMT_DR,
Load_XMT_shftreg,start,shift,clear,Clock,rst_b);
endmodule
module Control_Unit #(
parameter one_hot_count = 3,
state_count = one_hot_count,
size_bit_count = 3,
idle = 3'b001,
waiting = 3'b010,
sending = 3'b100
// all_ones = 9'b1_1111_11111
)(
output reg Load_XMT_DR,
output reg Load_XMT_shftreg,
output reg start,
output reg shift,
output reg clear,
input Load_XMT_datareg,
input Byte_ready,
input T_byte,
input BC_lt_Bcmax,
input Clock,
input rst_b
);
reg [state_count - 1 : 0] state, next_state;
always @(state, Load_XMT_datareg,Byte_ready,T_byte,BC_lt_Bcmax)
begin:Output_and_next_state
Load_XMT_DR = 0;
Load_XMT_shftreg = 0;
start = 0;
shift = 0;
clear = 0;
next_state = idle;
case(state)
idle: if(Load_XMT_datareg == 1'b1)begin
Load_XMT_DR = 1;
next_state = idle;
end
else if(Byte_ready == 1'b1)begin
Load_XMT_shftreg = 1;
next_state = waiting;
end
waiting: if(T_byte == 1) begin
start = 1;
next_state =sending;
end else
next_state = waiting;
sending: if(BC_lt_Bcmax) begin
shift = 1;
next_state = sending;
end
else begin
clear = 1;
next_state = idle;
end
default: next_state = idle;
endcase
end
always @(posedge Clock,negedge rst_b)
begin: State_Transitions
if(rst_b == 1'b0)
state <= idle;
else
state <= next_state;
end
endmodule
module Datapath_Unit #(
parameter word_size = 8,
size_bit_count = 3,
all_ones = 9'b1_1111_1111
)(
output Serial_out,
BC_lt_Bcmax,
input [word_size -1:0] Data_Bus,
input Load_XMT_DR,
input Load_XMT_shftreg,
input start,
input shift,
input clear,
input Clock,
input rst_b
);
reg [word_size -1:0] XMT_datareg;
reg [word_size :0] XMT_shftreg;
reg [size_bit_count:0] bit_count;
assign Serial_out = XMT_shftreg [0];
assign BC_lt_Bcmax = (bit_count < word_size +1);
always @(posedge Clock,negedge rst_b)
if(rst_b == 0)
begin
XMT_shftreg <= all_ones;
XMT_datareg <= 9'b0_0000_0000;
bit_count <= 0;
end
else begin:Register_Transfers
if(Load_XMT_DR == 1'b1)
XMT_datareg <= Data_Bus;
if(Load_XMT_shftreg == 1'b1)
XMT_shftreg <= {XMT_datareg,1'b1};
if(start == 1'b1)
XMT_shftreg[0] <= 0;
if(clear == 1'b1)
bit_count <= 0;
if(shift ==1'b1)
begin
XMT_shftreg <= {1'b1,XMT_shftreg[word_size:1]};
bit_count <= bit_count + 1;
end
end
endmodule
UART接收器:
module UART_RCVR #(
parameter word_size = 8,
half_word =word_size/2
)(
output [word_size - 1 :0] RCV_datareg,
output read_not_ready_out,
Error1,Error2,
input Serial_in,
read_not_ready_in,
Sample_clk,
rst_b
);
Control_Unit2 M0( read_not_ready_out,Error1,Error2,
clr_Sample_counter,inc_Sample_counter,
clr_Bit_counter,inc_Bit_counter,shift,
load,read_not_ready_in,Ser_in_0,SC_eq_3,
SC_lt_7,BC_eq_8,Sample_clk,rst_b);
Datapath_Unit2 M1( RCV_datareg,Ser_in_0,SC_eq_3,SC_lt_7,
BC_eq_8,Serial_in,clr_Sample_counter,
inc_Sample_counter,clr_Bit_counter,
inc_Bit_counter,shift,load,Sample_clk,rst_b);
endmodule
module Control_Unit2 #(
parameter word_size = 8,
half_word = word_size/2,
Num_state_bits = 2,
idle = 2'b00,
starting = 2'b01,
receiving = 2'b10
)(
output reg read_not_ready_out,
Error1,Error2,
clr_Sample_counter,
inc_Sample_counter,
clr_Bit_counter,
inc_Bit_counter,
shift,
load,
input read_not_ready_in,
Ser_in_0,
SC_eq_3,
SC_lt_7,
BC_eq_8,
Sample_clk,
rst_b
);
reg [word_size - 1 :0] RCV_shftreg;
reg [Num_state_bits - 1 : 0] state;
reg [Num_state_bits - 1 : 0] next_state;
always @(posedge Sample_clk or negedge rst_b)
if(rst_b == 1'b0)
state <= idle;
else
state <= next_state;
always @(state,Ser_in_0,SC_eq_3,SC_lt_7,read_not_ready_in)
begin
read_not_ready_out = 0;
clr_Sample_counter = 0;
clr_Bit_counter = 0;
inc_Sample_counter = 0;
inc_Bit_counter = 0;
shift = 0;
Error1 = 0;
Error2 = 0;
load = 0;
next_state = idle;
case(state)
idle: if(Ser_in_0 == 1'b1)
next_state = starting;
else
next_state = idle;
starting: if(Ser_in_0 ==1'b0)
begin
next_state = idle;
clr_Sample_counter = 1;
end else
if(SC_eq_3 == 1'b1)
begin
next_state = receiving;
clr_Sample_counter = 1;
end
else begin
inc_Sample_counter = 1;
next_state = starting;
end
receiving: if(SC_lt_7 == 1'b1)
begin
inc_Sample_counter = 1;
next_state = receiving;
end
else begin
clr_Sample_counter = 1;
if(!BC_eq_8)
begin
&nb
(五)驗證(1)
一、前言
借助于前文RTL設計中提到的UART代碼,本章節將在后面給出對應的testbench以及說明如何在questa/modelsim、VCS+DVE、VCS+Verdi工具中使用。推薦書籍:《vcs User Guide 2016》
二、Testbench
Testbench的結構,正如上文提到的,主要由a,復位和時鐘,b,激勵產生電路,c,系統監視器,d,結果比較電路,e,波形產生函數,f,待驗證的MODULE,g,控制仿真時間這幾個部分組成。本章節提供的testbench只包含a,b,e,f,g部分,至于c,d更高級的內容,暫時無法涉及,questa/modelsim將不會使用到e部分的代碼,使用questa/modelsim仿真時要屏蔽掉全部e段的內容。同樣,在使用VCS+DVE進行仿真時要屏蔽VCS+VERDI的e段內容
三、工具使用
3.1modelsim仿真
對于modelsim仿真, 仿真文件包含:1,verilog源文件(前文已全部提供);2,testbench文件(后面會提供)
modelsim使用教程:https://wenku.baidu.com/view/db638e25b9d528ea81c779cc.html
有關在modelsim軟件中如何使用本示例請參考以上教程。
仿真結果圖:
3.2 VCS+DVE和VCS+VERDI仿真
對于VCS+DVE和VCS+VERDI, 仿真文件包含:
1,verilog源文件(前文已全部提供);
2,testbench文件(后面會提供),
3,包含verilog、testbench文件路徑的uart.f文件(必要時需自行修改),
4,makefile仿真啟動文件。在終端中運行make命令即可運行仿真,一定要注意文件路徑問題。
makefile教程:http://blog.csdn.net/liang13664759/article/details/1771246
VCS+DVE 使用教程,https://wenku.baidu.com/view/48912cf558fb770bf68a55b4.html
DVE是VCS軟件自帶的波形查看器。
本章實例對應的VCS+DVE makefile啟動腳本:
all:VCS DVE
VCS:
vcs -f uart.f -full64 -debug_all -R
DVE:
dve -vpd wave.vpd -mode64
將以上內容復制到文本文件中,并將該文本文件改名為makeflile。
uart.f內容:
/home/Lance/synopsys/UART/testbench.v //必須放在文件中的第一行。
/home/Lance/synopsys/UART/UART_XMTR.v
/home/Lance/synopsys/UART/Control_Unit.v
/home/Lance/synopsys/UART/Datapath_Unit.v
/home/Lance/synopsys/UART/UART_RCVR.v
/home/Lance/synopsys/UART/Control_Unit2.v
/home/Lance/synopsys/UART/Datapath_Unit2.v
DVE波形查看器啟動命令:
dve -vpd wave.vpd -mode64
此外,在運行makefile啟動腳本之前,還需要在testbench中添加如下代碼:
initial
begin
$vcdplusfile("wave.vpd");//保存的波形文件名字
$vcdpluson(1,tb);//tb對應testbench文件的內的module名字
end
該段代碼為e,波形產生函數,主要是生成DVE波形查看器使用的VPD格式的波形文件。
仿真結果圖:
VCS+Verdi,Verdi是debussy的升級版,是一個獨立的軟件,這對軟件組合使用方式與VCS+DVE差不多。
VCS+Verdi makefile啟動腳本:
all:VCS VERDI
VCS:
vcs +v2k -sverilog -debug_all -P /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/novas.tab /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/pli.a +vcs+lic+wait \ -f uart.f -y ./ +libext+.v -full64 -R
VERDI:
verdi -f uart.f -ssf wave.fsdb &
將以上內容復制到文本文件中,并將該文本文件改名為makeflile。
注意:-P /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/novas.tab /usr/synopsys/Verdi/K-2015.09/share/PLI/VCS/LINUX64/pli.a主要是調用Verdi的接口函數以生成fsdb波形。
Verdi波形查看器啟動命令:
verdi -f uart.f -ssf wave.fsdb &
此外,在運行makefile啟動命令前,還需要在testbench中添加如下代碼:
initial
begin
$fsdbDumpfile("wave.fsdb");
$fsdbDumpvars(0,tb);
end
以生成Verdi波形查看器使用的FSDB格式的波形文件。
仿真結果圖:
注意: 啟動腳本相關問題,需要學習makefile有關內容,有關VCS和Verdi的詳細使用教程,還請參考其它資料。
四、Testbench代碼附件:
`timescale 1ns/1ns
module tb;
parameter num = 500;
reg [7 : 0] Data_Bus;
reg Load_XMT_datareg;
reg Byte_ready;
reg T_byte;
reg read_not_ready_in;
reg Clock;
reg rst_b;
reg Sample_clk;
wire serial;
wire Error1,Error2;
wire [7:0] RCV_datareg;
wire read_not_ready_out;
//a,時鐘和復位部分
initial
begin
rst_b = 1;
Sample_clk = 0;
Clock = 0;
#100;
rst_b = 0;
#100;
rst_b = 1;
end
always #(8*num) Clock = ~Clock;
always #num Sample_clk = ~Sample_clk;
//b,激勵產生部分
initial
begin
Data_Bus = 8'b1110_0101;
Load_XMT_datareg = 1'b1;
Byte_ready = 1'b0;
T_byte = 1'b0;
read_not_ready_in = 1'b0;
//
#(2*8*num);
Load_XMT_datareg = 1'b0;
#(2*8*num);
Byte_ready = 1'b1;
#(2*8*num);
T_byte = 1'b1;
//
#(2*8*num)
Load_XMT_datareg = 1'b1;
Byte_ready = 1'b0;
T_byte = 1'b0;
end
//c,系統監視器
//d,結果比較電路
//e,波形產生函數
//vpd
initial
begin
$vcdplusfile("wave.vpd");
$vcdpluson(1,tb);
end
//fsdb
// initial
// begin
// $fsdbDumpfile("wave.fsdb");
// $fsdbDumpvars(0,tb);
// end
//g,控制仿真時間
initial
begin
$finish;
end
//f,待驗證的MODULE
UART_XMTR m0(
.Serial_out(serial),
.Data_Bus(Data_Bus),
.Load_XMT_datareg(Load_XMT_datareg),
.Byte_ready(Byte_ready),
.T_byte(T_byte),
.Clock(Clock),
.rst_b(rst_b)
);
UART_RCVR m1(
.RCV_datareg(RCV_datareg),
.read_not_ready_out(read_not_ready_out),
.Error1(Error1),
.Error2(Error2),
(六)驗證(2)
(由于篇幅關系,以上章節請點擊閱讀原文前往作者博客查看)
推薦閱讀:關注EETOP公眾號,后臺輸入 芯片,查看如下文章
ASIC前后端設計經典的細節講解
IC大牛10多年的設計分享:數字典型電路知識結構地圖及代碼實現
關于華為海思,這篇文章值得一看
俄國沒有高端芯片,為什么卻能造出一流武器?
別攔我,我要做芯片!
芯片春秋·ARM傳
中國芯酸往事
印度芯酸往事
國防軍工芯片行業深度報告
一位美國芯片公司華人高管對中國芯片行業的思考
學習、積累、交流-IC設計高手的成長之路
女生學微電子是一種什么體驗?
MIPS架構開放了,10天設計一款完全免費的MIPS處理器(附源碼)
性能之殤:從馮·諾依曼瓶頸談起
AI芯片設計與開發概覽
AI 芯片和傳統芯片有何區別?
一個資深工程師老王關于AI芯片的技術感悟
隔隔壁老王:AI芯片與她怎么選?
終于有人把云計算、大數據和人工智能講明白了!
尺寸減半、功率翻番!——氮化鎵技術的現在和未來
邏輯綜合 Design Compiler 資料大全
集成電路制造技術簡史
版圖中Metal專題——線寬選擇
麒麟980內核照片:NPU在哪呢?
有哪些只有IC工程師才能get到的梗?
為什么7nm工藝制程這么難?從7nm看芯片行業的“貧富差距”
什么是臺積電的SoIC?
RISC-V打入主流市場的諸多問題
RISC-V架構有何優勢?
關于RISC-V 終于有人講明白了!
ASIC低功耗設計實例分析及書籍推薦
ASIC設計學習總結之可測性設計及書籍推薦
ASIC設計學習總結之靜態時序分析概要及書籍推薦
ASIC設計學習總結之工具及書籍文檔
小芯片大價值 | ASIC工程師如此值錢到底為什么?
芯片面積估計方法簡介
自主研發通信芯片有多難?通信行業老兵告訴你,沒那么簡單!
RISC-V精簡到何種程度?能省的都省了!
多核CPU設計及RISC-V相關資料
時序設計與約束資料匯總
模擬版圖講義
GDSII轉DEF的flow簡介
機器學習將越來越依賴FPGA和SoC
Verilog基本功之:流水線設計Pipeline Design
先進封裝發展趨勢分析PPT
先進封裝發展現狀分析PPT
可測試性設計與ATPG
麒麟980是如何誕生的?敢于失敗,勇于嘗試!(附:華為早期型號處理器研發過程)
IC模擬版圖設計講義
Verilog CPU設計實例
。。。。
(共260篇)
點擊閱讀原文查看作者博客
藍字關注我們
本文為EETOP網友:tfpwl_lj 的《ASIC設計學習》 系列博客之一
博客地址:http://blog.eetop.cn/1638430
一、前言
對于RTL級的Asic設計所涉及到的軟件是非常之多的,筆者也并沒有每一個都使用過。這里不再多說。
二、工具介紹
RTL代碼規則檢查工具:nlint,spyglass。這兩個軟件主要是用于檢查代碼的語法和語義錯誤的,并且比其他的工具能檢測出更多的問題,比如說命名規格,時序風險,功耗等。詳細介紹請參考軟件的使用教程,nlint有Windows版和linux版,軟件的l使用教程可以在eetop上搜索到。
RTL代碼仿真工具:這類仿真工具有較多的組合,比如說:qustasim/modelsim,NC_verilog+Verdi,VCS+DVE,VCS+Verdi等等。目前筆者使用的組合是VCS+Verdi。這兩個軟件是業內主流的仿真軟件,還可以結合UVM庫進行仿真,當然這是驗證方法學的內容。
綜合工具:Design Complier。最常用的綜合工具,沒有之一,該軟件主要是將RTL代碼“翻譯+優化+映射”成與工藝庫對應的門級網表。并且還包含功耗分析軟件Power Complier和邊界掃描寄存器插入軟件 BSD Complier。
可測性設計:DFT Complier + TetraMAX。軟件在DC之后使用,DFT Complier 用于將設計的內部寄存器替換成掃描寄存器并組成一條或多條掃描鏈,TetraMAX是用于自動生成測試向量的。
形式驗證工具:Formality、Conforml(candence出品)。等價性驗證工具,主要是在DFT Complier插入掃描鏈之后進行驗證,另外,在版圖綜合時鐘樹,插入BUFFER之后,也需要用該工具進行等效性驗證。
靜態時序分析工具: Prime Time。業界最常用的時序分析工具之一,該軟件包括功耗分析PTPX工具,功耗分析必備。cadence也有對應的時序分析工具——Encounter Timing System。
自動布局布線工具(APR):ICC,Enconter。其中Encounter是Cadence公司的。
數模混合仿真: nanosim + VCS,nanosim的升級版為XA。
這是一篇有關于synopsysEDA工具軟件的介紹,希望對于EDA軟件的用途不清楚的伙伴有幫助。http://bbs.eetop.cn/thread-151171-1-1.html
三、書籍推薦
《Verilog HDL 硬件描述語言》
《設計與驗證Verilog HDL》
《企業用verilog代碼風格規范》
《verilog語言編碼風格》
《verilogHDL代碼風格規范》
《Verilog HDL高級數字設計》
《Soc設計方法與實現》
《高級ASIC芯片綜合》
《華為Verilog典型電路設計》
《數字IC系統設計》
《數字集成電路--電路、系統與設計》
《專用集成電路設計實用教程》
《集成電路靜態時序分析與建模》
《CMOS集成電路后端設計與實戰》
《makefile教程》
《鳥哥的私房菜》
《SystemVerilog與功能驗證》
《UVM實戰》
《通信IC設計(上下冊)》
《數字圖像處理與圖像通信》
《數字信號處理的FPGA實現中文版》
各類Synopsy userguide,EETOP有16年版的。
四、工藝庫說明
使用DC,PT,FM,ICC或者ENCOUNTER軟件需要工藝庫文件,主要包括數字邏輯單元文件,符號庫,綜合庫,寄生電容參數庫,版圖文件LEF,milkway庫等等。
EETOP上可以搜到某工藝庫說明講解。http://bbs.eetop.cn/thread-611843-1-1.html。有關工藝庫各文件夾的作用,筆者將會在將“工藝庫說明”的章節進行詳細介紹,如果有遺漏還請大家包涵。
歡迎訪問作者的EETOP博客:http://blog.eetop.cn/1638430
可以查看更多 《ASIC設計學習》系列博客。