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

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

3天內不再提示

例說Verilog HDL和VHDL區別

OpenFPGA ? 來源:Hack電子 ? 2023-12-20 09:03 ? 次閱讀

Verilog和VHDL之間的區別將在本文中通過示例進行詳細說明。對優點和缺點的Verilog和VHDL進行了討論。

d56300b8-9ecf-11ee-8b88-92fbcf53809c.png

HDL 建模能力:Verilog與VHDL

首先,讓我們討論一下 Verilog 和 VHDL 的硬件建模能力,因為它們都是用于建模硬件的硬件描述語言。

下圖顯示了 Verilog 和 VHDL 在硬件抽象行為級別方面的 HDL 建模能力。

d5761a72-9ecf-11ee-8b88-92fbcf53809c.png

圖形來源:Douglas J. Smith,“VHDL 和 Verilog 比較和對比加上用 VHDL、Verilog 和 C 編寫的建模示例”

低級建模

如上圖所示,Verilog 和 VHDL 都能夠對硬件進行建模。但是,在底層硬件建模方面,Verilog優于VHDL。這是合理的,因為 Verilog 最初是為建模和模擬邏輯門而創建的。事實上,Verilog 具有內置原語或低級邏輯門,因此設計人員可以在 Verilog 代碼中實例化原語,而 VHDL 則沒有。

Verilog 的門基元:and、nand、or、nor、xor、xnor、buf、not、bufif0、notif0、bufif1、notif1、pullup、pulldown。
Verilog 的開關原語:pmos、nmos、rpmos、rnmos、cmos、rcmos、tran、rtran、tranif0、rtranif0、tranif1、rtranif1。

更重要的是,Verilog 支持用戶定義基元 (UDP),因此設計人員可以定義自己的單元基元。此功能對于 ASIC 設計人員來說尤其必要。

以下是有關如何在 Verilog 代碼中實例化門基元的 Verilog 示例:

or #5 u1(x,y,z);
and #10 u2(i1,i2,i3);
ADC_CIRCUIT u3(in1,out1,out2,clock); 
// ADC_CIRCUIT is an User-Defined Primitive for 
// Analog to Digital Converter for example.

Verilog 中一些低級內置門基元的 VHDL 等效項可以通過使用邏輯運算符如 NOT、AND、NAND、OR、NOR、XOR、XNOR 來實現。

下面是 Verilog 門基元的 VHDL 等效代碼示例:

or u1(x,y,z); in Verilog <=> x <=< span=""> y OR z; in VHDLand u2(i1,i2,i3); (Verilog) <=> i3 <=< span=""> i2 AND i3; in VHDL

為了支持 Verilog 中的 UDP 功能,VITAL(VHDL Initiative Towards ASIC Libraries-VHDL 面向 ASIC 庫的倡議)問世,使 ASIC 設計人員能夠在符合 VITAL 的 VHDL 中創建自己的單元基元或 ASIC 庫,如上圖所示。盡管如此,VHDL 仍然可能無法實現 Verilog 對低級硬件建模的支持。因此,如果我是 ASIC 設計師,我會更喜歡 Verilog 而不是 VHDL。

高級建模

另一方面,如上述圖表所示,VHDL 在高級硬件建模方面優于 Verilog。與 Verilog 相比,VHDL 為高級硬件建模提供了更多功能和構造。以下是在比較 VHDL 和 Verilog 時支持高級硬件建模的主要不同功能:

?VHDL 中的用戶定義數據類型

Verilog 的數據類型非常簡單,都是用 Verilog 語言定義的(用戶不能在 Verilog 中定義自己的數據類型)。Verilog 有兩種主要的數據類型,包括 net 數據類型(用于將組件連接在一起,例如wire(最流行)、wor、wand、tri、trior 等)和變量數據類型(用于臨時存儲,例如reg(最流行),整數、時間、實數和實時)。

VHDL支持許多不同的數據類型,包括預定義的 VHDL 數據類型和用戶定義的數據類型。預定義的 VHDL 數據類型包括位、位向量、字符串、時間、布爾值、字符和數字(實數或整數)。VHDL 允許設計人員根據預定義的 VHDL 數據類型定義不同的類型;對于可能使用許多不同數據類型的復雜和高級系統來說,這是一個很好的功能。以下是用于定義新數據類型的示例 VHDL 代碼:

