vhdl设计初步 原理图输入与 vhdl文本输入设计的区
v原 理 图 输 入 与 VHDL文 本 输 入 设 计 的 区 别Graphic is what you draw is what you getv“ tell me what hardware you want and I will give it to you”VHDL is what you write is what functional you getv“ tell me how your circuit should behave and the VHDL compiler will give you the hardware that does the job”v but the designer can not control how the circuit implement 什 么 是 VHDL? Very high speed integrated H ardware Description Language (VHDL)是 IEEE、 工 业 标 准 硬 件 描 述 语 言用 语 言 的 方 式 而 非 图 形 等 方 式 描 述 硬 件 电 路v容 易 修 改v容 易 保 存特 别 适 合 于 设 计 的 电 路 有 :v复 杂 组 合 逻 辑 电 路 , 如 : 译 码 器 、 编 码 器 、 加 减 法 器 、 多 路 选 择 器 、地 址 译 码 器 . v状 态 机v等 等 . VHDL的 功 能 和 标 准v VHDL 描 述输 入 端 口输 出 端 口电 路 的 行 为 和 功 能vVHDL有 过 两 个 标 准 :IEEE Std 1076-1987 (called VHDL 1987)IEEE Std 1076-1993 (called VHDL 1993) 【 例 5-1】ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ;END ENTITY mux21a ;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 实 体 结 构 体5.1 多 路 选 择 器 VHDL描 述5.1.1 2选 1多 路 选 择 器 的 VHDL描 述 5.1.1 2选 1多 路 选 择 器 的 VHDL描 述【 例 5-2】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGINd = a AND (NOT S) ;e = b AND s ;y = d OR e ; END ARCHITECTURE one ;【 例 5-3】 . . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one; 5.1.1 2选 1多 路 选 择 器 的 VHDL描 述【 例5-4】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ;END IF; END PROCESS; END ARCHITECTURE one ; 5.1.1 2选 1多 路 选 择 器 的 VHDL描 述图 5-3 mux21a功 能 时 序 波 形 5.1.2 VHDL相 关 语 句 说 明1. 实 体 表 达ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name;或 :ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END e_name; 5.1.2 VHDL相 关 语 句 说 明2. 实 体 名3. PORT语 句 和 端 口 信 号 名4. 端 口 模 式5. 数 据 类 型 BIT INOUT INOUT BUFFER 5.1.2 VHDL相 关 语 句 说 明6. 结 构 体 表 达ARCHITECTURE arch_name OF e_name IS (说 明 语 句)BEGIN (功 能 描 述 语 句)END ARCHITECTURE arch_name ;或 :ARCHITECTURE arch_name OF e_name IS (说 明 语 句)BEGIN (功 能 描 述 语 句)END arch_name ;7. 信 号 传 输 (赋 值 )符 号 和 数 据 比 较 符 号 8. 逻 辑 操 作 符 AND、 OR、 NOT9. IF_THEN条 件 语 句10. WHEN_ELSE条 件 信 号 赋 值 语 句赋 值 目 标 = 表 达 式 WHEN 赋 值 条 件 ELSE 表 达 式 WHEN 赋 值 条 件 ELSE . 表 达 式 ;11. PROCESS进 程 语 句 和 顺 序 语 句12. 文 件 取 名 和 存 盘 5.1.3 VHDL设 计 的 基 本 概 念 和 语 句 小 节数 据 类 型 信 号 赋 值 符 条 件 比 较 符 延 时实 体 结 构 体 端 口 定 义 端 口 模 式逻 辑 操 作 符 IF条 件 语 句 并 行 条 件 语 句 进 程 语 句顺 序 语 句 并 行 语 句 文 件 取 名 文 件 存 盘 5.2 寄 存 器 描 述 及 其 VHDL语 言 现 象5.2.1 D触 发 器 的 VHDL描 述【 例 5-9】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类 似 于 在 芯 片 内 部 定 义 一 个 数 据 的 暂 存 节 点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将 内 部 的 暂 存 数 据 向 端 口 输 出 END PROCESS ; END bhv; D触 发 器 比 较 用 4种 不 同 语 句 的 D触 发 器 VHDL程 序Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process;end test1_body; LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q = d; end if;end process;end test1_body; Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk, d)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end body;Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end body; 用 VHDL设 计 4位 计 数 器 AB 01010 101 取 整 数 数 据 类 型 , 为 什 么 ?整 数 取 值 范 围端 口 信 号 模 式 取BUFFER, 为 什 么 ? 注 意 整 数 和 位 的 不 同 表 达 方 式 ! 修 改 后 的 程 序 运 算 符 加 载注 意 , 信 号端 口 模 式 和数 据 类 型 的改 变 ! 注 意 , 引进 内 部 信号 矢 量 ! 4位 锁 存 器组 合 电 路 加 1器 锁 存 信 号 输 出 反 馈 用 VHDL设 计 7段 16进 制 译 码 器用 CASE语 句 完 成 真 值 表 的 功 能 向 7段 数 码管 输 出 信 号 ,最 高 位 控 制小 数 点 注 意 , 此 语 句 必 须 加 入4位 加 法计 数 器7段 译 码 器8位 总 线 输 出 信号输出 数 据 对 象 : 信 号 Signal 和 变 量 Variablev Signal Assignment receive the assign value after a period of timev Variable Assignment happens immediately when the statement is executed, no delayRepresent Circuit Represent local storageInterconnectGlobal Scope (anywhere) Local Scope(inside process) Updated at end of PROCESS Updated Immediately(new value not available) (new value available) SIGNALS VARIABLES UTILITY: SCOPE:BEHAVIOR: 例 1 四 选 一 多 路 选 择 器 设 计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISsignal muxval : integer;BEGINprocess(i0,i1,i2,i3,a,b)begin muxval = 0;if (a = 1) then muxval = muxval + 1;end if;if (b = 1) then muxval q q q q null;end case;end process; END body_mux4;Why ? LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISBEGINprocess(i0,i1,i2,i3,a,b)variable muxval : integer range 0 to 3;beginmuxval := 0;if (a = 1) then muxval := muxval + 1;end if;if (b = 1) then muxval := muxval + 2;end if; case muxval is when 0 = q q q q null;end case;end process; END body_mux4; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a,b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder IBEGIN so = (a OR b)AND(a NAND b); co = NOT( a NAND b); END ARCHITECTURE fh1;例 2 一 位 全 加 器 设 计1位 二 进 制 半 加 器 1位 二 进 制 全 加 器 内 部 端 口外 部 端 口 端 口 连 线 5.2.2 D触 发 器 VHDL描 述 的 语 言 现 象 说 明1. 标 准 逻 辑 位 数 据 类 型 STD_LOGICBIT数 据 类 型 定 义 : TYPE BIT IS(0,1);STD_LOGIC数 据 类 型 定 义 :TYPE STD_LOGICIS(U,X,0,1,Z,W,L,H,-);STD_LOGIC所 定 义 的 9种 数 据 的 含 义 是 : U表 示 未 初 始 化 的 ; X表 示 强 未 知 的 ; 0 表 示 强 逻 辑 0; 1 表 示 强 逻 辑 1; Z表 示 高 阻 态 ; W 表 示 弱 未 知 的 ; L表 示 弱 逻 辑 0; H表 示 弱 逻 辑 1; - 表 示 忽 略 。 2. 设 计 库 和 标 准 程 序 包3. SIGNAL信 号 定 义 和 数 据 对 象【 例 5-10】ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = D ; END IF; END PROCESS ;END ;使 用 库 和 程 序 包 的 一 般 定 义 表 式 是 : LIBRARY ; USE .ALL ; 5.2.2 D触 发 器 VHDL描 述 的 语 言 现 象 说 明4. 上 升 沿 检 测 表 式 和 信 号 属 性 函 数 EVENT 关 键 词 EVENT是 信 号 属 性 , VHDL通 过 以 下 表 式 来 测 定 某 信 号 的 跳 变边 沿 : EVENT5. 不 完 整 条 件 语 句 与 时 序 电 路【 例 5-11】ENTITY COMP_BAD IS PORT( a1 : IN BIT;b1 : IN BIT;q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END 5.2.3 实 现 时 序 电 路 的 VHDL不 同 表 达 方 式【 例 5-13】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确 保CLK的 变 化 是 一 次 上 升 沿 的 跳 变 END IF; END PROCESS ;【 例 5-14】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同 例5-13 THEN Q = D ; END IF; END PROCESS ; 【 例 5-15】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - CLK的 数 据 类 型 必 须 是STD_LOGIC THEN Q1 = D ; END IF; Q = Q1 ; END PROCESS ; END ; 【 例 5-16】 . PROCESS BEGIN wait until CLK = 1 ; -利 用wait语 句 Q = D ; END PROCESS;【 例 5-17】. PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ;-利 用 进 程 的 启 动 特 性 产 生 对CLK的 边 沿 检 测 END IF; END PROCESS ; 【 例 5-18】. PROCESS (CLK,D) BEGIN IF CLK = 1 -电 平 触 发 型 寄 存 器 THEN Q = D ; END IF; END PROCESS ; 图 5-7 边 沿 型 触 发 器 时 序 波 形图 5-8 电 平 触 发 型 寄 存 器 的 时 序 波 形 5.2.4 异 步 时 序 电 路 设 计【 例 5-19】. ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1 = NOT (Q2 OR A); END IF; END PROCESS ;PRO2:PROCESS (Q1) BEGIN IF Q1EVENT AND Q1=1 THEN Q2 = D; END IF; QQ = Q2 ; END PROCESS ; 图 5-9 例 5-19综 合 的 电 路 5.2.5 VHDL设 计 基 本 概 念 和 语 言 现 象 小 节 数 据 类 型数 据 对 象 信 号 属 性时 钟 检 测VHDL库 程 序 包时 序 电 路 异 步 时 序 5.3 1位 二 进 制 全 加 器 的 VHDL设 计图 5-10半 加 器 h_adder电 路 图 图 5-11 全 加 器 f_adder电 路 图 5.3.1 半 加 器 描 述 和 CASE语 句absoco0000011010101101表 5-1 半 加 器 h_adder逻 辑 功 能 真 值 表1. CASE语 句 CASE语 句 的 一 般 表 式 是 :CASE ISWhen = ; . ; ; When = ; . ; ;.END CASE ; 2. 标 准 逻 辑 矢 量 数 据 类 型 STD_LOGIC_VECTOR3. 并 置 操 作 符 以 下 是 一 些 并 置 操 作 示 例 :SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; .a = 10d(1)1 ; - 元 素 与 元 素 并 置 , 并 置 后 的 数 组 长 度 为4 .IF a d = 101011 THEN . - 在 IF条 件 句 中 可 以 使 用 并 置 符 在 使 用 STD_LOGIC_VECTOR中 , 必 须 注 明 其 数 组 宽 度 , 即 位 宽 , 如 : B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4) 【 例 5-20】 LIBRARY IEEE ;-或 门 逻 辑 描 述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c = a OR b ; END ARCHITECTURE fu1; 【 例 5-21】LIBRARY IEEE; -半 加 器 描 述(1)USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1; 【 例 5-22】LIBRARY IEEE; -半 加 器 描 述 (2)USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ;BEGIN abc so=0; co so=1; co so=1; co so=0; co NULL ; END CASE; END PROCESS;END ARCHITECTURE fh1 ; 【 例 5-22】 . -半 加 器 描 述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc = a co = cso(1) ; so cso cso cso csoain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1; 5.3.2 全 加 器 描 述 和 例 化 语 句 元 件 例 化 语 句 由 两 部 分 组 成 , 第 一 部 分 是 对 一 个 现 成 的 设 计 实 体 定义 为 一 个 元 件 , 语 句 的 功 能 是 对 待 调 用 的 元 件 作 出 调 用 声 明 , 它 的 最简 表 达 式 如 下 所 示 : COMPONENT 元 件 名 IS PORT (端 口 名 表) ; END COMPONENT 文 件 名 ; 元 件 例 化 语 句 的 第 二 部 分 则 是 此 元 件 与 当 前 设 计 实 体 (顶 层 文 件 )中元 件 间 及 端 口 的 连 接 说 明 。 语 句 的 表 达 式 如 下 : 例 化 名 : 元 件 名 PORT MAP( 端 口 名 = 连 接 端 口 名 ,.); STEP1: 建 立 工 作 库 文 件 夹 STEP2: 输 入 设 计 项 目原 理 图 /VHDL文 本 代 码 STEP3: 存 盘 , 注 意 原 理 图 /文 本 取 名 STEP4: 将 设 计 项目 设 置 成 Project STEP11: 硬 件 测 试 STEP8: 仿 真 测 试 和 波 形 分 析 STEP7: 建 立 仿真 波 形 文 件 STEP6:启 动 编 译STEP5: 选择 目 标 器 件STEP10: 编 程 下 载 /配 置 STEP9: 引 脚锁 定 并 编 译VHDL文 本 输 入 设 计 流 程 5.4 VHDL文 本 输 入 设 计 方 法 初 步 为 设 计 全 加 器新 建 一 个 文件 夹 作 工 作 库 文 件 夹 名 取 为My_prjct注 意 , 不 可用 中 文 ! 编 辑 输 入 并 保 存 VHDL源 文 件 新 建 一 个 设计 文 件 使 用 文 本 输 入 方法 设 计 , 必 须 选 择打 开 文 本 编 辑 器 在 文 本 编 辑 窗 中 输 入 VHDL文 件 并 存 盘文 本 编 辑 窗 用 键 盘 输 入 设 计文 件 : 多 路 选 择 器 存 盘 文 件 名 必 须取 为 : mux21a.vhd 注 意 , 要 存 在自 己 建 立 的文 件 夹 中 文 件 存 盘 后 ,关 键 词 将 改 变颜 色 ! 否 则 文件 名 一 定 有 错 ! 将 当 前 设 计 设 定 为 工 程首 先 点 击 这 里 然 后 选 择 此 项 ,将 当 前 的 原 理 图设 计 文 件 设 置 成工 程 最 后 注 意 此 路径 指 向 的 改 变 注 意 , 此 路 径 指向 当 前 的 工 程 ! 首 先 选 择 这 里器 件 系 列 选 择窗 , 选 择 ACEX1K系 列 根 据 实 验 板 上 的目 标 器 件 型 号 选择 , 如 选 EP1K30注 意 , 首 先 消 去这 里 的 勾 , 以 便使 所 有 速 度 级 别的 器 件 都 能 显 示出 来 选 择 编 译 器 编 译 窗 选 择 VHDL文 本 编 译 版 本 号 和 排 错 选 择 此 项选 择 VHDL1993项 选 择 此 项 消 去 这 里 的 勾 编 译 出 错 ! 打 开 错 误 提 示 窗 错 误 所 在错 误 所 在 改 正 错 误 完 成 编 译 ! 首 先 选 择 此 项 ,为 仿 真 测 试 新建 一 个 文 件 时 序 仿 真 选 择 波 形编 辑 器 文 件 从 SNF文 件 中输 入 设 计 文 件的 信 号 节 点 点 击 “ LIST” SNF文 件 中的 信 号 节 点 用 此 键 选 择 左 窗中 需 要 的 信 号进 入 右 窗最 后 点 击 “ OK” 消 去 这 里 的 勾 ,以 便 方 便 设 置输 入 电 平在 Options菜 单 中 消 去 网 格 对 齐 Snap to Grid的 选 择 (消 去 对 勾 ) 选 择 END TIME调 整 仿 真 时 间区 域 。 选 择 65微 秒比 较 合 适 用 此 键 改 变 仿 真区 域 坐 标 到 合 适位 置 。点 击 1 , 使 拖 黑的 电 平 为 高 电 平 先 点 击 b, 将 其点 为 黑 色然 后 先 点 击 此 处将 弹 出 时 钟 周 期设 置 窗 设 置 输 入 信 号 b的 周 期 为 800ns 设 置 输 入 信 号 a的 周 期 为 2us 仿 真 波 形 文 件存 盘 ! 选 择 仿 真 器 运 行 仿 真 器 mux21a仿 真 波 形 选 择 引 脚锁 定 选 项 引 脚 窗 此 处 输 入信 号 名 此 处 输 入引 脚 名 按 键“ ADD”即 可注 意 引 脚 属 性错 误 引 脚 名 将无 正 确 属 性 ! 再 编 译 一 次 ,将 引 脚 信 息进 去 选 择 编 程 器 ,准 备 将 设 计好 的 半 加 器文 件 下 载 到 目器 件 中 去 编 程 窗 在 编 程 窗 打 开的 情 况 下 选 择下 载 方 式 设 置 选 择 此 项 下载 方 式 下 载 ( 配 置 )成 功 !