VerilogHdl语言设计点阵.docx

上传人:b****2 文档编号:23186241 上传时间:2023-05-15 格式:DOCX 页数:16 大小:219.35KB
下载 相关 举报
VerilogHdl语言设计点阵.docx_第1页
第1页 / 共16页
VerilogHdl语言设计点阵.docx_第2页
第2页 / 共16页
VerilogHdl语言设计点阵.docx_第3页
第3页 / 共16页
VerilogHdl语言设计点阵.docx_第4页
第4页 / 共16页
VerilogHdl语言设计点阵.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

VerilogHdl语言设计点阵.docx

《VerilogHdl语言设计点阵.docx》由会员分享,可在线阅读,更多相关《VerilogHdl语言设计点阵.docx(16页珍藏版)》请在冰豆网上搜索。

VerilogHdl语言设计点阵.docx

VerilogHdl语言设计点阵

四川工程职业技术学院

 

VerilogHdl语言设计点阵

 

报告册

 

班级:

2014通信技术1班

姓名:

刘巧琳

指导老师:

郭欣

时间:

2016.7.5

 

一、摘要

本论文主要阐述了基于FPGA设计16*16的点阵,让点阵静态或动态显示一个字或者一段话,LED显示屏如今在生活中应用广泛,各大广告商利用LED显示屏的便捷性宣传产品。

这次实验需要利用EDA工具软件QuartusII编写并调试系统的VerilogHDL程序。

并且每一个模块都在这个软件下进行了仿真。

系统的VerilogHDL程序编好过后先在实验室的EDA实验箱上下载调试、验证。

关键词:

LED、FPGA、VerilogHDL、点阵

Abstract

ThispapermainlyelaboratedbasedontheFPGAdesignof16*16lattice,letlatticestaticordynamicdisplayawordorparagraph,LEDdisplaynowinlifearewidelyused,eachbigadvertisersuseLEDdisplayoftheconvenienceofpromotionalproducts.ThisdesignneedstousetheEDAtoolsoftwareVerilogtowriteanddebugthesystem'sHDLQuartusIIprogram.Andeachmoduleissimulatedinthesoftware.ThesystemoftheHDLVerilogprogramiscompiledinthelaboratoryafterthefirstEDAtestboxtodownloadanddebug,verify.

 

Keyword:

LED、FPGA、VerilogHDL、lattice

二、绪言

目前,在机场、饭店等很多公共场所都能看到美观、实用的电子显示屏,它以高清、节能、控制简单、寿命长、耐冲击、性能稳定、成本低廉、环保等优势迅速占领市场。

随着显示屏尺寸的扩大、亮度要求的增加,数据传输和控制的时间也会增加,如果仍然采用单片机作为控制器,将会影响显示效果,严重时可能无法正常工作,然而,这时若采用可编程逻辑器件作为控制器,则可解决这一难题。

一方面,随着微电子技术的发展和生产工艺的提高,器件的性能大有很大的提高,出现了高性能的现场可编程逻辑器件(FPGA),FPGA具有处理速度高、可靠性高、高容量和集成度高等特点,在大屏幕显示系统设计中使用FPGA可以满足现在的LED大屏幕系统对于处理视频数据的高速要求,同时改善电路的性能,缩小系统的体积。

设计中使用硬件描述语言进行电路设计,可以随时根据设计需要进行修改,而不必对硬件进行修改,它使系统的设计和调试非常方便,大大的缩短了产品的开发周期,降低了开发成本,也方便以后的系统升级。

 

      50年前人们已经了解半导体材料可产生光线的基本知识,第一个商用二极管产生于1960年。

LED是英文light emitting diode(发光二极管)的缩写,它的基本结构是一块电致发光的半导体材料,置于一个有引线的架子上,然后四周用环氧树脂密封,即固体封装,所以能起到保护内部芯线的作用,所以LED的抗震性能好。

  我国LED显示屏市场起步较早,市场上出现了一批具有很强实力的LED显示屏生产厂商。

