SOPC课程设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)