天天看點

VHDL 與 VerilogHDL 詳細對比

序号 差別之處 VHDL Verilog
1 檔案的擴充名不一樣 .vhd .v
2 結構不一樣 包含庫、實體、結構體。ENTITY 實體名 IS PORT(端口說明) END 實體名 ;ARCHITECTURE 結構體名 OF 實體名 IS 說明部分BEGIN 指派語句/ 元件語句/ 程序語句 END 結構體名 ; 子產品結構 (module… endmodule)module 子產品名 (端口清單) ; 輸入/輸出端口說明; 變量類型說明;assign 語句 (連續指派語句) ;元件例化語句;always@(敏感清單)begin …end endmodule其中assign語句、元件例化語句、always語句的順序可以更換
3 對庫檔案的要求不一樣 須有相應的庫或程式包支援,實體間調用子程式,需要将子程式打成程式包 沒有專門的庫檔案 (隻有基本門的庫),子產品可以通過例化直接調用,不需要打成程式包
4 端口定義的地方不一樣 實體中定義 module的子產品名後面先列出端口清單,再在子產品中用input,output等定義
5 端口定義方式不一樣 端口名(端口名,端口名) : 方向 資料類型名(Default Value) ; 例如:Q1 : IN Std_Logic_Vector(31 DOWNTO 0) ; 端口類型 端口1,端口2,端口3,…;例如:inout [31:0]Q;
6 端口定義類型不一樣 有IN, OUT, INOUT, BTFFER 四種 有input ,output, inout 三種
7 内部信号(SIGNAL)聲明不一樣 在結構體中聲明,有些局部變量還可在程序中聲明 在端口定義後進行聲明内部變量
8 辨別符規則不一樣 不區分大小寫 區分大小寫
9 關鍵詞要求不一樣 允許大小寫混寫例如:EnTity 關鍵詞必須小寫
10 常量定義的關鍵詞和格式表示不一樣 CONSTANT 常量名:資料類型 :=數值; parameter 常量名1 = 數值1, 常量名2 = 數值2,…,常量名n = 數值n;
11 常量表示不一樣 用雙引号. 例如:B"011100" <位寬>’<進制符号><數字> 例如:8’b10110011
12 數組定義方式不一樣 定義4位數組A:A(3 DOWNTO 0 ) 或者A(0 TO 3) 定義4位數組A:A[3:0] 或者A[0:3]
13 下标名表示不一樣 用小括号表示,例如:a(0) 用中括号表示,例如:a[0]
14 資料對象不一樣,且二者變量的含義不一樣 常量,變量,信号.變量是一個局部量,隻能在程序和子程式中使用。變量的指派是一種理想化的資料傳輸,是立即發生,不存在任何延時的行為。信号是描述硬體系統的基本資料對象,它類似于連接配接線。信号可以作為設計實體中并行語句子產品間的資訊交流通道。資料對象沒有預設 常量,變量變量是在程式運作時其值可以改變的量。變量預設為wire型
15 資料預設值 預設值為本類型的最小非負值(某個類型的範圍是以0為對稱的) wire類型預設值為 z, reg類型預設值為x ;
16 變量定義的格式不一樣 VARIABLE 變量名:資料類型 :=初始值 例如:VARIABLE k:Integer RANGE 0 TO 7; 資料類型 [位寬] 變量1,變量2,…,變量n;
17 資料類型不一樣 布爾(BOOLEAN)、位(BIT)、位矢量(BIT_VECTOR)、标準邏輯位(STD_LOGIC)、标準邏輯矢量(STD_LOGIC_VECTOR)。VHDL的資料類型比較複雜。 wire,tri,reg,interger,real,time型,主要是wire和reg型,比較簡單。
18 指派不一樣 按資料對象指派分,變量指派使用“:=”,信号指派使用"<="< span=""> 按語句的執行情況分,assign語句和阻塞語句用“=”指派,非阻塞語句用“<=”< span="">
19 指派要求不一樣 強類型語言,指派兩邊的指派目标和表達式的資料類型必須一樣。不同類型和寬度的資料之間不能運算和指派,需要調用包來完成轉換;例如:A:IN STD_LOGIC_VECTOR(2 DOWNTO 0)B:IN STD_LOGIC_VECTOR(2 DOWNTO 0)C:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) 則C<=A OR B;會出錯 不是強類型語言,可以自動完成不同類型資料的運算和指派;例如:input [2:0]a;input [2:0]b;output [3:0]c; assign c=a&b;不會出錯
20 操作符不一樣 邏輯操作符(Logica Operator)、關系操作符(Relationa Operator)、算術操作符(Arithmetic Operator)、符号操作符(Sign Operator),沒有縮減操作符,沒有三目的條件操作符 操作符比較豐富,有算數操作符,邏輯操作符,位運算、關系操作符,等式操作符,縮減操作符,轉移操作符,條件操作符,位并接操作符
21 條件中,等于判斷符号不一樣 等于= ; 不等于 /= 等于(= =)或全等(= = =)不等于(! =)或不全等(! = =)
22 邏輯操作符不一樣 AND, NAND, NOT, OR, NOR, XNOR, XOR等 該邏輯操作符運算結果跟Verilog HDL的位運算一樣 &&(邏輯與), || (邏輯或), !(邏輯非), ~ (按位取反), &(按位與), |(按位或), ^(按位異或), ^~ 或~ ^(按位同或)
23 移位操作符不一樣 除了邏輯左移SLL、邏輯右移SRL之外,還有算數左移SLA、算數右移SRA、循環左移ROL、循環右移ROR。其中邏輯左移SLL、邏輯右移SRL與Verilog HDL的左移<<,>>一緻 隻有邏輯左移<<>>,沒有算數左移、算數右移、循環左移、循環右移。
24 并置操作符不一樣 用&并置,例如:a&b 用{ }并置,例如:{a, b}
25 并行指派語句不一樣 信号指派語句 (直接指派、條件指派、選擇指派) assign語句 (連續指派) 隻對wire型
26 順序語句不一樣 信号指派變量指派(變量指派隻能在程序和子程序中進行) 阻塞語句非阻塞語句
27 并行語句中的程序語句不一樣 PROCESS(敏感清單)BEGIN順序語句;END PROCESS; always@ (敏感清單)begin順序語句;end
28 條件判斷語句if的格式不一樣 IF 條件1 THEN順序描述語句;ELSIF 條件2 THEN順序描述語句;…ELSE 順序描述語句;END IF; if (條件1) 順序描述語句; else if (條件2) 順序描述語句;…else 順序描述語句;
29 條件控制語句case的格式不一樣 CASE 表達式 IS WHEN 條件表達式1 => 順序描述語句; WHEN 條件表達式2 => 順序描述語句; WHEN 條件表達式3 => 順序描述語句; … WHEN 條件表達式n => 順序描述語句;END CASE如果沒有列舉出CASE和IS之間的表達式的全部取值,則WHEN OTHERS =>必不可少 case (表達式) 選擇值1:語句1; 選擇值2:語句2; 選擇值3:語句3; … 選擇值n:語句n; default:語句n+1;endcasedefault沒有,不會出現文法錯誤,但邏輯有可能産生錯誤
30 case語句的應用範圍也不一樣 在CASE語句中,條件表達式是沒有優先級的,如優先級編碼器可以用IF語句進行描述,但不可以使用CASE語句描述 除了case以外,還有相關的casex和casez語句,如用casex可以實作優先編碼器
31 循環控制語句不一樣 循環控制語句有:FOR_LOOP循環語句、WHILE_LOOP循環語句、NEXT語句、EXIT語句 for語句、repeat語句、while語句、和forever語句
32 for循環控制語句格式不一樣 [标号:] FOR 循環變量 IN 循環次數範圍 LOOP 順序語句 END LOOP [标号]; for(循環指針=初值; 循環指針<終值; 循環指針=循環指針+步長值) begin 順序語句; … end
33 for循環中的循環變量存在差別 循環變量不需要定義 循環指針需要定義
34 while語句格式不一樣 [标号:] WHILE 條件 LOOP 順序描述語句; END LOOP [标号];在循環體内,必須包含條件式中判别變量的指派語句。 while(循環執行條件表達式) begin 重複執行語句; 修改循環條件語句; end
35 元件例化不一樣 COMPONENT 元件名 ISGENERIC 說明;PORT 說明;END COMPONENT 元件名; 設計子產品名 <例化電路名> (端口清單) ;
36 時鐘定義不一樣 時鐘列在PROCESS的敏感清單中,如若上升沿有效,則PROCESS(clk)BEGINIF (clk’EVENT AND clk=‘1’) THEN…END PROCESS; 在always結構中,上升沿直接展現在always的敏感清單中。如always@ (posedge clk)begin…end
37 時鐘邊沿定義方式不一樣 上升沿(clk’EVENT AND clk=‘1’)下降沿(clk’EVENT AND clk=‘0’) 上升沿posedge clk下降沿negedge clk
38 生成重複結構的能力不同 有生成語句(GENERATE)生成由大量相同單元構成的子產品,格式為:[标号:] FOR 循環變量 IN 取值範圍GENERATE[說明部分]BEGIN[并行語句]; - -元件例化語句,以重複産生并行元件。END GENERATE [标号];或者IF 條件 GENERATE[說明部分]BEGIN[并行語句]END GENERATE [标号]; 沒有對應的生成語句,有相近的執行個體數組,格式為:<子產品名字> <執行個體名字> <範圍> (<端口>);
39 子程式不一樣 procedure和function task 和 function
40 注釋方法不一樣 用- -引導注釋資訊 用//或/*…*/注釋

- END -