SOPC课程设计实验报告文档格式.docx
- 文档编号:19045839
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:15
- 大小:118.55KB
SOPC课程设计实验报告文档格式.docx
《SOPC课程设计实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《SOPC课程设计实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
6)编译生成NiosII系统
SOPCBuilder行程图如下:
3、在QuartusII中建立一个蜂鸣器
1)用VHDL语言编写蜂鸣器程序
2)编译成功后Creatsymbol,生成Projectsing
4、在QuartusII中编译NiosII硬件系统并生成配置文件
1)在QuartusII加入NiosII系统符号到顶层文件
2)给各端口加入输入输出引脚,并重命名
3)设置参数
4)编译顶层文件
5)分配管脚
6)再次编译
5、在NiosIIIDE中建立C/C++工程,编写用户程序
6、编译用户程序
7、下载.SOF至FPGA,运行程序,观察结果
五、设计程序
蜂鸣器程序(VHDL):
LIBRARYIEEE;
USEsing1IS
PORT(
CLK:
INSTD_LOGIC;
p:
--DIGIT:
BUFFERSTD_LOGIC_VECTOR(6DOWNTO0);
SPEAKER:
OUTSTD_LOGIC);
ENDENTITY;
ARCHITECTURESONGOFsing1IS
SIGNALDRIVER,ORIGIN:
STD_LOGIC_VECTOR(12DOWNTO0);
SIGNALCOUNTER:
INTEGERRANGE0TO140;
SIGNALCOUNTER1:
INTEGERRANGE0TO3;
SIGNALCOUNTER2:
INTEGERRANGE1TO;
SIGNALDIGIT:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALCOUNT:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALCARRIER,CLK_4MHZ,CLK_4HZ:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
IFCOUNTER1=1THENCLK_4MHZ<
='
;
COUNTER1<
=2;
ELSIFCOUNTER1=3THENCLK_4MHZ<
0'
=0;
ELSECOUNTER1<
=COUNTER1+1;
ENDIF;
IFCOUNTER2=5000000THENCLK_4HZ<
COUNTER2<
=5000001;
ELSIFCOUNTER2=THENCLK_4HZ<
=1;
ELSECOUNTER2<
=COUNTER2+1;
ENDIF;
ENDPROCESS;
PROCESS(CLK_4MHZ)
IFCLK_4MHZ'
EVENTANDCLK_4MHZ='
IFDRIVER="
"
THEN
CARRIER<
DRIVER<
=ORIGIN;
ELSE
DRIVER<
=DRIVER+1;
CARRIER<
PROCESS(CARRIER)
if(p='
)then
IFCARRIER'
EVENTANDCARRIER='
COUNT<
=COUNT+1;
IFCOUNT="
00"
SPEAKER<
endif;
PROCESS(CLK_4HZ)
IFCLK_4HZ'
EVENTANDCLK_4HZ='
IFCOUNTER=140THEN
COUNTER<
ELSECOUNTER<
=COUNTER+1;
CASECOUNTERIS
WHEN0=>
DIGIT<
="
0000011"
WHEN1=>
WHEN2=>
WHEN3=>
WHEN4=>
0000101"
WHEN5=>
WHEN6=>
WHEN7=>
0000110"
WHEN8=>
0001000"
WHEN9=>
WHEN10=>
WHEN11=>
0010000"
WHEN12=>
WHEN13=>
WHEN14=>
WHEN15=>
WHEN16=>
0101000"
WHEN17=>
WHEN18=>
WHEN19=>
1000000"
WHEN20=>
0110000"
WHEN21=>
WHEN22=>
0011000"
WHEN23=>
WHEN24=>
WHEN25=>
WHEN26=>
WHEN27=>
WHEN28=>
WHEN29=>
WHEN30=>
WHEN31=>
0000000"
WHEN32=>
WHEN33=>
WHEN34=>
WHEN35=>
WHEN36=>
0000111"
WHEN37=>
WHEN38=>
WHEN39=>
WHEN40=>
WHEN41=>
WHEN42=>
WHEN43=>
WHEN44=>
WHEN45=>
WHEN46=>
WHEN47=>
WHEN48=>
WHEN49=>
WHEN50=>
WHEN51=>
WHEN52=>
WHEN53=>
WHEN54=>
WHEN55=>
WHEN56=>
WHEN57=>
WHEN58=>
WHEN59=>
WHEN60=>
WHEN61=>
WHEN62=>
WHEN63=>
WHEN64=>
WHEN65=>
WHEN66=>
WHEN67=>
WHEN68=>
WHEN69=>
WHEN70=>
WHEN71=>
WHEN72=>
WHEN73=>
WHEN74=>
WHEN75=>
WHEN76=>
WHEN77=>
WHEN78=>
WHEN79=>
WHEN80=>
WHEN81=>
WHEN82=>
WHEN83=>
WHEN84=>
WHEN85=>
WHEN86=>
WHEN87=>
WHEN88=>
WHEN89=>
WHEN90=>
WHEN91=>
WHEN92=>
WHEN93=>
WHEN94=>
WHEN95=>
WHEN96=>
WHEN97=>
WHEN98=>
WHEN99=>
WHEN100=>
WHEN101=>
WHEN102=>
WHEN103=>
WHEN104=>
WHEN105=>
WHEN106=>
WHEN107=>
WHEN108=>
WHEN109=>
WHEN110=>
WHEN111=>
WHEN112=>
WHEN113=>
WHEN114=>
WHEN115=>
WHEN116=>
WHEN117=>
WHEN118=>
WHEN119=>
WHEN120=>
WHEN121=>
WHEN122=>
WHEN123=>
WHEN124=>
WHEN125=>
WHEN126=>
WHEN127=>
WHEN128=>
WHEN129=>
WHEN130=>
WHEN131=>
WHEN132=>
WHEN133=>
WHEN134=>
WHEN135=>
WHEN136=>
WHEN137=>
WHEN138=>
WHEN139=>
WHENOTHERS=>
ENDCASE;
CASEDIGITIS
WHEN"
=>
ORIGIN<
0"
ENDSONG;
警示灯总程序:
#include<
>
sys/>
#include"
sys/"
intnum;
staticvoidButton_ISR_Init(void);
staticvoidButton_Irq_Handler(void*context,alt_u32id);
alt_u8segtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0~9段码
staticvoiddisplay(intnum);
//按键初始化
staticvoidButton_ISR_Init(void)
{
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0xff);
//允许8个按键中断
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0);
//清除中断标志寄存器
alt_irq_register(KEY_IRQ,NULL,Button_Irq_Handler);
//注册中断
}
staticvoiddisplay(intnum)
{
IOWR_ALTERA_AVALON_PIO_DATA(SEL_BASE,0);
//数码管位选
IOWR_ALTERA_AVALON_PIO_DATA(DAT_BASE,segtab[num]);
//显示倒计时
usleep(1000);
/*------------------------------------------------------------------
***********************按键中断处理函数****************************
*-----------------------------------------------------------------*/
staticvoidButton_Irq_Handler(void*context,alt_u32id)
inti;
for(i=0;
i<
9;
i++)
{
num=9-i;
display(num);
IOWR_ALTERA_AVALON_PIO_DATA(A_BASE,1);
//蜂鸣器响起
IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE,1);
usleep(500000);
IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE,0);
}
IOWR_ALTERA_AVALON_PIO_DATA(A_BASE,0);
//蜂鸣器关闭
num=0;
intmain(void)
printf("
Begin!
\n"
);
Button_ISR_Init();
//按键中断初始化
while
(1)
{
usleep(100000);
IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE,1);
}
return0;
六、设计结果
按键未按下时,处于初始状态:
LED1亮,LED2灭,数码管显示为0,蜂鸣器未启动;
按键按下之后,LED1灭,LED2闪烁,数码管进入9秒倒计时并且蜂鸣器响;
9秒后恢复初始状态。
七、设计问题
设计中遇到了不少问题:
一开始因为延迟原因使得蜂鸣器音乐间断,后来将延迟时间缩短后问题解决;
然后在数码管动态显示时,也存在延时问题,按下按键后数码管在一秒后才进入倒计时,修改程序后问题解决;
八、心得感受
通过本次设计,我们更加熟悉C语言和SOPC,也在自己动手设计中发现了平时所没遇到的很多问题,包括硬件和软件方面的,有一部分是粗心,有一部分确实是不够了解这门技术;
因此在设计过程中,我们不断和其他小伙伴探讨后解决了问题,并从他们那里学到了不少东西。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOPC 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)