欧美人与禽2O2O性论交,秋霞免费视频,国产美女视频免费观看网址,国产成人亚洲综合网色欲网

ASIC設(shè)計學(xué)習(xí)總結(jié)(包括:工具及書籍文檔推薦 、軟件環(huán)境搭建、RTL設(shè)計、驗證、工藝庫說明、形式驗證、綜合等共12部分)

之前介紹過了了芯片設(shè)計全流程介紹(芯片設(shè)計全流程詳解包括:正向流程和反向流程)。由于當時的經(jīng)驗十分有限,所以對于正向設(shè)計,特別是對于從RTL級代碼開始的設(shè)計介紹得不是很清楚。經(jīng)過這一段時間的學(xué)習(xí),對于從RTL級代碼開始的Asic芯片設(shè)計有了更多的認識,現(xiàn)在總結(jié)一下,一方面給自己整理思路,另一方面也希望拋磚引玉,讓大家各抒己見,分享一下各自的設(shè)計經(jīng)驗,促進我們的共同進步。

筆者原本打算詳細的介紹學(xué)習(xí)中的收獲,將各類知識點寫成文章,但經(jīng)過反復(fù)考量之后,發(fā)現(xiàn)這種詳細照搬別人知識的做法其實沒什么意思。與其原封不動的轉(zhuǎn)述別人書中的內(nèi)容,不如直接提供參閱的書目,這樣就免得在轉(zhuǎn)述別人的知識的時候誤解作者想要表達的真正意義。所以本系列的文章,筆者將個人學(xué)習(xí)的經(jīng)驗加以整合,將經(jīng)驗知識點羅列出來,并附加所參閱的書籍。另外涉及到實踐操作過程的章節(jié),將會把具體使用的工具羅列出來,并附上一些參考性的代碼和腳本。

本系列文章主要分為十二個部分,分別為:

(一)工具及書籍文檔推薦

(二)軟件環(huán)境搭建

(三)RTL設(shè)計

(四)驗證

(五)工藝庫說明

(六)形式驗證

(七)綜合

(八)可測性設(shè)計

(九)低功耗設(shè)計

(十)靜態(tài)時序分析

(十一)數(shù)?;旌戏抡?/p>

(十二)可測性設(shè)計

介紹這么多,不是顯得個人有多少經(jīng)驗,其實本人也只是菜鳥,關(guān)注這么多內(nèi)容,主要是為了讓自己的知識儲備更全面一下,這樣考慮設(shè)計問題的時候遺漏的東西會更少一些。在本系列文章中,每個章節(jié)的詳略是不同的,主要是跟個人工作經(jīng)驗有關(guān),有介紹得簡單的地方,麻煩大家?guī)兔ρa充。每個部分的內(nèi)容基本采用“理論 工具 示例”的行文結(jié)構(gòu),有些EDA工具筆者沒有使用過的就暫不能提供實例了。

(一)工具及書籍文檔

一、前言

對于RTL級的Asic設(shè)計所涉及到的軟件是非常之多的,筆者也并沒有每一個都使用過。

二、工具介紹

RTL代碼規(guī)則檢查工具:nlint,spyglass。這兩個軟件主要是用于檢查代碼的語法和語義錯誤的,并且比其他的工具能檢測出更多的問題,比如說命名規(guī)格,時序風(fēng)險,功耗等。詳細介紹請參考軟件的使用教程,nlint有Windows版和linux版,軟件的linux版本和使用教程可以在eetop上搜索到。

RTL代碼仿真工具:這類仿真工具有較多的組合,比如說:qustasim/modelsim,NC_verilog Verdi,VCS DVE,VCS Verdi等等。目前筆者使用的組合是VCS Verdi。這兩個軟件是業(yè)內(nèi)主流的仿真軟件,還可以結(jié)合UVM庫進行仿真,當然這是驗證方法學(xué)的內(nèi)容。

綜合工具:Design Complier。最常用的綜合工具,沒有之一,該軟件主要是將RTL代碼“翻譯 優(yōu)化 映射”成與工藝庫對應(yīng)的門級網(wǎng)表。并且還包含功耗分析軟件Power Complier和邊界掃描寄存器插入軟件 BSD Complier。

可測性設(shè)計:DFT Complier TetraMAX。軟件在DC之后使用,DFT Complier 用于將設(shè)計的內(nèi)部寄存器替換成掃描寄存器并組成一條或多條掃描鏈,TetraMAX是用于自動生成測試向量的。