type int_8bit is range 0 to 255 -- define 8-bit unsigned numbers
signal i : int_8bit;
type state_FSM is (Idle, start, calculate , finish, delay) 
-- define symbolic states to represent FSM states.
signal current_state, next_state: state_FSM;

?VHDL 中的設計重用包

VHDL 中的包通常用于數據類型和子程序的聲明。VHDL 包中聲明的子程序或數據類型可用于許多不同的實體或體系結構。例如:

package fsm_type is 
type FSM_states is (IDLE, TRANSMIT, RECEIVE, STOP);
end package
-- to use the FSM_states type in an entity or architecture
-- use the following statement on top of the entity
use work.fsm_type.all
entity example is

Verilog 中沒有包定義。與 VHDL 包最接近的 Verilog 等效項是`includeVerilog 編譯器指令。函數或定義可以單獨保存在另一個文件中,然后通過使用`include指令在模塊中使用它。下面是一個 Verilog 示例代碼:

// Below is the content of "VerilogVsVHDL.h" file
`define INPUT_VERILOG "./test_VerilogvsVHDL.hex" // Input file name 
`define OUTPUT_VHDL "VHDL.bmp" // Output file name 
`define VERILOG_VHDL_DIFFERENCE




// Then call it in every single module that you want to use the definition above
`include "VerilogVsVHDL.h"

?VHDL 中的配置語句

一個 VHDL 設計可以為一個實體獲得許多具有不同體系結構的設計實體。配置語句將確切的設計實體與設計中的組件實例相關聯。當實體中有多個架構時,配置語句會繼續指定所需的設計架構分配給實體以進行綜合或仿真。當 VHDL 設計人員需要管理大型高級設計時,此功能非常有用。

以下是配置語句的 VHDL 示例代碼:

entity BUF is
  generic (DELAY : TIME := 10 ns);
  port ( BUF_IN : in BIT; BUF_OUT : out BIT);
end BUF;
-- The first design architecture for BUF 
architecture STRUCT_BUF1 of BUF is
signal temp: bit;
begin
  BUF_OUT <=< span=""> not temp after DELAY;
  temp <=< span=""> not BUF_IN after DELAY;
end STRUCT_BUF1;
-- The second design architecture for BUF 
architecture STRUCT_BUF2 of BUF is
begin
  BUF_OUT <=< span=""> BUF_IN after 2*DELAY;;
end STRUCT_BUF2;
-- Testbench to simulate BUF entity 
entity BUF_TESTBENCH is 
end BUF_TESTBENCH;
architecture STRUCT_BUF_TEST of BUF_TESTBENCH is
signal TEST1, TEST2 : BIT := '1';
-- BUF_COMP component declaration:
component BUF_COMP is
  generic (TIME_DELAY : TIME);
  port ( IN1 : in BIT; OUT1 : out BIT );
end component;
begin
  -- instantiation of BUF_COMP component:
  DUT:BUF_COMP generic map (10 ns) port map (TEST1,TEST2);
end STRUCT_BUF_TEST;
-- Configuration specify the design entity and architecture
-- for the DUT component instance in the testbench above
configuration CONFIG_BUF of TEST_BUF is
-- Associate BUF_COMP component instance to BUF design entity
-- and STRUCT_BUF1 design architecture for simulation 
for STRUCT_BUF_TEST 
  for DUT : BUF_COMP 
    use entity WORK.BUF (STRUCT_BUF1)
    generic map (DELAY => TIME_DELAY)
    port map (BUF_IN => IN1, BUF_OUT => OUT1);
  end for;
end for ;
end CONFIG_BUF;

Verilog-2001 中還添加了配置塊。

?VHDL 中的庫管理

同時查看 Verilog 和 VHDL 代碼時,最明顯的區別是 Verilog 沒有庫管理,而 VHDL 在代碼頂部包含設計庫。VHDL 庫包含已編譯的架構、實體、包和配置。此功能在管理大型設計結構時非常有用。上面已經給出了 VHDL 中的包和配置示例。以下是 VHDL 中庫管理的 VHDL 示例代碼:

-- library management in VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use work.clock_div.all;

簡而言之,VHDL 在高級硬件建模方面比 Verilog 更好。由于 FPGA 設計流程不需要低級硬件建模,如果我是 FPGA 設計師,我更喜歡 VHDL 而不是 Verilog。

值得一提的是,SystemVerilog 的創建是為了通過將 VHDL 中的高級功能和結構添加到 Verilog 中進行驗證來增強 Verilog 語言在高級建模中的弱點。SystemVerilog 現在廣泛用于 IC 驗證。

冗長(Verboseness:):Verilog 與 VHDL

?VHDL 是強類型的vs Verilog 是松散類型的

VHDL 是一種非常強類型的硬件描述語言,因此必須使用匹配和定義的數據類型正確編寫 VHDL 代碼。這意味著如果在 VHDL 中分配時混合數據類型或不匹配信號,將會出現編譯錯誤。另一方面,Verilog 是一種松散類型的語言。在 Verilog 中,您可以在分配時混合數據類型或不匹配信號。下面是不匹配信號的 VHDL 示例代碼:

signal test_reg1:  std_logic_vector(3 downto 0); 
signal test_reg2:  std_logic_vector(7 downto 0); 
test_reg2 <=< span=""> test_reg1;
-- You cannot assign a 4-bit signal to an 8-bit signal 
-- in VHDL, it will introduce a syntax error below:
-- Width mismatch. Expected width 8, Actual width is 4 
-- for dimension 1 of test_reg1.

編譯上面的VHDL代碼時,會出現語法錯誤“Width mismatch. Expected width 8, Actual width is 4”。如果將VHDL代碼改為“test_reg2 <= "0000"&test_reg1;?"匹配位寬,則不會出現語法錯誤。?
如果在 Verilog 中將 4 位信號分配給 8 位信號會怎樣?

  wire [3:0] test1;
  wire [7:0] test2;
  // In Verilog, you can assign 4-bit signal to 8-bit signal.
  assign test2 = test1;
  // there will be no syntax error during synthesis

當您將 4 位信號分配給 8 位信號時,Verilog 編譯器不會引入語法錯誤。在 Verilog 中,不同位寬的信號可以相互分配。Verilog 編譯器將使源信號的寬度適應目標信號的寬度。未使用的位將在綜合期間進行優化。
下面是在分配信號時混合數據類型的另一個 VHDL 示例:

signal test1: std_logic_vector(7 downto 0);
signal test2: integer;
test2 <=< span=""> test1;
-- Syntax Error: type of test2 is incompatile with type of test1

上面的 VHDL 代碼會引入一個語法錯誤“(type of test2 is incompatible with type of test1)test2 的類型與 test1 的類型不兼容”。你必須轉換test1的分配之前整數數據類型TEST1到TEST2如下:

library IEEE;
USE ieee.numeric_std.ALL;
signal test1: std_logic_vector(3 downto 0);
signal test2: integer;
-- Use IEEE.NUMBERIC_STD.ALL Library for this conversion
test2 <=< span=""> to_integer(unsigned(test1));
-- No syntax errors this time

另一方面,Verilog 在分配時混合數據類型時沒有問題。以下是一個 Verilog 示例:

reg [3:0] test1;
  integer test2;
  always @(test1) begin
   test2 = test1;
  end
         // NO syntax errors when compiling

當您將具有reg數據類型的信號分配給具有不同數據類型(如integer )的另一個信號時,Verilog 編譯器不會像在 VHDL 中那樣引入語法錯誤。

?VHDL 復雜數據類型與 Verilog 簡單數據類型

如上所述,VHDL 有許多不同的復雜數據類型,用戶還可以定義許多其他復雜數據類型。這也使得 VHDL 比 Verilog 更冗長,因為 Verilog 只有 2 種主要數據類型,并且 Verilog 中不允許用戶定義的數據類型。

