电子EDA实验报告

更新时间:2024-06-03 18:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《电子EDA技术》

实验报告

题 目:院 (系):专 业:组 长:授课教师:完成日期:实验四

电子EDA技术实验报告 信息科学与技术学院

电子信息工程

2011年09月24日

基于VHDL的触发器与锁存器描述

与设计

一、 实验目的:

1. 初步掌握VHDL语言的基本结构及设计的初步方法。 2. 掌握VHDL语言的时序电路的设计方法。 3. 掌握VHDL语言的基本描述语句的使用方法。

二、 实验原理:

1. 由LIBRARY引导的库的说明部分。 2. 使用了另一种数据类型STD_LOGIC。 3. 定义了一个内部节点信号SIGNAL。

4. 使用一种新的条件判断表达式:CLK′EVENT AND CLK=′1′

三、 实验内容:

1. 运用已学知识,设计边沿型D触发器,给出程序设计、软件编译、仿真分析及详细实验过程。

2. 设计D触发器(电平型触发时序元件),给出程序设计、软件编译、仿真分析及详细实验过程。

3. 分析比较上述两种触发器的仿真的实测结果,说明这两种电路的异同点。

四、 实验设计

VHDL程序:library ieee; use ieee.std_logic_1164.all; entity dff1 is

port(clk,d1:in std_logic;

q1:out std_logic); end;

architecture bhv of dff1 is signal qq:std_logic; begin process(clk,d1) begin

if clk='1' then qq<=d1; end if;

end process; q1<=qq; end;

五.编译仿真截图

六.心得体会

本次实验我们学会了D 触发器的工作原理及结构,在程序编译时出现错误,经过几次反复调试,解决了错误原因。通过实践,我们了解了边沿D触发器的工作原理。了解了VHDL语言的时序电路的设计方法,同时也加 强了动手操作能力,通过一次次的对仿真图编译,查找错误,我们加深了对eda编程的熟悉度,对后期eda 的学习打下了基础

实验五 基于VHDL语言的全加器设计与实现

一、实验目的

1、进一步掌握VHDL语言的几本结构及设计的输入方法。 2、掌握VHDL语言的组合逻辑电路的设计方法。 3、掌握全加器原理,并能进行多位加法器的设计。

4、掌握VHDL语言的基本描述语句特别是元件例化语句的使用方法。

二、实验原理

参考《EDA技术教程》 三、实验内容

1、编写VHDL语言程序实现1位加法器设计,给出程序设计、软件编译、仿真分析及详细实验过程。

2、设计并实现由8个1位二进制加法器级联而成的8位二进制加法器。8位加法器的顶层文件设计要求采用元件例化语句进行实现,并利用Max+PlusII开发软件对其进行编译和仿真。 四、程序 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity adder8b is port(cin:in std_logic;

a,b:in std_logic_vector(7 downto 0); s:out std_logic_vector(7 downto 0); cout:out std_logic);

end adder8b;

architecture behav of adder8b is

signal sint,aa,bb:std_logic_vector(8 downto 0); begin

aa<='0'&a; bb<='0'&b; sint<=aa+bb+cin; s<=sint(7 downto 0); cout<=sint(8); end behav;

library ieee;

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

