VerilogHdl语言设计点阵精编文档格式.docx

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

VerilogHdl语言设计点阵精编文档格式.docx

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

VerilogHdl语言设计点阵精编文档格式.docx

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

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

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

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

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

由于用于显示屏的LED在亮度和寿命上的要求高于LED指示灯,平均价格在指示灯LED之上,这就导致显示屏用LED市场规模达到亿元,超过指示灯位居榜首成为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,周期小于即可符合视觉暂留要求。

此外一次驱动一列或一行(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点阵抽象成了一个二维数组。

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

六、程序设计

设计程序如下:

LIBRARYIEEE;

USE

USELED1616IS

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)

IFRISING_EDGE(clk48M)THEN

IFclk_count=400THEN

clk_count<

=0;

clk60K<

=notclk60K;

ELSE

=clk_count+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clk60K)

IFRISING_EDGE(clk60K)THEN

c_state<

=n_state;

--主控时序进程

PROCESS(c_state)

CASEc_stateIS

WHENst0=>

n_state<

=st1;

STR_R<

='

1'

;

SCLK_R<

0'

WHENst1=>

=st2;

WHENst2=>

=st3;

WHENst3=>

if(cnt32>

="

100000"

)then

n_state<

=st0;

else

endif;

WHENOTHERS=>

ENDCASE;

PROCESS(SCLK_R)

if(STR_R='

data_shift<

=sdat_in;

cnt32<

="

000000"

elsIFFAllING_EDGE(SCLK_R)THEN

data_shift(31downto0)<

=data_shift(30downto0)&

'

=cnt32+'

--LS416

USELS416IS

PORT(SEL:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Dout:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDLS416;

ARCHITECTUREBHVOFLS416IS

PROCESS(SEL)

BEGIN

CASESELIS

WHEN"

0000"

=>

Dout<

110"

0001"

101"

0010"

011"

0011"

111"

0100"

0101"

0110"

0111"

1000"

1001"

1010"

1011"

1100"

1101"

1110"

1111"

WHENOTHERS=>

NULL;

ENDPROCESS;

ENDBHV;

--MAX280

USEMAX280IS

PORT(Qa:

INSTD_LOGIC_VECTOR(8DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDMAX280;

ARCHITECTUREBEHOFMAX280IS

SIGNALQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

PROCESS(Qa)

IF(Qa>

=280)then

Q<

=Qa-280;

else

=Qa;

ENDBEH;

modulecnt4b(clk,q);

inputclk;

output[3:

0]q;

reg[3:

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)

clockout=(counter>

=);

if(clockout)

counter<

=24'

d0;

=counter+1'

moduleint_divb(clockin,counter,clockout);

output[8:

reg[8:

=280);

=9'

moduleadd4(dataa,datab,result);

input[8:

0]dataa;

0]datab;

0]result;

always@(dataaordatab)

result<

=dataa+datab;

七、电路仿真图

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