eda的几个实验仿真图形

更新时间:2024-03-19 23:26:01 阅读量: 综合文库 文档下载

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

实验项目一:74LS318译码器的设计

实验目的:

1、通过一个简单的三-八译码器的设计,让学生掌握组合逻辑电路的设计方法。 2、掌握组合逻辑电路的静态测试方法。

3,初步了解QUARTUS II原理图输入设计的全过程。

二、实验的硬件要求:

1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:DIP拨码开关3位、输出:LED灯;

2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可);

3、计算机与QUARTUS 软件;

三、实验原理

三-译码器为三输入、八输出。当输入信号按二进制方式的表示值为N时(输入端低电平有效),输出端从零到七,标号为N输出端输出低电平表示有信号产生,而其它则为高电平表示无信号产生。因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为低电平的情况下,能表示所有的输入组合,因此不需要像编码器实验那样再用一个输出端指示输出是否有效。但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。

输入 A2 0 0 0 0 1 1 1 1 A1 0 0 1 1 0 0 1 1 A0 0 1 0 1 0 1 1 表8.1三-八译码器真值表

输出 Y7 0 0 0 0 0 0 0 1 Y6 0 0 0 0 0 0 1 0 Y5 0 0 0 0 0 1 0 0 Y4 Y3 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 Y2 0 0 1 0 0 0 0 0 Y1 0 1 0 0 0 0 0 0 Y0 1 0 0 0 0 0 0 0

四、实验步骤:

打开QUARTUS II,打开原理图编辑器,按图8.26进行原理图设计。各逻辑符号放置在原理图上后,经检查保存原理图。完成了原理图的输入后,我们就可以用前面介绍的软件的使用方法,对程序进行管脚的定义、编译、仿真、下载,完成整个实验的设计。

1、三一八译码器设计的代码: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY decoder_3_8 IS

PORT(A,B,C,G1,G2A,G2B:IN STD_LOGIC; y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END decoder_3_8;

ARCHITECTURE rtf OF decoder_3_8 IS

signal input:STD_LOGIC_VECTOR(2 downto 0); BEGIN

input<=C&B&A;

process(input,G1,G2A,G2B) BEGIN

IF(G1='1' AND G2A='0' AND G2B='0')then case input IS

WHEN \WHEN \WHEN \WHEN \WHEN \WHEN \WHEN \WHEN \

WHEN others=>y<=\END case; else

y<=\END if;

END process; END rtf;

1、保存该代码将出现下图

继续

2、检查该代码是否正确。即将出现

3进行波形的描述

打开管脚

画出波形

进行功能仿真得下图

再进行时序仿真

实验二:触发器的功能模拟

一、实验目的:

1、掌握触发器功能的测试方法。

2、掌握基本RS触发器的组成及工作原理。 3、掌握集成JK触发器和逻辑功能及触发方式。

4、掌握几种主要触发器之间相互转换的方法。

5、通过实验,体会CPLD、FPGA芯片的高集成度和多I/O口。

二、硬件要求:

1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:时钟源,按键开关,拨码开关,输出:LED灯;

2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可); 3、计算机与QUARTUS 软件;

三、实验内容:

分别用“图形输入法”、“代码输入法”将基本RS触发器,同步RS触发器,集成J-K触发器,D触发器同时集成在一个FPGA芯片中模拟其功能,并研究其相互转化的方法。

实验的具体实现要连线测试。

四、实验原理图

实验代码:

library ieee;

use ieee.std_logic_1164.all; entity mff is

port(sd,rd,r,s,clk,j,k,d:in std_logic;

qrs,nqrs,qrsc,nqrsc,qjk,nqjk,qd,nqd:out std_logic); --定义多触发器I/O. end mff;

architecture mff of mff is

signal qtp, qbtp,dd,ndd: std_logic; begin

rsff:process(rd,sd) --基本RS触发器功能模拟 begin

if rd='0' and sd='1' then qrs<='0';nqrs<='1';

