0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog到VHDL轉(zhuǎn)換的經(jīng)驗與技巧總結(jié)

FPGA之家 ? 來源:網(wǎng)絡(luò)交換FPGA ? 2024-04-28 17:47 ? 次閱讀

Verilog語言和VHDL語言是兩種不同的硬件描述語言,但并非所有人都同時精通兩種語言,所以在某些時候,需要把Verilog代碼轉(zhuǎn)換為VHDL代碼。本文以通用的XHDL工具為例對Verilog轉(zhuǎn)換到VHDL過程中存在的問題進(jìn)行了總結(jié),歡迎批評指正。

當(dāng)我們剛開始學(xué)習(xí)FPGA時,一定會遇到一個問題:

學(xué)習(xí)Verilog還是VHDL?

等我們學(xué)習(xí)FPGA到一定程度參加面試時,面試者也會問你一個問題:

你以前用Verilog還是VHDL開發(fā)?

你已經(jīng)習(xí)慣某種語言,也發(fā)現(xiàn)語言不是學(xué)習(xí)FPGA時需要考慮的問題,它僅僅是硬件描述語言工具而已??墒?,當(dāng)你發(fā)現(xiàn)一份和你使用語言不同的代碼作為參考時,你又開始想:

我以后的工作是不是要二種語言都會,這樣工作才會得心應(yīng)手?

事實上,兩種語言之間是可以相互轉(zhuǎn)換的。

對于我們做FPGA開發(fā)人員來說,如何快速在Verilog和VHDL之間互轉(zhuǎn),加快開發(fā)產(chǎn)品的進(jìn)度,而不是因為只懂某一種語言而局限了自己的開發(fā)。

Vivado可以看兩種語言的差異

Verilog與VHDL語法是互通且相互對應(yīng)的,如何查看二者對同一硬件結(jié)構(gòu)的描述,可以借助EDA工具,如Vivado,打開Vivado后它里面的語言模板后,也可以對比查看Verilog和VHDL之間的差異。

8c2786c8-04fd-11ef-a297-92fbcf53809c.jpg

8c4b4db0-04fd-11ef-a297-92fbcf53809c.jpg

8c67673e-04fd-11ef-a297-92fbcf53809c.jpg

XHDL軟件

轉(zhuǎn)換所用軟件如下圖所示:

8c81c0ac-04fd-11ef-a297-92fbcf53809c.jpg

8ca427d2-04fd-11ef-a297-92fbcf53809c.jpg

8cbf9c2e-04fd-11ef-a297-92fbcf53809c.jpg

上圖是把轉(zhuǎn)換成VHDL格式的代碼,再轉(zhuǎn)換回verilog后與原代碼對比的圖,可以看出,一些注釋之類的信息都沒有了,原來的代碼規(guī)范和風(fēng)格也發(fā)生了變化。

在轉(zhuǎn)換的過程,該軟件對代碼中的漢語注釋不支持,如果出現(xiàn)漢字就無法轉(zhuǎn)換。

筆者之前就曾試著寫過Verilog轉(zhuǎn)VHDL代碼的工具,見:Verilog HDL代碼轉(zhuǎn)VHDL代碼,無奈因為不是軟件開發(fā)出身,寫出來的東西通用性和完善性很差。寫到此處,再次想起漢天下董事長楊清華所說的話,互聯(lián)網(wǎng)講究的是差異化的商業(yè)模式,很牛的產(chǎn)品定義,早期不看銷售額而看流量,越快越好。這對IC是很可怕的事情,讓整個產(chǎn)業(yè)變得很浮躁。互聯(lián)網(wǎng)的模式,在某種程度上是毒瘤。發(fā)展集成電路芯片,需要把互聯(lián)網(wǎng)的模式認(rèn)知去除。芯片行業(yè)需要長期積累、持續(xù)關(guān)注,需要八年、十年的積累,這個耐心和耐性很重要。

試想一下,如果這么一個簡單的小軟件是互聯(lián)網(wǎng)領(lǐng)域經(jīng)常用到的,估計早已經(jīng)遍地都是了吧,并且也都很好用呢!

以下僅對Verilog轉(zhuǎn)VHDL過程中出現(xiàn)的問題進(jìn)行說明。

Xhdl軟件轉(zhuǎn)換后狀態(tài)機(jī)的問題

含有狀態(tài)機(jī)的Verilog代碼被xhdl軟件轉(zhuǎn)換后會出現(xiàn)兩種情況:

1、當(dāng)verilog代碼中parameter常量寫在緊挨著端口位置時,xhdl軟件會將其轉(zhuǎn)換為vhdl中的generic內(nèi)的可傳遞的參數(shù),如圖:

8ced25fe-04fd-11ef-a297-92fbcf53809c.jpg

2、當(dāng)parameter在其它地方出現(xiàn)時,xhdl會將其轉(zhuǎn)換為constant常量,如圖:

8d030266-04fd-11ef-a297-92fbcf53809c.jpg

無論哪種方式,將其中有錯誤的地方改正后,都不會出現(xiàn)狀態(tài)機(jī)運(yùn)行出錯,也就是不用將這種狀態(tài)機(jī)書寫方式更改為vhdl語法中專門的狀態(tài)機(jī)書寫方式。

function轉(zhuǎn)換位置出現(xiàn)問題

在用xhdl軟件完成轉(zhuǎn)換后會出現(xiàn)function寫在了process塊內(nèi)的情況,出現(xiàn)此問題應(yīng)將function改在architecture下面(與定義信號在相同的位置)。

8d163322-04fd-11ef-a297-92fbcf53809c.jpg

信號只能賦值給與它位寬類型相同的信號

如下圖中的兩個信號:

8d2ffd20-04fd-11ef-a297-92fbcf53809c.jpg

b <= a;

在verilog中此種賦值方式意思是將a的前3位賦值給b,但是在vhdl中此種賦值方式會報出位寬不匹配的錯誤,應(yīng)將其更改為:

b <= a(2 downto 0);

同時需要注意a、b的數(shù)據(jù)類型必須相同,如圖中必須都為std_logic_vector類型。

沒有邏輯與,需用其它辦法解決

在vhdl中沒有邏輯與(verilog中的&&),只有按位與(verilog中的&,vhdl中的and),所以verilog中的邏輯與,在vhdl中有時需要用等價的方式替換,比如:

8d5276fc-04fd-11ef-a297-92fbcf53809c.png

需要替換為:

8d6a29a0-04fd-11ef-a297-92fbcf53809c.jpg

注意數(shù)據(jù)類型轉(zhuǎn)換符號使用的是否正確

在vhdl中有多種數(shù)據(jù)類型,它們之間可以通過數(shù)據(jù)類型轉(zhuǎn)換符號相互轉(zhuǎn)換。在xhdl軟件中,數(shù)據(jù)類型轉(zhuǎn)換一般都會出現(xiàn)錯誤,具體的原因是轉(zhuǎn)換符號使用錯誤,而在vhdl的語法書上介紹的并不全面。下面介紹幾中常用的數(shù)據(jù)類型轉(zhuǎn)換符號:

1、IEEE.std_logic_1164.all庫中包含的:

(1)bit_vector to std_logic_vector :

=to_stdlogicvector(bv_sig);

(2)std_logic_vector to bit_vector :

=to_bitvector();

2、IEEE.std_logic_arith.all庫中包含的:

integer to std_logic_vector :

=CONV_STD_LOGIC_VECTOR(,);

3、IEEE.std_logic_signed.all庫中包含的:

std_logic_vector to integer :

=CONV_INTEGER();

注意:選用某種數(shù)據(jù)類型轉(zhuǎn)換符號的時候一定要確認(rèn)是否包含了相應(yīng)的庫。

其它轉(zhuǎn)換符號可以在如下圖的ise軟件相應(yīng)的目錄下查找

8d811d4a-04fd-11ef-a297-92fbcf53809c.jpg

if后的判斷語句在某些情況會出現(xiàn)語法沒錯誤邏輯出現(xiàn)錯誤

此種情況比較少見,但是一般很難發(fā)現(xiàn),只有通過大量仿真找到錯誤。具體情況如下圖:

原verilog代碼:

if((MDR_port_i&outport)==32'b0)

Xhdl軟件轉(zhuǎn)換后語法無錯誤邏輯出現(xiàn)錯誤:

IF((MDR_port_i/="0000000000000000000000000000000")ANDoutport/="0000000000000000000000000000000"=false)

修改后:

IF((MDR_port_iANDoutport)="0000000000000000000000000000000")

個人總結(jié):在原verilog代碼中,當(dāng)if后的判斷句出現(xiàn)按位與(&)時,Xhdl軟件轉(zhuǎn)換成vhdl后很大可能會出現(xiàn)語法正確邏輯錯誤。

并置運(yùn)算時遇到的問題

由于在verilog語法中,位寬不同的兩個信號也可以相互賦值,但是在vhdl中對此有嚴(yán)格要求位寬相同,而xhdl軟件在轉(zhuǎn)換的時候不會檢測這些,所以經(jīng)常會出現(xiàn)位寬不匹配的情況,尤其是在并置運(yùn)算時,所以要嚴(yán)格檢查并置后的位寬與所賦值信號是否相同。

在verilog中某一信號可以賦值給幾個并置的信號,但是在vhdl中不允許這么做,除非左側(cè)并置的都為std_logic類型信號,右側(cè)為std_logic_vector類型信號,注意此時在vhdl中并不是用“&”這個并置運(yùn)算符,而是“,”。(bit以及bit_vector是否有相似功能暫時未知)具體情況如圖:

錯誤,因為b是std_logic_vector類型

8da39712-04fd-11ef-a297-92fbcf53809c.jpg

正確情況如下圖:

8db94f3a-04fd-11ef-a297-92fbcf53809c.jpg

Bool類型的運(yùn)用以及會出現(xiàn)的問題

在verilog中幾個信號經(jīng)過關(guān)系運(yùn)算后返回的值是1或者0,但是在vhdl中返回的確是bool類型的值,也就是說返回的是true或者false。

1、vhdl中在if后的判斷條件最后必須為布爾類型,如圖:

8dcb7e80-04fd-11ef-a297-92fbcf53809c.jpg

2、verilog和vhdl中信號經(jīng)過關(guān)系運(yùn)算后返回值的區(qū)別,如圖:

8ddfc20a-04fd-11ef-a297-92fbcf53809c.jpg

When-else語句不能用在process塊內(nèi)

軟件轉(zhuǎn)換后的when-else語句常常被放在process塊內(nèi),導(dǎo)致出現(xiàn)問題。因為when-else語句是并行信號賦值語句,它本身就相當(dāng)于一個進(jìn)程process,因此不能放在進(jìn)程體中。進(jìn)程是不能夠嵌套的。

位移操作左側(cè)為bit類型,右側(cè)為integer類型

Verilog中的位移運(yùn)算經(jīng)xhdl軟件轉(zhuǎn)換后必出現(xiàn)錯誤,錯誤的原因是轉(zhuǎn)換成vhdl代碼后位移符號兩側(cè)數(shù)據(jù)類型出錯,如圖

錯誤情況:

8df5fea8-04fd-11ef-a297-92fbcf53809c.jpg

修改后的正確格式:

8e0998e6-04fd-11ef-a297-92fbcf53809c.jpg

位移符號左側(cè)應(yīng)該是bit類型,所以將std_logic_vector類型的信號轉(zhuǎn)換為bit類型,數(shù)字“63”默認(rèn)為integer類型,位移后的結(jié)果仍然為bit類型,所以需要將其裝換為std_logic_vector類型,并賦值給相同類型的信號。

真雙口RAM的IP核的使能信號

注意真雙口RAM的IP核的使能信號的數(shù)據(jù)類型,在頂層例化時要注意要只取使能信號第0位的與信號連接的方式。

8e22226c-04fd-11ef-a297-92fbcf53809c.jpg

由于真雙口RAM在例化后“wea”“web”為std_logic_vector(0 downto 0),所以要取這兩個端口的0位與信號連接。

while循環(huán)

在vhdl中不要使用while循環(huán),會出現(xiàn)問題,將while循環(huán)換為for循環(huán)

top層輸入輸出端口不接信號的情況

1、在top層,例化的某個模塊輸出端口不連信號時,只需要在例化此模塊處將此端口刪除或注釋掉即可,如圖:

8e5167c0-04fd-11ef-a297-92fbcf53809c.jpg

2、當(dāng)在top層例化的某一模塊的輸入端口無信號連接時,必須將此端口處連接“U(未初始化)”狀態(tài)(理論上講將“U”換為“Z”也可以,但實際上會報出語法錯誤,在vhdl語法書上說是連接“open”狀態(tài),實際測試也會報錯),如圖:

8e70072a-04fd-11ef-a297-92fbcf53809c.jpg

case語句的注意事項

在vhdl的case語句的語法中,只有分支將所有條件都覆蓋后才可以不使用“when others =>”(相當(dāng)于verilog的default),但是實際中幾乎不可能包括所有情況(因為必須連高阻,不定態(tài)等狀態(tài)都包含進(jìn)去),所以需要在case語句分支條件增加“when others =>”。對于原verilog代碼中default后沒有任何表達(dá)式的情況,在vhdl中對應(yīng)的地方寫上“null”,如圖:

8e8b6330-04fd-11ef-a297-92fbcf53809c.png

組合邏輯轉(zhuǎn)換時遇到的問題

當(dāng)含有“always(*)”這類組合邏輯的verilog代碼經(jīng)xhdl軟件轉(zhuǎn)換后以下兩種情況需要注意:

1、當(dāng)是三段式狀態(tài)機(jī)中的“always(*)”被轉(zhuǎn)換時,注意去除其中的狀態(tài)常量。

2、由于vhdl規(guī)定case后的判斷條件必須是單一信號,所以當(dāng)原verilog代碼中,case后面的判斷條件不是單一信號,而是幾個信號的組合時,xhdl軟件會將這幾個信號的組合用組合邏輯賦給一個新的信號,后將新的信號放在case的判斷邏輯處,此時需要注意查看組合邏輯塊的觸發(fā)信號是否包含此新生成的信號,具體如圖:

8ea1aaaa-04fd-11ef-a297-92fbcf53809c.jpg

仿真時注意時鐘的問題(上板不會出現(xiàn)此問題)

在使用modelsim對vhdl代碼進(jìn)行仿真時,會出現(xiàn)如圖的情況:

8eb7e086-04fd-11ef-a297-92fbcf53809c.jpg

具體的操作就是對c_o信號打拍,可以發(fā)現(xiàn)第一拍沒有打上(實際是打上了),該測試程序的原理圖如圖:

8ecfd0ce-04fd-11ef-a297-92fbcf53809c.png

C將時鐘clk_c_to_b和一個信號c_o傳遞給b,c_o使用時鐘clk生成的,在b內(nèi)用c給的時鐘來給c_o打拍。最后發(fā)現(xiàn)仿真之所以會出現(xiàn)上面的情況,主要是因為在模塊c內(nèi)對時鐘clk進(jìn)行了一次處理后賦給b(如在c內(nèi)部進(jìn)行了clk_c_to_b <= clk),導(dǎo)致出現(xiàn)了如下的波形情況:

8ef02996-04fd-11ef-a297-92fbcf53809c.png

如果你在使用VHDL與Verilog轉(zhuǎn)換過程中遇到了上面沒有提到的問題,歡迎留言討論?;蛘吣阌懈玫霓k法完成兩種語言之間的轉(zhuǎn)換,也請不吝賜教!

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1383

    瀏覽量

    115517
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1355

    瀏覽量

    110868
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2813

    瀏覽量

    174611
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    819

    瀏覽量

    128789

原文標(biāo)題:Verilog代碼轉(zhuǎn)VHDL代碼經(jīng)驗總結(jié)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何快速在VerilogVHDL之間互轉(zhuǎn)

    VHDL過程中存在的問題進(jìn)行了總結(jié),歡迎批評指正。 當(dāng)我們剛開始學(xué)習(xí)FPGA時,一定會遇到一個問題: 學(xué)習(xí)Verilog還是VHDL? 等我們學(xué)習(xí)FPGA
    的頭像 發(fā)表于 11-10 15:41 ?1.1w次閱讀
    如何快速在<b class='flag-5'>Verilog</b>和<b class='flag-5'>VHDL</b>之間互轉(zhuǎn)

    例說Verilog HDL和VHDL區(qū)別

    VerilogVHDL之間的區(qū)別將在本文中通過示例進(jìn)行詳細(xì)說明。對優(yōu)點和缺點的VerilogVHDL進(jìn)行了討論。
    的頭像 發(fā)表于 12-20 09:03 ?4402次閱讀
    例說<b class='flag-5'>Verilog</b> HDL和<b class='flag-5'>VHDL</b>區(qū)別

    【招聘】verilog vhdl FPGA

    1.熟悉FPGA架構(gòu)及應(yīng)用,熟悉圖像算法的FPGA實現(xiàn)。 2.熟悉verilog vhdl,熟悉Xilinx或Intel等開發(fā)工具。 3.有AI算法 fpga實現(xiàn)經(jīng)驗優(yōu)先。 4.本科及以上學(xué)歷,碩士優(yōu)先。具有強(qiáng)烈的責(zé)任心,執(zhí)行力
    發(fā)表于 09-02 15:50

    VHDLverilog中if判斷條件的一點小區(qū)別

    ,如果是boolean類型就能if(not a)了。verilog:if內(nèi)容不論是什么類型,比如reg 或者wire ,都可以寫成if(!a)、if(a==1'b0)、if(~a)中的任何一種形式。注:上文為本人編寫邏輯時的一點經(jīng)驗總結(jié),不對之處多多指正。
    發(fā)表于 04-09 09:24

    VHDL編程的經(jīng)驗總結(jié)

    VHDL編程的一些心得體會:VHDL是由美國國防部為描述電子電路所開發(fā)的一種語言,其全稱為(Very High Speed Integrated Circuit) Hardware Description Language。與另外一門硬件描述語言
    發(fā)表于 09-27 18:10 ?105次下載

    VHDLVerilog HDL語言對比

    VHDLVerilog HDL語言對比 Verilog HDL和VHDL都是用于邏輯設(shè)計的硬件描述語言,并且都已成為IEEE標(biāo)準(zhǔn)。VHDL
    發(fā)表于 02-09 09:01 ?1.1w次閱讀

    Verilog HDL與VHDL及FPGA的比較分析

    Verilog HDL與VHDL及FPGA的比較分析. Verilog HDL優(yōu)點:類似C語言,上手容易,靈活。大小寫敏感。在寫激勵和建模方面有優(yōu)勢。
    發(fā)表于 01-11 10:45 ?1412次閱讀

    VHDL,Verilog,System verilog比較

    本文簡單討論并總結(jié)VHDLVerilog,System verilog 這三中語言的各自特點和區(qū)別 As the number of enhancements
    發(fā)表于 01-17 11:32 ?0次下載

    VHDLVerilog互轉(zhuǎn)的軟件

    VHDLVerilog互轉(zhuǎn)的軟件, X-HDL v4.21 Crack.zip
    發(fā)表于 06-03 16:16 ?10次下載

    Xilinx Sdram 參考設(shè)計:含VerilogVHDL

    Xilinx FPGA工程例子源碼:含VerilogVHDL版本級詳細(xì)說明文檔
    發(fā)表于 06-07 14:54 ?0次下載

    Verilog/VHDL語法學(xué)習(xí)是掌握基本代碼設(shè)計的技能以及經(jīng)驗總結(jié)

    無論是VHDL還是Verilog,建議初學(xué)者先掌握其中一門。
    的頭像 發(fā)表于 12-19 13:09 ?7328次閱讀
    <b class='flag-5'>Verilog</b>/<b class='flag-5'>VHDL</b>語法學(xué)習(xí)是掌握基本代碼設(shè)計的技能以及<b class='flag-5'>經(jīng)驗總結(jié)</b>

    vhdlverilog的區(qū)別_vhdlverilog哪個好?

    VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language,誕生于1982年。1987年底,VHDL被IEEE和美
    發(fā)表于 03-23 16:43 ?12.4w次閱讀
    <b class='flag-5'>vhdl</b>和<b class='flag-5'>verilog</b>的區(qū)別_<b class='flag-5'>vhdl</b>和<b class='flag-5'>verilog</b>哪個好?

    vhdl轉(zhuǎn)換verilog_VHDLVerilog誰更勝一籌

    今天給大家分享一個VHDLVerilog的工具。很多新手初次學(xué)習(xí)FPGA都曾遇到過一個問題:是學(xué)Verilog OR VHDL
    發(fā)表于 08-25 09:22 ?6961次閱讀
    <b class='flag-5'>vhdl</b><b class='flag-5'>轉(zhuǎn)換</b>為<b class='flag-5'>verilog_VHDL</b>和<b class='flag-5'>Verilog</b>誰更勝一籌

    探討VHDLVerilog模塊互相調(diào)用的問題

    1、 關(guān)于如何在VHDL模塊調(diào)用一個Verilog模塊 在VHDL模塊聲明一個要與調(diào)用的Verilog模塊相同名稱的元件(component),元件的名稱和端口模式應(yīng)與
    的頭像 發(fā)表于 04-30 14:06 ?1.1w次閱讀
    探討<b class='flag-5'>VHDL</b>和<b class='flag-5'>Verilog</b>模塊互相調(diào)用的問題

    VerilogVHDL的比較 Verilog HDL編程技巧

    VerilogVHDL 比較 1. 語法和風(fēng)格 VerilogVerilog 的語法更接近于 C 語言,對于有 C 語言背景的工程師來說,學(xué)習(xí)曲線較平緩。它支持結(jié)構(gòu)化編程,代
    的頭像 發(fā)表于 12-17 09:44 ?731次閱讀