您的当前位置:首页正文

eda实验报告

2020-01-31 来源:东饰资讯网
EDA技术与VHDL

实验报告

电气工程系 电子信息工程

实验一:1位全加器设计 实验目的: 1.学习QuartusII9.1集成开发环境的使用方法以及如何建立工程和文件; 2.用原理图输入设计法和VHDL文本输入设计法设计1位全加器; 3.通过电路仿真和硬件验证,进一步了解1位全加器的功能 I113实验内容: 用原理图输入设计法和VHDL文本输入设计法分别设计1位全加器,并下载到CH4实验箱上运行。 实验原理:1位全加器可以由两个半加器和一个或门连接而成,因而可根据半加器的电路(如图3-1所示)或真值表写出或门和半加器的VHDL描述。然后根据图3-2写出全加器的顶层描述。 I113coaband2sonotxnor2a0011b0101so0110co0001 图3-1 半加器h_adder电路图及其真值表 u1h_adderainbincinABcosoedh_adderABu2cosoafbu3or2accoutsumainbincinf_addercoutsum 图3-2 全加器f_adder电路图及其实体模块 实验步骤: 1.打开实验箱电源; 2.输入移位寄存器VHDL程序; 3.点击图标,进行分析和综合; 4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图标,进行编译; 7.下载****.sof配置文件到EP3C16Q240C8中; 1 半加器的vhdl描述有两种,我用的是下面这种,布尔函数描述法: (1)布尔函数描述方法的VHDL源程序如下: LIBRARY IEEE; --半加器描述(1):布尔方程描述方法 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 BEGIN

so <= NOT(a XOR (NOT b)) ; co <= a AND b ; END ARCHITECTURE fh1;

(2)或门逻辑描述:

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 one ;

(3) 1位二进制全加器顶层设计描述:

LIBRARY IEEE; --1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS

PORT (ain,bin,cin : IN STD_LOGIC;

cout,sum : OUT STD_LOGIC ); END ENTITY f_adder;

ARCHITECTURE fd1 OF f_adder IS

COMPONENT h_adder --调用半加器声明语句 PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a

PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT;

SIGNAL d,e,f : STD_LOGIC; --定义3个信号作为内部的连接线。 BEGIN

u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,--例化语句

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;

实验结果:

so=>e);

实验二: 移位寄存器模块

实验目的:

1 设计8位CPU设计中常用的移位寄存器模块 2 用case语句设计并行输入输出的移位寄存器 3 体会信号赋值的特性 实验内容:

编写移位寄存器的 VHDL实现程序;通过电路仿真和硬件验证,进一步了解移位寄存器的功能。 设计原理:

Library IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHIFT IS PORT (CLK,C0 : IN STD_LOGIC; --时钟和进位输入 MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --移位模式控制字 D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

--待加载移位的数据 QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --移位数据输出 CN : OUT STD_LOGIC); --进位输出

END ENTITY;

ARCHITECTURE BEHAV OF SHIFT IS SIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CY : STD_LOGIC ; BEGIN

PROCESS (CLK,MD,C0) BEGIN

IF CLK‘EVENT AND CLK = ’1‘ THEN CASE MD IS

WHEN \"001\" => REG(0) <= C0 ;

REG(7 DOWNTO 1) <= REG(6 DOWNTO 0); CY<=REG(7);

--带进位循环左移 WHEN \"010\" => REG(0) <= REG(7); REG(7 DOWNTO 1) <= REG(6 DOWNTO 0); --自循环左移 WHEN \"011\" => REG(7) <= REG(0);

REG(6 DOWNTO 0) <= REG(7 DOWNTO 1); --自循环右移 WHEN \"100\" => REG(7) <= C0 ;

REG(6 DOWNTO 0) <= REG(7 DOWNTO 1); CY<=REG(0);

--带进位循环右移 WHEN \"101\" => REG(7 DOWNTO 0) <= D(7 DOWNTO 0); --加载待移数 WHEN OTHERS => REG <= REG ; CY <= CY ; --保持 END CASE; END IF;

END PROCESS;

QB(7 DOWNTO 0) <= REG(7 DOWNTO 0); CN <= CY; END BEHAV;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器VHDL程序;

3.点击

图标,进行分析和综合;

--移位后输出

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

