音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

一些建議

作者:rickyice 欄目:IC設(shè)計
一些建議
一、HDL不是硬件設(shè)計語言


曾碰到過不少VHDL或Verilog HDL的初學(xué)者問一些相似的問題,諸如如何實(shí)現(xiàn)除法、開根號,如何寫循環(huán)語句等等。在這個論壇上,也時常能看到一些網(wǎng)友提出這一類的問題。


對于這些問題,首先要明確的是VHDL和Veriglog并非是針對硬件設(shè)計而開發(fā)的語言,只不過目前被我們用來設(shè)計硬件。HDL是HARDWARE DESCRIPTION Language的縮寫,正式中文名稱是“硬件描述語言”。也就是說,HDL并不是“硬件設(shè)計語言(HARDWARE Design Language)”。別看只差這一個單詞,正是這一個單詞才決定了絕大部分電路設(shè)計必須遵循RTL的模式來編寫代碼,而不能隨心所欲得寫僅僅符合語法的HDL代碼。


二、HDL的來歷


之所以是“硬件描述語言”,要從HDL的來歷說起。


VHDL于1980年開始在美國國防部的指導(dǎo)下開發(fā),完成于1983年,并于1987年成為IEEE的標(biāo)準(zhǔn)。當(dāng)初開發(fā)這種語言,是出于美國國防部采購電子設(shè)備的需要。美軍的裝備采購自私人企業(yè),時常要面對這樣一種風(fēng)險:如果某種武器大量裝備部隊(duì),而其中某個零件的供應(yīng)商卻在幾年后倒閉了,那這種武器的再生產(chǎn)、維修和保養(yǎng)都會出現(xiàn)大問題。而電子設(shè)備、尤其是集成電路的內(nèi)部結(jié)構(gòu)較為復(fù)雜,若出現(xiàn)前面所說的情況要找其他公司生產(chǎn)代用品非常困難。于是美國防部希望供應(yīng)商能以某種形式留下其產(chǎn)品的信息,以保證一旦其破產(chǎn)后能由其他廠商迅速生產(chǎn)出代用品。


顯然,當(dāng)初的設(shè)計文檔顯然是不能交出來的,這在美國會涉及商業(yè)機(jī)密和知識產(chǎn)權(quán)問題。于是美國防部就想出了一種折衷的方法——描述硬件的語言,也就是VHDL。通過VHDL,供應(yīng)商要把自己生產(chǎn)的集成電路芯片的行為描述出來:比如說,加了什么樣的信號后過多少時間它能輸出什么等等。這樣,如果有必要讓其他廠商生產(chǎn)代用品,他們只需照著VHDL文檔,設(shè)計出行為與其相同的芯片即可。這樣的代用品相當(dāng)于是新廠商在不了解原產(chǎn)品結(jié)構(gòu)的情況下獨(dú)立設(shè)計的,所以不太會涉及知識侵權(quán)。


Verilog HDL也形成于差不多的年代,是由Gateway Design AUTOMATION公司大約在1983年左右開發(fā)的。其架構(gòu)同VHDL相似,但主要被用來進(jìn)行硬件仿真。或許私人公司更注重實(shí)用,Verilog要比VHDL簡潔得多。


由此可見,這兩種最流行的用于電路設(shè)計的語言,沒有一種是為了設(shè)計硬件而開發(fā)的(更何況80年代還沒有現(xiàn)在的那些功能強(qiáng)大的EDA軟件呢)。因此,當(dāng)初制訂HDL語言標(biāo)準(zhǔn)的時候,并沒有考慮這些代碼如何用硬件來實(shí)現(xiàn)。換句話說,有些代碼寫起來簡單,實(shí)現(xiàn)起來卻可能非常復(fù)雜,或者幾乎不可能實(shí)現(xiàn)。


三、HDL代碼的可綜合性


現(xiàn)在回到最初的問題上。為什么諸如除法、循環(huán)之類的HDL代碼總是會出錯?


由上一部分可知,任何符合HDL語法標(biāo)準(zhǔn)的代碼都是對硬件行為的一種描述,但不一定是可直接對應(yīng)成電路的設(shè)計信息。行為描述可以基于不同的層次,如系統(tǒng)級,算法級,寄存器傳輸級(RTL)、門級等等。以目前大部分EDA軟件的綜合能力來說,只有RTL或更低層次的行為描述才能保證是可綜合的。而眾多初學(xué)者試圖做的,卻是想讓軟件去綜合算法級或者更加抽象的硬件行為描述。


比如說,要想實(shí)現(xiàn)兩個變量相除的運(yùn)算,若在代碼中寫下C=A/B,你將會發(fā)現(xiàn)只有一些模擬軟件在前仿真中能正確執(zhí)行這句代碼,但幾乎任何軟件都不能將其綜合成硬件。不要怪軟件太笨。試想一下,如果我們自己筆算除法是怎么做的?從高位到低位逐次試除、求余、移位。試除和求余需要減法器,商數(shù)和余數(shù)的中間結(jié)果必須有寄存器存儲;而此運(yùn)算顯然不能在一個時鐘周期里完成,還需要一個狀態(tài)機(jī)來控制時序。一句簡單的C=A/B同所有這些相比顯得太抽象,對于只能接受RTL或更低層次描述的EDA軟件來說確實(shí)太難實(shí)現(xiàn)。而如果代碼是類似于(Verilog)


always @(posedge clk)


c<=A/B;

這樣的,要求除法在一個時鐘延上完成,那更是不可能實(shí)現(xiàn)的。(注:有些FPGA的配套軟件提供乘除法的運(yùn)算模塊,但也只能支持直接調(diào)用,不支持把形如C=A/B的語句綜合成除法模塊。)


