范文一:eda实验
1位全减器的 VHDL 设计
实验目的:1. 熟悉 Quartus Ⅱ和 GW48EDA 开发系统的使用
2. 掌握一位半减器的 VHDL 设计
3. 掌握一位半减器构建一位全减器的方法
4. 掌握元件例化语句的使用
设计提示:
表 1 一位半减器真值表
由表 1得一位半减器的逻辑表达式:
y out s
y
x
x
y
diff =⊕
=
+
=_
表 2 一位全减器真值表
由表二得全减器的逻辑表达式:
) (
_
_
)
(
_y
x
in
sub
out
sub
y
x
in
sub
diffr ⊕
?
+
=
⊕
⊕
=
由以上分析可得出结论:一位全减器可由两个半减器和一个或门构成一个全减器,如图 6所示。
图 6 一位全减器
要求全部用 VHDL 语句进行设计, 可用 CASE 语句来描述半减器, 用元件调用语句、 例化 语句来描述全减器的顶层文件。硬件仿真与实验一类同。
半减器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY h_suber IS
PORT (x, y : IN STD_LOGIC;
diff, s_out : OUT STD_LOGIC);
END ENTITY h_suber;
ARCHITECTURE fh1 OF h_suber is
SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
abc <= x="" &="">=>
PROCESS(abc)
BEGIN
CASE abc IS
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
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;
ARCHITECTURE one OF or2a IS
BEGIN
c <= a="" or="">=>
END ARCHITECTURE;
全减器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_suber IS
PORT (sub_in, xin, yin : IN STD_LOGIC;
diffr, sub_out : OUT STD_LOGIC );
END ENTITY f_suber;
ARCHITECTURE fd1 OF f_suber IS
COMPONENT h_suber
PORT (x, y : IN STD_LOGIC;
diff, s_out :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_suber PORT MAP(x=>xin, y=>yin, diff=>d, s_out=>e);
u2 : h_suber PORT MAP(x=>d, y=>sub_in, diff=>diffr, s_out=>f);
u3 :or2a PORT MAP(a=>f, b=>e, c=>sub_out);
END ARCHITECTURE fd1;
一位十六进制加减可控计数器的七段数码显示电路
实验目的:1. 熟悉 Quartus Ⅱ和 GW48_EDA开发系统的使用
2. 用 VHDL 语言设计七段数码管(共阴)显示模块
3. 用 VHDL 语言设计一位十六进制加减可控计数器(要求异步清零,同步使能)
4. 将 2和 3设计的模块整合成一位十六进制加减可控计数器的七段数码显示电路 设计提示:
数码管管脚示意如图 8,共阴极数码管译码真值表如表 3,顶层原理图如图 9。
图 8 数码管管脚示意图
图 9 实验四顶层文件原理图
表 3:共阴极数码管译码真值表
其中 CNT4B_UP_DOWN为加减可控的计数器,加减方向由 UP_DOWN控制, DECL7S 模块为
译码模块,将四位二进制数译成七段码。
可控计数器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B_UP_DOWN IS
PORT (CLK,EN,RST,UP_DOWN : IN STD_LOGIC;
COUT: OUT STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE behav OF CNT4B_UP_DOWN IS
BEGIN
PROCESS(CLK,RST,EN,UP_DOWN)
V ARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='1' THEN CQI:=
ELSIF CLK'EVENT AND CLK ='1' THEN
IF EN='1' THEN
CASE UP_DOWN IS
WHEN '1'=> IF CQI<15 then="" cqi:="">15>
ELSE CQI:=
END IF;
WHEN '0'=> IF CQI>0 THEN CQI:=CQI-1;
ELSE CQI:=
END IF;
END CASE;
END IF;
END IF;
IF UP_DOWN='1' AND CQI=15 THEN COUT<>
ELSIF RST='0' AND UP_DOWN='0' AND CQI=0 THEN COUT<='1'; else="">='1';><>
END IF;
CQ<>
END PROCESS;
END;
数码管显示:
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 ENTITY DECL7S;
ARCHITECTURE one OF DECL7S IS BEGIN
PROCESS(A)
BEGIN
CASE A IS
WHEN
END CASE ;
END PROCESS ;
END ;
一位十六进制加减可控计数器的七段数码显示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT4B IS
PORT(CLK0,RST0,EN0,UP_DOWN0: IN STD_LOGIC;
CQ0: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
COUT0: OUT STD_LOGIC);
END;
ARCHITECTURE WANG OF CNT4B IS
COMPONENT CNT4B_UP_DOWN
PORT(CLK,RST,EN,UP_DOWN: IN STD_LOGIC;
CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT: OUT STD_LOGIC);
END COMPONENT;
COMPONENT DECL7S
PORT (A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;
SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
U1:CNT4B_UP_DOW PORT MAP(CLK=>CLK0,RST=>RST0,EN=>EN0,UP_DOWN=>UP_DOWN0,CQ=>TMP,COUT=>C OUT0);
U2: DECL7S PORT MAP(A=>TMP,LED7S=>CQ0);
END;
分频器的设计
实验目的:1、 熟悉 Quartus Ⅱ和 GW-48型 EDA 开发系统的使用
2、掌握分频器的设计、分析和测试方法
实验原理:数字电路系统中, 分频器是一种应用非常广泛的器件, 其功能是对较高频率的信 号进行分频。 分频电路的本质是加法计数器的变种。 分频器常用来对时钟信号进 行分频,用以得到较低频率的时钟信号、选通信号、中断信号等。
实验内容一:8位数控分频器设计(参 P157例 6-20)
在实验系统上硬件验证例 6-20的功能,可选实验模式一,键 2/键 1负责输入 8位预置 数 D ; CLK 由 CLK0输入,跳帽可跳至 65536HZ 或更高(确保分频后的频率在人的听觉范
围内 20HZ -20KHZ ) ;输出 FOUT 接扬声器 SPKER 。编译下载后进行硬件测试,当改变键 2/键 1的输入值,可听到不同频率的声音。
注:要看到如图所示的仿真图形, 仿真时间需要设定大一点, 才能看到结果, 如可设为 500us 或 1ms.
分频:
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 ENTITY DVF;
ARCHITECTURE one OF DVF IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG : PROCESS(CLK)
V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CNT8=
CNT8:=D; FULL<>
ELSE CNT8:=CNT8+1; FULL<>
END IF;
END IF;
END PROCESS P_REG;
P_DIV : PROCESS(FULL)
V ARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL='1' THEN
CNT2:= NOT CNT2;
IF CNT2='1' THEN FOUT<='1'; else="">='1';><>
END IF;
END IF;
END PROCESS P_DIV;
END ARCHITECTURE one;
实验内容二:设计一分频电路, 分频后的信号高电平时间和低电平时间可由两个 4位的输入 数据控制,硬件下载后可通过示波器来观察分频后的波形。
此分频电路的实体可为如下:
ENTITY DVF_1 IS
PORT ( CLK : IN STD_LOGIC;--基准的时钟信号
D_H : IN INTEGER RANGE 0 TO 15;--设定输出高电平时间的数据 D_L : IN INTEGER RANGE 0 TO 15;--设定输出低电平时间的数据 LD : IN STD_LOGIC;--允许装载 D_H,D_L的控制信号
FOUT : OUT STD_LOGIC );--分频后的信号
END;
在实验系统上硬件验证其功能,可选实验模式一,键 2/键 1负责输入 4位预置数 D_H和 D_L; CLK 由 CLK0输入; LD 接键 8;输出 FOUT 接适配板的外接引脚 PIO24。编译下 载后用示波器测试 PIO24输出脚的波形,当改变键 2/键 1的输入值,可在示波器上观测到 不同占空比的波形。
程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF_1 IS
PORT(CLK : IN STD_LOGIC;--基准的时钟信号
D_H : IN INTEGER RANGE 0 TO 15;--设定输出高电平时间的数据
D_L : IN INTEGER RANGE 0 TO 15;--设定输出低电平时间的数据
LD : IN STD_LOGIC;--允许装载 D_H,D_L的控制信号
FOUT : OUT STD_LOGIC );--分频后的信号
END ENTITY DVF_1;
ARCHITECTURE one OF DVF_1 IS
SIGNAL DH,DL,COUT : INTEGER RANGE 0 TO 15;
BEGIN
PROCESS(CLK,LD)
BEGIN
IF LD='1' THEN DH<=d_h;>=d_h;><>
IF CLK'EVENT AND CLK='1' THEN
IF COUT
ELSE COUT <>
END IF;
END IF;
END IF;
END PROCESS;
FOUT<='1' when="">='1'>
END ARCHITECTURE one;
具有自动测频功能的四位十进制数字频率计设计
1. 熟悉 Quartus Ⅱ和 GW-48型 EDA 开发系统的使用
2. 掌握具有一定复杂程度的综合电路设计
3. 用 VHDL 编写含异步清零、同步时钟使能的十进制加法计数器模块 CNT10.VHD (参例
4-22) 。
4. 用 VHDL 编写数字频率计时序控制模块 TEST_CTL.VHD,产生允许计数、锁存和清零控 制信号,以完成 自动测频 的目的。 (参考例 7-7)
5. 用 VHDL 编写 16位锁存器 REG16.VHD 。
6. 以上面已设计的模块为基础,设计四位十进制数字频率计。
设计提示:
四位十进制频率计原理框图如图 11示:其中 CNT10.VHD 为十 进制计数模块, TEST_CTL.VHD为时序控制模块, REG16.VHD 为 16位锁存器,用来使数码管稳定显示。
图 11四位十进制频率计总原理框图 十进制加法计数器:
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;
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS(CLK,RST,EN)
V ARIABLE 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:="">9>
ELSE CQI:=(OTHERS =>'0');
END IF;
END IF;
END IF;
IF CQI=9 THEN COUT<>
ELSE COUT<>
END IF;
CQ<>
END PROCESS;
END;
数字频率计时序控制:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TEST_CTL IS
PORT (CLKK : IN STD_LOGIC;
CNT_EN : OUT STD_LOGIC;
RST_CNT : OUT STD_LOGIC;
LOAD: OUT STD_LOGIC);
END;
ARCHITECTURE one OF TEST_CTL IS
SIGNAL Div2CLK : STD_LOGIC;
BEGIN
PROCESS(CLKK)
BEGIN
IF CLKK'EVENT AND CLKK ='1' THEN
Div2CLK <=not>=not>
END IF;
END PROCESS;
PROCESS (CLKK,Div2CLK)
BEGIN
IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<>
ELSE RST_CNT <>
END IF;
END PROCESS;
LOAD <= not="" div2clk="">=>
CNT_EN<>
END;
16位锁存器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG16B IS
PORT(LK: IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR (15 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)); END;
ARCHITECTURE b OF REG16B IS
BEGIN
PROCESS(LK,DIN)
BEGIN
IF LK'EVENT AND LK ='1' THEN DOUT<= din;="" end="">=>
END PROCESS ;
END;
范文二:eda技术实验内容交通灯,74ls138,与门等
1(与门
library ieee;
use ieee.std_logic_1164.all; entity and is
port(a,b:in std_logic;
y:out std_logic);
end;
architecture ab of and is begin
y<=a and="" b;="">=a>
end;
2.74LS138译码器
library ieee;
use ieee.std_logic_1164.all; entity 74LS138 is
port(a,b,c:in std_logic;
y:out std_logic_vector(7 downto 0));
end;
architecture art of 74LS138 is
signal data:std_logic_vector(2 downto 0);
begin
data<>
case data is
when "000"=>y<="11111110";>="11111110";>
when "001"=>y<="11111101";>="11111101";>
when "010"=>y<="11111011";>="11111011";>
when "011"=>y<="11110111";>="11110111";>
when "100"=>y<="11101111";>="11101111";>
when "101"=>y<="11011111";>="11011111";>
when "110"=>y<="10111111";>="10111111";>
when "111"=>y<="01111111";>="01111111";>
when others=>null;
end case;
end art;
3(计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY COUNT IS
PORT ( CLK,RST,EN : IN STD_LOGIC ;
CO: OUT STD_LOGIC;
CQ: OUT STD_LOGIC_VECTOR (3DOWNTO 0));
END COUNT;
ARCHITECTURE ONE OF COUNT IS BEGIN
PROCESS (CLK,RST,EN)
VARIABLE CQ1:STD_LOGIC_VECTOR(3 DOWN TO 0);
BEGIN
IF RST=‘1’ THEN CQ1:=(OTHERS=>‘0’);
ELSIF CLK’EVENT AND CLK=‘1’ THEN
IF EN=‘1’THEN
IF CQ1<15 then="" cq1:="CQ1+1;">15>
ELSE CQ1:= (OTHERS=>‘0’)
END IF;
END IF;
IF CQ1=15 THEN CO<=‘1’;>=‘1’;>
ELSE CO<=‘0’;>=‘0’;>
END IF;
CQ<=cq1;>=cq1;>
END PROCESS;
END ONE;
4扫描显示电路设计
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SCAN_LED IS PORT ( CLK : IN STD_LOGIC;
SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --段控制信号输出 BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出 END;
ARCHITECTURE one OF SCAN_LED IS SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL A : INTEGER RANGE 0 TO 15;
BEGIN P1:PROCESS( CNT8 )
BEGIN
CASE CNT8 IS WHEN "000" => BT <= "00000001"="" ;="" a="">=><= 1="" ;="">=>
WHEN "001" => BT <= "00000010"="" ;="" a="">=><= 3="" ;="">=>
WHEN "010" => BT <= "00000100"="" ;="" a="">=><= 5="" ;="" when="" "011"=""> BT <= "00001000"="" ;="" a="">=><= 7="" ;="">=>
WHEN "100" => BT <= "00010000"="" ;="" a="">=><= 9="" ;="">=>
WHEN "101" => BT <= "00100000"="" ;="" a="">=><= 11="" ;="" when="" "110"=""> BT <= "01000000"="" ;="" a="">=><= 13="" ;="">=>
WHEN "111" => BT <= "10000000"="" ;="" a="">=><= 15="" ;="">=>
WHEN OTHERS => NULL ;
END CASE ; END PROCESS P1;
P2:PROCESS(CLK)
BEGIN IF CLK'EVENT AND CLK = '1' THEN CNT8 <= cnt8="" +="" 1;="">=>
END IF;
END PROCESS P2 ; P3:PROCESS( A ) –-译码电路
BEGIN
CASE A IS WHEN 0 => SG <= "0111111";="" when="" 1=""> SG <= "0000110";="">=>
WHEN 2 => SG <= "1011011";="" when="" 3=""> SG <= "1001111";="">=>
WHEN 4 => SG <= "1100110";="" when="" 5=""> SG <= "1101101";="" when="" 6=""> SG <= "1111101";="" when="" 7=""> SG <= "0000111";="">=>
WHEN 8 => SG <= "1111111";="" when="" 9=""> SG <= "1101111";="">=>
WHEN 10 => SG <= "1110111";="" when="" 11=""> SG <= "1111100";="" when="" 12=""> SG <= "0111001";="" when="" 13=""> SG <= "1011110";="">=>
WHEN 14 => SG <= "1111001";="" when="" 15=""> SG <= "1110001";="" when="" others=""> NULL ;
END CASE ;
END PROCESS P3;
5.正弦信号发生器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY sin IS
PORT(clk:IN STD_LOGIC;
DOUT:OUT INTEGER RANGE 255 DOWNTO 0); END ENTITY sin;
ARCHITECTURE behave OF sin IS
SIGNAL Q:INTEGER RANGE 63 DOWNTO 0; BEGIN
PROCESS(clk)
BEGIN
IF(CLK'EVENT AND clk='1')THEN
Q<=q+1;>=q+1;>
END IF;
END PROCESS;
PROCESS(Q)
BEGIN
CASE Q IS
WHEN 00=>DOUT<=255;when 01="">DOUT<=254;>=254;>
WHEN 02=>DOUT<=252;when 03="">DOUT<=249;>=249;>
WHEN 04=>DOUT<=245;when 05="">DOUT<=239;>=239;>
WHEN 06=>DOUT<=233;when 07="">DOUT<=225;>=225;>
WHEN 08=>DOUT<=217;when 09="">DOUT<=207;>=207;>
WHEN 10=>DOUT<=197;when 11="">DOUT<=186;>=186;>
WHEN 12=>DOUT<=174;when 13="">DOUT<=162;>=162;>
WHEN 14=>DOUT<=150;when 15="">DOUT<=137;>=137;>
WHEN 16=>DOUT<=124;when 17="">DOUT<=112;>=112;>
WHEN 18=>DOUT<=99;when 19="">DOUT<=87;>=87;>
WHEN 20=>DOUT<=75;when 21="">DOUT<=64;>=64;>
WHEN 22=>DOUT<=53;when 23="">DOUT<>
WHEN 24=>DOUT<=34;when 25="">DOUT<=26;>=26;>
WHEN 26=>DOUT<=19;when 27="">DOUT<=13;>=13;>
WHEN 28=>DOUT<=8;when 29="">DOUT<=4;>=4;>
WHEN 30=>DOUT<=1;when 31="">DOUT<=0;>=0;>
WHEN 32=>DOUT<=0;when 33="">DOUT<=1;>=1;>
WHEN 34=>DOUT<=4;when 35="">DOUT<=8;>=8;>
WHEN 36=>DOUT<=13;when 37="">DOUT<=19;>=19;>
WHEN 38=>DOUT<=26;when 39="">DOUT<=24;>=24;>
WHEN 40=>DOUT<=43;when 41="">DOUT<=53;>=53;>
WHEN 42=>DOUT<=64;when 43="">DOUT<=75;>=75;>
WHEN 44=>DOUT<=87;when 45="">DOUT<=99;>=99;>
WHEN 46=>DOUT<=112;when 47="">DOUT<=124;>=124;>
WHEN 48=>DOUT<=137;when 49="">DOUT<=150;>=150;>
WHEN 50=>DOUT<=162;when 51="">DOUT<=174;>=174;>
WHEN 52=>DOUT<=186;when 53="">DOUT<=197;>=197;>
WHEN 54=>DOUT<=207;when 55="">DOUT<=217;>=217;>
WHEN 56=>DOUT<=225;when 57="">DOUT<=233;>=233;>
WHEN 58=>DOUT<=239;when 59="">DOUT<=245;>=245;>
WHEN 60=>DOUT<=249;when 61="">DOUT<=252;>=252;>
WHEN 62=>DOUT<=254;when 63="">DOUT<=255;>=255;>
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END ARCHITECTURE behave;
6.A/D采样控制电路ADC0809
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adc0809 IS
PORT ( ina : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --0809的8位转换数据输出
CLK ,EOC : IN STD_LOGIC; --CLK xitong工作时钟
ALE, ck, OE : OUT STD_LOGIC; --ck是0809de 工作时钟
adda,addb,addc:out std_logic;
outa : OUT STD_LOGIC_VECTOR(13 DOWNTO 0)); END adc0809 ;
ARCHITECTURE behav OF adc0809 IS
signal fp:std_logic_vector(3 downto 0);
signal f:std_logic;
TYPE states IS (st0,st2,st3,st4,st5,st6) ; --定义各状态子类型
SIGNAL current_state, next_state: states :=st0 ;
SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号
BEGIN
ADDA <=>=><><='0';>='0';>
process( CLK)
begin
if( CLK'event and CLK='1')then
if fp="1100" then
fp<="0000";>="0000";>
f<=not f;="">=not>
else
fp<=fp+1;>=fp+1;>
end if;
end if;
end process;
ck<=f;>=f;>
PRO: PROCESS(current_state,EOC) BEGIN --规定各状态转换方式
CASE current_state IS
WHEN st0 => ALE<><><='0' ;next_state="">='0'><= st2;="">=>
WHEN st2 => ALE<><><='0' ;next_state="">='0'><= st3;="">=>
WHEN st3 => ALE<><><='0';>='0';>
IF (EOC='1') THEN next_state <= st3;="" --测试eoc的下降沿="">=>
ELSE next_state <= st4;="">=>
END IF ;
WHEN st4=> ALE<><><='0';>='0';>
IF (EOC='0') THEN next_state <= st4;="" --测试eoc的上升沿,="1表明转换结束">=>
ELSE next_state <= st5;="" --继续等待="">=>
END IF ;
WHEN st5=> ALE<><><='0';next_state>='0';next_state><= st6;="">=>
WHEN st6=> ALE<><><='1';next_state>='1';next_state><= st0;="">=>
WHEN OTHERS => ALE<><><='0';next_state>='0';next_state><= st0;="">=>
END CASE ;
END PROCESS PRO ;
PROCESS (f)
BEGIN
IF ( f'EVENT AND f='1') THEN
current_state <= next_state;="" --="" 在时钟上升沿,转换至下一状态="">=>
END IF;
END PROCESS; -- 由信号current_state将当前状态值带出此进程,进入进程PRO
PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL <= ina="" ;="">=>
END IF;
END PROCESS ;
with REGL(3 downto 0) select
outa(6 downto 0) <="0110000"when"0001",--1>="0110000"when"0001",--1>
"1101101"when"0010",--2
"1111001"when"0011",--3
"0110011"when"0100",--4
"1011011"when"0101",--5
"1011111"when"0110",--6
"1110000"when"0111",--7
"1111111"when"1000",--8
"1111011"when"1001",--9
"1110111"when"1010",--A
"0011111"when"1011",--b
"1001110"when"1100",--c
"0111101"when"1101",--d
"1001111"when"1110",--e
"1000111"when"1111",--f
"1111110"when others;--0 with REGL(7 downto 4) select outa(13 downto 7) <="0110000"when"0001",--1>="0110000"when"0001",--1>
"1101101"when"0010",--2
"1111001"when"0011",--3
"0110011"when"0100",--4
"1011011"when"0101",--5
"1011111"when"0110",--6
"1110000"when"0111",--7
"1111111"when"1000",--8
"1111011"when"1001",--9
"1110111"when"1010",--A
"0011111"when"1011",--b
"1001110"when"1100",--c
"0111101"when"1101",--d
"1001111"when"1110",--e
"1000111"when"1111",--f
"1111110"when others;--0 END behav;
7.交通灯控制器
计数器的程序
Library Ieee;
Use Ieee.Std_Logic_1164.All; Entity Counter Is
Port
(Clock:In Std_Logic;
Reset:In Std_Logic;
Hold:In Std_Logic;
Countnum: Buffer Integer Range 0 To 49);
End;
Architecture Behavior Of Counter Is
Begin
Process(Reset,Clock)
Begin
If Reset='1' Then
Countnum<=0;>=0;>
Elsif Rising_Edge(Clock) Then If Hold='1' Then ——当出现紧急情况时,计数器暂
停计数
Countnum<=countnum;>=countnum;>
Else
If Countnum=49 Then
Countnum<=0;>=0;>
Else
Countnum<=countnum+1; end="" if;="">=countnum+1;>
End If;
End If;
End Process;
End;
1控制器的程序
Library Ieee;
Use Ieee.Std_Logic_1164.All; Entity Controller Is
Port
(Clock:In Std_Logic;
Hold:In Std_Logic;
Countnum:In Integer Range 0 To 49; ——前级计数器的
计数值
Numa,Numb:Out Integer Range 0 To 25; ——倒计时数值的计数值
Reda,Greena,Yellowa:Out Std_Logic; ——控制东西方向红黄绿灯的亮灭
Redb,Greenb,Yellowb:Out Std_Logic; ——控制南北方向红黄绿灯的亮灭
Flash:Out Std_Logic); ——用以指示七段数码管显示数字的闪烁
End;
Architecture Behavior Of Controller Is
Begin
Process(Clock)
Begin
If Falling_Edge (Clock) Then ——计数器是上升沿改变计数值,此处下降沿读取
If Hold='1' Then
Reda<='1';>='1';>
Redb<='1';>='1';>
Greena<='0';>='0';>
Greenb<='0';>='0';>
Yellowa<='0';>='0';>
Yellowb<='0';>='0';>
Flash<='1';>='1';>
Else
Flash<='0';>='0';>
If Countnum<=19 then="">=19>
Numa<=20-countnum; ——计数器东西方向倒计时="">=20-countnum;>
Reda<='0';>='0';>
Greena<='1';>='1';>
Yellowa<='0';>='0';>
Elsif (Countnum<=24) then="">=24)>
Numa<=25-countnum;>=25-countnum;>
Reda<='0';>='0';>
Greena<='0';>='0';>
Yellowa<='1';>='1';>
Else
Numa<=50-countnum;>=50-countnum;>
Reda<='1';>='1';>
Greena<='0';>='0';>
Yellowa<='0';>='0';>
End If;
If Countnum<=24 then="">=24>
倒计时
Numb<=25-countnum;>=25-countnum;>
Redb<='1';>='1';>
Greenb<='0';>='0';>
Yellowb<='0';>='0';>
Elsif Countnum<=44 then="">=44>
Numb<=45-countnum;>=45-countnum;>
Redb<='0';>='0';>
Greenb<='1';>='1';>
Yellowb<='0';>='0';>
Else
Numb<=50-countnum;>=50-countnum;>
Redb<='0';>='0';>
Greenb<='0';>='0';>
Yellowb<='1';>='1';>
End If;
End If;
End If;
End Process;
分位电路程序
Library Ieee;
Use Ieee.Std_Logic_1164.All; Entity Fenwei Is
Port(Numin:In Integer Range 0 To 25;
Numa:Out Integer Range 0 To 2;
Numb:Out Integer Range 0 To 9);
End;
Architecture Behavior Of Fenwei Is
Begin
Process(Numin)
Begin
If Numin>=20 Then
Numa<=2;>=2;>
Numb<=numin-20;>=numin-20;>
Elsif Numin>=10 Then
Numa<=1;>=1;>
Numb<=numin-10;>=numin-10;>
Else
Numa<=0;>=0;>
Numb<=numin;>=numin;>
End If;
End Process;
End;
.4.1七段译码电路的程序
Library Ieee;
Use Ieee.Std_Logic_1164.All; Entity Displayone Is
Port(
Clock: In Std_Logic;
Flash: In Std_Logic;
Qin: In Std_Logic_Vector(3 Downto 0);
Display: Out Std_Logic_Vector(0 To 6) );
End;
Architecture Decoder Of Displayone Is Signal Timeout:Integer Range 0 To 63; Begin
Process(Clock)
Begin
If Rising_Edge(Clock) Then
If Flash='0' Then
Timeout<=0;>=0;>
Else
If Timeout=63 Then
Timeout<=0;>=0;>
Else
Timeout<=timeout +="">=timeout>
End If;
End If;
If Timeout<31 then="">31>
Case Qin Is
When"0000"=>Display<="0111111";>="0111111";>
When"0001"=>Display<="0000110";>="0000110";>
When"0010"=>Display<="1011011";>="1011011";>
When"0011"=>Display<="1001111";>="1001111";>
When"0100"=>Display<="1100110";>="1100110";>
When"0101"=>Display<="1101101";>="1101101";>
When"0110"=>Display<="1111101";>="1111101";>
When"0111"=>Display<="0000111";>="0000111";>
When"1000"=>Display<="1111111";>="1111111";>
When"1001"=>Display<="1101111";>="1101111";>
When Others=>Display<="0000000";>="0000000";>
End Case;
Else
Display<="0000000";>="0000000";>
End If;
End If;
End Process;
End;
范文三:eda实验 键盘扫描
2. 实验程序:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity Keyboard is
port(
db:inout std_logic_vector(31 downto 0);
clk:in std_logic;
sel_out: out std_logic_vector(7 downto 0); ga:out std_logic_vector(6 downto 0);
A: IN STD_LOGIC_VECTOR(2 DOWNTO 0); Din: IN STD_LOGIC_VECTOR(3 DOWNTO 0); EN: IN STD_LOGIC;
ENTER: IN STD_LOGIC
);
end Keyboard;
architecture Keyboard_arch of Keyboard is
signal sel:std_logic_vector(7 downto 0);
signal data:std_logic_vector(3 downto 0);
signal freq:std_logic_vector(7 downto 0);
COMPONENT WORK
port( A: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Din: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
EN: IN STD_LOGIC;
ENTER: IN STD_LOGIC;
Dout7: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout6: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout5: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout1: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
Dout0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
end COMPONENT;
begin
frequence:block
begin
process(clk)
begin
if clk'event and clk='1' then
freq<>
end if;
end process;
sel<=freq(7 downto="">=freq(7>
end block frequence;
U1:WORK
PORT MAP(A,Din,EN,ENTER,db(31 downto 28),db(27 downto 24),db(19 downto 16),db(15 downto 12),db(11 downto 8),db(7 downto 4),db(3 downto 0));
mulselect:block
begin
data<=db(31 downto="" 28)="" when="" sel="0">=db(31>
db(27 downto 24) when sel=1 else
db(23 downto 20) when sel=2 else
db(19 downto 16) when sel=3 else
db(15 downto 12) when sel=4 else
db(11 downto 8) when sel=5 else
db(7 downto 4) when sel=6 else
db(3 downto 0);
end block mulselect;
sel_out<>
decode:block
begin
ga<>
end block decode;
keyscan:block ----------键值输出电路部分 signal ount:std_logic_vector(18 downto 0);
signal key_precess:std_logic;
signal move:std_logic;
signal key_data:std_logic_vector(3 downto 0);
signal kxy:std_logic_vector(5 downto 0);
begin
key_pressed<='1'when col="">='1'when>
key<>
process (clk,key_pressed)
begin
if clk'event and clk='1' then
if key_pressed='0' then
case key is
when
when
when
when
when
when
when
when
when
when
when
when
when others=>null;
end case;
end if;
end if;
end process;
process(key_pressed)
begin
if clk'event and clk='1' then
if key_pressed='0' then count<=(others=>'0');move<>
if count=
end if;
end if;
end process;
process(move)
begin
if move'event and move='1' then key_data<>
end if;
end process;
end block keyscan;
end Keyboard_arch;
3. 实验结果
范文四:eda实验报告
西安电子科技大学
EDA 课程实验报告 实验名称
电子工程 学院 1402031 班
姓名 杨珂 学号 14020310057
同作者 黄宇鹏 .
实验日期 年 月 日
实验一:QUARTUS II软件使用及组合电路设 计仿真
实 验 目 的 :
学习 QUARTUS II 软件的使用,掌握软件工程的建立、 VHDL 源 文件的设计和波形仿真等基本内容;
实 验 内 容 :
1. 四选一多路选择器的设计
首先利用 Quartus Ⅱ完成 4选 1多路选择器的文本编辑输入 (mux41a.vhd)和仿真测试等步骤,给出仿真波形。
(1).功能及原理
原理:数据选择器又称为多路转换器或多路开关,它是数字系 统中常用的一种典型电路。 其主要功能是从多路数据中选择其中一路 信号发送出去。所以它是一个多输入、单输出的组合逻辑电路。 功能:当选择控制端 s10=00时,输出 y=a ; s10=01时,输出 y=b; s10=10时,输出 y=c ; s10=11时,输出 y=d 。
(2).逻辑器件符号:
(3).VHDL语言实现:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT (a,b,c,d,s0,s1:IN STD_LOGIC;
y:OUT STD_LOGIC);
END ENTITY mux41;
ARCHITECTURE one OF mux41 IS
SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN
S<>
PROCESS(s0,s1,a,b,c,d)
BEGIN
CASE S IS
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END ARCHITECTURE one;
(4).时序波形仿真:
2. 七段译码器程序设计仿真
参考后面的七段译码器程序,在 QUARTUS II上对以下程序进行 编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。 (1).功能与原理
7段数码是纯组合电路,通常的小规模专用 IC ,如 74或 4000系列的器件只能作十进制 BCD 码译码,然而数字系统中的数据处理 和运算都是 2进制的,所以输出表达都是 16进制的,为了满足 16进制数的译码显示,最方便的方法就是利用 VHDL 译码程序在 FPGA
或 CPLD 中实现。本项实验很容易实现这一目的。例 1作为 7段 BCD 码译码器的设计, 输出信号 LED7S 的 7位分别接如实验图 1数码管的 7个段,高位在左,低位在右。例如当 LED7S 输出为
实验图 1 数码管及其电路
(2).逻辑器件符号
(3).VHDL语言实现
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 ENTITY DecL7S;
ARCHITECTURE one OF DecL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN
WHEN
END CASE ;
END PROCESS ;
END ;
(4).时序波形仿真
实验二 计数器设计与显示
实 验 目 的 :
(1)熟悉利用 QUARTUS II中的原理图输入法设计组合电路,掌握 层次化设计的方法 ;
(2)学习计数器设计、 多层次设计方法和总线数据输入方式的仿
真,并进行电路板下载演示验证。
实验内容:
1. 完成计数器设计
(1).功能及原理
含有异步清零和计数使能的 4位二进制加减可控计数器:
清零端 clr :低电平有效,异步清零,即 clr=0时,无论时钟处 于什么状态,输出立即置零。
使能端 ena :高电平有效, 即 ena=1时, 计数器开始计数; ena=0时,计数器停止计数。
加减控制端 d_ctr:当 d_ctr=0时, 为减法计数器; 当 d_ctr=1时,为加法计数器。
利用
(2).逻辑器件符号
(3).VHDL语言实现
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
ENTITY cnt4B IS
PORT (clk,clr,ena,d_ctr : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0 );
co:out std_logic) ;
END ENTITY cnt4B;
ARCHITECTURE bhv OF cnt4B IS
SIGNAL q1 : STD_LOGIC_VECTOR(3 DOWNTO 0 );
BEGIN
q <= q1="">=>
PROCESS (clk,clr,ena,d_ctr)
BEGIN
IF clr='0' THEN q1<>
ELSIF clk'EVENT AND clk = '1' THEN
IF ena='1' THEN
IF d_ctr='1' THEN
IF q1=
q1 <=>=>
ELSE
q1<=q1+'1'; end="">=q1+'1';>
ELSE
IF q1=
q1<=q1-'1'; end="">=q1-'1';>
END IF;
END IF ;
END IF;
END PROCESS ;
PROCESS(q1)
BEGIN
IF q1=
co<>
ELSE
co<>
END IF;
END PROCESS;
END ARCHITECTURE bhv;
(4).时序波形仿真
当 d_ctr=1时,实现加法计数器
当 d_ctr=0时,实现减法计数
而且可以看出, ena=0时停止计数, clr=0时,立即清零
2. 计数器显示译码设计与下载
用原理图输入法按实验图 2的方式,以前面设计的七段译码器 DecL7S 和计数器为底层元件,完成“计数器显示译码”的顶层文件 设计。
实验图 2 计数器和译码器连接电路的顶层文件原理图
按照原理图连接好之后, 进行引脚的锁定, 然后将整个程序下载 到已经安装好的电路板上,进行硬件测试。
附:50M 分频器
逻辑器件符号
VHDL 语言实现
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ; -- ?????
ENTITY DIV50M IS
PORT ( clk,clr : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR( 25 DOWNTO 0 );
co:out std_logic
) ;
END ENTITY DIV50M;
ARCHITECTURE bhv OF DIV50M IS
SIGNAL q1 : STD_LOGIC_VECTOR(25 DOWNTO 0 ); BEGIN
q <= q1="">=>
PROCESS (clk,clr)
BEGIN
IF clr='0' THEN q1<= (others="">'0');
ELSIF clk'EVENT AND clk = '1' THEN
IF q1 =
ELSE
q1<>
END IF;
END IF;
END PROCESS ;
PROCESS(q1)
BEGIN
IF q1<>
co<>
ELSE
co<>
END IF;
END PROCESS;
END ARCHITECTURE bhv;
大作业:交通灯控制器
一﹑设计任务
设计一个十字路口的交通灯控制系统, 用实验平台上的 LED 发光二极管显示车辆通过 的方向(东西和南北各一组)的交通灯,用数码管显示该方向的剩余时间。工作顺序为 东西方向红灯亮 45秒,前 40秒南北方向绿灯亮,后 5秒黄灯亮。然后南北方向红灯亮 45秒,前 40秒东西方向绿灯亮,后 5秒黄灯亮。依次重复。
二、题目分析与整体构思
(1)该交通灯控制器应具备的功能
设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同, 定为红灯 45s ,黄灯 5s ,绿灯 40s ,同时用数码管指示当前状态(红、黄、 绿)剩余时间。
(2) 实现方案
从题目中计数值与交通灯的亮灭的关系如图(1)所示
三﹑硬件电路设计
(1)分频器
分频器实现的是将高频时钟信号转换成底频的时钟信号, 用于触发控制器、 计数 器和扫描显示电路。实验板时钟频率为 50MHz ,该分频器实现的是 50000000分 频,将 50MHz 的时钟信号分频成 1Hz 的时钟信号。
(2)计数器
这里需要的计数器的计数范围为 0-90。计到 90后,下一个时钟沿回复到 0,开 始下一轮计数,系统复位信号 RESET 则使计数器异步清零。
(3)控制器
控制器的作用是根据计数器的计数值控制发光二极管的亮、 灭, 以及输出倒计时 数值给七段数码管的分位译码电路。
(4)分位译码电路设计 *2
因为控制器输出的到计时数值可能是 1位或者 2位十进制数,所以在七段数码 管的译码电路前要加上分位电路(即将其分为 2个 1位的十进制数,如 25分为 2和 5, 7分为 0和 7)。
(6)数码管驱动设计 *4
根据 4位二进制输入控制 7位二进制输出来控制数码管引脚从而显示数字。
(7)交通灯控制器的原理图
四、程序设计及仿真
1、分频器
程序
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
ENTITY fd IS
PORT
(Clkin:IN Std_Logic;
Clkout:OUT Std_Logic);
END;
ARCHITECTURE one OF fd IS
CONSTANT N:Integer:=49999999;
signal counter:Integer range 0 to N;
signal Clk:Std_Logic;
BEGIN
PROCESS(Clkin)
begin
IF rising_edge(Clkin)THEN
IF Counter=N then
counter<>
Clk<>
else
counter<>
Clk<>
end if;
end if;
end process;
clkout<>
end;
2、计数器
程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cont IS
PORT (clock:IN STD_LOGIC;
reset:in std_logic;
resetcountNum:BuFFeR INTEGER RANGE 0 TO 90); END;
ARCHITECTURE one OF cont IS
BEGIN
process(reset,Clock)
BEGIN
IF Reset='1' THEN
countNum<>
ELSIF rising_edge(Clock) THEN
IF countNum=90 THEN
countNum<>
ELSE
countNum<>
END IF;
END IF;
END process;
END;
仿真结果
当 reset 为 0时每个上升沿 +1,到 90后清 0,当 reset 置 1时输出恒为 0,模块正确。
3、控制器
程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY control IS
PORT (Clock:IN STD_LOGIC;
CountNum:in INTEGER RANGE 0 TO 89;
NumA,NumB:out INTEGER RANGE 0 TO 45;
RedA,GreenA,YellowA:out std_logic;
RedB,GreenB,YellowB:out std_logic);
END;
ARCHITECTURE one OF control IS
BEGIN
process(Clock)
BEGIN
IF falling_edge(Clock)THEN
IF CountNum<=39>=39>
NumA<>
RedA<>
GreenA<>
YellowA<>
ELSIF CountNum<=44>=44>
NumA<>
RedA<>
GreenA<>
YellowA<>
ELSE
NumA<>
RedA<>
GreenA<>
YellowA<>
END IF;
IF CountNum<=44>=44>
NumB<>
RedB<>
GreenB<>
YellowB<>
ELSIF CountNum<=84>=84>
NumB<>
RedB<>
GreenB<>
YellowB<>
ELSe
NumB<>
RedB<>
GreenB<>
YellowB<>
END IF;
END IF;
END process;
END;
仿真结果
为了方便地给 CountNum 输入 0到 90,我们将控制器接在已经确认正确的分频器和计数器 上,如图
仿真结果如下
红灯 45s ,黄灯 5s ,绿灯 40s ,同时输出当前状态(红、黄、绿)剩余时间,符 合要求,模块正确。
4、分位译码器
程序
(1)分位器 1
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei IS
PORT
(Numin:IN integer RANGE 0 TO 45;
NumA,NumB:OUT Integer RANGE 0 to 9
);
END;
ARCHITECTURE one OF Fenwei IS
BEGIN
process(Numin)
BEGIN
IF Numin>=40 THEN
NumA<>
NumB<>
ELSIF Numin>=30 THEN
NumA<>
NumB<>
ELSIF Numin>=20 THEN
NumA<>
NumB<>
ELSIF Numin>=10 THEN
NumA<>
NumB<>
ELSE
NumA<>
NumB<>
END IF;
END PROCESS;
END;
(2)分位器 2
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Fenwei2 IS
PORT
(Numin:IN integer RANGE 0 TO 45;
NumC,NumD:OUT Integer RANGE 0 to 9
);
END;
ARCHITECTURE one OF Fenwei2 IS
BEGIN
process(Numin)
BEGIN
IF Numin>=40 THEN
NumC<>
NumD<>
ELSIF Numin>=30 THEN
NumC<>
NumD<>
ELSIF Numin>=20 THEN
NumC<>
NumD<>
ELSIF Numin>=10 THEN
NumC<>
NumD<>
ELSE
NumC<>
NumD<>
END IF;
END PROCESS;
END;
仿真结果
为了方便输入,将分位器接在已确认正确的原理图上进行仿真,如图
仿真结果如下
分位器 1、 2成功将控制器输出的数值 分为 2个 1位的十进制数,模块正确。
5、数码管驱动程序
程序
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DecL7S1 IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
LED7S1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END ENTITY DecL7S1;
ARCHITECTURE one OF DecL7S1 IS
BEGIN
PROCESS( A )
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
END CASE ;
END PROCESS ;
END ;
6、整体仿真结果
实验分工
黄宇鹏:查阅资料,确定设计思路,绘制原理图。
杨珂:编写程序,标注针脚,进行波形仿真。
范文五:eda实验报告
实验一 一位二进制全加器
一、实验目的:熟悉 MAX+plus II实验环境及操作平台;
学会用 VHDL 语言实现简单编程;
设计一个二进制全加器。
二、 实验原理:一个全加器由两个半加器和或门电路组合而成。 故可先设计或门电路和 半加器,然后再调用。
三、实验源程序:
--------实验一 一位二进制全加器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_adder IS
PORT(ain,bin,cin :IN STD_LOGIC;
count,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 : 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=>count);
END ARCHITECTURE fd1;
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="">=>
END ARCHITECTURE one;
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="">=>
END ARCHITECTURE fh1;
四、仿真结果:
实验二 三位多数表决器
一、实验目的:设计一个三位多数表决器。
二、实验原理:至少有两人赞成才能通过,既至少输入两个“ 1”时,输出为“ 1” 。
三、源程序:
---------实验二 三位多数表决器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY vot3 IS
PORT(a,b,c:IN STD_LOGIC;
P: OUT STD_LOGIC);
END;
ARCHITECTURE two OF vot3 IS
SIGNAL d,e,f:STD_LOGIC;
BEGIN
d<=a and="">=a>
e<=b and="">=b>
f<=c and="">=c>
p<=d or="" e="" or="">=d>
END ARCHITECTURE two;
四、仿 真 结 果
:
实验三 四位二进制加一计数器
一、实验目的:设计一个四位二进制加一计数器。
二、实验原理:时钟跳变一下则计数器加一否则不变。
三、源程序:
---------实验三 四位二进制加一计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt4 IS
PORT(clk:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ;
ARCHITECTURE three OF cnt4 IS
SIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1' THEN q1<>
END IF;
END PROCESS;
q<>
END three;
四 、 仿 真 结 果
:
实验四 四节拍产生器
一、实验目的:设计一个四节拍产生器。
二、实验原理:由四个 D 触发器组成移位寄存器,即四节拍产生器。
三、源程序:
------实验四 四节拍产生器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shift4 IS
PORT(clk,di :IN STD_LOGIC;
q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE four OF shift4 IS
SIGNAL a,b,c,d : STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF clk 'EVENT AND clk='1' THEN
a <=>=>
b <=>=>
c <=>=>
d <=>=>
q(3) <=>=>
q(2) <=>=>
q(1) <=>=>
q(0) <=>=>
END IF;
END PROCESS;
END four;
四 、 仿 真 结 果
:
实验五 110序列检测器
一、实验目的:设计一个 110序列检测器。
二、实验原理:
三、源程序:
-----实验五 110序列检测器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mly3 IS
PORT(clk,din,rst:IN STD_LOGIC;
q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END mly3;
ARCHITECTURE five OF mly3 IS
TYPE states IS (s0,s1,s2);
SIGNAL sx:states;
BEGIN
COM1:PROCESS(clk,rst)
BEGIN
IF rst='1' THEN sx<>
ELSIF clk 'EVENT AND clk='1' THEN
CASE sx IS
WHEN s0 => IF din='1' THEN sx <= s1;="" end="">=>
WHEN S1 => IF din='1' THEN sx <= s2;="" end="">=>
WHEN s2 => IF din='0' THEN sx <=>=>
ELSE sx <= s2;="" end="">=>
WHEN OTHERS => sx <=>=>
END CASE;
END IF;
END PROCESS COM1;
COM2:PROCESS(sx,din)
BEGIN
CASE sx IS
WHEN s0 => IF din='1' THEN q <>
WHEN s1 => IF din='1' THEN q <>
WHEN s2 => IF din='0' THEN q <>
WHEN OTHERS => q <=>=>
END CASE;
END PROCESS COM2;
END five;
四 、 仿 真 结 果
:
实验六 数字时钟
一、 实验目的:进一步掌握用 VHDL 硬件描述语言的设计思想; 设计一个数字时钟: 1. 有置位复位功能。 2. 预置数 3. 显示时、分、秒 -。
二、 实验原理:分块设计时分秒
三、 源程序:
--------实验六 数字时钟
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity szz is
port(clk:in std_logic;
clk1:in std_logic;
md1:in std_logic;
md2:in std_logic_vector(1 downto 0);
speak:out std_logic;
dout:out std_logic_vector(6 downto 0);
selout:out std_logic_vector(2 downto 0));
end szz;
architecture one of szz is
signal sel:std_logic_vector(2 downto 0);
signal hou1:std_logic_vector(3 downto 0);
signal hou2:std_logic_vector(3 downto 0);
signal min1:std_logic_vector(3 downto 0);
signal min2:std_logic_vector(3 downto 0);
signal seth1:std_logic_vector(3 downto 0);
signal seth2:std_logic_vector(3 downto 0); signal setm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto 0); signal sec2:std_logic_vector(3 downto 0); signal h1:std_logic_vector(3 downto 0); signal h2:std_logic_vector(3 downto 0); signal m1:std_logic_vector(3 downto 0); signal m2:std_logic_vector(3 downto 0); signal s1:std_logic_vector(3 downto 0); signal s2:std_logic_vector(3 downto 0); ------------------------------------------------- begin
----------------------------------------------模 6计数 choice:process(clk1)
begin
if clk1'event and clk1='1' then
if sel=
sel<>
else
sel<>
end if;
end if;
end process choice;
-----------------------------------------------小时十位 h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)
begin
if clk'event and clk='1' then
if (hou1=
hou1<>
elsif hou1=
hou1<>
elsif (hou2=
hou1<>
end if;
end if;
end process h110;
-----------------------------------------------小时个位 h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)
begin
if clk'event and clk='1' then
if (hou1=
hou2<>
elsif hou2=
hou2<>
elsif (hou2=
hou2=
hou2<>
elsif ((min1=
hou2<><>
end if;
end if;
end process h220;
-----------------------------------------------分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2)
begin
if clk'event and clk='1' then
if (min1=
elsif min1=
min1<>
elsif (min2=
min1<>
end if;
end if;--end if;
end process m110;
----------------------------------------------分钟个位 m220:process(clk,sec1,sec2,md1,md2)
if clk'event and clk='1' then
if min2=
min2<>
elsif min2=
min2<>
else if (sec1=
end if;
end if;end if;
end process m220;
---------------------------------------------秒十位
s110:process(clk)
begin
if clk'event and clk='1' then
if (sec1=
sec1<>
else if sec2=
sec1<>
end if;
end if;end if;
end process s110;
--------------------------------------------秒个位
s220:process(clk)
if clk'event and clk='1' then
if sec2=
sec2<>
else sec2<>
end if;
end if;
end process s220;
-------------------------------------------时间设置小时部分 sethour1:process(clk,seth2)
begin
if clk'event and clk='1' then
if seth1=
seth1<>
elsif seth2=
seth1<>
end if;
end if;
end process sethour1;
------------------------------------------- sethour2:process(clk,md1,md2,seth1)
begin
if clk'event and clk='1' then
if (seth1=
elsif md1='1' and md2=
seth2<>
end if;
end if;
end process sethour2;
-------------------------------------------时间设置分钟部分 setmin1:process(clk,setm2)
begin
if clk'event and clk='1' then
if setm1=
setm1<>
elsif setm2=
setm1<>
end if;
end if;
end process setmin1;
---------------------------------------------- setmin2:process(clk,md1,md2)
begin
if clk'event and clk='1'then
if setm2=
setm2<>
elsif md1='1' and md2=
end if;
end if;
end process setmin2;
--------------------------------------------
--------------------------------------------闹铃 speaker:process(clk1,hou1,hou2,min1,min2)
begin
if clk1'event and clk1='1'then
if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then speak<>
else speak<>
end if;
end if;
end process speaker;
-------------------------------------------
------------------------------------------- disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,set m2)
begin
if sel=
selout<>
case h1 is
when
when
elsif sel=
selout<>
case h2 is
when
elsif sel=
selout<>
case m1 is
when
when
elsif sel=
selout<>
case m2 is
when
elsif sel=
selout<>
case s1 is
when
elsif sel=
selout<>
case s2 is
when
end if;
if md1='0' then---------------计时时间显示和设置模式
h1<><>
m1<><>
s1<><>
else -----------闹铃时间现实和设置模式
h1<><>
m1<><>
s1<>
end if;
end process disp;
------------------------------------------
end one;
四 、 仿 真 结 果
:
=>=(others=>=254;when>=249;when>=239;when>=225;when>=207;when>=186;when>=162;when>=137;when>=112;when>=87;when>=64;when>=43;when>=26;when>=13;when>=4;when>=0;when>=1;when>=8;when>=19;when>=34;when>=53;when>=75;when>=99;when>=124;when>=150;when>=174;when>=197;when>=217;when>=233;when>=245;when>=252;when>=255;when>=>=>=>=>=>=>=>=>=>=>=>=>=>