elsif rd='1' and sd='0' then qrs<='1';nqrs<='0';

elsif rd='1' and sd='1' then null; end if;

end process rsff;

rsc:process(clk,rd,sd,r,s) --同步RS触发器功能模拟 begin

if sd='0' then

qrsc<='1'; nqrsc<='0';

elsif rd='0' then qrsc<='0'; nqrsc<='1'; elsif clk='1' then if r='0' and s='1' then

qrsc<='0';nqrsc<='1';

elsif r='1' and s='0' then

qrsc<='1';nqrsc<='0';

elsif r='0' and s='0' then null; end if; end if;

end process rsc;

jk:PROCESS(clk, sd, rd, j, k) --JK触发器功能模拟 BEGIN IF sd='0' then qtp<='1'; qbtp<='0';

elsif rd='0' THEN qtp<='0';qbtp<='1'; elsif rising_edge(clk) then

if j='0' and k='0' then null; elsif j='0' and k='1' then qtp<='0'; qbtp<='1';

elsif j='1' and k='0' then qtp<='1'; qbtp<='0';

else

qtp<=NOT qtp; qbtp<=NOT qbtp; end if; end if;

qjk<=qtp;nqjk<=qbtp; end process jk;

dff:process (clk,rd,sd,d) --D触发器功能模拟

begin

if (rd='0') then dd<='0'; ndd<='1';

elsif(sd='0') then dd<='1'; ndd<='0';

elsif rising_edge(clk) then dd<=d; ndd<=not d; end if;

qd<=dd; nqd<=ndd; end process dff; end mff;

基本RS触发器仿真波形

同步RS触发器的仿真波形

JK触发器的波形

D触发器功能仿真波形

实验三:带进制的计数器的设计

一、实验目的:

1、掌握带进制的的计数器设计方法。

2、掌握实现带计数、译码、显示功能数字系统架构方法。 3、掌握QUARTUS Ⅱ代码设计输入方法设计的全过程。

二、实验的硬件要求:

1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:时钟源,输出:数码管 ;

2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可);

3、计算机与QUARTUS 软件;

三、实验原理:

计数最高值都受计数器输出位数的限制,当位数改变时,计数最高值也会发生改变。如对于8位计数器,其最高计数值为“11111111”,即每计255个脉冲后就回到“00000000”;

而对于16位计数器,其最高计数值为“FFFFH”,每计65535个时钟脉冲后就回到“0000H”。

如果需要计数到某特定值时就回到初始计数状态,则用以上程序就无法实现,这就提出了设计某个进制的计数器的问题。本例设计了一个六十进制的计数器,为使该程序更具代表性,还增加了一些控制功能。

一个同步清零、使能、同步预置数的六十进制计数器应具备的脚位有: 时钟输入端:clk;

计数输出端:bcd10[2..0], bcd1[3..0]; 进位输入输出端:cin,co;

加载控制端:bcd1wr,bcd10wr; 加载数据输入:datain[3..0]。

计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数字运算等。计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。计数器分同步计数器和异步计数器两种。所谓同步计数器,就是在时钟脉冲(计数脉冲)的控制下,构成计数器的各触发器状态同时发生变化的那一类计数器。

六十进制计数器 众所周知,用一个4位二进制计数器可构成1位十进制计数器,而2位十进制计数器连接起来可以构成一个六十进制的计数器。六十进制计数器常用于时钟计数。一个六十进制计数器的外部端口示意图如图8.31所示。在该六十进制计数器的电路中,BCD1WR和BCD10WR与DATAIN配合,以实现对六十进制计数器的个位和十位值的预置操作。应注意,在对个位和十位进行预置操作时,DATAIN输入端是公用的,因而个位和十位的预置操作必定要串行进行。 CLKBCD1WRBCD10WRCINDATAIN[3..0]BCD60COUNTCOBCD1[3..0]BCD10[2..0]8.31六十进制计数器外部端口示意图

实验代码:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter60 IS