u1:h_adder port map(a=>ain,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;

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 is begin

so<=not(a xor(not b)); co<=a and b;

end architecture fh1;

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; 五、仿真图

心得体会:本次试验让我们掌握了全加器的原理,最重要的是我们掌握了由8个1位二进制加法器级联成8位二进制加法器的方法。同时学会了VHDL语言的基本描述语句特别是元件例化语句的使用方法。本次试验还算顺利,中间出了点小问题,最后还是在全组的努力下解决了问题。让我们更加懂得合作精神。

实验六 基于VHDL语言的分频设计与实现

一、实验目的

1、进一步掌握VHDL语言的基本结构及设计的输入方法

2、掌握VHDL基本逻辑电路的综合设计应用

二、实验原理

在数字电路系统中,分频电路应用得到十分广泛。例如,工程人

员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。

三、实验内容

1.设计并实现一个6分频电路,要求其输出信号的占空比为50%。请分析分频电路设计原理并编写VHDL语言程序,利用Max*Plus2开发软件对其进行编译和仿真。

2.源代码 library ieee;

use ieee.std_logic_1164.all; --use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity clk_div6 is

port( clk: in std_logic; clk_out: out std_logic); end clk_div6;

architecture rtl of clk_div6 is signal clk_temp: std_logic; begin

process(clk)

variable counter: integer range 0 to 15;

constant md:integer:=2; begin

if clk'event and clk='1' then if counter=md then counter:=0;

clk_temp<=not clk_temp; else

counter:=counter+1; end if; end if; end process; clk_out<=clk_temp; end rtl;

library ieee;

use ieee.std_logic_1164.all; --use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity clk_div16 is

port( clk: in std_logic; clk_out: out std_logic);

end clk_div16;

architecture rtl of clk_div16 is signal clk_temp: std_logic; begin

process(clk)

variable counter: integer range 0 to 15; constant md:integer:=14; begin

if (clk'event and clk='1') then if counter=md or clk_temp='1'then counter:=0;

clk_temp<=not clk_temp; else

counter:=counter+1; end if; end if; end process; clk_out<=clk_temp; end rtl;

四、 运行结果

五、心得体会

在本实验中,由于我们对课本知识了解的不够透彻,对软件认知度不够强,我们遇到了很多的困难, 通过团队协商和老师的帮助指导,最终问题都克服了,本实验我们掌握了vhdl基本逻辑电路的综合设计应 用,看这最终做出的成功,加强了我们对这门课学习的兴趣。

实验七 时序逻辑移位寄存器的设计与

实现

一、 实验目的:

1. 进一步掌握VHDL语言的基本结构机设计的输入方法。 2. 掌握VHDL语言的时序逻辑电路的设计方法。

3. 掌握VHDL语言的基本描述语句特别是元件例化语句的使用方法。

二、 实验原理:

当CLK的上升沿到来时进程被启动,如果这时预置使能LOAD为高电平,则将输入端口的8位二进制数并行置入移位寄存器中,作为串行右移输出的初始值。

三、 实验内容:

1、 设计并实现一个带有同步并行预置功能的8位右移移位寄

存器。要求根据移位寄存器的设计原理编写此移位寄存器的

VHDL语言程序,并利用Max+PlusII开发软件对其进行编译和仿真。

2、 以移位寄存器为底层文件,设计由移位相加原理实现的8

位乘法器。此外,底层文件还应包括选通与门模块、8位加法器模块、16位锁存器模块等。其顶层文件设计要求采用元件例化语句进行实现,并利用Max+PlusII开发软件对其进行编译和仿真。

四、 实验设计

library ieee;

use ieee.std_logic_1164.all; entity sreg8b is

port(clk,load:in std_logic;

din:in std_logic_vector(7 downto 0); qb:out std_logic); end sreg8b;

architecture behav of sreg8b is

signal reg8:std_logic_vector(7 downto 0); begin

process (clk,load) begin

if clk'event and clk='1' then if load='1' then reg8<=din;

else reg8(6 downto 0)<=reg8(7 downto 1); end if; end if; end process; qb<=reg8(0); end behav;

五.编译仿真截图

六.心得体会

通过本实验,我们锻炼了上机实践能力,加强了对课本知识的学习认知,掌握了vhdl语言的时序逻辑电路 的设计方法,掌握了vhdl语言的基本结构设计的输入方法,通过一次次的修改,我们加

深了带有同步并行预置功能的8位右移移位寄存器的工作原理。

实验八 汽车尾灯控制器设计与实现

一、实验目的

1、进一步掌握VHDL语言的基本结构及设计的输入方法

2、掌握自顶向下设计方法 3、掌握层次化设计混合编程方法

二、实验原理

1、假设汽车尾部左右两侧各有3盏指示灯,其控制功能应包括: (1)汽车正常行驶时指示灯都不亮。 (2)汽车右转弯时,右侧的一盏指示灯亮。 (3)汽车左转弯时,左侧的一盏指示灯亮。 (4)汽车刹车时,左右两侧的一盏指示灯同时亮。

(5)汽车在夜间行驶时,左右两侧的一盏指示灯同时一直亮,供照明使用。

三、实验内容

1、根据系统设计要求,系统设计采用自顶向下的设计方法,顶层设

计采用原理图设计方式,它由时钟分频模块、汽车尾灯主控模块、左边灯控制模块和右边灯控制模块四部分组成。系统设计原理图如下图所示:

系统的输入信号包括:系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT。系统的输出信号包括:汽车左侧3盏指示灯LD1,LD2,LD3和汽车右侧3盏指示灯RD1,RD2,RD3.

系统工作原理为:当汽车正常行驶时所有指示灯都不亮;汽车右转弯时,汽车右侧的指示灯RD1亮;汽车左转弯时,左侧的指示灯LD1亮;汽车刹车时,汽车右侧的指示灯RD2和左侧的指示灯LD2同时亮。当汽车在夜间行驶时,汽车右侧的指示灯RD3和左侧的指示灯LD2同时一直亮。 3、 VHDL源代码

(1)时钟分频模块的VHDL源程序(SZ.VHD)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SZ IS

PORT(CLK: IN STD_LOGIC; CP: OUT STD_LOGIC); END ENTITY SZ;

ARCHITECTURE ONE OF SZ IS

SIGNAL COUNT: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN

IF CLK'EVENT AND CLK='1' THEN COUNT<=COUNT+1; END IF; END PROCESS; CP<=COUNT(3);

END ARCHITECTURE ONE;

(2)汽车尾灯主控模块的VHDL源程序(CTRL.VHD)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY CTRL IS

PORT(LEFT,RIGHT,BRAKE,NIGHT: IN STD_LOGIC; LP,RP,LR,BRAKE_LED,NIGHT_LED:OUT STD_LOGIC); END ENTITY CTRL;

ARCHITECTURE ONE OF CTRL IS BEGIN

NIGHT_LED<=NIGHT; BRAKE_LED<=BRAKE; PROCESS(LEFT,RIGHT)

VARIABLE TEMP: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN

TEMP:=LEFT & RIGHT; CASE TEMP IS

WHEN \WHEN \WHEN \WHEN OTHERS => LP<='0'; RP<='0'; LR<='1'; END CASE; END PROCESS;

END ARCHITECTURE ONE;

(3)左边灯控制模块的VHDL源程序(LC.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY LC IS

PORT(CLK,LP,LR,BRAKE,NIGHT: IN STD_LOGIC; LEDL,LEDB,LEDN: OUT STD_LOGIC); END ENTITY LC;

ARCHITECTURE ONE OF LC IS BEGIN LEDB<=BRAKE; LEDN<=NIGHT; PROCESS(CLK,LP,LR) BEGIN

IF CLK'EVENT AND CLK='1' THEN IF(LR='0') THEN IF(LP='0') THEN LEDL<='0'; ELSE LEDL<='1'; END IF; ELSE LEDL<='0'; END IF; END IF; END PROCESS;

END ARCHITECTURE ONE;

(4)左边灯控制模块的VHDL源程序(RC.VHD) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY RC IS

PORT(CLK,RP,LR,BRAKE,NIGHT: IN STD_LOGIC; LEDR,LEDB,LEDN: OUT STD_LOGIC); END ENTITY RC;

ARCHITECTURE ONE OF RC IS BEGIN LEDB<=BRAKE; LEDN<=NIGHT; PROCESS(CLK,RP,LR) BEGIN

IF CLK'EVENT AND CLK='1' THEN IF(LR='0') THEN IF(RP='0') THEN LEDR<='0'; ELSE LEDR<='1'; END IF; ELSE

LEDR<='0'; END IF; END IF; END PROCESS;

END ARCHITECTURE ONE; 5)“与门”控制模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY AND2A IS

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

ARCHITECTURE one OF AND2A IS BEGIN

c <= a AND b ; 6)输出模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY CD IS

PORT (CLK,LEFT,RIGHT,BRAKE,NIGHT : IN STD_LOGIC; LD1,LD2,LD3,RD1,RD2,RD3

:

OUT

( END ARCHITECTURE ONE; (STD_LOGIC );

END ENTITY CD;

ARCHITECTURE ONE OF CD IS COMPONENT LC

PORT(CLK,LP,LR,BRAKE,NIGHT: IN STD_LOGIC; LEDL,LEDB,LEDN: OUT STD_LOGIC); END COMPONENT ; COMPONENT RC

PORT(CLK,RP,LR,BRAKE,NIGHT: IN STD_LOGIC; LEDR,LEDB,LEDN: OUT STD_LOGIC); END COMPONENT; COMPONENT SZ

PORT(CLK: IN STD_LOGIC; CP: OUT STD_LOGIC); END COMPONENT; COMPONENT CTRL

PORT(LEFT,RIGHT,BRAKE,NIGHT: IN STD_LOGIC; LP,RP,LR,BRAKE_LED,NIGHT_LED:OUT STD_LOGIC); END COMPONENT ; COMPONENT AND2A

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

END COMPONENT ;

SIGNAL d,e,f,g,h,i,j,k: STD_LOGIC; BEGIN u1

:

CTRL

PORT

MAP

( LEFT=>LEFT,RIGHT=>RIGHT,BRAKE=>BRAKE,NIGHT=>NIGHT,LP=>g,RP=>h,LR=>i,BRAKE_LED=>j,NIGHT_LED=>k );

u2 : SZ PORT MAP ( CLK => CLK,CP => d);

u3 : LC PORT MAP ( LP=>g,LR=>i,BRAKE=>j,NIGHT=>k, CLK => CLK,LEDL=>e ,LEDB => LD2,LEDN => LD3 );

u4 : RC PORT MAP ( RP=>h,LR=>i,BRAKE=>j,NIGHT=>k,CLK => CLK,LEDR => f,LEDB => RD2,LEDN => RD3 );

u5 : AND2A PORT MAP ( a=>d,b => e,c => LD1 ); u6 : AND2A PORT MAP ( a => d,b=> f,c => RD1); END ARCHITECTURE ONE;

四、 运行结果

五、心得体会

本次试验内容较长,在编译的时候遇到很多困难,经常出错,经

过反复调试,最后还是得到了结果。本次试验我们学会了层次化设计混合编程方法,进一步的了解了自顶向下的设计方法。掌握了在编程时候一些逻辑控制关系。比如汽车尾灯,在某一时刻,只能有一个逻辑关系。虽然遇到困难,但是我们还是有信心去解决困难。

本文来源:https://www.bwwdw.com/article/ep46.html

Top