VHDL语言讲座

  • 格式:doc
  • 大小:158.00 KB
  • 文档页数:22

VHDL硬件描述语言程序设计VHDL硬件描述语言程序设计1VHDL语言简介1.1历史VHSIC Hardware Description Language1982美国国防部VHSIC计划(Very High Speed Integrated Circuit) IEEE1076-1987标准美国国防部MIL-STD-454L1.2高级电路描述语言1.3支持Top-Down层次化设计1.4VHDL电路设计流程a.VHDL语言编程;b.功能仿真:测试向量;c.综合-生成门级电路网表;d.布线-生成掩码文件;e.定时仿真;f.芯片编程。

1.5VHDL电路设计工具软件1.5.1前端设计工具a.VHDL输入:文本编辑器,图形输入;b.仿真(功能仿真和定时仿真):SpeedWave;c.综合: FPGA Express。

1.5.2后端设计工具(Lattice ISPDS+)a.布线:由芯片厂家提供;b.芯片编程:由芯片厂家提供。

1.5.3edif网表Electronic Design Interchange Format.2VHDL语法2.1简单电路实例2.2VHDL程序构成2.2.1实体(entity)a.作用:描述电路的接口关系(管脚图);b.语法entity entity_name isport(端口声明);end entity_name;c. 端口声明语法:port_name :mode type;d. 端口类型(mode):共4种in:输入out:输出inout:双向buffer:同out,但其状态值可作为内部其它电路的输入。

e. 信号类型(type):std_logic, std_logic_vector, integer。

2.2.2结构体a.作用:描述实体(entity)的行为---电路的功能;b.语法:architecture aechitecture_name of entity_name is内部信号定义等;begin并行语句;end architecture_name;2.2.3VHDL语言对象a.port:定义实体外部特征;b.signal:结构体中定义内部信号(原理图中的引线);c.variable:主要在过程(process)中定义,计算的中间变量,也可能同signal一样;d.constant:常量。

2.3数据类型2.3.1枚举类型(Enumeration)与C语言中的枚举类型一样的。

定义COLORtype COLOR is (BLUE, GREEN, YELLOW, RED);BLUE=0, GREEN=1, YELLOW=2, RED=3定义MY_LOGICtype MY_LOGIC is (`0`, `1`, `X`, `Z`);2.3.2整数类型(integer)可以定义整数的子类型:type int8 is –128 to 127;2.3.3矩阵类型(Array)type BYTE is array (7 downto 0) of BIT;type STD_LOGIC_VECTOR is array(INTEGER range <>) of STD_LOGIC;2.3.4ieee库预定义数据类型a. 布尔型(boolean)FALSE, TRUE;b. 标准逻辑(std_logic)*标准逻辑类型信号取值范围:'0', '1', 'Z', 'X', ………*例定义三个标准逻辑类型信号x, y, z:signal x, y, z : std_logic;*常量表示:…1‟,…0‟c. 整数类型(integer)取值范围:-2147483647 to 2147483647;定义整数类型的信号时必须明确整数范围,综合工具据此选择BUS位数例:signal num: integer range 0 to 255; ---8位signal num1: integer range 0 to 200; ---8位常量表示:10,-128,0d. 标准逻辑向量(std_logic_vector)定义标准逻辑向量类型的信号时必须明确范围,综合工具据此选择BUS 位数。

例:signal x:std_logic_vector(0 to 7); ---8 BITsignal y,z:std_logic_vector(15 downto 0); ---16 BIT常量表示:“00001010”2.4表达式2.4.1逻辑运算and or nand nor xor not2.4.2关系运算= /= < <= > >=2.4.3算术运算+ - * // : 实际是移位操作,除数只能是2的幂,且只能为正数: 2,4,8,16…。

2.4.4运算优先级2.5语句2.5.1基本概念a.语句以分号“;”号结尾;b.不区分大小写;c.信号赋值:<=d.变量赋值::=2.5.2并行语句2.5.2.1基本概念a.所有并行语句同时执行;b.多重赋值:综合工具处理方式:与门(或门);a<=b;a<=c;依综合工具可能处理为:a<=b and c;a<=b or c;c.并行语句在程序中位置不影响电路的功能。

