天天看點

VHDL 文法小點(2)

  1. 在程序中使用when/lese語句,編譯時總說“when”旁邊缺少一個“;”,檢查了好幾遍,也沒找出錯在哪。折騰了半天才意識到when語句是并行語句,不能放在程序裡。
  2. IEEE.numeric_std庫,提供了整型到有符号無符号數的轉換函數,也支援有符号、無符号以及它們的算術操作符、移位/循環和符号擴充等,但是不支援标準邏輯位矢量的算術操作符。如果要把一個标準邏輯位矢量轉換為整型,需要先将其轉換為unsigned,unsigned這個函數在IEEE.numeric_std 庫和ieee.std_logic_unsigned庫中都有定義,兩者隻能有一個被包含,否則編譯器将不知道選擇哪個庫中的定義;然後再轉換為integer,to_integer函數在IEEE.numeric_std 庫中,conv_integer函數在std_ligic_arith庫中。如果在程式中需要進行标準邏輯位矢量的相加,則需要包含ieee.std_logic_unsigned庫,這就意味着不能同時包含IEEE.numeric_std 庫,若還需要轉為整型,則需要包含std_ligic_arith庫。總之,在編寫一般的VHDL代碼時,包含以下三個庫即可:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

但是,如果隻包含以下兩個庫也是可以的,隻是在做算術運算時,需要轉為(有/無符号)整型,相應的,一些轉換函數也有所不同:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.numeric_std.ALL;

轉載于:https://www.cnblogs.com/yucan/archive/2011/03/29/1999325.html