实验三:计数器和移位寄存器设计

一 、十进制加法计数器 实验目的:

设计带有异步复位和同步时钟使能的十进制加法计数器。 实验内容:

编写十进制加法计数器的 VHDL实现程序;通过电路仿真和硬件验证,了解变量的使用方法,以及“(OTHERS=>X)”的使用方法。 设计原理:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS

PORT (CLK,RST,EN : IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10;

ARCHITECTURE behav OF CNT10 IS BEGIN

PROCESS(CLK, RST, EN)

VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

IF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

IF EN = '1' THEN --检测是否允许计数(同步使能) IF CQI < 9 THEN CQI := CQI + 1;

--允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零 END IF; END IF; END IF;

IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号 ELSE COUT <= '0'; END IF;

CQ <= CQI; --将计数值向端口输出 END PROCES END behav; 实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图实验结果:

标,进行编译;

1、引脚图:

二、移位寄存器设计 实验目的:

设计带有同步并行预置功能的8位右移移位寄存器。 实验内容:

CLK 是移位时钟信号,DIN是8位并行预置数据端口,LOAD是并行数据预置使能信号,QB是串行输出端口 设计原理: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SHFRT IS -- 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SHFRT;

ARCHITECTURE behav OF SHFRT IS BEGIN

PROCESS (CLK, LOAD)

VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK = '1' THEN

IF LOAD = '1' THEN REG8 := DIN;

--由(LOAD='1')装载新数据 ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF;

QB <= REG8(0); -- 输出最低位 END PROCESS; END behav;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

实验四:七段数码显示译码器和数控分频器设计

一.七段数码显示译码器

实验目的:

学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。 实验内容:

在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例下图所示。

引脚锁定及硬件测试 设计原理:

7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DECL7S IS

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END ;

ARCHITECTURE one OF DECL7S IS BEGIN

PROCESS( A )

BEGIN

CASE A IS

WHEN \"0000\" => LED7S <= \"0111111\" ; WHEN \"0001\" => LED7S <= \"0000110\" ; WHEN \"0010\" => LED7S <= \"1011011\" ; WHEN \"0011\" => LED7S <= \"1001111\" ; WHEN \"0100\" => LED7S <= \"1100110\" ; WHEN \"0101\" => LED7S <= \"1101101\" ; WHEN \"0110\" => LED7S <= \"1111101\" ; WHEN \"0111\" => LED7S <= \"0000111\" ; WHEN \"1000\" => LED7S <= \"1111111\" ; WHEN \"1001\" => LED7S <= \"1101111\" ; WHEN \"1010\" => LED7S <= \"1110111\" ; WHEN \"1011\" => LED7S <= \"1111100\" ; WHEN \"1100\" => LED7S <= \"0111001\" ; WHEN \"1101\" => LED7S <= \"1011110\" ; WHEN \"1110\" => LED7S <= \"1111001\" ; WHEN \"1111\" => LED7S <= \"1110001\" ; WHEN OTHERS => NULL ; END CASE ; END PROCESS ; END ;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

二.数控分频器设计

实验目的:

学习数控分频器的设计、分析和测试方法。。 实验内容:

根据波形图,分析VHDL中的各语句功能、设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图。输入不同的CLK频率和预置值D,给出时序波形。在实验系统上硬验证。

给出不同输入值D时,FOUT输出不同频率

设计原理:

数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS

PORT ( CLK : IN STD_LOGIC;

D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

FOUT : OUT STD_LOGIC ); END;

ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC; BEGIN

P_REG: PROCESS(CLK)

VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK = '1' THEN

IF CNT8 = \"11111111\" THEN CNT8 := D;

--当CNT8计数计满时,输入数据D被同步预置给计 --数器CNT8

FULL <= '1'; --同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; --否则继续作加1计数

FULL <= '0'; --且输出溢出标志信号FULL为低电平 END IF; END IF;

END PROCESS P_REG ; P_DIV: PROCESS(FULL)

VARIABLE CNT2 : STD_LOGIC; BEGIN

IF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2;

--如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = '1' THEN FOUT <= '1'; ELSE FOUT <= '0'; END IF; END IF;

END PROCESS P_DIV ;

END;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

实验五:单进程Moore状态机

实验目的:

测试单进程Moore状态机。 实验内容:

在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出单进程状态机的工作时序,分析本实例VHDL程序。 设计原理:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MOORE1 IS

PORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END MOORE1;

ARCHITECTURE behav OF MOORE1 IS

TYPE ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ;

BEGIN PROCESS(CLK,RST) BEGIN

IF RST ='1' THEN C_ST <= ST0 ; Q<= \"0000\" ; ELSIF CLK'EVENT AND CLK='1' THEN CASE C_ST IS

WHEN ST0 => IF DATAIN =\"10\" THEN C_ST <= ST1 ; ELSE C_ST <= ST0 ; END IF; Q <= \"1001\" ;

WHEN ST1 => IF DATAIN =\"11\" THEN C_ST <= ST2 ; ELSE C_ST <= ST1 ;END IF; Q <= \"0101\" ;

WHEN ST2 => IF DATAIN =\"01\" THEN C_ST <= ST3 ; ELSE C_ST <= ST0 ;END IF; Q <= \"1100\" ;

WHEN ST3 => IF DATAIN =\"00\" THEN C_ST <= ST4 ; ELSE C_ST <= ST2 ;END IF; Q <= \"0010\" ;

WHEN ST4 => IF DATAIN =\"11\" THEN C_ST <= ST0 ; ELSE C_ST <= ST3 ;END IF; Q <= \"1001\" ;

WHEN OTHERS => C_ST <= ST0; END CASE; END IF; END PROCESS;

END behav;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

状态转换图:

实验六:Mealy状态机

实验目的:

测试Mealy状态机。 实验内容:

在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出两个程序实现Mealy状态机的工作时序,分析本实例VHDL程序。 设计原理:

与Moore状态机相比,mealy状态机的输出变化要领先一个周期,即一段输入信号或状态发生变化,输出信号即发生变化。

程序一是两进程Mealy型状态机。

程序二是在程序一的基础上在COM1的进程中增加了一个IF语句,由此产生一个锁存器,Q输出的时序是一致的,没有发生锁存后延时一个周期的现象。

测试两种实现方式的工作时序。 VHDL程序一: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY1 IS

PORT ( CLK ,DATAIN,RESET : IN STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); END MEALY1;

ARCHITECTURE behav OF MEALY1 IS

TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ;

BEGIN

COMREG : PROCESS(CLK,RESET) BEGIN --决定转换状态的进程 IF RESET ='1' THEN STX <= ST0;

ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX IS WHEN st0 => IF DATAIN = '1' THEN STX <= st1; END IF; WHEN st1 => IF DATAIN = '0' THEN STX <= st2; END IF; WHEN st2 => IF DATAIN = '1' THEN STX <= st3; END IF; WHEN st3=> IF DATAIN = '0' THEN STX <= st4; END IF; WHEN st4=> IF DATAIN = '1' THEN STX <= st0; END IF; WHEN OTHERS => STX <= st0; END CASE ; END IF;

END PROCESS COMREG ;

COM1: PROCESS(STX,DATAIN) BEGIN --输出控制信号的进程 CASE STX IS

WHEN st0 => IF DATAIN = '1' THEN Q <= \"10000\" ; ELSE Q<=\"01010\" ; END IF ;

WHEN st1 => IF DATAIN = '0' THEN Q <= \"10111\" ;

ELSE Q<=\"10100\" ; END IF ; WHEN st2 => IF DATAIN = '1' THEN Q <= \"10101\" ;

ELSE Q<=\"10011\" ; END IF ;

WHEN st3=> IF DATAIN = '0' THEN Q <= \"11011\" ; ELSE Q<=\"01001\" ; END IF ; WHEN st4=> IF DATAIN = '1' THEN Q <= \"11101\" ;

ELSE Q<=\"01101\" ; END IF ; WHEN OTHERS => Q<=\"00000\" ; END CASE ;

END PROCESS COM1 ; END behav;

实验步骤:

1.打开实验箱电源;

2.输入移位寄存器V HDL程序;

3.点击

图标,进行分析和综合;

4. 建立波形文件,进行功能仿真; 5.按接线图配置FPGA引脚; 6.点击图

标,进行编译;

7.下载****.sof配置文件到EP3C16Q240C8中; 实验结果:

因篇幅问题不能全部显示,请点此查看更多更全内容