文档视界 最新最全的文档下载
当前位置:文档视界 › 专用集成电路实验报告

专用集成电路实验报告

专用集成电路实验报告
专用集成电路实验报告

《专用集成电路》

实验报告

姓名

专业通信工程

班级

学号

指导教师

实验一开发平台软件安装与认知实验

一、实验目的

1、了解Xilinx ISE 9.2/Quartus II软件的功能。

2、掌握Xilinx ISE 9.2/Quartus II的VHDL输入方法。

3、掌握Xilinx ISE 9.2/Quartus II的原理图文件输入和元件库的调用方法。

4、掌握Xilinx ISE 9.2/Quartus II软件元件的生成方法和调用方法。

5、掌握Xilinx ISE 9.2/Quartus II编译、功能仿真和时序仿真。

6、掌握Xilinx ISE 9.2/Quartus II原理图设计、管脚分配、综合与实现、数据流下载方法。

7、了解所编电路器件资源的消耗情况。

二、实验用到的软件和器件

计算机、Quartus II软件或xilinx ISE

三、实验内容:

1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的

VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx 公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。

2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2

软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。

四、实验步骤:

1、三线八线译码器(LS74138)VHDL电路设计

(1)三线八线译码器(LS74138)的VHDL源程序的输入

(2)设计文件存盘与语法检查

(3)仿真文件设计

(4)芯片管脚定义

(5)编译与综合

(6)编程下载

2、元件的生成、调用和仿真

五、实验原理

VHDL源程序

process(g1,g2,inp)

begin

if((g1 and g2)='1') then

case inp is

when "000"=>y<="00000001";

when "001"=>y<="00000010";

when "010"=>y<="00000100";

when "011"=>y<="00001000";

when "100"=>y<="00010000";

when "101"=>y<="00100000";

when "110"=>y<="01000000";

when "111"=>y<="10000000";

when others=>y<="00000000";

end case;

else

y<="00000000";

end if;

end process;

测试向量参考程序

uut: ls74138 PORT MAP(

G1 => G1,

G2 => G2,

INP => INP,

Y => Y

);

-- *** Test Bench - User Defined Section *** u1:PROCESS

BEGIN

G1<='0';

wait for 10 us;

G1<='1';

wait for 90 us;

G1<='0';

wait;

END PROCESS u1;

u2:PROCESS

BEGIN

G2<='0';

wait for 10 us;

G2<='1';

wait for 90 us;

G2<='0';

wait;

END PROCESS u2;

u3:PROCESS

BEGIN

INP<="000";

wait for 20 us;

INP<="001";

wait for 10 us;

INP<="010";

wait for 10 us;

INP<="011";

wait for 10 us;

INP<="100";

wait for 10 us;

INP<="101";

wait for 10 us;

INP<="110";

wait for 10 us;

INP<="111";

wait;

end PROCESS u3;

六、实验结果

上图中,g1和g2为两个使能控制信号,inp为命令码输入信号,y为8位译码输出信号。,当g1与g2均为高电平时,译码器正常工作,译码如上。

生成元件图

实验二组合逻辑电路的VHDL语言实现

一、实验目的:

1、掌握VHDL语言设计基本单元及其构成

2、掌握用VHDL语言设计基本的组合逻辑电路的方法。

3、掌握VHDL语言的主要描述语句。

二、实验器材:

计算机、Quartus II软件或Xilinx ISE

三、实验内容:以下三个内容选择两个完成

用VHDL语言实现八位加法器的设计并实现功能仿真。

四、实验步骤:

(一)用VHDL语言实现八位加法器的设计并实现功能仿真。

1、完成1位全加器设计,在Xilinx ISE软件平台上完成设计电路的VHDL文本输入,编辑,编译,仿真,管脚分配和编程下载

等操作。下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。

2、用实验内容1所设计的全加器的VHDL文件生成一个adder的元件,在Xilinx ISE软件原理图设计平台上完成adder元件的

调用,用原理图的方法设计一个8位二进制加法器,实现编译,仿真,管脚分配和编程下载等操作。

原理:全加器是带进位信号的加法器,其逻辑表达式为:

carryin

dataB

dataA

Sum+

+

=。它的真值表如表1所

示,其中dataA和dataB为加数与被加数,carryin是输入的进位位信号,而Sum是和数,carryout是输出进位位信号。参考真值表,实现八位全加器的功能。

表1

(二)用实验内容1所设计的全加器的VHDL文件生成一个adder的元件,在Xilinx ISE软件原理图设计平台上完成adder元件的调用,用原理图的方法设计一个8位二进制加法器。

(三)用VHDL语言实现优先编码器的设计并实现功能仿真

五、实验原理

