讲稿实验
- 格式:doc
- 大小:638.50 KB
- 文档页数:30
实验一:不同设计输入方式比较1、实验目的(1) 学习MAX+plus II 软件的基本使用方法。
(2) 学习EDA 实验开发系统的基本使用方法。
(3) 掌握VHDL 程序的原理图和文本输入方式。
2、实验内容(1) 原理图输入(mux21.vhd) 方式的2选1多路选择器的设计 (2) 文本编辑输入(mux41.vhd) 方式的4选1多路选择器的设计3、实验要求(1) MAX+plus II 软件画出系统的原理框图,说明系统中各主要组成部分的功能。
(2) 编写VHDL 源程序。
(3) 在MAX+plus II 工具下编译、综合、适配、仿真、实验板上的硬件测试。
(4) 根据EDA 实验开发装置编好用于硬件验证的管脚锁定文件。
(5) 记录系统仿真、硬件验证结果。
(6) 记录实验过程中出现的问题及解决办法。
4、实验步骤1)EDA 设计流程,如图1-1图1-1 EDA 设计流程(1)设计输入:图形方式、HDL 文本方式、混合方式 (2)编译:进行语法排错,形成VHDL 文件格式 (3)逻辑综合:把高级的语言描述转换为低级的硬件基本结构相映射的网表文件。
(4)适配(布局布线):适配器也称结构综合器,把网表文件配置于指定目标器件中,最终产生下载文件。
(5)仿真(模拟)设计输入 功能仿综合器 适配器 下载器 时序仿✧功能仿真:是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,仿真过程不涉及任何具体器件的硬件特性。
如延时特性。
✧时序仿真:选择了具体器件并完成布局布线后的仿真,仿真文件中己包含了器件硬件特性参数,因而,仿真精度高。
(6)下载(编程)把适配后产生的下载文件装入PLD器件的过程叫下载✧对基于EEPROM工艺对CPLD的下载称为编程(Program),✧对FPGA中的SRAM工艺进行直接下载的方式称为配置(Configure)(2) 原理图输入(mux21.vhd) 方式的2选1多路选择器的设计步骤1:输入设计文件和存盘步骤2:将设计项目设置成工程文件(PROJECT)步骤3:选择目标器件并编译步骤4:时序仿真步骤5:引脚锁定步骤6:编程下载(3) 文本编辑输入(mux41.vhd) 方式的4选1多路选择器的设计方法一:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR (1 DOWNTO 0);y:OUT STD_LOGIC);END mux4;ARCHITECTURE rtl OF mux4 ISBEGINPROCESS (input,sel)BEGINIF(sel="00") THENy<= input(0);ELSIF(sel="01")THENy<= input(1);ELSIF(sel="10")THENy<= input(2);ELSEy<= input(3);END IF;END PROCESS;END rtl;方法二:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT(input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR (1 DOWNTO 0);y:OUT STD_LOGIC);END mux41;ARCHITECTURE rtl OF mux41 ISBEGINPROCESS (input,sel)BEGINCASE sel ISWHEN "00" =>y<= input(0);WHEN "01" =>y<= input(1);WHEN "10" =>y<= input(2);WHEN "11" =>y<= input(3);WHEN OTHERS => NULL;END CASE;END PROCESS;END rtl;方法三:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41a ISPORT(input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR (1 DOWNTO 0);y:OUT STD_LOGIC);END mux41a;ARCHITECTURE rtl OF mux41a ISBEGINy<= input(0) WHEN sel="00" ELSEinput(1) WHEN sel="01" ELSEinput(2) WHEN sel="10" ELSEinput(3) ;END rtl;方法四:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41b ISPORT(input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR (1 DOWNTO 0);y:OUT STD_LOGIC);END mux41b;ARCHITECTURE rtl OF mux41b ISBEGINWITH sel SELECTy<= input(0) WHEN "00" ,input(1) WHEN "01",input(2) WHEN "10",input(3) WHEN "11",NULL WHEN OTHERS;END rtl;仿真结果:实验二:VHDL语言编程—组合逻辑电路设计1、实验目的(1) 学习VHDL三种描述风格;(2) 学习元件例化语句的使用方法;(3) 学习VHDL程序层次化设计方法2、实验内容(1) 用元件例化语句,实现1位全加器的层次化设计;(2) 实现4位全加器的设计。
3、实验要求(1) 编写VHDL源程序,用两种以上方法实现四位全加器的设计,其中一种方法用元件例化语句,实现层次化设计。
(2) 在MAX+plus II工具下编译、综合、适配、仿真。
(3) 根据EDA实验开发装置编好用于硬件验证的管脚锁定文件。
(4) 记录系统仿真、硬件验证结果。
(5) 记录实验过程中出现的问题及解决办法。
4、实验原理(一)VHDL语言描述风格VHDL语言是通过结构体具体描述整个设计实体的逻辑功能。
通常结构体有四种不同的描述方式:行为描述方式(behavior)、数据流描述方式(dataflow)或寄存器RTL描述方式、结构化描述方式(structural)以及混合描述方式。
VHDL 通过这四种不同的描述方式从不同的侧面描述结构体的功能。
前三种是最基本的描述方式,他们组合起来就成为混合描述方式。
1)行为描述方式行为描述输入与输出间转换的行为,不需包含任何结构信息,它对设计实体按算法的路径来描述。
行为描述在EDA工程中通常被称为高层次描述,设计工程师只需要注意正确的实体行为、准确的函数模型和精确的输出结果就可以了,无需关注实体的电路组织和门级实现。
2)数据流描述方式数据流描述方式表示行为,也隐含表示结构,它描述了数据流的运动路线、运动方向和运动结果。
3) 结构描述方式结构化描述方式就是在多层次的设计中,高层次的设计可以调用低层次的设计模块,或直接用门电路设计单元来构成一个复杂逻辑电路的方法。
利用结构化描述方法将已有的设计成果方便地用于新的设计中,能大大提高设计效率。
在结构化描述中,建模的焦点是端口及其互连关系。
结构化描述的建模步骤如下: (1)元件说明 (2)元件例化 (3)元件配置元件说明用于描述局部接口;元件例化是要相对于其他元件来放置该元件;元件配置用于指定元件所用的设计实体。
对于一个复杂的电子系统,可以将其分解为若干个子系统,每个子系统再分解成模块,形成多层次设计。
这样,可以使更多的设计者同时进行合作。
在多层次设计中,每个层次都可以作为一个元件,再构成一个模块或系统,可以先分别仿真每个元件,然后再整体调试。
所以说结构化描述不仅是一种设计方法,而且是一种设计思想,是大型电子系统高层次设计的重要手段。
(二)全加器设计加法器分为半加器和全加器两种。
半加器:在两个1位二进制数相加时,不考虑低位来的进位的相加。
✧ 半加器的真值表✧ 逻辑表达式 C = ABB A B A S +=B✧ 逻辑图全加器:在两个二进制数相加时,考虑低位进位的相加。
✧ 全加器逻辑表达式i ii i i C B A ABC C B A C B A C B A S ⊕⊕=+++=iii o )( C B A AB BC A C B A AB C ⊕+=++= ✧ 逻辑图(三)元件例化(COMPONENT )语句元件例化就是引入一种连接关系,是使VHDL 设计实体构成自上而下层次化设计的一种重要途径。
格式:COMPONENT 元件名 --元件定义GENERIC 说明;--参数说明 PORT 说明;--端口说明END COMPONENT ;例化名:元件名 GENERIC MAP (信号,…)PORT MAP (信号,…); --元件例化法1:结构化(层次化)描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY half_adder ISPORT(in1, in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END half_adder;ARCHITECTURE behavioral OF half_adder ISBEGINPROCESS (in1, in2)BEGINsum <= in1 XOR in2;carry <= in1 AND in2; END PROCESS;END behavioral;--------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or_gate ISPORT(in1,in2: IN STD_LOGIC;out1:OUT STD_LOGIC);END or_gate;ARCHITECTURE structural OF or_gate ISBEGINout1 <= in1 OR in2; END structural;--------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder ISPORT(x,y,c_in: IN STD_LOGIC;Sum,c_out: OUT STD_LOGIC);END full_adder;ARCHITECTURE structural OF full_adder ISCOMPONENT half_adderPORT(in1,in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END COMPONENT; --元件说明COMPONENT or_gatePORT(in1, in2: IN STD_LOGIC;out1: OUT STD_LOGIC);END COMPONENT;SIGNAL a, b, c:STD_LOGIC;BEGINu1: half_adder PORT MAP (x, y, b, a); --元件配置u2: half_adder PORT MAP (c_in, b, sum, c);u3: or_gate PORT MAP (c, a, c_out);END structural;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECODER47 ISPORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0 );SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END DECODER47;ARCHITECTURE STR OF DECODER47 ISBEGINSEG<="0111111" WHEN D=0 ELSE"0000110" WHEN D=1 ELSE"1011011" WHEN D=2 ELSE"1001111" WHEN D=3 ELSE"1100110" WHEN D=4 ELSE"1101101" WHEN D=5 ELSE"1111101" WHEN D=6 ELSE"0000111" WHEN D=7 ELSE"1111111" WHEN D=8 ELSE"1101111" WHEN D=9 ELSE"0000000";END STR;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY half_adder ISPORT(in1, in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END half_adder;ARCHITECTURE behavioral OF half_adder ISBEGINPROCESS (in1, in2)BEGINsum <= in1 XOR in2;carry <= in1 AND in2; END PROCESS;END behavioral;-------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or_gate ISPORT(in1,in2: IN STD_LOGIC;out1:OUT STD_LOGIC);END or_gate;ARCHITECTURE structural OF or_gate ISBEGINout1 <= in1 OR in2; END structural;---------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder ISPORT(x,y,c_in: IN STD_LOGIC;Sum,c_out: OUT STD_LOGIC);END full_adder;ARCHITECTURE structural OF full_adder ISCOMPONENT half_adderPORT(in1,in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END COMPONENT; --元件说明COMPONENT or_gatePORT(in1, in2: IN STD_LOGIC;out1: OUT STD_LOGIC);END COMPONENT;SIGNAL a, b, c:STD_LOGIC;BEGINu1: half_adder PORT MAP (x, y, b, a); --元件配置u2: half_adder PORT MAP (c_in, b, sum, c);u3: or_gate PORT MAP (c, a, c_out);END structural;--------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder4 ISPORT(xx,yy: IN STD_LOGIC_VECTOR(3 DOWNTO 0);cc_in: IN STD_LOGIC;SSum: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cc_out: OUT STD_LOGIC);END full_adder4;ARCHITECTURE structural4 OF full_adder4 ISCOMPONENT full_adderPORT(x,y,c_in: IN STD_LOGIC;Sum,c_out: OUT STD_LOGIC);END COMPONENT; --元件说明SIGNAL c:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGINc(0)<=cc_in;fds: FOR i IN 0 TO 3 GENERATEuu: full_adder PORT MAP (xx(i), yy(i), c(i),SSum(i),c(i+1));END GENERATE;cc_out<=c(4); --元件配置END structural4;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY half_adder ISPORT(in1, in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END half_adder;ARCHITECTURE behavioral OF half_adder ISBEGINPROCESS (in1, in2)BEGINsum <= in1 XOR in2;carry <= in1 AND in2; END PROCESS;END behavioral;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or_gate ISPORT(in1,in2: IN STD_LOGIC;out1:OUT STD_LOGIC);END or_gate;ARCHITECTURE structural OF or_gate ISBEGINout1 <= in1 OR in2; END structural;-----------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder ISPORT(x,y,c_in: IN STD_LOGIC;Sum,c_out: OUT STD_LOGIC);END full_adder;ARCHITECTURE structural OF full_adder ISCOMPONENT half_adderPORT(in1,in2: IN STD_LOGIC;sum,carry: OUT STD_LOGIC);END COMPONENT; --元件说明COMPONENT or_gatePORT(in1, in2: IN STD_LOGIC;out1: OUT STD_LOGIC);END COMPONENT;SIGNAL a, b, c:STD_LOGIC;BEGINu1: half_adder PORT MAP (x, y, b, a); --元件配置u2: half_adder PORT MAP (c_in, b, sum, c);u3: or_gate PORT MAP (c, a, c_out);END structural;-----------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder4 ISPORT(xx,yy: IN STD_LOGIC_VECTOR(3 DOWNTO 0);cc_in: IN STD_LOGIC;SSum: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cc_out: OUT STD_LOGIC);END full_adder4;ARCHITECTURE structural4 OF full_adder4 ISCOMPONENT full_adderPORT(x,y,c_in: IN STD_LOGIC;Sum,c_out: OUT STD_LOGIC);END COMPONENT; --元件说明SIGNAL c:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINc(0)<=cc_in;fds: FOR i IN 0 TO 3 GENERATEuu: full_adder PORT MAP (xx(i), yy(i), c(i),SSum(i),c(i+1));END GENERATE;cc_out<=c(4); --元件配置END structural4;--------------------------------------------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECODER47 ISPORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0 );SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END DECODER47;ARCHITECTURE STR OF DECODER47 ISBEGINSEG<="0111111" WHEN D=0 ELSE"0000110" WHEN D=1 ELSE"1011011" WHEN D=2 ELSE"1001111" WHEN D=3 ELSE"1100110" WHEN D=4 ELSE"1101101" WHEN D=5 ELSE"1111101" WHEN D=6 ELSE"0000111" WHEN D=7 ELSE"1111111" WHEN D=8 ELSE"1101111" WHEN D=9 ELSE"0000000";END STR;------------------------------------------------------------------- LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder47 ISPORT(xxx,yyy: IN STD_LOGIC_VECTOR(3 DOWNTO 0);ccc_in: IN STD_LOGIC;SSSum:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SSEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END full_adder47;ARCHITECTURE structural47 OF full_adder47 IS COMPONENT full_adder4PORT(xx,yy: IN STD_LOGIC_VECTOR(3 DOWNTO 0);cc_in: IN STD_LOGIC;SSum: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cc_out: OUT STD_LOGIC);END COMPONENT; --元件说明COMPONENT DECODER47PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0 );SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT; --元件说明SIGNAL s:STD_LOGIC_VECTOR( 3 DOWNTO 0);SIGNAL cq:STD_LOGIC;BEGINuu1: full_adder4 PORT MAP (xxx, yyy,ccc_in,s,cq);uu2: DECODER47 PORT MAP (s,SSEG);--元件配置SSSum<=s;END structural47;法二:混合描述:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full4 IS --4位全加器PORT(A0,A1,A2,A3:IN STD_LOGIC;B0,B1,B2,B3:IN STD_LOGIC;Ci:IN STD_LOGIC;S0,S1,S2,S3:OUT STD_LOGIC;Co:OUT STD_LOGIC);END full4;ARCHITECTURE one OF full4 ISCOMPONENT full --元件例化PORT(a,b,ci:IN STD_LOGIC;s,co:OUT STD_LOGIC);END COMPONENT;SIGNAL D,E,F:std_logic;BEGINU0:full PORT MAP(A0,B0,Ci,S0,D);U1:full PORT MAP(A1,B1,D,S1,E);U2:full PORT MAP(A2,B2,E,S2,F);U3:full PORT MAP(A3,B3,F,S3,Co);END one;LIBRARY IEEE; --1位全加器USE IEEE.STD_LOGIC_1164.ALL;ENTITY full ISPORT(a,b,ci:IN STD_LOGIC;s,co:OUT STD_LOGIC);END full;ARCHITECTURE one OF full ISBEGINs<=a xor b xor ci;co<=(a and b) or (a and ci) or (b and ci); END one;法三:行为描述:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder4bit isport(cin: in std_logic;a,b: in std_logic_vector(3 downto 0);s: out std_logic_vector(3 downto 0);cout: out std_logic );end adder4bit;architecture beh of adder4bit issignal sint: std_logic_vector(4 downto 0);signal aa,bb: std_logic_vector(4 downto 0); beginaa<='0' & a (3 downto 0);bb<='0' & b(3 downto 0);sint<= aa+bb+cin;s(3 downto 0) <= sint (3 downto 0);cout<= sint(4);end beh;实验三:VHDL语言编程—时序逻辑电路设计1、实验目的(1) 学习时序电路VHDL程序描述方式;(2) 学习时序电路特殊信号的描述方法;(3) 学习任意进制计数器的VHDL描述方法。