课程设计.docx
- 文档编号:23252802
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:17
- 大小:523.68KB
课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
课程设计
SoPC课程设计(报告)
题目:
液晶显示控制器
学院:
电子工程学院
系部:
微电子学系
专业:
集成电路设计与集成系统
班级:
1001
学生姓名:
指导教师:
刘有耀
起止时间:
2013年6月17日——2013年6月28日
目录
1、课程设计要求1
1.1基本要求1
1.2实验使用平台1
1.3液晶显示控制器1
2、总体方案1
2.1总体方案流程2
3、硬件电路顶层设计、模块划分、引脚定义3
3.1顶层模块3
3.2模块划分4
3.3引脚定义4
4、电路设计及NiosII设计5
4.1电路设计图5
5、综合与布局布线5
6、FPGA下载代码和引脚分布6
6.1FPGA代码下载6
6.2引脚分布图7
7、软件总体设计及画出流程图8
7.1软件的总体设计8
7.2软件流程图9
8、程序设计10
8.1源代码10
9、程序编译下载及仿真调试12
10、心得体会12
1、课程设计要求
1.1基本要求
语言输入方式作为电路设计工具,在NiosII上采用C语言实现编程,自定向下正向设计方法,先本次课程设计要求所有题目采用QuartusII工具提供的图形输入或者VerilogHDL设计硬件系统,再进行软件编程,能够生成正确的FPGA下载代码和NiosII执行的软件代码。
硬件功能仿真和时序仿真采用第三方工具(建议为:
modelsim),综合与布局布线工具为:
QuartusII,SOPCBuilder建立软件运行环境,我所选取的题目是液晶显示控制器。
1.2实验使用平台
实验平台使用Altera的DE2开发板,开发工具使用Altera的QuartusII和NiosIIIDE。
1.3液晶显示控制器
在字符型液晶显示器上移动显示“XIANUNIVERSITYPOSTANDTELECOMMUNICATIONSYOURNAME2013-6”,要求FPGA设计硬件,内嵌NiosII,液晶显示采用软件实现。
2、总体方案
根据题目的要求,为实现功能需要采用软硬件结合的方式。
用硬件实现电路的搭建,完成硬件电路的功能,用到的硬件有一个复位开关,lcd显示屏,一个片上存储器,50M系统自带晶振时钟;
用软件实现在字符型液晶显示器上移动显示“XIANUNIVERSITYPOSTANDTELECOMMUNICATIONSCHENJUN2013-6”,当复位开关拨上时,系统自动在第一行显示“XIANUNIVERSITY”,后每个1秒中字符自右向左移动一位,即移位一次后显示“IANUNIVERSITYP”,以此类推移位59次后,系统自动清屏,显示下一轮;中途拨动拨动开关亦可重新开始显示。
生成SOPC
顶层实例化
管脚分配
综合
ROM
复位
LCD
CPU
硬件
LCD滚动显示
2.1总体方案流程
软件
LCD初始化
LCD字符显示
LCD字符移动
LCD移动显示
硬件下载
软件下载
LCD滚动显示
3、硬件电路顶层设计、模块划分、引脚定义
3.1顶层模块
在lcd_inst中对各部分硬件进行实例化,使用verilog硬件描述语言进行对时钟,复位,lcd使能位,屏幕的点亮等进行实例化。
代码如下:
modulelcd_inst(
outputLCD_E,
outputLCD_RS,
outputLCD_RW,
inout[7:
0]LCD_data,
inputclk,
inputres,
outputLCD_ON,
outputLCD_BLON
);
assignLCD_ON=1'd1;
assignLCD_BLON=1'd0;
lcdlcd2(
//1)globalsignals:
.clk(clk),
.reset_n(res),
//the_lcd1
.LCD_E_from_the_lcd1(LCD_E),
.LCD_RS_from_the_lcd1(LCD_RS),
.LCD_RW_from_the_lcd1(LCD_RW),
.LCD_data_to_and_from_the_lcd1(LCD_data)
);
Endmodule
3.2模块划分
显示模块:
1602lcd显示屏;
控制模块:
NiosII经济型软核,40960byte的片上存储器,复位开关为系统初始复位,
3.3引脚定义
在顶层电路描述文件lcd_inst中进行引脚的定义,其中包括时钟clk,复位res,
Lcd使能端LCD_E,lcd读写端LCD_RW,lcd数据输入端LCD_data,lcd屏幕开启端
LCD_ON等端口。
outputLCD_E,
outputLCD_RS,
outputLCD_RW,
inout[7:
0]LCD_data,
inputclk,
inputres,
outputLCD_ON,
outputLCD_BLON
4、电路设计及NiosII设计
4.1电路设计图
电路设计连接原理图
5、综合与布局布线
电路原理图连接完成以后,就可进行原理图的综合与布局布线,此过程的主要目的是将原理图级的电路转化形成优化的门级电路网表,结果如下图所示:
综合与布局布线图
6、FPGA下载代码和引脚分布
6.1FPGA代码下载
综合完成后即可进行fpga的硬件下载,下载完成如图所示:
FPGA的下载完成图
6.2引脚分布图
引脚分布图
7、软件总体设计及画出流程图
7.1软件的总体设计
题目要求多要实现的功能:
使XIANUNIVERSITYPOSTANDTELECOMMUNICATIONSYOURNAME2013-6这一字符串的滚动显示,LCD一行只能显示16个字符,我一次先让其显示在第一行显示00-15这16个字符,光标时钟定位在第一行,然后每个一秒钟进行一次移位,保存它的首符到text,随后让后一个字符覆盖前一个字符,即i=i+1;最后把首字符赋给该组字符串最后一个字符,达到字符串的左移,再次进行循环LCD显示这次显示的就是最新的字符串,依次循环显示,即可达到滚动的效果。
LCD初始化模块:
voidLCD_Init()
{
lcd_write_cmd(LCD1_BASE,0x38);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x0C);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x01);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x06);
lcd_write_cmd(LCD1_BASE,0x01);
lcd_write_cmd(LCD1_BASE,0x80);
usleep(2000);
}
LCD第一行显示模块:
voidLCD_Show_Text(char*Text)
{
inti;
for(i=0;i<16;i++)
{
lcd_write_data(LCD1_BASE,Text[i]);
usleep(20000);
LCD光标定位第一行:
voidLCD_Line1()
{
lcd_write_cmd(LCD1_BASE,0x80);
usleep(2000);}
7.2软件流程图
N
Y
8、程序设计
8.1源代码
根据上述流程图设计程序,实现LCD字符滚动显示的功能,源程序代码如下:
#include
#include
#include
#include"system.h"
#ifndef__LCD_H__
#define__LCD_H__
#definelcd_write_cmd(base,data)IOWR(base,0,data)
#definelcd_read_cmd(base)IORD(base,1)
#definelcd_write_data(base,data)IOWR(base,2,data)
#definelcd_read_data(base)IORD(base,3)
voidLCD_Init();
voidLCD_Show_Text(char*Text);
voidLCD_Line1();
#endif
voidLCD_Init()
{
lcd_write_cmd(LCD1_BASE,0x38);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x0C);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x01);
usleep(2000);
lcd_write_cmd(LCD1_BASE,0x06);
lcd_write_cmd(LCD1_BASE,0x01);
lcd_write_cmd(LCD1_BASE,0x80);
usleep(2000);
}
voidLCD_Show_Text(char*Text)
{
inti;
for(i=0;i<16;i++)
{
lcd_write_data(LCD1_BASE,Text[i]);
usleep(20000);
}
}
voidLCD_Line1()
{
lcd_write_cmd(LCD1_BASE,0x80);
usleep(2000);
}
voidmain()
{
intj;
unsignedchartext;
charTextL[]="XIANUNIVERSITYPOSTANDTELECOMMUNICATIONSYUJINLIANG2013-6-20";
LCD_Init();
LCD_Line1();
LCD_Show_Text(TextL);
while
(1)
{
LCD_Line1();
LCD_Show_Text(TextL);
text=TextL[0];
for(j=0;j<=strlen(TextL)-1;j++)
{
TextL[j]=TextL[j+1];
}
TextL[strlen(TextL)]=text;
}
return0;
}
9、程序编译下载及仿真调试
10、心得体会
通过本次SoPC课程设计我学会了QuartusII,SOPCBuider和NiosIIDE2的使用,加强了自己在硬件软件结合方面的能力。
这次实验过程中出现了许多问题,比如复位开关无效,经查明因为引脚分配时出了问题造成的。
这也说明了在实验室方面第一位是细心。
其他一些问题在同学的帮助下也顺利解决。
这个实验课题难点在于如何让字幕移动,这个问题最终通过查阅c语言方面的书籍得到了解答。
我觉得这门课程很有意思,实验中是把各个部分的操作整合在一起,形成一个系统,做实验时要有整体感,一旦出现问题整体的重新进行设置和编译,比如如果添加组建时出现错误,要重新添加,重新生成模块,重新倒入模块,重新编译顶层文件。
通过这次课程设计我学会了独立解决问题的能力,受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计