又比如,一個很多初學(xué)者常見的問題是試圖讓HDL進(jìn)行循環(huán)運(yùn)算,形同(Verilog):


for (i=0; i
parity = parity xor data[i];


一些功能比較簡單的綜合軟件會完全拒絕綜合循環(huán)語句;而一些功能較強(qiáng)的軟件僅當(dāng)wordlength是常數(shù)的時候能綜合;當(dāng)wordlength為變量時,任何軟件都不能綜合上面的語句。這是因?yàn)橛布?guī)模必須是有限的、固定的。當(dāng)綜合軟件遇到循環(huán)語句時,總是將其展開成若干條順序執(zhí)行的語句,然后再綜合成電路。若wordlength是常數(shù),則展開的語句數(shù)是確定的,具有可綜合性;而若它是變量時,展開的語句數(shù)不確定,對應(yīng)的硬件電路數(shù)量也不能確定,無法被綜合;蛟S有人說用計數(shù)器就能實(shí)現(xiàn)變量循環(huán),但這情形又和上面的除法運(yùn)算相同。那需要額外的硬件,用來存儲中間結(jié)果和進(jìn)行時序控制,象上面那樣的循環(huán)語句對此描述得太抽象,軟件接受不了。


四、如何判斷自己寫的代碼是可綜合的?


用一句簡單的話概括:電腦永遠(yuǎn)沒有你聰明。具體來說,通常EDA軟件對HDL代碼的綜合能力總是比人差。對于一段代碼,如果你不能想象出一個較直觀的硬件實(shí)現(xiàn)方法,那EDA軟件肯定也不行。比如說,加法器、多路選擇器是大家都很熟悉的電路,所以類似A+B-C,(A>B)?C:D這樣的運(yùn)算一定可以綜合。而除法、開根、對數(shù)等等較復(fù)雜的運(yùn)算,必須通過一定的算法實(shí)現(xiàn),沒有直觀簡單的實(shí)現(xiàn)方法,則可以判斷那些計算式是不能綜合的,必須按它們的算法寫出更具體的代碼才能實(shí)現(xiàn)。此外,硬件無法支持的行為描述,當(dāng)然也不能被綜合(比如想在FPGA上實(shí)現(xiàn)DDR內(nèi)存那樣的雙延觸發(fā)邏輯,代碼很容易寫,但卻不能實(shí)現(xiàn))。


不過,這樣的判斷標(biāo)準(zhǔn)非常主觀模糊,遇到具體情況還得按設(shè)計人員自己的經(jīng)驗(yàn)來判斷。如果要一個相對客觀的標(biāo)準(zhǔn),一般來說:在RTL級的描述中,所有邏輯運(yùn)算和加減法運(yùn)算、以及他們的有限次組合,基本上是可綜合的,否則就有無法綜合的可能性。當(dāng)然,這樣的標(biāo)準(zhǔn)仍然有缺陷,更況且EDA的技術(shù)也在不斷發(fā)展,過去無法綜合的代碼或許將來行,某些軟件不支持的代碼換個軟件或許行。比如固定次數(shù)的循環(huán),含一個常數(shù)參數(shù)的乘法運(yùn)算等等,有些EDA軟件支持對它們的綜合,而有些軟件不行。


所以,正確的判斷仍然要靠實(shí)踐來積累經(jīng)驗(yàn)。當(dāng)你可以較準(zhǔn)確判斷代碼的可綜合性的時候,你對HDL的掌握就算完全入門了。



2樓: >>參與討論
computer00
好文。俺剛開始學(xué)VHDL時,對這些也是很暈…………
特別是以前做軟件的,初用HDL時,很多都不理解,為啥可以那樣寫,卻是不能用。。。。

3樓: >>參與討論
enddy
好文
樓主寫的好!我是2005年7月剛畢業(yè)的,在學(xué)校學(xué)的是電子信息,現(xiàn)在做單片機(jī)產(chǎn)品的開發(fā),但是我一直想轉(zhuǎn)向做IC設(shè)計,最好是點(diǎn)端設(shè)計,所以自己買了一些書自學(xué),但是感覺沒有效果,自己沒有電腦,公司也不具備實(shí)踐的機(jī)會,所以自己很迷茫呀,不知道怎么才能轉(zhuǎn)入這個行業(yè)。

4樓: >>參與討論
caiquelin
re:一些建議
/和%DC都可以綜合的就是用純組合邏輯實(shí)現(xiàn)除法和取余,只不過關(guān)鍵路徑太長,影響芯片工作速度,不過如果你只要跑個幾M的話,也是可以用的。

5樓: >>參與討論
冰凌_CPU
寫的還行
有一定的指導(dǎo)意義

6樓: >>參與討論
davidli88
做個記號
 
7樓: >>參與討論
amormio124
要代碼的可綜合性,簡單
要代碼的可綜合性,簡單
只寫:

assign A = *****;


always @ (posedge CLK)
a<= #1 ***;

其他語法都不要寫,

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
急聘資深I(lǐng)C設(shè)計工程師(有工作經(jīng)驗(yàn))
光標(biāo)的移動 能反過來使 機(jī)械鼠標(biāo)的 滾輪 轉(zhuǎn)動嗎?
高手請來指導(dǎo)我選擇什么芯片,謝謝幫忙拉!
4年數(shù)字工程師的價值
大批量生產(chǎn),請介紹一款帶LCD driver和一個A/D的單片機(jī)
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號