形式驗證工具:Formality、Conforml(candence出品)。等價性驗證工具,主要是在DFT Complier插入掃描鏈之后進行驗證,另外,在版圖綜合時鐘樹,插入BUFFER之后,也需要用該工具進行等效性驗證。

靜態(tài)時序分析工具: Prime Time。業(yè)界最常用的時序分析工具之一,該軟件包括功耗分析PTPX工具,功耗分析必備。cadence也有對應(yīng)的時序分析工具——Encounter Timing System。

自動布局布線工具(APR):ICC,Enconter。其中Encounter是Cadence公司的。

數(shù)?;旌戏抡? nanosim VCS,nanosim的升級版為XA。

這是一篇有關(guān)于synopsysEDA工具軟件的介紹,希望對于EDA軟件的用途不清楚的伙伴有幫助。http://bbs.eetop.cn/thread-151171-1-1.html

三、書籍推薦

《Verilog HDL 硬件描述語言》

《設(shè)計與驗證Verilog HDL》

《企業(yè)用verilog代碼風(fēng)格規(guī)范》

《verilog語言編碼風(fēng)格》

《verilogHDL代碼風(fēng)格規(guī)范》

《Verilog HDL高級數(shù)字設(shè)計》

《Soc設(shè)計方法與實現(xiàn)》

《高級ASIC芯片綜合》

《華為Verilog典型電路設(shè)計》

《數(shù)字IC系統(tǒng)設(shè)計》

《數(shù)字集成電路–電路、系統(tǒng)與設(shè)計》

《專用集成電路設(shè)計實用教程》

《集成電路靜態(tài)時序分析與建?!?/p>

《CMOS集成電路后端設(shè)計與實戰(zhàn)》

《makefile教程》

《鳥哥的私房菜》

《SystemVerilog與功能驗證》

《UVM實戰(zhàn)》

《通信IC設(shè)計(上下冊)》

《數(shù)字圖像處理與圖像通信》

《數(shù)字信號處理的FPGA實現(xiàn)中文版》

各類Synopsy userguide,EETOP有16年版的。

三、工藝庫說明

使用DC,PT,F(xiàn)M,ICC或者ENCOUNTER軟件需要工藝庫文件,主要包括數(shù)字邏輯單元文件,符號庫,綜合庫,寄生電容參數(shù)庫,版圖文件LEF,milkway庫等等。

有關(guān)工藝庫各文件夾的作用,筆者將會在將“工藝庫說明”的章節(jié)進行詳細介紹,如果有遺漏還請大家包涵。

(二)環(huán)境搭建

一、前言

個人的環(huán)境如下:1、vmware 12;2、RHEL6.5系統(tǒng);3、synopsys軟件,Lib Complier,VCS,Verdi,Desgin Complier,PrimeTime,F(xiàn)ormality,ICC。一共7個軟件,幾乎都是15年版本的。

二、步驟

環(huán)境搭建需要準備以下三件事:

1,vmware12虛擬機安裝;安裝教程如下。https://jingyan.baidu.com/article/215817f78879c21edb142379.html

2, RHEL6.5操作系統(tǒng)安裝,當然也可以使用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。在虛擬機中把系統(tǒng)安裝好了之后,需要安裝vmware tools,安裝教程如下,http://www.linuxidc.com/Linux/2015-08/122031.htm ,安裝該軟件之后才可以啟用共享文件夾以利于RHEL6.5與windows系統(tǒng)進行文件交換。

b、更新YUM源,RHEL和Centos都需要更新YUM源,操作步驟一致,YUM是一個鏈接到軟件庫的一個軟件,隨后安裝軟件需要用到。https://jingyan.baidu.com/article/b24f6c8239c6aa86bee5da60.html

注意:該教程某些步驟可能會失效,需要結(jié)合自己具體的情況使用。安裝好YUM之后,可以使用yum install gvim命令測試一下。

c、安裝GCC,G ,這兩個軟件在VCS Verdi仿真時會調(diào)用到。命令: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軟件安裝步驟一致,區(qū)別在于license的問題。用EETOP上的最新license即可使用15版的軟件。在使用RHEL操作系統(tǒng)需要懂一些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這一行的 ,第三個參數(shù)hostname;

這四個hostname一定要一致,才能正確啟動DC,PT,FM,ICC,VCS,VERDI軟件。

在啟動DC,PT,FM,ICC,VCS,VERDI軟件之前需要先啟動Synopsys的license管理器。

有關(guān)軟件的使用教程可以參考官方的userguide?;蛘逧ETOP上,小伙伴們的教程。

(三)工藝庫說明

(略,請點擊閱讀原文查看)

(四)RTL設(shè)計

