SOPC课程设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SOPC课程设计实验报告基于SOPC的警示灯设计

2013电子信息工程3班

李婕20134557

罗丹妮20134563

一、设计目的

1、熟悉掌握SOPC的基本流程

2、设计一个警示灯并满足基本要求

3、通过设计发现问题并解决

二、设计设备

1、硬件:PC机、SOPC-NIOS II EDA/SOPC系统开发平台

2、软件:QUARTUS II、SOPC Builder、NIOS II ID E

三、设计内容

•初始状态为红灯(LED2)熄灭,绿灯(LED1)点亮,数码管显示为0。

•当按键按下,红灯(LED2)闪烁,绿灯(LED1)熄灭,同时蜂鸣器响起,数码管开始倒计时9S,此状态持续时间为9s。

•9s后,恢复初始状态。

四、设计步骤

1、使用Quartus II建立一个工程文件和顶层文件;

2、使用SOPC Builder建立一个简单Nios II硬件系统

1)启动SOPC Builder

2)指定目标FPGA

3)添加NiosII内核及其他外设

A、添加NiosII、SRAM、JTAG-UART、Avalon总线的I P

B、添加一个2位的输入型PIO作为按键key

C、添加两个1位的输出型PIO作为 led1及led2的输出端口

D、添加一个1位的输出型PIO作为蜂鸣器的输入端口A

E、添加一个3位的输出型PIO作为数码管的位选sel

F、添加一个8位的输出型PIO作为数码管的段选dat

4)指定基地址和中断优先级

5)设置NiosII复位和异常地址

6) 编译生成NiosII系统

SOPC Builder行程图如下:

3、在Quartus II中建立一个蜂鸣器

1)用VHDL语言编写蜂鸣器程序

2)编译成功后Creat symbol,生成Project sing

4、在Quartus II中编译Nios II硬件系统并生成配置文件

1)在Quartus II加入Nios II系统符号到顶层文件

2)给各端口加入输入输出引脚,并重命名

3)设置参数

4)编译顶层文件

5)分配管脚

6)再次编译

5、在Nios II IDE中建立C/C++工程,编写用户程序

6、编译用户程序

7、下载.SOF至FPGA,运行程序,观察结果

五、设计程序

蜂鸣器程序(VHDL):

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY sing1 IS

PORT(

CLK:IN STD_LOGIC;

p:IN STD_LOGIC;

-- DIGIT:BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0);

SPEAKER:OUT STD_LOGIC);

END ENTITY;

ARCHITECTURE SONG OF sing1 IS

SIGNAL DRIVER,ORIGIN:STD_LOGIC_VECTOR(12 DOWNTO 0); SIGNAL COUNTER:INTEGER RANGE 0 TO 140;

SIGNAL COUNTER1:INTEGER RANGE 0 TO 3;

SIGNAL COUNTER2:INTEGER RANGE 1 TO 10000000; SIGNAL DIGIT :STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL COUNT :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL CARRIER,CLK_4MHZ,CLK_4HZ:STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF COUNTER1=1 THEN CLK_4MHZ<='1';

COUNTER1<=2;

ELSIF COUNTER1=3 THEN CLK_4MHZ<='0';

COUNTER1<=0;

ELSE COUNTER1<=COUNTER1+1;

END IF;

IF COUNTER2=5000000 THEN CLK_4HZ<='1';

COUNTER2<=5000001;

ELSIF COUNTER2=10000000 THEN CLK_4HZ<='0';

COUNTER2<=1;

ELSE COUNTER2<=COUNTER2+1;

END IF;

END IF;

END PROCESS;

PROCESS(CLK_4MHZ)

BEGIN

IF CLK_4MHZ'EVENT AND CLK_4MHZ='1' THEN IF DRIVER="1111111111111"THEN

CARRIER<='1';

DRIVER<=ORIGIN;

ELSE

DRIVER<=DRIVER+1;

CARRIER<='0';

END IF;

END IF;

END PROCESS;

PROCESS(CARRIER)

相关文档
最新文档