chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何快速在Verilog和VHDL之間互轉(zhuǎn)

454398 ? 來(lái)源:網(wǎng)絡(luò)交換FPGA ? 作者:網(wǎng)絡(luò)交換FPGA ? 2020-11-10 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

對(duì)于我們做FPGA開發(fā)人員來(lái)說(shuō),如何快速在Verilog和VHDL之間互轉(zhuǎn),加快開發(fā)產(chǎn)品的進(jìn)度,而不是因?yàn)橹欢骋环N語(yǔ)言而局限了自己的開發(fā)。

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

XHDL軟件

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

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

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

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

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

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

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

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

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

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

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

信號(hào)只能賦值給與它位寬類型相同的信號(hào)

如下圖中的兩個(gè)信號(hào):

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

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

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

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

需要替換為:

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

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

1、IEEE.std_logic_1164.all庫(kù)中包含的:

(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庫(kù)中包含的:

integer to std_logic_vector :

= CONV_STD_LOGIC_VECTOR(,);

3、IEEE.std_logic_signed.all庫(kù)中包含的:

std_logic_vector to integer :

= CONV_INTEGER();

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

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

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

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

原verilog代碼:
if((MDR_port_i & outport) == 32'b0)

Xhdl軟件轉(zhuǎn)換后語(yǔ)法無(wú)錯(cuò)誤邏輯出現(xiàn)錯(cuò)誤:
IF((MDR_port_i /= "0000000000000000000000000000000") AND outport /= "0000000000000000000000000000000" = false)

修改后:
IF((MDR_port_i AND outport) = "0000000000000000000000000000000" )

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

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

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

錯(cuò)誤,因?yàn)閎是std_logic_vector類型

正確情況如下圖:

Bool類型的運(yùn)用以及會(huì)出現(xiàn)的問題
在verilog中幾個(gè)信號(hào)經(jīng)過(guò)關(guān)系運(yùn)算后返回的值是1或者0,但是在vhdl中返回的確是bool類型的值,也就是說(shuō)返回的是true或者false。

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

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

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

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

錯(cuò)誤情況:

修改后的正確格式:

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

真雙口RAM的IP核的使能信號(hào)

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

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

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

top層輸入輸出端口不接信號(hào)的情況
1、在top層,例化的某個(gè)模塊輸出端口不連信號(hào)時(shí),只需要在例化此模塊處將此端口刪除或注釋掉即可,如圖:

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

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

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

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

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

仿真時(shí)注意時(shí)鐘的問題(上板不會(huì)出現(xiàn)此問題)
在使用modelsim對(duì)vhdl代碼進(jìn)行仿真時(shí),會(huì)出現(xiàn)如圖的情況:

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

C將時(shí)鐘clk_c_to_b和一個(gè)信號(hào)c_o傳遞給b,c_o使用時(shí)鐘clk生成的,在b內(nèi)用c給的時(shí)鐘來(lái)給c_o打拍。最后發(fā)現(xiàn)仿真之所以會(huì)出現(xiàn)上面的情況,主要是因?yàn)樵谀Kc內(nèi)對(duì)時(shí)鐘clk進(jìn)行了一次處理后賦給b(如在c內(nèi)部進(jìn)行了clk_c_to_b

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

編輯:hfy

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

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112258
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    820

    瀏覽量

    129938
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    怎樣Verilog寫的testbench測(cè)試VHDL模塊??

    怎樣Verilog寫的testbench測(cè)試VHDL模塊??一個(gè)vhdl的工程模塊,怎么用verilog寫testbench 來(lái)調(diào)用模塊仿
    發(fā)表于 08-01 22:54

    write_vhdl與write_verilog有什么差異?

    嗨,我試圖理解“write_vhdl”和“write_verilog之間的差異。我有一個(gè)設(shè)計(jì),我想從中創(chuàng)建一個(gè)網(wǎng)表。設(shè)計(jì)是用VERILOG編寫的,我用“write_
    發(fā)表于 03-16 10:29

    VHDLVerilog 黃金參考手冊(cè)

    這兩本書是對(duì)VHDLVerilog語(yǔ)言的詳細(xì)剖析,對(duì)初學(xué)者而言是快速上手的經(jīng)典教材,對(duì)高手而言則是對(duì)語(yǔ)言深入了解的必備參考.
    發(fā)表于 07-08 15:53 ?154次下載

    VHDLVerilog HDL語(yǔ)言對(duì)比

    VHDLVerilog HDL語(yǔ)言對(duì)比 Verilog HDL和VHDL都是用于邏輯設(shè)計(jì)的硬件描述語(yǔ)言,并且都已成為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)點(diǎn):類似C語(yǔ)言,上手容易,靈活。大小寫敏感。寫激勵(lì)和建模方面有優(yōu)勢(shì)。
    發(fā)表于 01-11 10:45 ?1478次閱讀

    VHDL,Verilog,System verilog比較

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

    verilogVHDL互轉(zhuǎn)化軟件

    一款基于verilogVHDL互轉(zhuǎn)化的軟件,用著很方便,很實(shí)用。
    發(fā)表于 03-21 17:26 ?20次下載

    VHDLVerilog互轉(zhuǎn)的軟件

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

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

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

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

    當(dāng)然階段四純屬個(gè)人的對(duì)未來(lái)的推測(cè),但是,近年來(lái),F(xiàn)PGA也高速發(fā)展,明顯有當(dāng)年匯編語(yǔ)言開發(fā)到C高級(jí)語(yǔ)言開發(fā)的趨勢(shì),我們是不是應(yīng)該不局限于只學(xué)習(xí)FPGA,而要學(xué)習(xí)下嵌入式知識(shí),特別是Xilin最新推出的ZYNQ就是最好的切入點(diǎn),集ARM和FPGA開發(fā)與一體。但是,做FPGA的人很難入門嵌入式ARM/Linux,而做ARM/Linux的也很難入門FPGA,對(duì)于集ARM和FPGA開發(fā)一體的ZYNQ,更是入門難,很多公司都要多個(gè)人開發(fā)ZYNQ,但未來(lái)的趨勢(shì)肯定是FPGA2嵌入式,這也是本人開公眾號(hào)的目的。
    的頭像 發(fā)表于 11-12 14:23 ?2.6w次閱讀

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

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

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

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

    VerilogVHDL轉(zhuǎn)換的經(jīng)驗(yàn)與技巧總結(jié)

    VerilogVHDL語(yǔ)法是互通且相互對(duì)應(yīng)的,如何查看二者對(duì)同一硬件結(jié)構(gòu)的描述,可以借助EDA工具,如Vivado,打開Vivado后它里面的語(yǔ)言模板后,也可以對(duì)比查看VerilogVHD
    的頭像 發(fā)表于 04-28 17:47 ?3520次閱讀
    <b class='flag-5'>Verilog</b>到<b class='flag-5'>VHDL</b>轉(zhuǎn)換的經(jīng)驗(yàn)與技巧總結(jié)

    VerilogVHDL的比較 Verilog HDL編程技巧

    :由于其類似于 C 語(yǔ)言的語(yǔ)法,Verilog 代碼通常更易于閱讀和維護(hù),尤其是處理復(fù)雜邏輯時(shí)。 VHDLVHDL 的正式性和豐富
    的頭像 發(fā)表于 12-17 09:44 ?1697次閱讀