數(shù)字電路設(shè)計

RTL設(shè)計所需要的理論知識龐雜而繁多,本文所介紹的內(nèi)容均由個人參閱了許多書籍之后加以整合的,很多內(nèi)容本人也不是很熟,只是羅列出來作為參考學(xué)習(xí)的資料。主要有三個部分的內(nèi)容,第一部分主要是數(shù)字電路設(shè)計的基礎(chǔ),這是在大學(xué)時期應(yīng)該予以掌握的內(nèi)容,第二部分是進階的學(xué)習(xí)內(nèi)容附帶一個專業(yè)方向——MCU,第三部分是有關(guān)于各類算法處理的專業(yè)知識,需要更多的復(fù)合型知識,例如通信方向需要有較好的數(shù)學(xué)功底—傅立葉變換。由于這部分內(nèi)容實在太多,個人沒有能力也沒有必要將每一部分的內(nèi)容都詳細的羅列出來,所以這里只是整理出一些需要把握的關(guān)鍵點。至于具體的內(nèi)容,還請大家按照個人需求,參閱推薦的各類書籍。

一、基礎(chǔ)

組合邏輯與時序邏輯:布爾代數(shù),卡諾圖,基本與非門,鎖存器,觸發(fā)器,沖突與冒險。——《Verilog HDL高級數(shù)字設(shè)計》

Verilog語言基礎(chǔ):數(shù)值類型,表達式與運算符,assign語句,always語句,if-else語句,case語句,阻塞與非阻塞?!禫erilog HDL 硬件描述語言》

狀態(tài)機:一段式、二段式、三段式狀態(tài)機的區(qū)別;獨熱碼、二進制碼、格雷碼的區(qū)別及應(yīng)用場合?!禫erilog HDL高級數(shù)字設(shè)計》

同步電路和異步電路:兩者的本質(zhì),異步電路跨時鐘域,亞穩(wěn)態(tài)?!狪C_learner博客

復(fù)位與時鐘:同步復(fù)位、異步復(fù)位、異步復(fù)位同步釋放的區(qū)別,時鐘分頻——二分頻、三分頻、任意整數(shù)分頻,門控時鐘,時鐘切換?!渡钊霚\出玩轉(zhuǎn)FPGA》,百度文檔

數(shù)據(jù)通路與控制通路:本質(zhì)上任何數(shù)字電路都可以劃分為簡單的兩種類型——控制通路與數(shù)據(jù)通路,控制通路的核心是狀態(tài)機,數(shù)據(jù)通路是各類算術(shù)處理算法、并行總線等等?!禫erilog HDL高級數(shù)字設(shè)計》

Testbench驗證:無論什么電路,最終都需要驗證其功能的正確性。Testbench的結(jié)構(gòu)主要由a,復(fù)位和時鐘,b,激勵產(chǎn)生電路,c,系統(tǒng)監(jiān)視器,d,結(jié)果比較電路,e,波形產(chǎn)生函數(shù),f,待驗證的MODULE等主要模塊組成,其中,b是最重要的模塊,一切驗證都是從激勵信號開始的?!秜erilogHDL代碼風(fēng)格規(guī)范》。初學(xué)者推薦使用windows版qustasim 或者modelsim 仿真工具,簡單又方便,以后可學(xué)習(xí)使用VCS Verdi(比較折騰人)。

二、進階

代碼風(fēng)格:良好的代碼風(fēng)格很有必要,參考一下企業(yè)用的代碼風(fēng)格,有助于個人養(yǎng)成良好的編碼習(xí)慣?!镀髽I(yè)用verilog代碼風(fēng)格規(guī)范》《verilog語言編碼風(fēng)格》

基本常用電路:具備以上龐雜的理論基礎(chǔ)之后,需要積累一些常用的基礎(chǔ)電路?!度A為Verilog典型電路設(shè)計》

接口電路,I2C,UART,SPI:接口電路是中小規(guī)模芯片常用的對外接口電路,無論是與上位機(PC)通信還是控制其它芯片。I2C從機常用于EEPROM芯片中,主機可以直接使用單片機模擬,ARM單片機直接集成了I2C主機,I2C的IP代碼網(wǎng)絡(luò)上有現(xiàn)成的;UART是全雙工電路,宏晶單片機通過UART進行燒錄,SPI電路最常用于SD卡上?!禫erilog HDL高級數(shù)字設(shè)計》《通信IC設(shè)計(上下冊)》有簡單的UART和SPI的代碼。

RISC,8051 MCU ——IP:通過下載EETOP上相關(guān)的IP及文檔來學(xué)習(xí)。

