EDA实验报告

更新时间:2024-03-07 12:11:01 阅读量: 综合文库 文档下载

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

EDA实验报告

电科133-27-李玲玲

实验一:“四选一“多路选择器

一、实验目的

通过实验让用户逐步了解、熟悉和掌握FPGA开发软件Quartus Ⅱ的使用方法及

VHDL的编程方法。

二、实验内容

描述一个“四选一“多路选择器,通过实验实现一个四选一的多路选择器,观察其波形图,实现四选一的原理

三、实验原理

a,b,c,d是四个输入端口,s1和s0为通道选择控制信号端,y为输出端。当s1和s0取值分别为00,01,10和11时,输出端y将分别输出来自输入口a,b,c,d4个输入口分别输入不同频率信号时,针对选通控制端s1,s0的不同电平选择,则输出端y有对应的信号输出。

四、实验步骤

1)使用Quartus Ⅱ建立工程

打开Quartus Ⅱ软件并建立工程;建立图形设计文件;建立文本编辑文件; 2)Quartus Ⅱ工程设计 在VHDL文件中编写源程序,从设计文件创建模块,将led.bsf模块添加到Quartus Ⅱ顶层模块,添加引脚和其他基本单元 3)设置编译选项并编译硬件系统

设置编译选项,编译硬件系统,查看编译报告,下载硬件设计到目标FPGA

五、实验参考程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY led IS

PORT(a,b,c,d:IN STD_LOGIC; s0,s1:IN STD_LOGIC; y:OUT STD_LOGIC); END ENTITY led;

ARCHITECTURE BHV OF led IS

SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN

S <= s1 & s0 ; PROCESS(s1,s0) BEGIN

CASE (S) IS

WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS=>NULL; END CASE; END PROCESS;

END ARCHITECTURE BHV ;

六、实验总结

实验二:I/O控制实验

一、实验目的

通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL的编程方法,并熟悉以VHDL文件为顶层模块的设计;学好并体会分支条件语句case的使用方法及FPGA I/O的输入/输出控制。

二、实验内容

SmartSOPC 实验箱上完成8个按键KEY1-KEY8和8个发光二极管LED1-LED8。本实验内容是要求在SmartSOPC 实验箱上完成对8个按键KEY1-KEY8进行监控,一旦有键入则判断其键值,并点亮相应的发光二极管。例如:若KEY3按下,则点亮LED1-LED3发光管。

三、实验原理

SmartSOPC 实验箱8个发光二极管LED1-LED8的电路原理如图2.44所示,芯片输出后通过串连一个限流电阻和一个发光二极管组成,发光管采用共阳接法,降低芯片引脚的输出功率。控制引脚为低电平时,LED点亮;控制引脚为高电平时,LED不亮;

SmartSOPC 实验箱8个按键KEY1-KEY8的电路原理图如图2.45所示,芯片输入通过串联一个限流电阻和一个按键开关组成,开关采用共阴接法,降低系统的运行功率。按钮按下时,输入引脚为低电平,度数为0;按钮悬空时,输入引脚为高电平,度数为1。

FPGA的所有I/O引脚单独配置为输入口,不过这种配置是系统自动完成的。当该I/O口被设置为输入口使用时,该I/O控制模块将直接使三态缓冲区的控制端接地,使得该I/O引脚对外呈高阻态,这样该I/O引脚即可用作专用输入引脚。正确分配并锁定引脚后,一旦在KEY1-KEY8中有键输入,即可在检测到键盘输入的情况下,继续判断其键盘值并作出相应的处理。

四、实验步骤

1)建立一个新的工程,编写VHDL程序代码;

2)实验箱配置引脚如表2.2,在引脚适配过程中配置相应的引脚;

表2.2引脚锁定方法 引 脚 信 号 IC6 IC12 EDA led[0] 50 50 50 led[1] 53 53 53 led[2] 54 54 54 led[3] 55 55 55 led[4] 176 176 176 led[5] 47 47 47 led[6] 48 48 48 led[7] 49 49 49 key[0] 121 121 121 key[1] 122 122 122 key[2] 123 123 123 key[3] 124 124 124 key[4] 143 143 143 key[5] 141 141 141 key[6] 158 158 158 key[7] 156 156 156 3)点击综合按键,对系统进行综合; 4)取出SmartSOPC实验箱,将实验箱上的JP6的LED0-LED7、LED1-LED8分别与FPGA引脚50、53-55、176和47-49相连,并接通电源;

5)将程序下载到实验箱,并进行试验,观察试验结果,并分析其原因。

五、实验参考程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL; ENTITY keyled IS PORT(

key:IN STD_LOGIC_VECTOR(7DOWNTO 0); led:OUT STD_LOGIC_VECTOR(7DOWNTO 0)); END;

ARCHITECTURE one OF keyled IS

SIGNAL led_r: STD_LOGIC_VECTOR(7DOWNTO 0); SIGNAL buffer_r:STD_LOGIC_VECTOR(7DOWNTO 0); BEGIN