目前LED显示屏已经广泛应用到车站、银行、证券、医院。

在LED需求量上,LED显示屏仅次于LED指示灯名列第二,占到LED整体销量的23.1%。

由于用于显示屏的LED在亮度和寿命上的要求高于LED指示灯,平均价格在指示灯LED之上,这就导致显示屏用LED市场规模达到32.4亿元,超过指示灯位居榜首成为LED的主要应用市场。

  

我国LED显示屏市场起步较早,市场上出现了一批具有很强实力的LED显示屏生产厂商。

目前LED显示屏已经广泛应用到车站、银行、证券、医院。

在LED需求量上,LED显示屏仅次于LED指示灯名列第二,占到LED整体销量的23.1%。

由于用于显示屏的LED在亮度和寿命上的要求高于LED指示灯,平均价格在指示灯LED之上,这就导致显示屏用LED市场规模达到32.4亿元,超过指示灯位居榜首成为LED的主要应用市场。

凭借着独特优势,LED全彩显示屏广泛应用在体育场馆、市政广场、演唱会、车站、机场等场所。

   LED早已应用在以手机为主的小尺寸液晶面板背光市场中,手机产量的持续增长带动了背光源市场的快速发展。

特别是2003年彩屏手机的出现更是推动白光LED市场的快速发展。

但随着手机产量进入平稳增长阶段以及技术提升导致用于手机液晶面板背光源LED数量减少,使得LED在手机背光源中用量增速放缓,2005年背光源用LED数量超过12亿只,未来几年增长率也将保持在个位数。

数量增速的放缓加上平均价格的不断下降,最终导致小尺寸背光源市场增长乏力,同时,中大尺寸背光源市场虽为厂商新宠,但在2006年还不能形成规模。

在上述两个因素的影响下,背光源市场将在2006年出现1%的负增长。

2005年背光源市场规模超过15亿元。

      

 

三、点阵基本知识

16*16扫描LED点阵只要其对应的X、Y轴顺向偏压,即可使LED发亮。

例如如果想使左上角LED点亮,则Y0=1,X0=0即可。

应用时限流电阻可以放在X轴或Y轴。

它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。

 

LED点阵每个点都有一个红色的发光二极管。

点阵内的二极管间的连接都是行共阳,列共阴。

本实验采用共阴,当二极管的共阳极为高电平,共阴极为低电平时,所接点发光;反之处于截止状态,不放光。

数字电路。

(图1-7所示)

 

四、电路分析

本设计采用16×16LED点阵屏由4块8×8LED点阵拼接而成,每一块点阵都有8行8列,因此总共有16根行控制线和16根列控制线。

EDA实验箱上有其接口电路,STR,SI,SCK,且实验箱上采用的是4个74HC595来实现行扫描和列扫描的。

用动态分时扫描技术使LED点阵模块显示字体,需要进行两步工作。

第一步是获得数据并保存,即在存贮器中建立汉字数据库。

第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。

获得图像数据的步骤是,先将要显示的每一幅图像画在一个被分成16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布,再将此分布关系以32×16的数据结构组成64个字节的数据,并保存在只读存贮器ROM中。

以这种方式将若干个汉字的数据贮存在存贮器内,就完成了图像数据库的建立工作。

电路中采用SPI接口的方式对LED点阵进行操作,LATTICE_SI对应SPI的MOSI,LATTICE_STR对应SPI的nCS,LATTICE_SCK对应SPI的SCK。

U17,U18,U19以及U20(74HC595)构成一个串入并出的32bit数据移位寄存器。

当LATTICE_STR低电平有效时,32bit数据在32个LATTICE_SCK时钟下有LATTICE_SI串行输入,当LATTICE_STR由低电平变成高电平时,32bit数据并行输出。

