EDA技能实训实训报告流动字幕.docx
- 文档编号:5602095
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:14
- 大小:158.95KB
EDA技能实训实训报告流动字幕.docx
《EDA技能实训实训报告流动字幕.docx》由会员分享,可在线阅读,更多相关《EDA技能实训实训报告流动字幕.docx(14页珍藏版)》请在冰豆网上搜索。
EDA技能实训实训报告流动字幕
《EDA应用技术技能实训》
实训报告
实训名称:
__简易流动字幕设计
专业:
电子信息工程技术
班级:
电子信息
学号:
姓名:
指导教师:
二零一五年六月十一日
一、实训目的
1.掌握运用EDA技术设计简单电子电路的基本技能。
2.掌握简易流动字幕的工作原理。
3.掌握简单电子电路调试的基本方法。
二、课程设计报告内容
1.实训方案的论证:
方案一本文系统的LED点阵模块共由16×16=256个LED发光二极管组成。
如何在该点阵模块上显示汉字是本文设计的关键技术。
本文系统设计是采用一种16路动态分时扫描技术来实现的。
具体方法是将4个8×8数组的显示模块组合成两个16行16列的扫描结构。
其行输入端与FPGA内的只读存储器ROM的16位数据输出端口相连16个列控制端与一个4-16译码器的输出相连而译码器的输入端和片选信号又与FPGA内的列扫描控制模块的输出端口相连。
图1-1系统结构框图
方案二verilog程序设计的是硬件可以“并发执行”。
本设计可以将LED显示屏要的显示内容抽象成一个二维数组数组中的‘1’对映点阵显示屏上面的亮点用verilog语言设计一个进程将这个数组动态显示在LED显示屏上再利用另一个进程对这个数组按一定频率进行数据更新更新的方式可以有多种。
因为两个进程是同时进行的并发执行如果对数组中的汉字数据按滚动的方式更新则可实现汉字的滚动显示。
该方案的原理图。
图1-2系统结构框图
方案比较:
方案一很容易实现而且占用FPGA的资源较少。
但是由于其实现方式的局限性该方案只能实现汉字的滚动显示。
方案二中将LED点阵抽象成了一个二维数组。
可以设计
一些比较复杂的算法来控制这个数组使设计的系统不但可以滚动显示汉字还可以扩展
一些其它的显示效果。
但是方案二中对数组的处理部分对FPGA芯片的资源消耗太大所
以最终选择方案一。
2.实训用的工具、设备、及其它相关软、硬件介绍
硬件设备、仪器仪表:
EDA实验箱
软件:
1、QUARTUS
2、文档处理软件:
Word
3、绘图软件:
Visio
3.原理框图及说明
这是一个16进制的计数器,负责当前点阵数据的扫描计数,输入脉冲的频率为1KHZ左右,这一模块主要是通过计数器将每一个字通过刷屏的效果显示出来,这样达到了字幕流动的效果,使观看者更加方便。
这是一个计数器,它是用来产生初始化位置,时钟频率为5HZ左右,如果频率过高的话它的流动速度加快,这样人眼就不太能分辨清楚,clr是一个高电平触发的复位,stop是一个低电平触发的暂停,它可以随时暂停甚至可以暂停半个字,pc是一个高电平触发的左右流动,当它为高电平时它是向右流动,它为低电平时它是向左流动。
Jfq是一个特殊的加法器,将计数的数据相加后,控制rom的数据输出,将rom输出的点阵数据加到点阵模块即可实现汉字流动的效果。
这是一个字模模块,通过它改变字体或汉字。
一个4-16译码器(74LS154)输入完成FPGA中16×16点阵显示模块的列扫描模式。
FPGA定义的只读存储器ROM中保存了要显示的汉字的数模并以16位的数据宽度输出到LED阵显示模块的行端配合列扫描控制共同完成汉字的滚动显示。
只是最后工程的最后效果。
4.软件设计流程图及关键源程序设计
16进制计数器:
moduleliudongzimou(clk,addr);
inputclk;
output[7:
0]addr;
reg[7:
0]addr;
always@(posedgeclk)//低位计数进程
begin
if(addr==4'd15)//判断低位是否为零,如果不是零,则计数
addr<=4'd0;
else
addr<=addr+1;//高位计数
end
Endmodule
显示计数器(包括暂停,左右移动,复位):
modulecnt64(clk,clr,stop,pc,q);
inputclk,clr,stop,pc;
output[7:
0]q;
reg[7:
0]q;
always@(posedgeclkorposedgeclr)//低位计数进程
begin
if(clr)
q<=0;
else
if(stop)
begin
if(!
pc)
begin
if(q==127)
q<=0;
else
q<=q+1;
end
else
if(q==0)
q<=127;
else
q<=q-1;
end
end
//addr<=6'd0;
//end
//elseif(!
pause)
//begin
//if(addr==6'd127)//判断低位是否为零,如果不是零,则计数
//addr<=6'd0;
//else
//addr<=addr+1;//高位计数
//end
//end
Endmodule
特殊加法器:
modulejfq(in1,in2,out);
input[7:
0]in1;
input[7:
0]in2;
output[7:
0]out;
reg[7:
0]out;
always@(in1,in2,out)
begin
out<=in1+in2;
end
Endmodule
字库:
modulerom(address,out);
input[7:
0]address;
output[15:
0]out;
reg[15:
0]data;
assignout=data;
always@(address)
begin
case(address)
/*-------汉字取模:
16*16汉字,阴码,逐列转换,低位在前(逆向)------*/
/*----郑-----*/
8'b00000000:
data=16'h0104;
8'b00000001:
data=16'h8904;
8'b00000010:
data=16'h6908;
8'b00000011:
data=16'h0930;
8'b00000100:
data=16'h1FC0;
8'b00000101:
data=16'h2940;
8'b00000110:
data=16'hC920;
8'b00000111:
data=16'h0918;
8'b00001000:
data=16'h0900;
8'b00001001:
data=16'h0000;
8'b00001010:
data=16'h7FFF;
8'b00001011:
data=16'h4010;
8'b00001100:
data=16'h4610;
8'b00001101:
data=16'h5908;
8'b00001110:
data=16'h60F0;
8'b00001111:
data=16'h0000;
/*----铁-----*/
8'b00010000:
data=16'h0280;
8'b00010001:
data=16'h0C80;
8'b00010010:
data=16'h3480;
8'b00010011:
data=16'hD7FE;
8'b00010100:
data=16'h1484;
8'b00010101:
data=16'h108A;
8'b00010110:
data=16'h0312;
8'b00010111:
data=16'h3D04;
8'b00011000:
data=16'h0908;
8'b00011001:
data=16'h0930;
8'b00011010:
data=16'hFFC0;
8'b00011011:
data=16'h0930;
8'b00011100:
data=16'h090C;
8'b00011101:
data=16'h0906;
8'b00011110:
data=16'h0104;
8'b00011111:
data=16'h0000;
/*----职-----*/
8'b00100000:
data=16'h4008;
8'b00100001:
data=16'h4008;
8'b00100010:
data=16'h7FF0;
8'b00100011:
data=16'h4910;
8'b00100100:
data=16'h4910;
8'b00100101:
data=16'h7FFF;
8'b00100110:
data=16'h4020;
8'b00100111:
data=16'h0022;
8'b00101000:
data=16'h7F84;
8'b00101001:
data=16'h4138;
8'b00101010:
data=16'h4110;
8'b00101011:
data=16'h4100;
8'b00101100:
data=16'h4120;
8'b00101101:
data=16'h7F90;
8'b00101110:
data=16'h000C;
8'b00101111:
data=16'h0000;
/*----院-----*/
8'b00110000:
data=16'h7FFF;
8'b00110001:
data=16'h4000;
8'b00110010:
data=16'h4C40;
8'b00110011:
data=16'h5220;
8'b00110100:
data=16'h61C1;
8'b00110101:
data=16'h3082;
8'b00110110:
data=16'h248C;
8'b00110111:
data=16'h24F0;
8'b00111000:
data=16'hA480;
8'b00111001:
data=16'h6480;
8'b00111010:
data=16'h24FE;
8'b00111011:
data=16'h2481;
8'b00111100:
data=16'h2481;
8'b00111101:
data=16'h3081;
8'b00111110:
data=16'h208F;
8'b00111111:
data=16'h0000;
default:
data=16'hxxxx;
endcase
end
Endmodule
串转并:
moduleczb(clk,in_h,in_g,out,str);
inputclk;
input[15:
0]in_h;
input[15:
0]in_g;
outputout;
outputstr;
regout;
regstr;
reg[31:
0]data;
reg[4:
0]count;
always@(posedgeclk)
begin
//data<=32'h00fffffb;
//data<={16'h00ff,in[15:
0]};
data<={in_h[15:
0],in_g[15:
0]};
if(count==0)
str<=1;
else
str<=0;
end
always@(posedgeclk)
begin
count<=count+1;
out<=data[count];
//out<=in[count];
end
Endmodule
3、结论
现代文明的一个明显特征是城市中随处可见的五颜六色的广告宣传其中大多都是由LED点阵制作的汉字或图形广告广泛应用在银行、医院、酒店、火车站、运动场馆等各种公共场所。
汉字转动显示器的传统设计方法是用单片机来控制的固然单片机方案具有价格低廉程序编程灵活等特点但由于单片机硬件资源术具有系统设计效率高、集成度好、保密性强、易的限制未来对设计的变更和升级总是要付出较多研发经费和较长投放市场周期的代价甚至有可能需要重新设计。
况且在以显示为主的系统中单片机的运算和控制等主要功能的利用率很低单片机的上风得不到发挥相当于很大的资源浪费。
该系统能实现如下功能:
1.字幕上的字可以正常显示,并且没有抖屏或者死机的现象。
2.可以通过一个指拨开关实现字幕上的字暂停或者流动,可以实现暂停半个字。
3.可以通过一个指拨开关实现字幕上的字向左流动或者向右流动,中间不会出现跳字现象。
4.可以通过一个指拨开关实现字幕上的字恢复到原来第一个字。
四、实训体会和总结
通过这次课程设计使自己明白了扎实的理论知识和实践能力的重要性。
以前只是懵懵懂懂理解了书中的基本的知识掌握不是很牢固在这次课程设计中吃了不少的程序闭门羹从而增加了自己的困阻走了许多弯路。
上机操作仿真也体现了自己的不足之处开始是QuartusII7.2软件的不熟悉以及对原理掌握不是很透彻有点吃力但是经过了对书中的最基本的例题仿真练习过后掌握了QuartusII7.2软件最基础的使用方法使自己在后面的程序设计中做好了好的铺垫。
总得来说这次课程设计不仅使自己更加牢固的掌握了书中的理论知识提高了自己的动手实践能力从而看到了自己身上的不足之处为以后的课设打下了基础。
在课设之中遇到了一些问题同学们的帮助下完成了这次课设在此表示衷心的感谢。
五、附录
附录:
实训作品照片
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技能 实训实训 报告 流动 字幕