与非门电路描述2.5.2.2并行信号赋值语句:a. std_logic型信号赋值signal a, b, c : std_logic ;a<=‟1‟;a<=‟Z‟;a<=b xor c;b. std_logic_vector型信号赋值signal b : std_logic_vector(7 downto 0);signal c : std_logic_vector(15 downto 0);b <= ”00000000”;b (7 downto 4) <= ”0010”b (3 downto 0)<=”1010”;b(1) <= …0‟;b <= c(10 downto 3);c <= c+1;c. integer型信号赋值signal x, y, z : integer range 0 to 255;x <= 150 ;z <= x + y ;2.5.2.3条件信号赋值语句a. 语法信号<= 表达式when条件else表达式when条件else………表达式;b. 用途:译码、编码、多路选择等例1:三态门电路signal oe : std_logic ;signal d : std_logic_vector (7 downto 0) ;signal q : std_logic_vector (7 downto 0);q <= d when oe=‟0‟else “ZZZZZZZZ” ;例2:4选1选择器signal q : std_logic ;signal d : std_logic_vector (3 downto 0) ;signal sel : std_logic_vector (1 downto 0) ;q <= d(0) when sel = ”00”elsed(1) when sel = ”01”elsed(2) when sel = ”10”elsed(3);2.5.2.4选择信号赋值语句a. 语法:with选择表达式select信号<= 表达式1 when常量1,………表达式n when 常量n;b. 用途:译码、编码、多路选择等例:3-8译码器(74LS138)signal sa : std_logic_vector (2 downto 0) ;signal cs : std_logic_vector (7 downto 0);with sa selectcs <= "11111110" when "000","11111101" when "001","11111011" when "010","11110111" when "011","11101111" when "100","11011111" when "101","10111111" when "110","01111111" when others;c. 注意事项:必须列出所有选项,最后一项可用others代替所有剩余的项,如上例中的others代替“111”,“00Z”,“ZZZ”,“XXX”,..2.5.2.5process语句a.语法:【标号:】process(敏感表)内部变量定义等;begin顺序语句;end process【标号】;b.敏感表:输入信号列表(会导致process的输出变化的输入信号),或全部输入信号,敏感表只影响仿真,对最后生成的电路无影响。

c. 用途:描述时序(顺序)电路(并行语句描述组合逻辑电路)。

2.5.2.6元件安装语句a. 元件声明component myandport(x1, x2: in std_logic;y: out std_logic);end component;b. 元件安装signal a, b, c, d: std_logic;. . .U1: myand port map(a, d, c); -- positionalU2: myand port map(x1 => c, x2 => b, y => d);-- namedc. 用途:层次化设计,结构描述风格。

2.5.3顺序语句2.5.3.1基本概念a.位于process语句内;b.可描述时序电路和组合逻辑电路;c.电路的功能与语句的顺序有关;d.信号赋值不会立即生效(信号的值在过程process中不会改变);a <= 10;b <= a+1;b的值不一定为11,实际为a进入process之前的值+1。

e. 对信号多重赋值时,以最后一次赋值为有效。

B <= ‟0‟;B <= ‟1‟;b的值为‘1’。

f. 对变量的赋值是立即生效。

a := 10;b <= a+1;b的值为11。

g. 条件分支语句若未包括所有可能的分支,综合工具会生成锁存器(latch)锁存器:if (ld=‟1‟) then q<=d;end if;二选一选择器:if (ld=‟1‟) then q<=d;else q<=c;end if;2.5.3.2顺序赋值语句a.信号赋值:x <= ‟1‟;b.变量赋值:y := ‟1‟;2.5.3.3if条件语句a. 语法If 表达式then 顺序语句;elsif 表达式then 顺序语句;…else 顺序语句;end if;b. 应用例1:R-S触发器if r =‟1‟thenq <= ‟0‟;elsif s=‟1‟thenq <=‟1‟;end if;例2:锁存器latchif ld = ‟0‟thenq <= d;end if;2.5.3.4case语句a. 语法case表达式iswhen常量1 => 顺序语句…when常量n => 顺序语句when others => null;end case;b. 用途:状态机(非周期电路)。