led<=led_r;

PROCESS(key,buffer_r) BEGIN

buffer_r<=key; CASE buffer_r IS

WHEN\

WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN OTHERS=> led_r<=\END CASE; END PROCESS; END;

六、实验思考

1)通过按键单独控制对应的LED灯,例如Key1按下,LED1点亮;Key1松开,LED1熄灭。

参考程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL; ENTITY keyled IS PORT(

key:IN STD_LOGIC_VECTOR(7 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;

ARCHITECTURE one OF keyled IS

SIGNAL led_r: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL buffer_r:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

led<=led_r;

PROCESS(key,buffer_r) BEGIN

buffer_r<=key;

IF (buffer_r(0)='0') THEN led_r(0)<='0'; else led_r(0)<='1'; END IF; IF (buffer_r(1)='0') THEN led_r(1)<='0'; else led_r(1)<='1'; END IF; IF (buffer_r(2)='0') THEN led_r(2)<='0'; else led_r(2)<='1'; END IF; IF (buffer_r(3)='0') THEN led_r(3)<='0'; else led_r(3)<='1'; END IF; IF (buffer_r(4)='0') THEN led_r(4)<='0'; else led_r(4)<='1'; END IF; IF (buffer_r(5)='0') THEN led_r(5)<='0'; else led_r(5)<='1'; END IF; IF (buffer_r(6)='0') THEN led_r(6)<='0'; else led_r(6)<='1'; END IF; IF (buffer_r(7)='0') THEN led_r(7)<='0'; else led_r(7)<='1'; END IF; END PROCESS; END;

七、实验总结

实验三:数码管显示实验

一、实验目的

学习7段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus Ⅱ的使用方法及VHDL的编程方法。

二、实验内容

SmartSOPC 实验箱上有两个4位动态共阳数码管LED12和LED13。本实验的内容是建立7段译码显示模块,用于控制LED数码管的动态显示。要求在SmartSOPC 实验箱上的数码管循环依次显示0-9,A-F共16个字符。

三、实验原理

数码管LED显示是工程项目中使用较广的一种输出显示显示器件。常见的数码管有共阴和共阳两种。共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8个发光二极管的阳极连接在一起作为公共端。公共端常称为位码,而其他8位称为段码。

如图2.46所示为共阳数码管及其电路,数码管有8个段分别为:h、g、f、e、d、c、b、a和a(h为小数点),只要公共端为高电平“1”,某个段输出低电平“0”则相应的段就亮。例如,数码管的8个段h、g、f、e、d、c、b、a分别接,1、0、1、0、0、1、0、0数码管就显示“2”。

其硬件原理图如图2.46所示。其中8个位码DIG0—DIG7和8位段码SEGO-SEG7分别与FPGA相应的引脚相连。这样,只要DIG0-DIG7上一直输出低电平“0\则8个数码管将显示相同的数码(因为8个LED数码管的段码线分别接到了同一引脚上),这样8位动态LED数码管变成了静态LED。

本实验通过分频进程int_div分频得到1hz的频率信号,分频后的信号触发4位计数器的时钟输入端,计数循环输出0一9、A一F共16个数。最后通过七段译码进程译码后在数码管上显示出来。

四、实验步骤

1)建立一个新的工程,编写VHDL程序代码;

2)实验箱配置引脚如表2.3,在引脚适配过程中配置相应的引脚;

表2.3引脚锁定方法 引脚 信 号 IC6 IC12 EDA seg[0] 169 169 169 seg[1] 170 170 170 seg[2] 167 167 167 seg[3] 168 168 168 seg[4] 165 165 165

seg[5] seg[6] seg[7] dig[0] dig[1] dig[2] dig[3] dig[4] dig[5] dig[6] dig[7] clock 166 163 164 160 159 152 161 204 199 198 205 28 166 163 164 160 159 162 161 236 237 238 239 28 166 163 164 160 159 162 161 215 216 213 214 28

3)点击综合按键,对系统进行综合; 4)取出SmartSPOC实验箱,接通电源;

5)将程序下载到实验箱,并进行试验,观察试验结果,并分析其原因。

五、实验参考程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY SLEDs IS

PORT(clk: IN STD_LOGIC;

dig: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); seg: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END;

ARCHITECTURE ONE OF SLEDs IS

SIGNAL Counter:Integer RANGE 0 TO 48000000; SIGNAL clk1:STD_LOGIC;

SIGNAL d:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL seg_r:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

PROCESS(clk) BEGIN

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

IF Counter=48000000-1 THEN counter<=0; clk1<=Not clk1; ELSE Counter<=Counter+1; END IF; END IF;

END PROCESS;

PROCESS(clk1) BEGIN