換句話說,為了對同一電路建模,VHDL 代碼通常比 Verilog 代碼更冗長、更長,因為 VHDL 的強類型,我們需要在不同的復雜數據類型之間執行轉換。它可以是優點也可以是缺點。事實上,當您在 VHDL 代碼中分配錯誤的內容時,VHDL 編譯器更有可能引入語法錯誤。當您成功編譯 VHDL 代碼時,與 Verilog 相比,您的 VHDL 代碼更有可能正常工作。另一方面,Verilog 是松散類型的,更簡潔,更簡單。但是編譯成功后,很有可能你的Verilog代碼中仍然存在錯誤。

下面是另一個使 VHDL 比 Verilog 更冗長的示例代碼:

-- VHDL code for ALU 
process(SEL,ABUS,BBUS,tmp1,tmp2)
begin 
case(SEL) is
 when "0000" =>  ALUOUT <=< span=""> tmp1; -- ADD
 when "0001" =>  ALUOUT <=< span=""> tmp2;-- SUB 
 when "0010" =>  ALUOUT <=< span=""> BBUS; -- AND
 when others => ALUOUT <=< span=""> ABUS; 
 end case;
end process;
// Verilog equivalent to VHDL ALU 
assign ALUOUT=(SEL==0)?tmp1:((SEL==1)?tmp2:((SEL==2)?BBUS:ABUS));

VHDL 中的 if else、when/else、with/select 語句可以在 Verilog 中使用條件運算符 (?) 表達得更簡潔,如上例所示。

Verilog 和 VHDL 之間的其他區別:

?Verilog 類似于C 編程語言,而 VHDL 類似于Ada或 Pascal 編程語言

?Verilog 區分大小寫,而 VHDL 不區分大小寫。這意味著DAta1和Data1在Verilog中是兩個不同的信號,但在VHDL中是相同的信號。

?在 Verilog 中,要在模塊中使用組件實例,您只需在模塊中使用正確的端口映射對其進行實例化。在VHDL中,在實例化實例之前,如果您使用舊的實例化語句作為以下示例,則通常需要將組件聲明為架構或包中。在 VHDL-93 中,您可以像這樣直接實例化實體:“Label_name: entity work.component_name port map (port list);”。

例如,要在 VHDL 中實例化實體 clk_div,將在體系結構代碼中添加一個組件聲明,如下所示:

architecture Behavioral of digital_clock is
-- component declaration before instantiation below
component clk_div
port (
 clk_50: in std_logic;
 clk_1s : out std_logic
 );
end component;
signal clk, clk_1s: std_logic;
begin
-- component instantiation
create_1s_clock: clk_div port map (clk_50 => clk, clk_1s => clk_1s); 
end

或者在包中聲明組件以供重用:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
package clock_div_pack is 
component clk_div is
 port (
         clk_50: in std_logic;
         clk_1s : out std_logic
 );
end component clk_div;
end package;
-- Declare the component in a separate package and 
-- reuse by using the following statement:
use work.clock_div_pack.all;
entity clock is
end clock;
architecture Behavioral of clock is
signal clk, clk_1s: std_logic;
begin
create_1s_clock: clk_div port map (clk_50 => clk, clk_1s => clk_1s); 
end


在 VHDL-93 中直接實例化實體的示例代碼:

create_1s_clock: entity work.clk_div port map (clk_50 => clk, clk_1s => clk_1s);

