色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何快速在Verilog和VHDL之間互轉

454398 ? 來源:網絡交換FPGA ? 作者:網絡交換FPGA ? 2020-11-10 15:41 ? 次閱讀

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

當我們剛開始學習FPGA時,一定會遇到一個問題:

學習Verilog還是VHDL?

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

你以前用Verilog還是VHDL開發?

你已經習慣某種語言,也發現語言不是學習FPGA時需要考慮的問題,它僅僅是硬件描述語言工具而已。可是,當你發現一份和你使用語言不同的代碼作為參考時,你又開始想:

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

事實上,兩種語言之間是可以相互轉換的。

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

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

XHDL軟件

轉換所用軟件如下圖所示:

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

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

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

試想一下,如果這么一個簡單的小軟件是互聯網領域經常用到的,估計早已經遍地都是了吧,并且也都很好用呢!

以下僅對Verilog轉VHDL過程中出現的問題進行說明。

Xhdl軟件轉換后狀態機的問題
含有狀態機的Verilog代碼被xhdl軟件轉換后會出現兩種情況:

1、當verilog代碼中parameter常量寫在緊挨著端口位置時,xhdl軟件會將其轉換為vhdl中的generic內的可傳遞的參數,如圖:

2、當parameter在其它地方出現時,xhdl會將其轉換為constant常量,如圖:

無論哪種方式,將其中有錯誤的地方改正后,都不會出現狀態機運行出錯,也就是不用將這種狀態機書寫方式更改為vhdl語法中專門的狀態機書寫方式。

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

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

如下圖中的兩個信號:

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

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

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

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

需要替換為:

注意數據類型轉換符號使用的是否正確

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

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();

注意:選用某種數據類型轉換符號的時候一定要確認是否包含了相應的庫。

其它轉換符號可以在如下圖的ise軟件相應的目錄下查找

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

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

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

Xhdl軟件轉換后語法無錯誤邏輯出現錯誤:
IF((MDR_port_i /= "0000000000000000000000000000000") AND outport /= "0000000000000000000000000000000" = false)

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

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

并置運算時遇到的問題
由于在verilog語法中,位寬不同的兩個信號也可以相互賦值,但是在vhdl中對此有嚴格要求位寬相同,而xhdl軟件在轉換的時候不會檢測這些,所以經常會出現位寬不匹配的情況,尤其是在并置運算時,所以要嚴格檢查并置后的位寬與所賦值信號是否相同。

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

錯誤,因為b是std_logic_vector類型

正確情況如下圖:

Bool類型的運用以及會出現的問題
在verilog中幾個信號經過關系運算后返回的值是1或者0,但是在vhdl中返回的確是bool類型的值,也就是說返回的是true或者false。

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

2、verilog和vhdl中信號經過關系運算后返回值的區別,如圖:

When-else語句不能用在process塊內
軟件轉換后的when-else語句常常被放在process塊內,導致出現問題。因為when-else語句是并行信號賦值語句,它本身就相當于一個進程process,因此不能放在進程體中。進程是不能夠嵌套的。

位移操作左側為bit類型,右側為integer類型
Verilog中的位移運算經xhdl軟件轉換后必出現錯誤,錯誤的原因是轉換成vhdl代碼后位移符號兩側數據類型出錯,如圖

錯誤情況:

修改后的正確格式:

位移符號左側應該是bit類型,所以將std_logic_vector類型的信號轉換為bit類型,數字“63”默認為integer類型,位移后的結果仍然為bit類型,所以需要將其裝換為std_logic_vector類型,并賦值給相同類型的信號。

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

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

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

while循環
在vhdl中不要使用while循環,會出現問題,將while循環換為for循環

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

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

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

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

1、當是三段式狀態機中的“always(*)”被轉換時,注意去除其中的狀態常量。

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

仿真時注意時鐘的問題(上板不會出現此問題)
在使用modelsim對vhdl代碼進行仿真時,會出現如圖的情況:

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