PORT(CLK,BCD1WR,BCD10WR,CIN:STD_LOGIC; CO:OUT STD_LOGIC;

DATAIN:IN STD_LOGIC_VECTOR (3 DOWNTO 0); BCD1:OUT STD_LOGIC_VECTOR (3 DOWNTO 0); BCD10:OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END counter60;

ARCHITECTURE RTL OF counter60 IS

SIGNAL BCD1N:STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL BCD10N:STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN

BCD1<=BCD1N; BCD10<=BCD10N;

PROCESS (CLK,BCD1WR) --个位数处理进程

BEGIN IF (BCD1WR='1') THEN BCD1N<=DATAIN;

ELSIF (CLK'EVENT AND CLK='1') THEN IF (CIN='1') THEN IF (BCD1N=9) THEN BCD1N<=\ ELSE

BCD1N<=BCD1N+1; END IF; END IF; END IF;

END PROCESS;

PROCESS (CLK,BCD10WR) --十位数处理进程 BEGIN

IF (BCD10WR='1') THEN

BCD10N<=DATAIN (3 DOWNTO 0);

ELSIF (CLK'EVENT AND CLK='1') THEN IF (CIN='1' AND BCD1N=9) THEN IF (BCD10N=5) THEN BCD10N<=\ ELSE

BCD10N<=BCD10N+1; END IF; END IF; END IF;

END PROCESS;

PROCESS (BCD10N,BCD1N,CIN) --进位位处理进程 BEGIN

IF (CIN='1' AND BCD1N=9 AND BCD10N=5) THEN CO<='1'; ELSE

CO<='0'; END IF;

END PROCESS;

library ieee;

use ieee.std_logic_1164.all;

entity disp is

port(d:in std_logic_vector(3 downto 0); q:out std_logic_vector(6 downto 0)); end disp;

architecture disp_arc of disp is begin process(d) begin case d is

when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others=>q<=\ end case; end process; end disp_arc;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux2 IS

PORT(a,b:IN STD_LOGIC(6 downto 0); sel:IN STD_LOGIC;

c:OUT STD_LOGIC(6 downto 0));

END mux2;

ARCHITECTURE example OF mux2 IS BEGIN

PROCESS(sel) BEGIN IF(SEL='1')THEN

c<=a;

ELSE

c<=b;

END IF; END PROCESS; END example; 波形仿真:

实验四:半整数分频器的设计

一、实验目的:

1、掌握半整数分频器的VHDL设计原理与方法;

2、掌握在QUARTUS Ⅱ中进行简单数字系统设计的全过程;

二、实验的软硬件要求:

1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:时钟源 ; 2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可); 3、计算机与QUARTUS 软件;

三、实验原理:

1、小数分频的基本原理

设有一个5 MHz的时钟源,但电路中需要产生一个2 MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。

采用可编程逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。

小数分频的基本原理为脉冲吞吐计数法:设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。例如设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为

(9×10+1×11)/(9+1) =10.1

从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的

信号抖动较大。

当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。

2 、电路组成

设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、一个二分频器和一个异或门组成,如图8.34所示。在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。

fo异或门模N计数器 f0/(N-0.5)二分频器f0(2N-1)

图8.34 通用半整数分频器

实验代码:LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY deccount IS PORT (

inclk: IN STD_LOGIC;

--时钟源

--预置分频值N --输出时钟

preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); outclk1: OUT STD_LOGIC;

outclk2: BUFFER STD_LOGIC ); END deccount;

ARCHITECTURE deccount_arch OF deccount IS SIGNAL clk, divide2: STD_LOGIC;

SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

clk<=inclk XOR divide2; outclk1<=inclk; PROCESS(clk)

BEGIN

IF(clk'event AND clk='1') THEN IF(count=\count<=preset-1; --置整数分频值N outclk2<='1'; ELSE

count<=count-1; outclk2<='0'; END IF; END IF;

END PROCESS; PROCESS(outclk2)

--模N计数器减法计数

--inclk与divide2异或后作为模N计数器的时钟

BEGIN

IF(outclk2'event AND outclk2='1') THEN

divide2<=NOT divide2; --输出时钟二分频 END IF; END PROCESS; END deccount_arch;

功能仿真波形

时序仿真波形

再进行管脚设置和下载。

实验5:音乐发生器的设计。

一:实验目的

1、了解普通扬声器的工作原理

2、使用FPGA产生不同的音乐频率 3、进一步体验FPGA的灵活性 二、硬件要求

1、EDA200试验箱

2、主芯片:EP1K10TC100-3 3、J计算机与QUARTUS软件 三、实验原理。

1、乐曲的发声原理:组成乐曲的2个基本要素是:每个音符的发音频率值极其持续的时间(节奏)。一般人能听到声音的频率范围约在几十到几千赫兹,可以利用程序控制FPGA某个引脚输出一定的频率的矩形波,接上扬声器后就能发出相应的频率的声音,演奏某个音符的音调,同时,若能控制每个音符的持续时间,也就控制了乐曲的节奏,因此只要控制输出到扬声器的信号频率的高低以及每个信号的持续时间长短,即可以实现乐曲的演奏。 2、音符的产生:音符的产生是利用计数对输入的时钟信号进行分频,然后输出不同的频率来控制扬声器发不同的声音。计数器必须是摸可以变的计数器,也就是其初始计数值可变,这样便可以对其进行初始化,使其从不同的初始值开始计数,实现对输入时钟信号的不同分

频。

3、节拍的产生:节拍也是利用计数器来实现,如果某一个音符需要维持的时间比较长,那么就可以在此计数器值A到计数器值B之间都维持该音符,很显然,A和B之间的间隔越大,那么该音符维持的时间也就越长。

4、音符的存储:乐谱是一个固定的组合电路,根据不同的输入值,然后输出一个固定的值,该值就是音符产生计数器的分频初始值。 四、实验内容及步骤。

1、编写音乐发生器的VHDL代码 2、用QUARTUSⅡ进行编译仿真 3、、、、 4、、、

梁祝音乐发生器的代码是: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY song IS PORT(

clk_4MHz,clk_4Hz: IN STD_LOGIC; --预置计数器和乐谱产生器的时钟 digit: BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0); --高、中、低音数码管指示 zero:OUT STD_LOGIC_VECTOR(4 DOWNTO 0); speaker: out STD_LOGIC

); END song;

ARCHITECTURE song_arch OF song IS

SIGNALdivider,origin:STD_LOGIC_VECTOR(12 DOWNTO 0); --13位计数值和预置值 SIGNAL counter:integer range 0 to 140; --7位计数器 SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL carrier:STD_LOGIC; BEGIN

zero<=\PROCESS(clk_4MHz)

BEGIN

IF(clk_4MHz'event AND clk_4MHz='1') THEN IF(divider=\ carrier<='1';

divider<=origin; ELSE

divider<=divider+'1'; carrier<='0'; END IF; END IF; END PROCESS;

PROCESS(carrier) BEGIN

IF(carrier'event AND carrier='1') THEN

--记录1/4拍

--用于数码管高位置低 --扬声器

count<=count+'1'; IF count=\ speaker<='1'; ELSE

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

PROCESS(clk_4Hz) BEGIN

--输出时钟四分频

IF(clk_4Hz'event AND clk_4Hz='1') THEN IF(counter=140) THEN counter<=0; ELSE

counter<=counter+1; END IF;

END IF;

CASE counter IS

WHEN 0=>digit<=\

WHEN 1=>digit<=\

WHEN 3=>digit<=\WHEN 5=>digit<=\WHEN 7=>digit<=\WHEN 9=>digit<=\WHEN 11=>digit<=\WHEN 13=>digit<=\WHEN 15=>digit<=\WHEN 17=>digit<=\

WHEN 2=>digit<=\WHEN 4=>digit<=\WHEN 6=>digit<=\WHEN 8=>digit<=\WHEN 10=>digit<=\WHEN 12=>digit<=\

WHEN 14=>digit<=\ WHEN 16=>digit<=\

WHEN 18=>digit<=\ WHEN 19=>digit<=\ WHEN 20=>digit<=\ WHEN 21=>digit<=\WHEN 22=>digit<=\ WHEN 23=>digit<=\

WHEN 24=>digit<=\ WHEN 26=>digit<=\ WHEN 28=>digit<=\ WHEN 30=>digit<=\ WHEN 32=>digit<=\ WHEN 34=>digit<=\ WHEN 36=>digit<=\ WHEN 38=>digit<=\ WHEN 40=>digit<=\

WHEN 25=>digit<=\WHEN 27=>digit<=\WHEN 29=>digit<=\WHEN 31=>digit<=\WHEN 33=>digit<=\WHEN 35=>digit<=\WHEN 37=>digit<=\WHEN 39=>digit<=\WHEN 41=>digit<=\WHEN 43=>digit<=\WHEN 45=>digit<=\WHEN 47=>digit<=\WHEN 49=>digit<=\WHEN 51=>digit<=\

WHEN 42=>digit<=\ WHEN 44=>digit<=\

WHEN 46=>digit<=\ WHEN 48=>digit<=\ WHEN 50=>digit<=\

WHEN 52=>digit<=\ WHEN 54=>digit<=\WHEN 56=>digit<=\WHEN 58=>digit<=\WHEN 60=>digit<=\

WHEN 53=>digit<=\WHEN 55=>digit<=\WHEN 57=>digit<=\WHEN 59=>digit<=\WHEN 61=>digit<=\WHEN 63=>digit<=\WHEN 65=>digit<=\WHEN 67=>digit<=\WHEN 69=>digit<=\WHEN 71=>digit<=\WHEN 73=>digit<=\WHEN 77=>digit<=\WHEN 79=>digit<=\WHEN 81=>digit<=\WHEN 83=>digit<=\WHEN 85=>digit<=\WHEN 87=>digit<=\WHEN 89=>digit<=\WHEN 91=>digit<=\WHEN 93=>digit<=\

WHEN 62=>digit<=\ WHEN 64=>digit<=\

WHEN 66=>digit<=\ WHEN 68=>digit<=\ WHEN 70=>digit<=\

WHEN 72=>digit<=\

WHEN 74=>digit<=\ WHEN 75=>digit<=\

WHEN 76=>digit<=\ WHEN 78=>digit<=\ WHEN 80=>digit<=\ WHEN 82=>digit<=\ WHEN 84=>digit<=\ WHEN 86=>digit<=\ WHEN 88=>digit<=\ WHEN 90=>digit<=\ WHEN 92=>digit<=\

WHEN 94=>digit<=\ WHEN 95=>digit<=\ WHEN 96=>digit<=\ WHEN 97=>digit<=\ WHEN 98=>digit<=\ WHEN 99=>digit<=\WHEN 100=>digit<=\

WHEN 102=>digit<=\WHEN 104=>digit<=\WHEN 106=>digit<=\WHEN 108=>digit<=\WHEN 110=>digit<=\WHEN 112=>digit<=\WHEN 114=>digit<=\WHEN 116=>digit<=\WHEN 118=>digit<=\WHEN 120=>digit<=\WHEN 122=>digit<=\WHEN 124=>digit<=\

WHEN 126=>digit<=\ WHEN 128=>digit<=\

WHEN 130=>digit<=\WHEN 132=>digit<=\WHEN 134=>digit<=\WHEN 136=>digit<=\WHEN 138=>digit<=\

WHEN others=>digit<=\

END CASE;

CASE digit IS

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN others=>origin<=\ END CASE; END PROCESS;

END song_arch; 编译

--2124 --3089

--3646 --4141

--4369 --4786

--5157 --5640 --5918 --6280 --8191

仿真波形:

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

Top