VHDL源程序

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- Uncomment the following lines to use the declarations that are

-- provided for instantiating Xilinx primitive components.

--library UNISIM;

--use UNISIM.VComponents.all;

entity adder is

Port ( a : in std_logic;

b : in std_logic;

cin : in std_logic;

sum : out std_logic;

cout : out std_logic);

end adder;

architecture Behavioral of adder is

begin

sum <= (a xor b) xor cin;

cout <= (a and b) or (cin and a) or (cin and b);

end Behavioral;

测试向量程序

uut: adder PORT MAP(

a => a,

b => b,

cin => cin,

sum => sum,

cout => cout

);

u1: PROCESS

BEGIN

a<='0';

wait for 10 us;

a<='1';

wait for 20 us;

a<='0';

wait for 10 us;

a<='1';

wait for 10 us;

a<='0';

wait for 20 us;

a<='1';

wait for 10 us;

a<='0';

wait for 10 us; a<='1';

wait;

END PROCESS u1; u2:process

begin

b<='1';

wait for 10 us;

b<='0';

wait for 10 us;

b<='1';

wait for 10 us;

b<='0';

wait for 10 us;

b<='1';

wait for 20 us;

b<='0';

wait for 10 us;

b<='1';

wait for 10 us;

b<='0';

wait for 20 us;

b<='1';

wait;

END PROCESS u2; u3: process

begin

cin<='0';

wait for 40 us;

cin<='1';

wait for 20 us;

cin<='0';

wait;

end process u3;

六、实验结果与分析

2.1原件连接图

实验三时序逻辑电路的VHDL语言实验

一、实验目的:

1、掌握用VHDL语言设计基本的时序逻辑电路及仿真。

2、掌握VHDL顺序语句和并行语句的异同

3、掌握触发器同步复位和异步复位的实现方式。

4、掌握软件时钟的加入方法。

5、掌握信号和变量的主要区别。

二、实验器材:

计算机、Quartus II软件或xilinx ISE

三、实验内容:

设计一带使能的同步复位清零的递增8位二进制计数器

设计一带使能的异步清零复位的递增8位二进制计数器

四、实验步骤:

五、实验原理

参考程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity ycounter is

port(clk,clear,ld,enable:in std_logic;

d:in std_logic_vector(7 downto 0);

qk:out std_logic_vector(7 downto 0));

end ycounter;

architecture a_ycounter of ycounter is

begin

PROCESS (clk)

VARIABLE cnt :std_logic_vector(7 downto 0);

BEGIN

IF (clk'EVENT AND clk = '1') THEN

IF(clear = '0') THEN

cnt := "00000000";

ELSE

IF(ld = '0') THEN

cnt := d;

ELSE

IF(enable = '1') THEN

cnt := cnt + "00000001";

END IF;

END IF;

END IF;

END IF;

qk <= cnt;

END PROCESS;

end a_ycounter;

测试向量

-- VHDL Test Bench Created from source file ycounter.vhd -- 16:50:55 03/24/2008

-- Notes:

-- This testbench has been automatically generated using types std_logic and

-- std_logic_vector for the ports of the unit under test. Xilinx recommends

-- that these types always be used for the top-level I/O of a design in order

-- to guarantee that the testbench will bind correctly to the post-implementation

-- simulation model.

--

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.numeric_std.ALL;

ENTITY ycounter_a_ycounter_vhd_tb IS

END ycounter_a_ycounter_vhd_tb;

ARCHITECTURE behavior OF ycounter_a_ycounter_vhd_tb IS COMPONENT ycounter

PORT(

clk : IN std_logic;

clear : IN std_logic;

ld : IN std_logic;

enable : IN std_logic;

d : IN std_logic_vector(7 downto 0);

qk : OUT std_logic_vector(7 downto 0)

);

END COMPONENT;

constant clk_cycle: time:=20 us;

SIGNAL clk : std_logic;

SIGNAL clear : std_logic;

SIGNAL ld : std_logic;

SIGNAL enable : std_logic;

SIGNAL d : std_logic_vector(7 downto 0);

SIGNAL qk : std_logic_vector(7 downto 0);

BEGIN

uut: ycounter PORT MAP(

clk => clk,

clear => clear,

ld => ld,

enable => enable,

d => d,

qk => qk

);

-- *** Test Bench - User Defined Section *** u1 : PROCESS

BEGIN

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait for clk_cycle/2;

clk<='0';

wait for clk_cycle/2;

clk<='1';

wait ;

END PROCESS u1;

u2: process

begin

clear<='0';

wait for clk_cycle;

clear<='1';

wait;

end process;

u3: process

begin

ld<='1';

wait for clk_cycle*6;

ld<='0';

wait ;

end process u3;

u4: process

begin

enable<='1';

wait ;

end process u4;

u5: process

begin

d<="00001111";

wait;

end process u5;

-- *** End Test Bench - User Defined Section *** END behavior;

六、实验结果与分析

波形仿真图

同步清零

由图可看出,同步清零时,在有效时钟即时钟上升沿来临时才清零。

由图可以看出,当异步清零端置零时,计数器立即清零。

原件图

七、预习与思考:

思考:VHDL语言中信号和变量有什么区别?

区别如下:

1)信号赋值至少要有δ延时;而变量赋值没有。