在主板上主板上数据输出时LAD~LDP对应行,而LD1~LD16对应列,最先移入的数据被当作16列(LD16),最后移入的被当作第一行(LDA)。

 

 

五、设计方案

点阵LED一般采用扫描式显示,实际运用分为三种方式:

(1)点扫描

(2)行扫描

(3)列扫描

若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。

若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。

此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足

方案一:

本文系统的LED点阵模块,共由16×16=256个LED发光二极管组成。

如何在该点阵模块上显示汉字是本文设计的关键技术。

本文系统设计是采用一种16路动态分时扫描技术来实现的。

具体方法是,将4个8×8数组的显示模块组合成两个16行16列的扫描结构。

其行输入端与FPGA内的只读存储器ROM的16位数据输出端口相连;16个列控制端与一个4-16译码器的输出相连;而译码器的输入端和片选信号又与FPGA内的列扫描控制模块的输出端口相连。

方案二:

VerilogHDL程序设计的是硬件,可以“并发执行”。

本设计可以将LED显示屏要的显示内容抽象成一个二维数组(数组中的‘1’对映点阵显示屏上面的亮点),用VerilogHDL语言设计一个进程将这个数组动态显示在LED显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。

因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示

通过比较我们选择方案二。

虽然方案一很容易实现,而且占用FPGA的资源较少,但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。

方案二中将LED点阵抽象成了一个二维数组。

可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。

 

六、程序设计

设计程序如下:

--LED1616.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYLED1616IS

PORT(

clk48M:

INSTD_LOGIC;--系统时钟

sdat_in:

INSTD_LOGIC_VECTOR(31downto0);

STR:

OUTSTD_LOGIC;

SCLK:

OUTSTD_LOGIC;

d_out:

OUTSTD_LOGIC

);

END;

ARCHITECTUREoneOFLED1616IS

SIGNALclk_count:

integerrange0to400;

SIGNALcnt32:

STD_LOGIC_VECTOR(5downto0);

SIGNALclk60K,STR_R,SCLK_R,d_out_R:

STD_LOGIC;

SIGNALdata_shift:

STD_LOGIC_VECTOR(31downto0);

TYPEstatesIS(st0,st1,st2,st3);

SIGNALc_state,n_state:

states;

BEGIN

STR<=STR_R;

SCLK<=SCLK_R;

d_out<=d_out_R;

d_out_R<=data_shift(31);

PROCESS(clk48M)

BEGIN

IFRISING_EDGE(clk48M)THEN

IFclk_count=400THEN

clk_count<=0;

clk60K<=notclk60K;

ELSE

clk_count<=clk_count+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clk60K)

BEGIN

IFRISING_EDGE(clk60K)THEN

c_state<=n_state;--主控时序进程

ENDIF;

ENDPROCESS;

PROCESS(c_state)

BEGIN

CASEc_stateIS

WHENst0=>

n_state<=st1;

STR_R<='1';

SCLK_R<='0';

WHENst1=>

n_state<=st2;

STR_R<='0';

SCLK_R<='0';

WHENst2=>

n_state<=st3;

STR_R<='0';

SCLK_R<='1';

WHENst3=>

if(cnt32>="100000")then

n_state<=st0;

else

n_state<=st2;

endif;

STR_R<='0';

SCLK_R<='0';

WHENOTHERS=>

n_state<=st0;

ENDCASE;

ENDPROCESS;

PROCESS(SCLK_R)

BEGIN

if(STR_R='1')then

data_shift<=sdat_in;

cnt32<="000000";

elsIFFAllING_EDGE(SCLK_R)THEN

data_shift(31downto0)<=data_shift(30downto0)&'0';

cnt32<=cnt32+'1';

ENDIF;

ENDPROCESS;

END;

 

--LS416

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYLS416IS

