日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

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

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

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

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

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

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

(三)RTL設(shè)計(jì)

(四)驗(yàn)證

(五)工藝庫說明

(六)形式驗(yàn)證

(七)綜合

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

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

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

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

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

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

(一)工具及書籍文檔

一、前言

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

二、工具介紹

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

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

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

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

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

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

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

數(shù)模混合仿真: nanosim VCS,nanosim的升級(jí)版為XA。

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

三、書籍推薦

《Verilog HDL 硬件描述語言》

《設(shè)計(jì)與驗(yàn)證Verilog HDL》

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

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

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

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

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

《高級(jí)ASIC芯片綜合》

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

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

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

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

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

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

《makefile教程》

《鳥哥的私房菜》

《SystemVerilog與功能驗(yàn)證》

《UVM實(shí)戰(zhàn)》

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

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

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

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

三、工藝庫說明

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

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

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

一、前言

個(gè)人的環(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個(gè)軟件,幾乎都是15年版本的。

二、步驟

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

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

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

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

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

c、安裝GCC,G ,這兩個(gè)軟件在VCS Verdi仿真時(shí)會(huì)調(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腳本,這樣便于提高操作效率,后文會(huì)提到。

注意:此外還需要修改四個(gè)文件的hostname,使得這四處的hostname保持一致。

a、synopsys.dat中的第一行hostname;

b、synopsys.bashrc中的export SNPSLMD_LICENSE_FILE=27000@localhost行,“@”符號(hào)后的hostname;

c、/etc/sysconfig/network配置文件中hostname;

d、/etc/hosts配置文件中的127.0.0.1這一行的 ,第三個(gè)參數(shù)hostname;

這四個(gè)hostname一定要一致,才能正確啟動(dòng)DC,PT,FM,ICC,VCS,VERDI軟件。

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

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

(三)工藝庫說明

(略,請(qǐng)點(diǎn)擊閱讀原文查看)

(四)RTL設(shè)計(jì)

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

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

一、基礎(chǔ)

組合邏輯與時(shí)序邏輯:布爾代數(shù),卡諾圖,基本與非門,鎖存器,觸發(fā)器,沖突與冒險(xiǎn)?!禫erilog HDL高級(jí)數(shù)字設(shè)計(jì)》

Verilog語言基礎(chǔ):數(shù)值類型,表達(dá)式與運(yùn)算符,assign語句,always語句,if-else語句,case語句,阻塞與非阻塞。——《Verilog HDL 硬件描述語言》

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

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

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

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

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

二、進(jìn)階

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

基本常用電路:具備以上龐雜的理論基礎(chǔ)之后,需要積累一些常用的基礎(chǔ)電路。——《華為Verilog典型電路設(shè)計(jì)》

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

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

三、專業(yè)

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

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

通信算法:FIR濾波器,IIR濾波器,傅立葉變換,冗余編碼等等各種通信方向必須掌握的?!锻ㄐ臝C設(shè)計(jì)(上下冊(cè))》《數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn)》

圖像處理算法:靜態(tài)圖像,動(dòng)態(tài)圖像去噪。——《數(shù)字圖像處理與圖像通信》

SOC:SOC類芯片的組成結(jié)構(gòu),AMBA總線,IP復(fù)用,SV驗(yàn)證?!禨oc設(shè)計(jì)方法與實(shí)現(xiàn)》

四、工具:

文檔代碼編輯器:GVIM,Notpad

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

五、示例

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

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

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

(五)驗(yàn)證(1)

一、前言

借助于前文RTL設(shè)計(jì)中提到的UART代碼,本章節(jié)將在后面給出對(duì)應(yīng)的testbench以及說明如何在questa/modelsim、VCS DVE、VCS Verdi工具中使用。推薦書籍:《vcs User Guide 2016》

二、Testbench

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

三、工具使用

3.1modelsim仿真

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

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

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

仿真結(jié)果圖:

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

3.2 VCS DVE和VCS VERDI仿真

對(duì)于VCS DVE和VCS VERDI, 仿真文件包含:

1,verilog源文件(前文已全部提供);

2,testbench文件(后面會(huì)提供),

3,包含verilog、testbench文件路徑的uart.f文件(必要時(shí)需自行修改),

4,makefile仿真啟動(dòng)文件。在終端中運(yùn)行make命令即可運(yùn)行仿真,一定要注意文件路徑問題。

makefile教程:http://blog.csdn.net/liang13664759/article/details/1771246

VCS DVE 使用教程,https://wenku.baidu.com/view/48912cf558fb770bf68a55b4.html

DVE是VCS軟件自帶的波形查看器。

本章實(shí)例對(duì)應(yīng)的VCS DVE makefile啟動(dòng)腳本:

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波形查看器啟動(dòng)命令:

dve -vpd wave.vpd -mode64

此外,在運(yùn)行makefile啟動(dòng)腳本之前,還需要在testbench中添加如下代碼:

initial

begin

$vcdplusfile(“wave.vpd”);//保存的波形文件名字

$vcdpluson(1,tb);//tb對(duì)應(yīng)testbench文件的內(nèi)的module名字

end

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

仿真結(jié)果圖:

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

VCS Verdi,Verdi是debussy的升級(jí)版,是一個(gè)獨(dú)立的軟件,這對(duì)軟件組合使用方式與VCS DVE差不多。

VCS Verdi makefile啟動(dòng)腳本:

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波形查看器啟動(dòng)命令:

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

此外,在運(yùn)行makefile啟動(dòng)命令前,還需要在testbench中添加如下代碼:

initial

begin

$fsdbDumpfile(“wave.fsdb”);

$fsdbDumpvars(0,tb);

end

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

仿真結(jié)果圖:

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

注意: 啟動(dòng)腳本相關(guān)問題,需要學(xué)習(xí)makefile有關(guān)內(nèi)容,有關(guān)VCS和Verdi的詳細(xì)使用教程,還請(qǐng)參考其它資料。

四、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,時(shí)鐘和復(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,激勵(lì)產(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,控制仿真時(shí)間

initial

begin

$finish;

end

//f,待驗(yàn)證的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),

(六)驗(yàn)證(2)

(七) 綜合

(八)形式驗(yàn)證

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

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

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

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

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

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

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

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

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

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

  • 別攔我,我要做芯片!

  • 芯片春秋·ARM傳

  • 中國芯酸往事

  • 印度芯酸往事

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

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

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

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

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

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

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

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

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

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

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

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

  • 邏輯綜合 Design Compiler 資料大全

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

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

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

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

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

  • 什么是臺(tái)積電的SoIC?

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

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

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

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

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

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

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

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

  • 芯片面積估計(jì)方法簡介

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

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

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

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

  • 模擬版圖講義

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

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

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

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

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

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

  • 麒麟980是如何誕生的?敢于失敗,勇于嘗試?。ǜ剑喝A為早期型號(hào)處理器研發(fā)過程)

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

  • Verilog CPU設(shè)計(jì)實(shí)例

  • 。。。。

    (共260篇)

點(diǎn)擊閱讀原文查看作者博客

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁
返回頂部
江川县| 寿宁县| 双江| 青州市| 大新县| 佛教| 盈江县| 扎鲁特旗| 修武县| 乳源| 清水河县| 兴文县| 祁连县| 石泉县| 东阿县| 镇安县| 全州县| 偏关县| 揭阳市| 清水县| 洛宁县| 曲靖市| 武威市| 班玛县| 德昌县| 库车县| 宁陕县| 惠州市| 监利县| 扎赉特旗| 增城市| 龙川县| 察雅县| 四会市| 沾化县| 呼和浩特市| 江川县| 文昌市| 上犹县| 五寨县| 兴文县|