C將時鐘clk_c_to_b和一個信號c_o傳遞給b,c_o使用時鐘clk生成的,在b內用c給的時鐘來給c_o打拍。最后發現仿真之所以會出現上面的情況,主要是因為在模塊c內對時鐘clk進行了一次處理后賦給b(如在c內部進行了clk_c_to_b

如果你在使用VHDL與Verilog轉換過程中遇到了上面沒有提到的問題,歡迎留言討論。或者你有更好的辦法完成兩種語言之間的轉換,也請不吝賜教!

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110085
  • vhdl
    +關注

    關注

    30

    文章

    817

    瀏覽量

    128133
收藏 人收藏

    評論

    相關推薦

    例說Verilog HDL和VHDL區別

    VerilogVHDL之間的區別將在本文中通過示例進行詳細說明。對優點和缺點的VerilogVHDL進行了討論。
    的頭像 發表于 12-20 09:03 ?3723次閱讀
    例說<b class='flag-5'>Verilog</b> HDL和<b class='flag-5'>VHDL</b>區別

    怎樣Verilog寫的testbench測試VHDL模塊??

    怎樣Verilog寫的testbench測試VHDL模塊??一個vhdl的工程模塊,怎么用verilog寫testbench 來調用模塊仿
    發表于 08-01 22:54

    write_vhdl與write_verilog有什么差異?

    嗨,我試圖理解“write_vhdl”和“write_verilog之間的差異。我有一個設計,我想從中創建一個網表。設計是用VERILOG編寫的,我用“write_
    發表于 03-16 10:29

    VHDLVerilog 黃金參考手冊

    這兩本書是對VHDLVerilog語言的詳細剖析,對初學者而言是快速上手的經典教材,對高手而言則是對語言深入了解的必備參考.
    發表于 07-08 15:53 ?154次下載

    VHDLVerilog HDL語言對比

    VHDLVerilog HDL語言對比 Verilog HDL和VHDL都是用于邏輯設計的硬件描述語言,并且都已成為IEEE標準。VHDL
    發表于 02-09 09:01 ?1w次閱讀

    Verilog HDL與VHDL及FPGA的比較分析

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

    VHDL,Verilog,System verilog比較

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

    verilogVHDL互轉化軟件

    一款基于verilogVHDL互轉化的軟件,用著很方便,很實用。
    發表于 03-21 17:26 ?20次下載

    VHDLVerilog互轉的軟件

    VHDLVerilog互轉的軟件, X-HDL v4.21 Crack.zip
    發表于 06-03 16:16 ?10次下載

    Xilinx Sdram 參考設計:含VerilogVHDL

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

    VerilogVHDL之間如何互轉

    當然階段四純屬個人的對未來的推測,但是,近年來,FPGA也高速發展,明顯有當年匯編語言開發到C高級語言開發的趨勢,我們是不是應該不局限于只學習FPGA,而要學習下嵌入式知識,特別是Xilin最新推出的ZYNQ就是最好的切入點,集ARM和FPGA開發與一體。但是,做FPGA的人很難入門嵌入式ARM/Linux,而做ARM/Linux的也很難入門FPGA,對于集ARM和FPGA開發一體的ZYNQ,更是入門難,很多公司都要多個人開發ZYNQ,但未來的趨勢肯定是FPGA2嵌入式,這也是本人開公眾號的目的。
    的頭像 發表于 11-12 14:23 ?2.5w次閱讀

    vhdl轉換為verilog_VHDLVerilog誰更勝一籌

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

    探討VHDLVerilog模塊互相調用的問題

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

    VerilogVHDL轉換的經驗與技巧總結

    VerilogVHDL語法是互通且相互對應的,如何查看二者對同一硬件結構的描述,可以借助EDA工具,如Vivado,打開Vivado后它里面的語言模板后,也可以對比查看VerilogVHD
    的頭像 發表于 04-28 17:47 ?2465次閱讀
    <b class='flag-5'>Verilog</b>到<b class='flag-5'>VHDL</b>轉換的經驗與技巧總結

    VerilogVHDL的比較 Verilog HDL編程技巧

    :由于其類似于 C 語言的語法,Verilog 代碼通常更易于閱讀和維護,尤其是處理復雜邏輯時。 VHDLVHDL 的正式性和豐富
    的頭像 發表于 12-17 09:44 ?137次閱讀
    主站蜘蛛池模板: 中国xxxxxxxxx孕交| 九九热精品在线观看| 岳打开双腿开始配合日韩视频| 亚洲日本欧美日韩高观看| 亚洲AV 中文字幕 国产 欧美| 99视频免费播放| 绿巨人www在线观看| 国产久爱青草视频在线观看| 970女主播电台歌曲| 亚洲精品123区| 色欲无码国产喷水AV精品| 麻豆Av国产在线播放| 好吊妞国产欧美日韩视频| 干了快生了的孕妇| 99E久热只有精品8在线直播| 亚洲欧洲自拍偷拍| 挺进老师的紧窄小肉六电影完整版 | 欧美 亚洲综合在线一区| 国产午夜精品AV一区二区麻豆| chinesedaddy80老年人| 一区二区三区国产| 羞羞影院午夜男女爽爽免费| 人妻体内射精一区二区| 精品亚洲一区二区在线播放| 张开腿我尝尝你的草莓| 蜜柚影院在线观看免费高清中文| 精品国产午夜肉伦伦影院| 国产精品久久久久影院色| 超碰97视频在线观看| 99久久精品一区二区三区| 影音先锋av丝袜天堂| 亚洲精品人成电影网| 香蕉97超级碰碰碰碰碰久| 日本撒尿特写| 日本高清片免费观看| 欧美做真爱欧免费看| 女教师公车痴汉在线播放| 免费国产在线观看| 久久综合一个色综合网| 久久久这里有精品999| 久久99精品国产麻豆婷婷|