PORT(SEL:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Dout:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDLS416;

ARCHITECTUREBHVOFLS416IS

BEGIN

PROCESS(SEL)

BEGIN

CASESELIS

WHEN"0000"=>Dout<="1111111111111110";

WHEN"0001"=>Dout<="1111111111111101";

WHEN"0010"=>Dout<="1111111111111011";

WHEN"0011"=>Dout<="1111111111110111";

WHEN"0100"=>Dout<="1111111111101111";

WHEN"0101"=>Dout<="1111111111011111";

WHEN"0110"=>Dout<="1111111110111111";

WHEN"0111"=>Dout<="1111111101111111";

WHEN"1000"=>Dout<="1111111011111111";

WHEN"1001"=>Dout<="1111110111111111";

WHEN"1010"=>Dout<="1111101111111111";

WHEN"1011"=>Dout<="1111011111111111";

WHEN"1100"=>Dout<="1110111111111111";

WHEN"1101"=>Dout<="1101111111111111";

WHEN"1110"=>Dout<="1011111111111111";

WHEN"1111"=>Dout<="0111111111111111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDBHV;

 

--MAX280

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYMAX280IS

PORT(Qa:

INSTD_LOGIC_VECTOR(8DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDMAX280;

ARCHITECTUREBEHOFMAX280IS

SIGNALQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(Qa)

BEGIN

IF(Qa>=280)then

Q<=Qa-280;

else

Q<=Qa;

ENDIF;

ENDPROCESS;

ENDBEH;

 

modulecnt4b(clk,q);

inputclk;

output[3:

0]q;

reg[3:

0]q;

always@(posedgeclk)

begin

if(q==4'b1111)

q=4'b0000;

else

q<=q+1'b1;

end

endmodule

 

moduleint_diva(clockin,clockout);

inputclockin;

outputclockout;

regclockout;

reg[23:

0]counter;

always@(posedgeclockin)

begin

clockout=(counter>=12000000);

if(clockout)

counter<=24'd0;

else

counter<=counter+1'b1;

end

endmodule

 

moduleint_divb(clockin,counter,clockout);

inputclockin;

outputclockout;

output[8:

0]counter;

regclockout;

reg[8:

0]counter;

always@(posedgeclockin)

begin

clockout=(counter>=280);

if(clockout)

counter<=9'd0;

else

counter<=counter+1'b1;

end

endmodule

moduleadd4(dataa,datab,result);

input[8:

0]dataa;

input[8:

0]datab;

output[8:

0]result;

reg[8:

0]result;

always@(dataaordatab)

begin

result<=dataa+datab;

end

endmodule

 

七、电路仿真图

BLOCK1

 

(1-1)

 

(1-2)

 

(1-3)

(1-4)

BLOCK2

(1-5)

ROM

 

(1-6)

 

16*16点阵led内部结构图:

 

(1-7)

 

实验总结

这次的设计是基于FPGA的LED16*16点阵控制设计,经过这次的实验课题设计,使得我对VerilogHDL语言有了更多的认识,掌握了很多平时上课时没有弄清楚的地方,对我在学习VerilogHDL语言有了很大帮助。

从一开学老师布置这个大作业的时候我们就开始了思考,本来做的是矩阵键盘,可能是报告上去的表错误了,我们就做成了点阵。

原本以为这个实验很简单,通过行扫描的方式以极快的频率刷新16*16的点阵二极管让矩阵显示固定的一个值,但是最后去实验室调试的时候问题一个接着一个来了,反正怎么都弄不出来,可想而知我们的设计思路都是错的,把问题想得太简单了。

经过多次修改还是没有成功,虽然有想过放弃,但是看到大家那么努力地完成,自己有了无限的精力去做好它。

在百般无奈下求助老师,老师让我们自己思考、设计后才跟我们解释了电路以及程序的设计方法。

很感谢郭老师的耐心讲解,悉心教导和谆谆教诲,不仅让我们完成了这次的实验,更重要的是学会在过程中进行独立思考分析。

未来还很遥远,我会把这次实验学习到的知识永远记住,不辜负老师的教导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1