<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 寫(xiě)verilog代碼要有硬件的概念

寫(xiě)verilog代碼要有硬件的概念

作者: 時(shí)間:2017-10-13 來(lái)源:網(wǎng)絡(luò ) 收藏

因為Verilog是一種硬件描述語(yǔ)言,所以在寫(xiě)Verilog語(yǔ)言時(shí),首先要有所要寫(xiě)的module在硬件上如何實(shí)現的概念,而不是去想編譯器如何去解釋這個(gè)module. 比如在決定是否使用reg定義時(shí),要問(wèn)問(wèn)自己物理上是不是真正存在這個(gè)register, 如果是,它的clock是什么? D端是什么?Q端是什么?有沒(méi)有清零和置位?同步還是異步?再比如上面討論的三態(tài)輸出問(wèn)題,首先想到的應該是在register的輸出后面加一個(gè)三態(tài)門(mén),而不是如何才能讓編譯器知道要“賦值”給一個(gè)信號為三態(tài)。同樣,Verilog中沒(méi)有“編譯”的概念,而只有綜合的概念。

本文引用地址:http://dyxdggzs.com/article/201710/365621.htm

寫(xiě)硬件描述語(yǔ)言的目的是為了綜合,所以說(shuō)要想寫(xiě)的好就要對綜合器有很深的了解,這樣寫(xiě)出來(lái)的代碼才有效率。

有些東西完全是沒(méi)有意義的,像有些書(shū)上的很多程序,完全是不可綜合的比如產(chǎn)生一個(gè)10ms方波什么的程序,用什么#10 ~clk,這樣的語(yǔ)句硬件不可能做的那里面很多程序是用來(lái)verificaTIon的,不是綜合的。張老師那本書(shū)用來(lái)當初級教材還是不錯的,但是想通過(guò)它來(lái)掌握是不夠的。曾經(jīng)接觸過(guò)motorola蘇州設計中心的一位資深工程師,他忠告了一句:就是用描述電路的時(shí)候,一定要清楚它實(shí)現的電路,很多人只顧學(xué)習語(yǔ)言,而不熟悉它實(shí)現的電路,這是設計不出好的電路來(lái)的

一般寫(xiě)verilog code時(shí),對整個(gè)硬件的結構應該是很清楚了,最好有詳細的電路圖畫(huà)出,時(shí)序問(wèn)題等都應該考慮清楚了??梢钥粗?zhù)圖直接寫(xiě)code。

要知道,最初Verilog是為了實(shí)現仿真而發(fā)明的.不可綜合的Verilog語(yǔ)句也是很重要的.因為在實(shí)際設計電路時(shí),除了要實(shí)現一個(gè)可綜合的module外,你還要知道它的外圍電路是怎樣的,以及我的這個(gè)電路與這些外圍電路能否協(xié)調工作.這些外圍電路就可以用不可綜合的語(yǔ)句來(lái)實(shí)現而不必管它是如何實(shí)現的.因為它們可能已經(jīng)實(shí)際存在了,我僅是用它來(lái)模擬的.所以,在寫(xiě)verilog的時(shí)候應該要先明確我是用它來(lái)仿真的還是綜合的.要是用來(lái)綜合的話(huà),就必須要嚴格地使用可綜合的語(yǔ)句,而且不同的寫(xiě)法可能產(chǎn)生的電路會(huì )有很大差別,這時(shí)就要懂一些verilog綜合方法的知識.就像前面說(shuō)的,腦子里要有一個(gè)硬件的概念.特別是當綜合報錯時(shí),就要想一想我這種寫(xiě)法能不能用硬件來(lái)實(shí)現,verilog畢竟還不是C,很多寫(xiě)法是不可實(shí)現的.要是這個(gè)module僅是用來(lái)仿真的,就要靈活得多了,這時(shí)你大可不必太在意硬件實(shí)現.只要滿(mǎn)足它的語(yǔ)法,實(shí)現你要的功能就行了.

有網(wǎng)友說(shuō)關(guān)于#10 clk=~clk的問(wèn)題,雖然這種語(yǔ)句是不可綜合的,但是在做simulaTIon和verificaTIon是常常用它在estbench中來(lái)產(chǎn)生一個(gè)clock信號。再比如常常用到的大容量memory, 一般是不會(huì )在片上實(shí)現的,這個(gè)時(shí)候也需要一個(gè)unsynthesizable module. mengxy所言切中肯罄。

我們設計的module的目的是為了可以綜合出功能正確,符合標準的電路來(lái)。我想這是個(gè)反復的過(guò)程,就像我們在寫(xiě)design flow中總要注明前仿真,綜合后的仿真,以及后仿真等。仿真是用來(lái)驗證我們的設計的非常重要的手段。而verilog里那些看是無(wú)聊的語(yǔ)句這個(gè)時(shí)候就會(huì )發(fā)揮很大的作用。我想,用過(guò)verilog_xl的兄弟應該深有體會(huì )。verilog_xl里的操作,可以用verilog里的系統命令來(lái)完成。通過(guò)最近的應聘我也深有體會(huì ),很多公司看中你在寫(xiě)code時(shí),是否考慮到TIming,architecture,DFT等,這也說(shuō)明verilog中的任何語(yǔ)句都是非常重要的。

要寫(xiě)代碼前必須對具體的硬件有一個(gè)比較清晰的概念但是想一次完成可綜合代碼就太夸張了,verilog的自頂向下設計方法就是從行為建模開(kāi)始的,功能驗證了以后再轉向可綜合模型.太在意與可綜合令初期設計變得太累

很同意這種看法,在做邏輯結構設計時(shí),綜合的因素是要考慮的,但是有很多東西不能考慮的過(guò)于細致,就是在設計的時(shí)候不能過(guò)于緊卡時(shí)延,面積等因素,因為這樣以來(lái)綜合后優(yōu)化的余量就會(huì )很小,反而不利與設計的優(yōu)化,如果在時(shí)延和面積要求不是很緊張的情況下,其實(shí)代碼寫(xiě)的行為級,利用綜合工具進(jìn)行優(yōu)化也是一種方法。偶就聽(tīng)說(shuō)有一家很有名的公司,非常相信綜合工具的優(yōu)化能力,從來(lái)不作綜合后仿真的,hehe.當然,如果面積和時(shí)延的要求很高,最好還是把代碼寫(xiě)的底層一點(diǎn),調用庫單元時(shí),也要充分考慮其面積和時(shí)延的因素。



關(guān)鍵詞: verilog FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>