?Verilog 具有編譯器指令,例如`timescale(聲明時間單位和延遲精度)、`define(將文本字符串聲明為宏名稱)、`ifdef、ifndef `else `elseif `endif(條件編譯)、`include(包括一個可以包含函數或其他聲明的文件)等。VHDL 沒有編譯器指令。

?VHDL 支持枚舉和記錄數據類型,允許用戶為一種數據類型定義多個信號。Verilog 不支持枚舉和記錄類型。下面是枚舉和記錄類型的 VHDL 代碼:

type FSM is (IDLE, TEST, VERILOGvsVHDL, STOP, FPGA4student);
-- enumerated type
type int_4 is range 0 to 15;
-- record tye in VHDL
type record_example is record
 data1: integer;
 data2: int_4;
 data3: FSM;
end record;


?等等。

盡管 Verilog 和 VHDL 之間存在差異,但它們是兩種最流行的硬件描述語言。如果可以,最好同時學習它們。重要的是要記住,在編碼時始終考慮邏輯門或硬件以開發硬件編碼思維,而在使用 Verilog 和 VHDL 編碼時忘記軟件編程思維,這一點非常重要。








審核編輯:劉清

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

    關注

    16

    文章

    1585

    瀏覽量

    135173
  • asic
    +關注

    關注

    34

    文章

    1163

    瀏覽量

    119536
  • VHDL語言
    +關注

    關注

    1

    文章

    113

    瀏覽量

    17834
  • 編譯器
    +關注

    關注

    1

    文章

    1585

    瀏覽量

    48745
  • Verilog HDL
    +關注

    關注

    17

    文章

    125

    瀏覽量

    50240

原文標題:例說Verilog HDL和VHDL區別,助你選擇適合自己的硬件描述語言

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA編程是用VHDL還是verilog HDL好用?謝謝了!

    FPGA編程是用VHDL還是verilog HDL好用?謝謝了!{:soso_e183:}
    發表于 06-19 17:36

    FPGA編程是用VHDL還是verilog HDL好用?謝謝了!

    [color=#444444 !important]FPGA編程是用VHDL還是verilog HDL好用?謝謝了!
    發表于 06-19 17:39

    VHDLverilog HDL講解

    VHDLverilog HDL講解
    發表于 10-09 20:32

    Verilog HDL語言100詳解

    Verilog HDL語言100詳解希望對大家有所幫助
    發表于 09-01 15:58

    如何用VHDL、Verilog HDL實現設計輸入?

    如何在ALTERA公司的Quartus II環境下用VHDL、Verilog HDL實現設計輸入,采用同步時鐘,成功編譯、綜合、適配和仿真,并下載到Stratix系列FPGA芯片EP1S25F780C5中。
    發表于 04-15 06:19

    X-HDL v3.2.55 VHDL/Verilog語言翻譯器

    X-HDL:軟件簡介—SoftWare Description: X-HDL v3.2.55 VHDL/Verilog語言翻譯器 一款
    發表于 03-25 12:00 ?355次下載

    VHDLVerilog HDL語言對比

    VHDLVerilog HDL語言對比 Verilog HDLVHDL都是用于邏輯設計的硬
    發表于 02-09 09:01 ?1w次閱讀

    Verilog HDLVHDL及FPGA的比較分析

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

    VHDLVerilog互轉的軟件

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

    vhdlverilog區別_vhdlverilog哪個好?

    國國防部確認為標準硬件描述語言 。Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數字系統硬件的結構和行為的語言,用它可以表示邏輯電路圖、邏輯表達式
    發表于 03-23 16:43 ?12.3w次閱讀
    <b class='flag-5'>vhdl</b>和<b class='flag-5'>verilog</b>的<b class='flag-5'>區別</b>_<b class='flag-5'>vhdl</b>和<b class='flag-5'>verilog</b>哪個好?

    Verilog HDL的基礎知識詳細說明

    硬件描述語言基本語法和實踐 (1)VHDLVerilog HDL的各自特點和應用范圍 (2)Verilog HDL基本結構語言要素與
    發表于 07-03 17:36 ?53次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎知識詳細說明

    Verilog HDLVHDL區別

    Verilog HDL是一種硬件描述語言,以文本形式來描述數字系統硬件的結構和行為的語言,用它可以表示邏輯電路圖、邏輯表達式,還可以表示數字邏輯系統所完成的邏輯功能。 Verilog HDL
    的頭像 發表于 06-17 16:13 ?1.3w次閱讀

    Verilog HDL語言技術要點

    的是硬件描述語言。最為流行的硬件描述語言有兩種Verilog HDL/VHDL,均為IEEE標準。Verilog HDL具有C語言基礎就很容
    的頭像 發表于 09-01 11:47 ?4111次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語言技術要點

    Verilog HDL verilog hdlvhdl區別

    Verilog HDL是一種以文本形式描述數字系統硬件的結構和行為的硬件描述語言,也可描述邏輯電路圖、邏輯表達式等。Verilog HDLVHDL
    的頭像 發表于 07-23 14:36 ?1w次閱讀

    Verilog HDL入門教程-Verilog HDL的基本語法

    Verilog HDL入門教程-Verilog HDL的基本語法
    發表于 01-07 09:23 ?163次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>