2)信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。

3)进程对信号敏感而不对变量敏感。

4)信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。

5)信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。

变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。

实验四 VHDL层次化设计方法实验

一、实验目的:

1、掌握用VHDL语言层次化设计的基本方法。

2、掌握GENERATE语句的用法。

二、实验器材:

计算机、Quartus II软件或xilinx ISE

三、实验内容:

设计一个8位移位寄存器。各个D触发器模块采用VHDL语言编写,分别用原理图、VHDL语言元件例化语句和生成语句的方法实现8位移位寄存器的设计。

四、实验步骤:

(一)、在原理图中调用VHDL生成的D触发器模块实现8位移位寄存器的设计

1、在xilinx ISE环境中新建vhdl文本编辑文件,设计带清零端的D触发器并编译仿真。

2、将步骤1所设计的D触发器生成一个元件。

3、新建原理图文件,调用步骤2所生成的D触发器元件,在原理图中实现8位移位寄存器。

(二)、用VHDL的COMPONENT语句调用VHDL生成的D触发器模块实现8位异步计数器设计。

1、在xilinx ISE环境中新建vhdl文本编辑文件,设计带清零端的D触发器并编译仿真。

2、在同一个程序中用COMPONENT语句实现8位移位寄存器的设计。

(三)、新建原理图文件,调用步骤1所生成的D触发器元件,在原理图中实现8位异步计数器元件例化语句调用D触发器模块实现8位移位寄存器参考源程序

(四)、测试向量设计

五、实验原理

D触发器参考源程序

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- Uncomment the following lines to use the declarations that are

-- provided for instantiating Xilinx primitive components.

--library UNISIM;

--use UNISIM.VComponents.all;

entity Dchu is

Port ( CLK : in STD_LOGIC;

D : in STD_LOGIC;

Q : out STD_LOGIC;

CLEAR : in STD_LOGIC;

Q_N : out STD_LOGIC);

end Dchu;

ARCHITECTURE BEH OF Dchu IS

SIGNAL Q1:STD_LOGIC;

BEGIN

PROCESS (CLEAR,CLK,Q1)

BEGIN

IF CLEAR='0'

THEN Q1<='0';

ELSIF CLK'EVENT AND CLK='1'

THEN Q1<=D;

END IF;

END PROCESS;

Q<=Q1;

Q_N<=not Q1;

END BEH;

D触发器测试向量程序如下:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.numeric_std.ALL;

ENTITY dff_dff_vhd_tb IS

END dff_dff_vhd_tb;

ARCHITECTURE behavior OF dff_dff_vhd_tb IS COMPONENT dff

PORT(

d : IN std_logic;

clear: in std_logic;

clk : IN std_logic;

q : OUT std_logic;

q_n: out std_logic

);

END COMPONENT;

SIGNAL d : std_logic;

signal clear: std_logic;

SIGNAL clk : std_logic;

SIGNAL q : std_logic;

signal q_n: std_logic;

BEGIN

uut: dff PORT MAP(

d => d,

clear=>clear,

clk => clk,

q => q,

q_n=> q_n

);u1: PROCESS

BEGIN

clk<='0';

wait for 10us;

clk<='1';

wait for 10us;

clk<='0';

wait for 10us;

clk<='1';

wait for 10us;

clk<='0';

wait for 10us;

clk<='1';

wait for 10us;

clk<='0';

wait for 10us;

clk<='1';

wait for 10us;

clk<='0';

wait for 10us;

clk<='1';

wait;

end process u1;

u2: process

begin

d<='0';

wait for 30us;

d<='1';

wait for 50us;

d<='0';

wait ;

end process u2;

u3: process

begin

clear<='1';

wait for 70us;

clear<='0';

wait for 20us;

clear<='1';

wait ;

end process u3;

-- *** End Test Bench - User Defined Section *** END behavior;

六、实验结果与分析

波形仿真

由波形文件可以看出,输入信号在随着时钟信号向右移,每一个时钟信号上升沿来临时,输入波形右移一位,共移8位。

原件连接图

相关文档