三、專業(yè)

數(shù)值的表示方法:浮點數(shù),定點數(shù)的表示辦法——《Verilog HDL高級數(shù)字設(shè)計》《通信IC設(shè)計(上下冊)》

算術(shù)處理算法:浮點數(shù)的加法、乘法電路設(shè)計?!禫erilog HDL高級數(shù)字設(shè)計》

通信算法:FIR濾波器,IIR濾波器,傅立葉變換,冗余編碼等等各種通信方向必須掌握的。——《通信IC設(shè)計(上下冊)》《數(shù)字信號處理的FPGA實現(xiàn)》

圖像處理算法:靜態(tài)圖像,動態(tài)圖像去噪?!稊?shù)字圖像處理與圖像通信》

SOC:SOC類芯片的組成結(jié)構(gòu),AMBA總線,IP復(fù)用,SV驗證。——《Soc設(shè)計方法與實現(xiàn)》

四、工具:

文檔代碼編輯器:GVIM,Notpad

RTL設(shè)計規(guī)則檢查:Nlin,spyglass

五、示例

下列代碼為UART全雙工串口示例代碼,代碼來源于《Verilog HDL高級數(shù)字設(shè)計》,隨后的章節(jié)將會使用到該示例代碼,代碼功能細節(jié)需結(jié)合書籍了解。

下面的代碼已經(jīng)過modelsim驗證。

UART發(fā)送器:

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設(shè)計中提到的UART代碼,本章節(jié)將在后面給出對應(yīng)的testbench以及說明如何在questa/modelsim、VCS DVE、VCS Verdi工具中使用。推薦書籍:《vcs User Guide 2016》

二、Testbench

Testbench的結(jié)構(gòu),正如上文提到的,主要由a,復(fù)位和時鐘,b,激勵產(chǎn)生電路,c,系統(tǒng)監(jiān)視器,d,結(jié)果比較電路,e,波形產(chǎn)生函數(shù),f,待驗證的MODULE,g,控制仿真時間這幾個部分組成。本章節(jié)提供的testbench只包含a,b,e,f,g部分,至于c,d更高級的內(nèi)容,暫時無法涉及,questa/modelsim將不會使用到e部分的代碼,使用questa/modelsim仿真時要屏蔽掉全部e段的內(nèi)容。同樣,在使用VCS DVE進行仿真時要屏蔽VCS VERDI的e段內(nèi)容

三、工具使用

3.1modelsim仿真

對于modelsim仿真, 仿真文件包含:1,verilog源文件(前文已全部提供);2,testbench文件(后面會提供)

modelsim使用教程:https://wenku.baidu.com/view/db638e25b9d528ea81c779cc.html

有關(guān)在modelsim軟件中如何使用本示例請參考以上教程。

仿真結(jié)果圖:

ASIC設(shè)計學(xué)習(xí)總結(jié)(包括:工具及書籍文檔推薦 、軟件環(huán)境搭建、RTL設(shè)計、驗證、工藝庫說明、形式驗證、綜合等共12部分)

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軟件自帶的波形查看器。

本章實例對應(yīng)的VCS DVE makefile啟動腳本:

all:VCS DVE

VCS:

vcs -f uart.f -full64 -debug_all -R

DVE:

dve -vpd wave.vpd -mode64

將以上內(nèi)容復(fù)制到文本文件中,并將該文本文件改名為makeflile。

uart.f內(nèi)容:

/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對應(yīng)testbench文件的內(nèi)的module名字

end

該段代碼為e,波形產(chǎn)生函數(shù),主要是生成DVE波形查看器使用的VPD格式的波形文件。

仿真結(jié)果圖:

ASIC設(shè)計學(xué)習(xí)總結(jié)(包括:工具及書籍文檔推薦 、軟件環(huán)境搭建、RTL設(shè)計、驗證、工藝庫說明、形式驗證、綜合等共12部分)

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 &

將以上內(nèi)容復(fù)制到文本文件中,并將該文本文件改名為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主要是調(diào)用Verdi的接口函數(shù)以生成fsdb波形。

Verdi波形查看器啟動命令:

verdi -f uart.f -ssf wave.fsdb &

此外,在運行makefile啟動命令前,還需要在testbench中添加如下代碼:

initial

begin

$fsdbDumpfile(“wave.fsdb”);

$fsdbDumpvars(0,tb);

end

以生成Verdi波形查看器使用的FSDB格式的波形文件。

仿真結(jié)果圖:

ASIC設(shè)計學(xué)習(xí)總結(jié)(包括:工具及書籍文檔推薦 、軟件環(huán)境搭建、RTL設(shè)計、驗證、工藝庫說明、形式驗證、綜合等共12部分)

注意: 啟動腳本相關(guān)問題,需要學(xué)習(xí)makefile有關(guān)內(nèi)容,有關(guān)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,時鐘和復(fù)位部分

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,激勵產(chǎn)生部分

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,系統(tǒng)監(jiān)視器

//d,結(jié)果比較電路

//e,波形產(chǎn)生函數(shù)

//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)

(七) 綜合

(八)形式驗證

(九)數(shù)?;旌戏抡?/strong>

(十)靜態(tài)時序分析

(十一)低功耗設(shè)計

(十二)可測性設(shè)計

(由于篇幅關(guān)系,以上章節(jié)請點擊閱讀原文前往作者博客查看)

推薦閱讀:關(guān)注EETOP公眾號,后臺輸入 芯片,查看如下文章

  • ASIC前后端設(shè)計經(jīng)典的細節(jié)講解

  • IC大牛10多年的設(shè)計分享:數(shù)字典型電路知識結(jié)構(gòu)地圖及代碼實現(xiàn)

  • 關(guān)于華為海思,這篇文章值得一看

  • 俄國沒有高端芯片,為什么卻能造出一流武器?

  • 別攔我,我要做芯片!

  • 芯片春秋·ARM傳

  • 中國芯酸往事

  • 印度芯酸往事

  • 國防軍工芯片行業(yè)深度報告

  • 一位美國芯片公司華人高管對中國芯片行業(yè)的思考

  • 學(xué)習(xí)、積累、交流-IC設(shè)計高手的成長之路

  • 女生學(xué)微電子是一種什么體驗?

  • MIPS架構(gòu)開放了,10天設(shè)計一款完全免費的MIPS處理器(附源碼)

  • 性能之殤:從馮·諾依曼瓶頸談起

  • AI芯片設(shè)計與開發(fā)概覽

  • AI 芯片和傳統(tǒng)芯片有何區(qū)別?

  • 一個資深工程師老王關(guān)于AI芯片的技術(shù)感悟

  • 隔隔壁老王:AI芯片與她怎么選?

  • 終于有人把云計算、大數(shù)據(jù)和人工智能講明白了!

  • 尺寸減半、功率翻番!——氮化鎵技術(shù)的現(xiàn)在和未來

  • 邏輯綜合 Design Compiler 資料大全

  • 集成電路制造技術(shù)簡史

  • 版圖中Metal專題——線寬選擇

  • 麒麟980內(nèi)核照片:NPU在哪呢?

  • 有哪些只有IC工程師才能get到的梗?

  • 為什么7nm工藝制程這么難?從7nm看芯片行業(yè)的“貧富差距”

  • 什么是臺積電的SoIC?

  • RISC-V打入主流市場的諸多問題

  • RISC-V架構(gòu)有何優(yōu)勢?

  • 關(guān)于RISC-V 終于有人講明白了!

  • ASIC低功耗設(shè)計實例分析及書籍推薦

  • ASIC設(shè)計學(xué)習(xí)總結(jié)之可測性設(shè)計及書籍推薦

  • ASIC設(shè)計學(xué)習(xí)總結(jié)之靜態(tài)時序分析概要及書籍推薦

  • ASIC設(shè)計學(xué)習(xí)總結(jié)之工具及書籍文檔

  • 小芯片大價值 | ASIC工程師如此值錢到底為什么?

  • 芯片面積估計方法簡介

  • 自主研發(fā)通信芯片有多難?通信行業(yè)老兵告訴你,沒那么簡單!

  • RISC-V精簡到何種程度?能省的都省了!

  • 多核CPU設(shè)計及RISC-V相關(guān)資料

  • 時序設(shè)計與約束資料匯總

  • 模擬版圖講義

  • GDSII轉(zhuǎn)DEF的flow簡介

  • 機器學(xué)習(xí)將越來越依賴FPGA和SoC

  • Verilog基本功之:流水線設(shè)計Pipeline Design

  • 先進封裝發(fā)展趨勢分析PPT

  • 先進封裝發(fā)展現(xiàn)狀分析PPT

  • 可測試性設(shè)計與ATPG

  • 麒麟980是如何誕生的?敢于失敗,勇于嘗試!(附:華為早期型號處理器研發(fā)過程)

  • IC模擬版圖設(shè)計講義

  • Verilog CPU設(shè)計實例

  • 。。。。

    (共260篇)

點擊閱讀原文查看作者博客

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部