《VHDL语言》PPT课件.ppt

上传人:san****019 文档编号:20996351 上传时间:2021-04-21 格式:PPT 页数:112 大小:1.48MB
返回 下载 相关 举报
《VHDL语言》PPT课件.ppt_第1页
第1页 / 共112页
《VHDL语言》PPT课件.ppt_第2页
第2页 / 共112页
《VHDL语言》PPT课件.ppt_第3页
第3页 / 共112页
点击查看更多>>
资源描述
3 VHDL语 言VHDL: VHSIC Hardware Description Language.3.1 VHDL语 言 基 础3.2 VHDL基 本 结 构3.3 VHDL语 句3.4 状 态 机 在 VHDL中 的 实 现3.5 常 用 电 路 VHDL程 序3.6 VHDL仿 真3.7 VHDL综 合 HDL-Hardware Description Language 一 种 用 于 描 述 数 字 电 路 的 功 能 或 行 为 的 语 言 。 目 的 是 提 为 电 路 设 计 效 率 , 缩短 设 计 周 期 , 减 小 设 计 成 本 , 可 在 芯 片 制 造 前 进 行 有 效 的 仿 真 和 错 误 检 测 。 优 点 : HDL设 计 的 电 路 能 获 得 非 常 抽 象 级 的 描 述 。 如 基 于 RTL(Register Transfer Level)描 述 的 IC, 可 用 于 不 同 的 工 艺 。 HDL设 计 的 电 路 , 在 设 计 的 前 期 , 就 可 以 完 成 电 路 的 功 能 级 的 验 证 。 HDL设 计 的 电 路 类 似 于 计 算 机 编 程 。 常 用 的 HDL语 言 : VHDL 、 Verilog HDL VHDL是 美 国 国 防 部 在 20世 纪 80年 代 初 为 实 现 其 高 速 集 成 电 路硬 件 VHSIC计 划 提 出 的 描 述 语 言 ; IEEE从 1986年 开 始 致 力 于 VHDL标 准 化 工 作 , 融 合 了 其 它ASIC芯 片 制 造 商 开 发 的 硬 件 描 述 语 言 的 优 点 , 于 93年 形 成 了 标准 版 本 ( IEEE.std_1164) 。 1995年 , 我 国 国 家 技 术 监 督 局 推 荐 VHDL做 为 电 子 设 计 自 动 化硬 件 描 述 语 言 的 国 家 标 准 。 VHDL 概 述 :VHDL VHSIC Hardwarter Description Language Very High speed integrated circuitVHSIC 覆 盖 面 广 , 系 统 硬 件 描 述 能 力 强 , 是 一 个 多 层 次 的 硬 件 描 述 语 言 ; VHDL语 言 具 有 良 好 的 可 读 性 , 既 可 以 被 计 算 机 接 受 , 也 容 易 被 人 们所 理 解 ; VHDL语 言 可 以 与 工 艺 无 关 编 程 ; VHDL语 言 已 做 为 一 种 IEEE的 工 业 标 准 , 便 于 使 用 、 交 流 和 推 广 。 VHDL语 言 的 不 足 之 处 : VHDL优 点 : 设 计 的 最 终 实 现 取 决 于 针 对 目 标 器 件 的 编 程 器 , 工 具 的 不 同 会 导 致 综合 质 量 不 一 样 。 3.1.1 标 识 符 ( Identifiers)要 求 :l 首 字 符 必 须 是 字 母l 末 字 符 不 能 为 下 划 线l 不 允 许 出 现 两 个 连 续 的 下 划 线l 不 区 分 大 小 写l VHDL定 义 的 保 留 字 ( 关 键 字 ) , 不 能 用 作 标 识 符l 标 识 符 字 符 最 长 可 以 是 32个 字 符 。 注 释 由 两 个 连 续 的 虚 线 ( ) 引 导 。 3.1 VHDL语 言 基 础 标 识 符 用 来 定 义 常 数 、 变 量 、 信 号 、 端 口 、 子 程 序 或 参 数 的 名 字 ,由 字 母 ( AZ, az) 、 数 字 ( 09) 和 下 划 线 ( _) 字 符 组 成 。 例 如 : 关 键 字 ( 保 留 字 ) : 关 键 字 ( keyword) 是 VHDL中 具 有 特 别 含 义 的 单 词 , 只能 做 为 固 定 的 用 途 , 用 户 不 能 用 其 做 为 标 识 符 。 3.1.2 数 据 对 象 ( Date Objects) 常 量 ConstantConstant bus_width: integer := 8; -定 义 总 线 宽 度 为 常 数 8 数 据 对 象 包 括 常 量 、 变 量 、 信 号 和 文 件 四 种 类 型 。 常 量 是 对 某 一 常 量 名 赋 予 一 个 固 定 的 值 , 而 且 只 能 赋 值 一 次 。 通 常 赋值 在 程 序 开 始 前 进 行 , 该 值 的 数 据 类 型 则 在 说 明 语 句 中 指 明 。Constant 常 数 名 : 数 据 类 型 : 表 达 式Constant Vcc: real:=5.0; -定 义 Vcc的 数 据 类 型 是 实 数 , 赋 值 为 5.0V 常 量 所 赋 的 值 应 和 定 义 的 数 据 类 型 一 致 ;常 量 在 程 序 包 、 实 体 、 构 造 体 或 进 程 的 说 明 性 区 域 内 必 须 加 以 说 明 。 定 义 在 程 序 包内 的 常 量 可 供 所 含 的 任 何 实 体 、 构 造 体 所 引 用 , 定 义 在 实 体 说 明 内 的 常 量 只 能 在 该实 体 内 可 见 , 定 义 在 进 程 说 明 性 区 域 中 的 常 量 只 能 在 该 进 程 内 可 见 。 Variable 变 量 名 : 数 据 类 型 : 初 始 值 ;Variable count: integer 0 to 255:=20 ; - 定 义 count整 数 变 量 , 变 化 范 围 0 255, 初 始 值 为 20。 变 量 Variable 变 量 只 能 在 进 程 语 句 、 函 数 语 句 和 过 程 语 句 结 构 中 使 用 。 变量 的 赋 值 是 直 接 的 , 非 预 设 的 , 分 配 给 变 量 的 值 立 即 成 为 当 前 值 ,变 量 不 能 表 达 “ 连 线 ” 或 存 储 元 件 , 不 能 设 置 传 输 延 迟 量 。变 量 赋 值 语 句 : 目 标 变 量 名 := 表 达 式 ;变 量 定 义 语 句 :x:=10.0; - 实 数 变 量 赋 值 为 10.0Y:=1.5+x; - 运 算 表 达 式 赋 值 , 注 意 表 达 式 必 须 与 目 标 变 量 的 数 据 类 型 相 同A(3 to 6):=(“1101”); -位 矢 量 赋 值 Signal 信 号 名 : 数 据 类 型 : 初 始 值Signal clock: bit := ; -定 义 时 钟 信 号 类 型 , 初 始 值 为 0 信 号 Signal 信 号 表 示 逻 辑 门 的 输 入 或 输 出 , 类 似 于 连 接 线 , 也 可 以 表 达 存储 元 件 的 状 态 。 信 号 通 常 在 构 造 体 、 程 序 包 和 实 体 中 说 明 。信 号 定 义 语 句 :Signal count: BIT_VECTOR(3 DOWNTO 0); -定 义 count为 4位 位 矢 量信 号 赋 值 语 句 : 目 标 信 号 名 = 表 达 式 ; x=9;Z=x after 5 ns; - 在 5ns后 将 x的 值 赋 予 z 3.1.2 数 据 类 型l 布 尔 : (Boolean)l 位 : ( Bit ) TYPE BIT IS (0,1); -取 值 为 0和 1, 用 于 逻 辑 运 算 l 位 矢 量 : ( Bit_Vector ) TYPE BIT_VECTOR IS ARRAY (Natural range) OF BIT; - 基 于 Bit类 型 的 数 组 , 用 于 逻 辑 运 算 SIGNAL a: Bit_Vector(0 TO 7); SIGNAL a: Bit_Vector ( 7 DOWNTO 0) VHDL的 预 定 义 数 据 类 型 在 VHDL标 准 程 序 包 STANDARD中 定 义 好 , 实 际 使 用 过 程 中 , 已自 动 包 含 进 VHDL源 文 件 中 , 不 需 要 通 过 USE语 句 显 式 调 用 。 TYPE BOOLEAN IS (FALSE, TRUE); - 取 值 为 FALSE和 TRUE, 不 是 数 值 , 不 能 运 算 , 一 般 用 于 关 系 运 算 符 l 整 数 : (Integer) 取 值 范 围 -(231-1) (231-1), 可 用 32位 有 符 号 的 二 进 制 数 表 示 variable a: integer range -63 to 63 在 实 际 应 用 中 , VHDL仿 真 器 将 Integer做 为 有 符 号 数 处 理 , 而VHDL综 合 器 将 Integer做 为 无 符 号 数 处 理 ; 要 求 用 RANGE子 句 为 所 定 义 的 数 限 定 范 围 , 以 便 根 据 范 围 来 决 定 表 示 此信 号 或 变 量 的 二 进 制 数 的 位 数 。 l 字 符 : (Character) TYPE CHARACTER IS (NUL, SOH,STX, , , !,); -通 常 用 引 起 来 , 区 分 大 小 写 ;l 字 符 串 : (String)VARIABLE string_var: STRING (1 TO 7);string_var:=“A B C D” ; - 通 常 用 “ ” 引 起 来 , 区 分 大 小 写 ; l 实 数 : (Real) 取 值 范 围 -1.0E38 +1.0E38, 仅 用 于 仿 真 不 可 综 合 1.0 -十 进 制 浮 点 数 8 43.6 e+4 -八 进 制 浮 点 数 43.6E-4 -十 进 制 浮 点 数l 时 间 : (Time) 物 理 量 数 据 , 完 整 的 包 括 整 数 和 单 位 两 个 部 分 , 用 至 少 一 个 空 格 隔开 , 仅 用 于 仿 真 不 可 综 合 ; fs,ps,ns,us,ms,sec,min,hrl 错 误 等 级 ( Severity Level) : 表 示 系 统 状 态 , 仅 用 于 仿 真 不 可 综 合 ;TYPE severity_level IS (NOTE、 WARNING、 ERROR、 FAILURE); IEEE预 定 义 标 准 逻 辑 位 与 矢 量l 标 准 逻 辑 位 ( Std_Logic)l 标 准 逻 辑 位 矢 量 ( Std_Logic_vector)基 于 Std_Logic类 型 的 数 组 ; 使 用 Std_Logic和 Std_Logic_Vector要 调 用 IEEE库 中 的 Std_Logic_1164 程 序 包 ; 就 综 合 而 言 , 能 够 在 数 字 器 件 中 实 现 的 是 “ 、 0、 1、 Z”四 种 状 态 。 在 条 件 语 句 中 , 必 须 要 全 面 考 虑 Std_Logic的 所 有 可 能 取 值 情 况 , 否 则 综合 器 可 能 会 插 入 不 希 望 的 锁 存 器 。U: Uninitialized; X: Forcing Unkown; 0: Forcing 0 1: Forcing 1 Z: High Impedance W: Weak UnknownL: Weak 0 H: Weak 1 : Dont care 枚 举 : type states is (idle, decision, read, write); type boolean is (false, true); type bit is (0, 1);数 组 : type value_type is array (127 downto 0) of integer; type matrix_type is array (0 to 15, 0 to 31) of std_logic; 用 户 自 定 义l TYPE 数 据 类 型 名 IS 数 据 类 型 定 义 OF 基 本 数 据 类 型 或 TYPE 数 据 类 型 名 IS 数 据 类 型 定 义l SUBTYPE 子 类 型 名 IS 基 本 数 据 类 型 定 义 RANGE 约 束 范 围subtype digit is integer range 0 to 9; 3.1.3 数 据 类 型 转 换VHDL为 强 定 义 类 型 语 言 , 不 同 类 型 的 数 据 不 能 进 行 运 算 和 直 接 赋 值 。l 类 型 标 记 法Variable A: integer; Variable B: real;A= integer (B); B=real (A);l 函 数 法Conv_interger (A); -由 std_logic转 换 为 integer型 , 在 std_logic_unsigned包 。l 常 数 转 换 法 / 常 量 转 换 法 Type conv_table is array(std_logic) of bit;Constant table: conv_table:=(0|L=0, 1|H=1, others=0);Signal a: bit; signal b: std_logic;A=table(b); - 将 std_logic型 转 换 为 bit型 具 有 转 换 表 性 质 的 常 数 在 “ STD_LOGIC_1164”、 “ STD_LOGIC_ARITH”和 “ STD_LOGIC_UNSIGNED”的 程 序 包 中 提 供 的 数 据 类 型 变 换 函 数 。 属 性属 性 提 供 的 是 关 于 信 号 、 类 型 等 的 指 定 特 性 。 event: 若 属 性 对 象 有 事 件 发 生 , 则 生 成 布 尔 值 “ true”, 常 用 来 检 查 时 钟边 沿 是 否 有 效 。上 升 沿 : Clock EVENT AND Clock=1 range: 生 成 一 个 限 制 性 数 组 对 象 的 范 围 left: 生 成 数 据 类 型 或 数 据 子 类 型 的 左 边 界 值 ;right , high, low, lengthrange: “0 to n” ; reverse_range: “ n downto 0” 运 算 符l 算 术 运 算 符 : , , *, / , MOD, REM , SLL , SRL , SLA, SRA , ROL , ROR , *, ABSl 关 系 运 算 符 : , / , , =l 逻 辑 运 算 符 : AND, OR, NAND, NOR, XNOR, NOT, XORl 赋 值 运 算 符 : l 其 他 运 算 符 : , , SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; .a = 10d(1)1 ; - 元 素 与 元 素 并 置 , 并 置 后 的 数 组 长 度 为 4 .IF a d = 101011 THEN . - 在 IF条 件 句 中 可 以 使 用 并 置 符 运 算 符 优 先 级 别逻 辑 、 算 术 运 算 符 ( NOT, *, ABS) 乘 法 运 算 符 ( / , MOD, REM, * ) 正 负 运 算 符 : , , 加 减 、 并 置 运 算 符 : , , - 库 、 程 序 包 的 说 明 调 用 USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS - 实 体 声 明PORT(Clock: IN Std_logic; Clkout: OUT Std_logic);END;ARCHITECTURE Behavior OF FreDevider IS - 结 构 体 定 义SIGNAL Clk:Std_Logic;BEGIN PROCESS(Clock) BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF;END PROCESS;Clkout=Clk;END; VHDL的 基 本 设 计 单 元 结 构 : 程 序 包 说 明 、 实 体 说 明 和 结 构 体 说 明 三 部 分 。 3.2.1 实 体 ( Entity)ENTITY 实 体 名 IS GENERIC( 常 数 名 : 数 据 类 型 : 设 定 值 ) PORT( 端 口 名 1: 端 口 方 向 端 口 类 型 ; 端 口 名 2: 端 口 方 向 端 口 类 型 ; . . 端 口 名 n: 端 口 方 向 端 口 类 型 );END 实 体 名 ; 实 体 描 述 了 设 计 单 元 的 输 入 输 出 接 口 信 号 或 引 脚 , 是 设 计 实 体经 封 装 后 对 外 的 一 个 通 信 界 面 。 ENTITY FreDevider ISPORT(Clock: IN Std_logic; Clokout: OUT Std_logic);END; 实 体 名 最 后 一 条 端 口 声 明 语 句 无 分 号端 口 方 向 端 口 类 型端 口 名 实 体 名 由 设 计 者 自 由 命 名 , 用 来 表 示 被 设 计 电 路 芯 片 的 名 称 ,但 是 必 须 与 VHDL程 序 的 文 件 名 称 相 同 。 要 与 文 件 名 一 致 ; 例 如 : GENERIC( wide: integer:=32) ; -说 明 宽 度 为 32 GENERIC( tmp: integer:=1ns) ; -说 明 延 时 1 ns 类 属 说 明 类 属 为 设 计 实 体 与 外 界 通 信 的 静 态 信 息 提 供 通 道 , 用 来 规定 端 口 的 大 小 、 实 体 中 子 元 件 的 数 目 和 实 体 的 定 时 特 性 等 。格 式 : GENERIC( 常 数 名 : 数 据 类 型 : 设 定 值 ; 常 数 名 : 数 据 类 型 : 设 定 值 ) ; 端 口 方 向 : IN, OUT, INOUT, BUFFER INOUTINOUTBUFFER“OUT”和 “ BUFFER”都 可 定 义 输 出 端 口 ; 若 实 体 内 部 需 要 反 馈 输 出信 号 , 则 输 出 端 口 必 须 被设 置 为 “ BUFFER”, 而 不能 为 “ OUT”。 同 方 向 、 同 类 型 的 端 口 可 放 在 同 一 个 说 明 语 句 中 。ENTITY Full_adder IS PORT( a, b, c: IN BIT; sum, carry: OUT BIT ); END Full_adder; 3.2.2 结 构 体 (Architecture)ARCHITECTURE 结 构 体 名 OF 实 体 名 IS 声 明 语 句 BEGIN 功 能 描 述 语 句END 结 构 体 名 ; 用 于 声 明 该 结 构 体 将 用 到 的 信 号 、 数 据 类 型 、 常 数 、 子 程序 和 元 件 等 。 声 明 的 内 容 是 局 部 的 。具 体 描 述 结 构 体 的 功 能 和 行 为 。 结 构 体 定 义 了 设 计 单 元 具 体 的 功 能 , 描 述 了 该 基 本 设 计 单 元 的行 为 、 元 件 和 内 部 的 连 接 关 系 。 一 个 实 体 可 对 应 多 个 结 构 体 , 每 个 结 构 体 代 表 该 实 体 功 能 的 不 同 实 现 方 案 或 不 同 实 现 方 式 。 同 一 时 刻 只 有 一 个 结 构 体 起 作 用 , 通 过 CONFIGURATION决 定 用 哪 个 结 构体 进 行 仿 真 或 综 合 。 在 结 构 体 描 述 中 , 具 体 给 出 了 输 入 、 输 出 信 号 之 间 的 逻 辑 关 系 。 ARCHITECTURE Behavior OF FreDevider IS - 结 构 体 定 义SIGNAL Clk:Std_Logic; -信 号 声 明BEGIN PROCESS(Clock)BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF;END PROCESS;Clkout=Clk;END; 功 能 描 述 语 句进 程顺 序语 句 3.2.3 库 、 程 序 包 的 调 用LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;LIBRARY 库 名 ;USE 库 名 .程 序 包 名 .项 目 名 ; 调 用 此 程 序 包 中 所 有 的 资 源LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; USE IEEE.Std_Logic_Arith.ALL;USE IEEE.Std_Logic_Unsigned.ALL; 3.3 VHDL语 句3.3.1 并 行 语 句在 结 构 体 中 的 执 行 是 同 时 进 行 , 执 行 顺 序 与 书 写 顺 序 无 关 。 并 行 信 号 赋 值 语 句l 简 单 赋 值 语 句目 标 信 号 名 = 表 达 式 目 标 信 号 的 数 据 类 型 与 右 边 表 达 式 一 致ARCHITECTURE Behavior OF FreDevider IS SIGNAL Clk:Std_Logic;BEGIN PROCESS(Clock)BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF; END PROCESS;Clkout=Clk; l 选 择 信 号 赋 值 语 句WITH 选 择 表 达 式 SELECT赋 值 目 标 信 号 = 表 达 式 1 WHEN 选 择 值 1, 表 达 式 2 WHEN 选 择 值 1, 表 达 式 n WHEN OTHERS; 选 择 值 要 覆 盖 所 有 可 能 情 况 , 若 不 能 一 一 指 定 , 用 OTHERS为 其 他 情况 找 个 出 口 ; 选 择 值 必 须 互 斥 , 不 能 出 现 条 件 重 复 或 重 叠 的 情 况 。 LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY MUX ISPORT( Data0, Data1, Data2, Data3: IN Std_Logic_VECTOR(7 DOWNTO 0); Sel: IN Std_Logic_Vector(1 DOWNTO 0); DOUT: OUT Std_Logic_Vector(7 DOWNTO 0);END;ARCHITECTURE DataFlow OF MUX ISBEGIN WITH Sel SELECT DOUT= Data0 WHEN “00”, Data1 WHEN “01”, Data2 WHEN “10”, Data3 WHEN “11”,“ 00000000” WHEN OTHERS;END; 地 址 选 线 Sel 输 出 DOUT00 Data001 Data110 Data211 Data34X1多 路 选 择 器 l 条 件 信 号 赋 值 语 句赋 值 目 标 信 号 = 表 达 式 1 WHEN 赋 值 条 件 1 ELSE 表 达 式 2 WHEN 赋 值 条 件 2 ELSE 表 达 式 n WHEN 赋 值 条 件 n ELSE 表 达 式 ;各 赋 值 语 句 有 优 先 级 的 差 别 , 按 书 写 顺 序 从 高 到 低 排 列 ;各 赋 值 条 件 可 以 重 叠 。 8输 入 优 先 编 码 器I7I6I5 A2I4 A1I3 A0 I2I1I0高低优先级LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY Priority_Encoder ISPORT( I: IN Std_Logic_VECTOR(7 DOWNTO 0); A: OUT Std_Logic_Vector(2 DOWNTO 0);END;ARCHITECTURE DataFlow OF Priority_Encoder ISBEGIN A=“111” WHEN I(7)=1 ELSE “110” WHEN I(6)=1 ELSE “101” WHEN I(5)=1 ELSE “100” WHEN I(4)=1 ELSE “011” WHEN I(3)=1 ELSE “010” WHEN I(2)=1 ELSE “001” WHEN I(1)=1 ELSE “000” WHEN I(0)=1 ELSE “111”;END; 进 程 语 句l 进 程 本 身 是 并 行 语 句 , 但 内 部 是 顺 序 语 句 ;l 进 程 只 有 在 特 定 的 时 刻 ( 敏 感 信 号 发 生 变 化 ) 才 会 被 激 活 。 进 程 标 号 : PROCESS ( 敏 感 信 号 参 数 表 ) 声 明 区 ; BEGIN 顺 序 语 句 END PROCESS 进 程 标 号 ;在 进 程 中 起 作 用 的 局 部 变 量 一 个 进 程 可 以 有 多 个 敏 感 信 号 , 任一 敏 感 信 号 发 生 变 化 都 会 激 活 进 程 进 程 语 句 定 义 顺 序 语 句 模 块 , 用 于 将 从 外 部 获 得 的 信 号 值 ,或 内 部 的 运 算 数 据 向 其 他 的 信 号 进 行 赋 值 。 l 进 程 的 工 作 原 理 当 某 个 敏 感 信 号 的 值 发 生变 化 时 , 每 个 进 程 语 句 立即 完 成 进 程 内 顺 序 语 句 所定 义 的 功 能 行 为 。执 行 过 程 终 止 顺 序 语 句 所 定 义 的 功能 行 为 的 结 果 可 以 赋 值 给信 号 , 并 通 过 信 号 被 其 他的 进 程 读 取 或 赋 值 。 l 进 程 与 时 钟在 每 个 上 升 沿 启 动 一 次 进 程 ( 执 行 进 程 内 所 有 的 语 句 ) 。上 升 沿 描 述 : Clock EVENT AND Clock=1 下 降 沿 描 述 : Clock EVENT AND Clock=0上 升 沿 描 述 : rising_edge (Clock)下 降 沿 描 述 : falling_edge (Clock) LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT( Clock: IN Std_logic; Clkout: OUT Std_logic);END;ARCHITECTURE Behavior OF FreDevider IS SIGNAL Clk: Std_Logic;BEGIN PROCESS (Clock) 将 时 钟 作 为 进 程 的 敏 感 信 号BEGIN IF rising_edge (Clock) THEN Clk=NOT Clk; 在 时 钟 上 升 沿 执 行 Clk=NOT Clk END IF;END PROCESS;Clkout=Clk;END; LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY Counter ISPORT( RESET: IN Std_Logic; 异 步 复 位 信 号 Clock: IN Std_logic; 时 钟 信 号 NUM: BUFFER Integer RANGE 0 TO 3); 计 数 器 输 出 值END;ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS (RESET, Clock) 将 复 位 、 时 钟 作 为 进 程 的 敏 感 信 号BEGIN IF RESET=1 THEN Num=0; 复 位 时 Num清 0 ELSIF rising_edge (Clock) THEN IF Num=3 THEN Num=0; 如 果 Num 3就 清 0 ELSE Num=Num+1; 否 则 自 加 1 END IF; END IF;END PROCESS;END; 仿 真 波 形 : LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_unsigned.ALL;ENTITY Counter ISPORT( clr : IN Std_Logic; inl: in std_logic_vector(3 downto 0); outl: out std_logic_vector(3 downto 0) 计 数 器 输 出 值);END;ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS (clr, inl) 进 程 的 敏 感 信 号BEGIN IF (clr=1 or inl=“1001”) THEN outl=“0000”; ELSE outl=inl+1; END IF;END PROCESS;END; 重 载 符 号 , 在 库 IEEE.Std_Logic_unsigned中 预 先 声 明 LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_unsigned.ALL;ENTITY Counter ISPORT( clr, clk: IN Std_Logic; cnt: buffer std_logic_vector(3 downto 0) 计 数 器 输 出 值);END;ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS BEGINWait until clkevent and clk=1; IF (clr=1 or cnt=9) THEN cnt=“0000”; ELSE cnt output output output output = s1; END CASE; END IF;END PROCESS;END; l 进 程 注 意 事 项 :l 进 程 本 身 是 并 行 语 句 , 但 内 部 为 顺 序 语 句 ;l 进 程 在 敏 感 信 号 发 生 变 化 时 被 激 活 , 在 使 用 了 敏 感 表 的 进 程 中 不 能含 wait语 句 ;l 在 同 一 进 程 中 对 同 一 信 号 多 次 赋 值 , 只 有 最 后 一 次 生 效 ;l 在 不 同 进 程 中 , 不 可 对 同 一 信 号 进 行 赋 值 ;l 一 个 进 程 不 可 同 时 对 时 钟 上 、 下 沿 敏 感 。l 进 程 中 的 信 号 赋 值 是 在 进 程 挂 起 时 生 效 的 , 而 变 量 赋 值 是 即 时 生 效 。l 相 对 于 结 构 体 而 言 , 信 号 具 有 全 局 性 , 是 进 程 间 进 行 并 行 联 系 的 重 要 途 径 。l 进 程 为 综 合 器 支 持 , 且 其 建 模 方 式 直 接 影 响 仿 真 和 综 合 结 果 , 综 合后 对 应 于 进 程 的 硬 件 结 构 对 进 程 中 所 有 可 读 入 信 号 都 是 敏 感 的 。SIGNAL A,B: Integer RANGE 0 TO 7; : PROCESS (Clock) BEGIN IF rising_edge (Clock) THEN : B=A+1; B连 接 端 口 名 , );要 插 在 电 路 系 统 板 上 的 芯 片 较 大 的 电 路 系 统电 路 板 上 准 备 接 受 芯 片 的 插 座元 件 定义 语 句 元 件 例 化 语 句列 出 对 外 通 信 的 各 端 口 名 当 前 系 统 与 准 备 接入 的 元 件 对 应 端 口 相 连的 通 信 端 口 。名 字 关 联 方 式 : port map语 句 中 位 置 可 以 任 意 ;位 置 关 联 方 式 : 端 口 名 和 关 联 连 接 符 号 可 省 去 , 连接 端 口 名 的 排 列 方 式 与 所 需 例 化 的 元 件 端 口 定 义 中的 端 口 名 相 对 应 。 LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY nd2 ISPORT( a, b: IN Std_Logic; c: out std_logic);END;ARCHITECTURE nd2behv OF nd2 IS BEGIN yc1, c=y, b=d1); 名 字 关 联 方 式u3:nd2 PORT MAP( x, y, c=z1); 混 和 关 联 方 式END; 元 件 例 化 : 1位 二 进 制 全 加 器内 部 端 口外 部 端 口 外 部 端 口内 部 端 口端 口 连 线 3.3.2 顺 序 语 句 顺 序 语 句 仅 出 现 在 进 程 和 子 程 序 中 。 顺 序 语 句 综 合 后 , 映 射 为 实 际 的 门 电 路 , 系 统 一 上 电 , 门 电 路 开 始 工作 。 电 路 可 实 现 逻 辑 上 的 顺 序 执 行 , 实 际 上 所 有 门 电 路 是 并 行 工 作 的 。l 赋 值 语 句l 流 程 控 制 语 句l 空 操 作 语 句l 等 待 语 句 l 子 程 序 调 用 语 句l 返 回 语 句 赋 值 语 句ENTITY TEST_Signal ISPORT( Reset, Clock: IN Std_logic; NumA, NumB: OUT Integer RANGE 0 TO 255);END;ARCHITECTURE TEST OF TEST_Signal IS SIGNAL A, B: Integer RANGE 0 TO 255; BEGIN PROCESS (RESET,Clock) VARIABLE C: Integer RANGE 0 TO 255; BEGIN IF RESET=1 THEN A=0; B=2;C:=0; ELSEIF rising_edge(Clock) THEN C:=C+1;A=C+1;B=A+2; END IF; END PROCESS; Num A=A; NumB=B;END; 流 程 控 制 语 句l IF语 句 :IF 条 件 式 THEN 顺 序 语 句END IF;IF 条 件 式 THEN 顺 序 语 句ELSE 顺 序 语 句END IF; IF 条 件 式 THEN 顺 序 语 句ELSEIF 条 件 式 2 THEN 顺 序 语 句 ELSE 顺 序 语 句END IF; 有 优 先 级 用 IF语 句 描 述 组 合 逻 辑 电 路 时 , 务 必 涵 盖 所 有 的 情 况 , 否 则综 合 后 将 引 入 锁 存 器 !ENTITY Encoder ISPORT( En: IN Std_logic; I: IN Std_logic_Vetor(7 DOWNTO 0); A: OUT Std_logic_Vetor(2 DOWNTO 0); Idle: OUT Std_logic);END;ARCHITECTURE Behavior OF Encoder IS BEGIN PROCESS (En, I)BEGIN IF En=1 THEN IF I(7)=1 THEN A=“111”; Idle=0; ELSIF IF I(6)=1 THEN A=“110”; Idle=0; ELSIF IF I(5)=1 THEN A=“101”; Idle=0; ELSIF IF I(4)=1 THEN A=“100”; Idle=0; ELSIF IF I(3)=1 THEN A=“011”; Idle=0; ELSIF IF I(2)=1 THEN A=“010”; Idle=0; ELSIF IF I(1)=1 THEN A=“001”; Idle=0; ELSIF IF I(0)=1 THEN A=“000”; Idle=0; ELSE A=“000”; Idle b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 顺 序 语 句 ; WHEN 选 择 值 |选 择 值 =顺 序 语 句 ; WHEN OTHERS=顺 序 语 句 ;END CASE;l 选 择 值 不 可 重 复 或 重 叠 ;l 当 CASE语 句 的 选 择 值 无 法 覆 盖 所 有 的 情 况 时 ,要 用 OTHERS指 定 未 能 列 出 的 其 他 所 有 情 况 的 输 出 值 ; LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY MUX ISPORT( Data0, Data1, Data2, Data3: IN Std_Logic_VECTOR(7 DOWNTO 0); Sel: IN Std_Logic_Vector(1 DOWNTO 0); DOUT: OUT Std_Logic_Vector(7 DOWNTO 0);END; ARCHITECTURE DataFlow OF MUX IS BEGIN CASE Sel IS WHEN “00”= DOUT DOUT DOUT DOUT DOUTNULL; END CASE; END IF;END PROCESS; WAIT语 句 在 进 程 或 过 程 中 执 行 到 WAIT语 句 时 , 程 序 将 被 挂 起 , 并 设置 好 再 次 执 行 的 条 件 。WAIT ON 信 号 表 UNTIL 条 件 表 达 式 FOR 时 间 表 达 式 ; WAIT ; 未 设 置 停 止 挂 起 的 条 件 , 表 示 永 远 挂 起 。 WAIT ON 信 号 表 ; 敏 感 信 号 等 待 语 句 , 敏 感 信 号 的 变 化 将 结 束挂 起 , 再 次 启 动 进 程 。 WAIT UNTIL 条 件 表 达 式 ; 条 件 表 达 式 为 中 所 含 的 信 号 发 生 变 化 ,且 满 足 WAIT语 句 所 设 条 件 , 则 结 束 挂 起 , 再 次 启 动 进 程 。 WAIT FOR 时 间 表 达 式 ; 超 时 等 待 语 句 , 从 执 行 当 前 的 WAIT语句 开 始 , 在 此 时 间 段 内 , 进 程 处 于 挂 起 状 态 , 超 过 这 一 时 间 段 后 , 程序 自 动 恢 复 执 行 。 Configuration 配 置 名 of 实 体 名 is 配 置 说 明End 配 置 名 ;3.3.3 配 置 语 句 配 置 主 要 为 顶 层 设 计 实 体 指 定 结 构 体 , 或 为 参 与 例 化 的 元件 实 体 指 定 所 希 望 的 结 构 体 , 以 层 次 方 式 来 对 元 件 例 化 做 结 构配 置 。 Configuration 配 置 名 of 实 体 名 is 配 置 说 明End 配 置 名 ; 为 顶 层 设 计 实 体 指 定 结 构 体Entity nand is port ( a, b: in std_logic; c: out std_logic );End entity nand;Architecture one of nand is begin c=not (a and b);End architecture one;Architecture two of nand is begin cs, b=qf, c=q); u2:nand PORT MAP ( a=q, b=r, c=qf); END rsf; Configuration sel of rs is for rsf for u1,u2:nand use entity work.nand (two);end for;end for;End sel; 为 参 与 例 化 的 元 件 实 体 指 定 所 希 望 的 结 构 体 , 以 层 次 方 式 来 对元 件 例 化 做 结 构 配 置 。 3.4 状 态 机 在 VHDL中 的 实 现3.4.1 Moore 状 态 机 的 VHDL描 述输 出 仅 取 决 于 其 所 处 的 状 态 。 LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset, Clock, DIN : IN Std_Logic; DOUT: OUT Std_Logic_Vetor(2 DOWNTO 0);END;ARCHITECTURE Mooremachine OF Moore ISTYPE State_type IS (S0, S1, S2, S3); 定 义 State_type为 枚 举 型 数 据 类 型SIGNAL State: State_type;BEGINChange_State: PROCESS (Reset, Clock) 时 序 逻 辑 进 程BEGIN IF Reset=1 THEN State=S0; ELSEIF rising_edge(Clock) THEN CASE State IS WHEN S0= IF DIN=1 THEN State=S1; END IF; WHEN S1= IF DIN=1 THEN State=S2; END IF; WHEN S2= IF DIN=1 THEN State=S3; END IF; WHEN S3= IF DIN=1 THEN State=S0; ELSE StateDOUT DOUT DOUT DOUT =“111”; END CASE; END PROCESS;END; 仿 真 波 形 图 : 时 钟 同 步 Moore状 态 机 结 构 图 : LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset,Clock, DIN : in Std_Logic; DOUT: out Std_Logic_Vetor(2 DOWNTO 0) );END;ARCHITECTURE Mooremachine OF Moore IS TYPE State_type IS (S0, S1, S2, S3); SIGNAL PresentState, NextState : State_type; 定 义 状 态 转 换 信 号 BEGINState_Reg: PROCESS (Reset, Clock) 状 态 寄 存 器 BEGIN IF Reset=1 THEN 异 步 复 位 PresentState=S0; ELSEIF rising_edge(Clock) THEN PresentState=NextState; 时 钟 上 升 沿 , 转 换 至 下 一 状 态 END IF; END PROCESS; Change_State:PROCESS (PresentState, DIN) 组 合 逻 辑 进 程BEGIN CASE Present State IS WHEN S0= if DIN=1 then NextState=S1; else NextState=S0; end if; DOUT =“001”; WHEN S1= if DIN=1 then NextState=S2; else NextState=S1; end if ; DOUT =“011”; WHEN S2= if DIN=1 then NextState=S3; else NextState=S2; end if ; DOUT =“101”; WHEN S3= if DIN=1 then NextState=S0; else NextState=S1; end if ; DOUT =“111”; END CASE;END PROCESS;END; 仿 真 波 形 图 : 3.4.2 Mealy 状 态 机 的 VHDL描 述 : 输 出 由 当 前 状 态 与 输 入 共 同 决 定 。 LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY MealyMachine ISPORT( Reset ,Clock,DIN: IN Std_Logic; DOUT: OUT Std_Logic_Vetor(2 DOWNTO 0);END;ARCHITECTURE Statemachine OF MealyMachine ISTYPE State_type IS (S0, S1, S2, S3);SIGNAL State: State_type;BEGINChange_State: PROCESS (Reset, Clock)BEGIN IF Reset=1 THEN State=S0; ELSIF rising_edge(Clock) THEN CASE State IS WHEN S0= IF DIN=1 THEN State=S1; END IF; WHEN S1= IF DIN=1 THEN State=S2; END IF; WHEN S2= IF DIN=1 THEN State=S3; END IF; WHEN S3= IF DIN=1 THEN State=S0; ELSE StateIF DIN=0 THEN DOUT =“000”; ELSE DOUTIF DIN=0 THEN DOUT =“010”; ELSE DOUT IF DIN=0 THEN DOUT =“100”; ELSE DOUT IF DIN=0 THEN DOUT =“110”; ELSE DOUTState=Error; 使 状 态 机 从 未 定 义 的 状 态 跳 转 到 处 理 出 错 情 况 的 状 态 ;l 直 接 回 复 到 其 他 已 设 定 的 状 态 。 3.4.4 状 态 机 设 计 与 寄 存 器l 对 于 所 有 可 能 的 输 入 条 件 , 当 进 程 中 的 输 出 信 号 如 果 没 有 被 完全 地 与 之 对 应 指 定 , 此 信 号 将 自 动 被 指 定 , 即 在 未 列 出 的 条 件 下保 持 原 值 , 这 意 味 着 引 入 了 寄 存 器 。l 在 状 态 机 中 , 如 果 存 在 一 个 或 更 多 的 状 态 没 有 被 明 确 指 定 转 换方 式 , 或 者 对 于 状 态 机 中 的 状 态 值 没 有 规 定 所 有 的 输 出 值 , 就 可能 引 入 寄 存 器 。 计 数 器 : 3.5 常 用 电 路 的 VHDL程 序 比 较 器 : 奇 数 倍 分 频 : 8位 奇 偶 校 验 电 路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT (a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);y: OUT STD_LOGIC);END p_check; ARCHITECTURE opt OF p_check I
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!