天天看点

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