IF(CLK1'EVENT AND clk1='1') THEN d<=d+1; END IF;

END PROCESS;

PROCESS(d) BEGIN

CASE d IS

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN OTHERS=> SEG_R<=X\ END CASE; END PROCESS; seg<=seg_r;

DIG<=\END;

六、思考题

实现数码管的动态显示,即8个数码管分别显示0-7共八个数。 参考程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY SLEDs IS

PORT(clk: IN STD_LOGIC;

dig: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); seg: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END;

ARCHITECTURE ONE OF SLEDs IS

SIGNAL Counter:Integer RANGE 0 TO 24000000; SIGNAL clk1:STD_LOGIC;

SIGNAL d:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL f:STD_LOGIC_VECTOR(3 DOWNTO 0):=\SIGNAL seg_r:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

PROCESS(clk) BEGIN

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

IF Counter=24000000-1 THEN counter<=0; clk1<=Not clk1; ELSE Counter<=Counter+1; END IF; END IF;

END PROCESS;

PROCESS(clk1) BEGIN

IF(CLK1'EVENT AND clk1='1') THEN d<=d+1; f<=f+1; END IF;

END PROCESS; PROCESS(f) BEGIN

CASE f IS

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN OTHERS=> SEG_R<=X\ END CASE; END PROCESS; PROCESS(d) BEGIN

CASE d IS

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN OTHERS=> dig<=X\ END CASE; END PROCESS; seg<=seg_r; END;

七、实验总结

实验四:计数器实验

一、实验目的

学习计数器的设计、方阵、和硬件测试,进一步熟悉VHDL的编程方法。

二、实验内容

本实验的内容是利用Quartus Ⅱ建立一个含计数使能、异步复位的4位加法计数器,并进行仿真测试。最后在SmartSOPC实验箱上进行硬件测试,由KEY1控制计数器使能ena并由LED1指示,KEY2控制复位端rst并由LED2指示。今晚ie输出由LED8指示,计数值由数码管指示。时钟clk由分频模块int_div分频得到4hz的信号。

三、实验原理

如图2.47所示是一个含计数使能、异步复位的4位加法计数器,图中间是4位锁存器;key2是异步清零信号,低电平有效;clk是锁存信号;当key2为1时使能锁存器。

四、实验步骤

1)建立一个新的工程,编写VHDL程序代码;

2)实验箱配置引脚如表2.4,在引脚适配过程中配置相应的引脚;

表2.4引脚锁定方法 引 脚 信 号 IC6 IC12 EDA seg[0] 169 169 169 seg[1] 170 170 170 seg[2] 167 167 167 seg[3] 168 168 168 seg[4] 165 165 165 seg[5] 166 166 166 seg[6] 163 163 163 seg[7] 164 164 164 dig[0] 160 160 160 dig[1] 159 159 159 dig[2] 162 162 162 dig[3] 161 161 161 dig[4] 204 236 215 dig[5] 199 237 216 dig[6] 198 238 213 dig[7] 205 239 214 led1 50 50 50 led2 53 53 53 led8 49 49 49 key1 121 121 121 key2 122 122 122 clock 28 28 28 3)点击综合按键,对系统进行综合;

4)取出SmartSPOC实验箱,将led1、led2、led8、key1、key2的短路帽接上,接通电源;

5)将程序下载到实验箱,并进行试验,观察试验结果,并分析其原因。

五、实验参考程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL; USE IEEE.STD_LOGIC_Arith.ALL; ENTITY cnt_4b IS

PORT(clock,rst,ena: IN STD_LOGIC;

dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout: OUT STD_LOGIC); END;

ARCHITECTURE one OF cnt_4b IS

SIGNAL cnt: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

dout<=cnt;

cout<=cnt(3)and cnt(2) and cnt(1) and cnt(0); PROCESS(clock,rst,ena) BEGIN

IF rising_edge(clock) THEN IF rst='0' THEN cnt<=\ ELSif ena='1' THEN CNT<=cnt+1; END IF; END IF; END PROCESS;

END ARCHITECTURE ONE;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL; USE IEEE.STD_LOGIC_Arith.ALL; ENTITY decl7s IS

PORT(d: IN STD_LOGIC_VECTOR(3 DOWNTO 0); seg: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;

ARCHITECTURE ONE OF decl7s IS

SIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

seg<=seg_r; PROCESS(d) BEGIN

CASE d IS

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\

WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN X\ WHEN OTHERS=> seg_r<=X\ END CASE; END PROCESS; END;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL;

ENTITY int_div IS

GENERIC(N:Integer:=3); Port(Clockin:IN STD_LOGIC; ClockOut:OUT STD_LOGIC); END;

ARCHITECTURE Devider OF int_div IS

SIGNAL Counter:Integer RANGE 0 TO N-1; SIGNAL Temp1,Temp2:STD_LOGIC; BEGIN

PROCESS(Clockin) BEGIN

IF RISING_EDGE(Clockin)THEN IF Counter=N-1 THEN counter<=0;

Temp1<=Not Temp1; ELSE

Counter<=Counter+1; END IF; END IF;

IF falling_EDGE(clockin)THEN IF Counter=N/2 THEN Temp2<=NOT Temp2; END IF; END IF; END PROCESS;

ClockOut<=Temp1 XOR Temp2; END;

七、实验总结

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

Top