基于 HDL的霓虹灯控制器设计
1引言
随着现代科学的发展,led行业也发生了巨大的变化。集成电路设计赋予了led显示一个不同的生命。基于这种情况,,传统的系统设计方法被可编程逻辑器件取代。
1.1VerilogHDL简介
VerilogHDL是一种描述数字电路和系统的语言。设计者们可以使用HDL语言来阐述自己的设计理念,运用一系列低层次的模块组成一个完整的数字设计系统。
VerilogHDL是在c语言基础上衍生的一种硬件语言,和c语言一样易学易用,其中好多语句和c语言中的语句十分相似,例如if语句、case语句等。一个完整而复杂的VerilogHDL模块是由很多个次级模块组成的,每个次级模块的内容约束在module和endmodule之间。一个次级模块实现一项功能,然后通过嵌套的模式整合到一起,形成一个具有多项功能的模块。
VerilogHDL的设计流程:
1.对硬件描述电路进行功能设计 2.用VerilogHDL语言描述硬件电路
3.用quertusII软件进行模拟和仿真,结果满足要求的话,进行下一步,不满足的话执行第二步 4.对结果进行逻辑综合
5.把验证过的代码下载到硬件电路中进行工作 6.结束
1.2QuertusII软件简介
QuertusII软件是altera公司开发出来,可用做可编程逻辑器件的开发工作的软件。是目前可编程逻辑器件开发软件中比较大众的软件,QuertusII可以自动检测语法中的错误并且提示错误的类型,帮助设计者们更快的找出设计中的不足,使设计的过程变的更加简便快速。
QuertusII软件的设计流程 1建立项目文件 2建立设计文件
3可选择原理图输入或者文本输入的方式
4编译查看有无错误,如果有错误的话,根据提示修改错误 5进行软件仿真,查看结果
6选择开发板的芯片型号,然后选择映射的引脚 7进行编译,完成后下载到开发板中 8设计成功 2霓虹灯控制器 2.1设计思路
该设计主要由两大部分构成,1使用8*8的led点阵作为主显示模块,可以按顺序显示15种状态,2控制其循环显示的主控制模块。在图形的循环控制模块中,通过使用循环变量a在时钟信号的激励下,从0到14变化来控制其循环显示。该设计一共有两个不同频率时钟信号,1是显示模块用来扫描点阵的高频时钟信号,2是循环模块用于切换画面的低频时钟信号。
本设计共使用了两个always模块。第一个是以低频时钟信号上升沿为敏感信号的循环控制模块。模块中只有一个变量a,通过a从0到14的变化达到切换画面的目的。第二个模块是以高频时钟信号上升沿为敏感信号的显示模块。由两个case语句嵌套构成。主case语句的变量是a,从case语句的变量是b。a由0变化到14,显示15种画面,如图1中a~o所示。b则从0变化到7代表对点阵进行逐行
基于HDL的霓虹灯控制器设计第2页共12页
扫描。该模块的输出信号主要有点阵的行扫描变量row,列变量ra。
abcd
efgh ijkl
mno
图1a~o图表示的15种花型变化
2.2设计程序
modulenihongdeng(clk1,clk2,row,ra); inputclk1,clk2; output [7:0]row; output [7:0]ra; reg[7:0]row; reg[7:0]ra; integera,b;
always@(posedgeclk1) begin
基于HDL的霓虹灯控制器设计第3页共12页
if(a>14)begina=0;end elsebegina=a+1;end end
always@(posedgeclk2) begin case(a) 0:begin case(b)
0:beginrow=8'b11111110;ra=8'b00011000;end 1:beginrow=8'b11111101;ra=8'b00011000;end 2:beginrow=8'b11111011;ra=8'b00011000;end 3:beginrow=8'b11110111;ra=8'b00011000;end 4:beginrow=8'b11101111;ra=8'b00011000;end 5:beginrow=8'b11011111;ra=8'b00011000;end 6:beginrow=8'b10111111;ra=8'b00011000;end 7:beginrow=8'b01111111;ra=8'b00011000;end endcase b=b+1;
if(b>7) beginb=0;end end 1:begin case(b)
0:beginrow=8'b11111110;ra=8'b00100100;end 1:beginrow=8'b11111101;ra=8'b00100100;end 2:beginrow=8'b11111011;ra=8'b00100100;end 3:beginrow=8'b11110111;ra=8'b00100100;end 4:beginrow=8'b11101111;ra=8'b00100100;end 5:beginrow=8'b11011111;ra=8'b00100100;end 6:beginrow=8'b10111111;ra=8'b00100100;end 7:beginrow=8'b01111111;ra=8'b00100100;end endcase b=b+1;
if(b>7) beginb=0;end end 2:begin case(b)
0:beginrow=8'b11111110;ra=8'b01000010;end 1:beginrow=8'b11111101;ra=8'b01000010;end 2:beginrow=8'b11111011;ra=8'b01000010;end
基于HDL的霓虹灯控制器设计第4页共12页
3:beginrow=8'b11110111;ra=8'b01000010;end 4:beginrow=8'b11101111;ra=8'b01000010;end 5:beginrow=8'b11011111;ra=8'b01000010;end 6:beginrow=8'b10111111;ra=8'b01000010;end 7:beginrow=8'b01111111;ra=8'b01000010;end endcase b=b+1;
if(b>7) beginb=0;end end 3:begin case(b)
0:beginrow=8'b11111110;ra=8'b10000001;end 1:beginrow=8'b11111101;ra=8'b10000001;end 2:beginrow=8'b11111011;ra=8'b10000001;end 3:beginrow=8'b11110111;ra=8'b10000001;end 4:beginrow=8'b11101111;ra=8'b10000001;end 5:beginrow=8'b11011111;ra=8'b10000001;end 6:beginrow=8'b10111111;ra=8'b10000001;end 7:beginrow=8'b01111111;ra=8'b10000001;end endcase b=b+1;
if(b>7) beginb=0;end end 4:begin case(b)
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b00011000;end 4:beginrow=8'b11101111;ra=8'b00011000;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b00000000;end endcase b=b+1;
if(b>7) beginb=0;end end 5:begin case(b)
基于HDL的霓虹灯控制器设计第5页共12页
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b00100100;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b00100100;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b00000000;end endcase b=b+1;
if(b>7) beginb=0;end end 6:begin case(b)
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b01000010;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b01000010;end 7:beginrow=8'b01111111;ra=8'b00000000;end endcase b=b+1;
if(b>7) beginb=0;end end 7:begin case(b)
0:beginrow=8'b11111110;ra=8'b10000001;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b10000001;end endcase b=b+1;
if(b>7) beginb=0;end
基于HDL的霓虹灯控制器设计第6页共12页
end 8:begin case(b)
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b11111111;end 4:beginrow=8'b11101111;ra=8'b11111111;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b00000000;end endcase b=b+1;
if(b>7) beginb=0;end end 9:begin case(b)
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b11111111;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b11111111;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b00000000;end endcase b=b+1;
if(b>7) beginb=0;end end 10:begin case(b)
0:beginrow=8'b11111110;ra=8'b00000000;end 1:beginrow=8'b11111101;ra=8'b11111111;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b11111111;end 7:beginrow=8'b01111111;ra=8'b00000000;end
基于HDL的霓虹灯控制器设计第7页共12页
endcase b=b+1;
if(b>7) beginb=0;end end 11:begin case(b)
0:beginrow=8'b11111110;ra=8'b11111111;end 1:beginrow=8'b11111101;ra=8'b00000000;end 2:beginrow=8'b11111011;ra=8'b00000000;end 3:beginrow=8'b11110111;ra=8'b00000000;end 4:beginrow=8'b11101111;ra=8'b00000000;end 5:beginrow=8'b11011111;ra=8'b00000000;end 6:beginrow=8'b10111111;ra=8'b00000000;end 7:beginrow=8'b01111111;ra=8'b11111111;end endcase b=b+1;
if(b>7) beginb=0;end end 12:begin case(b)
0:beginrow=8'b11111110;ra=8'b00001100;end 1:beginrow=8'b11111101;ra=8'b00010100;end 2:beginrow=8'b11111011;ra=8'b00100100;end 3:beginrow=8'b11110111;ra=8'b00100100;end 4:beginrow=8'b11101111;ra=8'b00100100;end 5:beginrow=8'b11011111;ra=8'b00100100;end 6:beginrow=8'b10111111;ra=8'b00010100;end 7:beginrow=8'b01111111;ra=8'b00001100;end endcase b=b+1;
if(b>7) beginb=0;end end 13:begin case(b)
0:beginrow=8'b11111110;ra=8'b00011100;end 1:beginrow=8'b11111101;ra=8'b00001000;end 2:beginrow=8'b11111011;ra=8'b00001000;end 3:beginrow=8'b11110111;ra=8'b00001000;end 4:beginrow=8'b11101111;ra=8'b00001000;end
基于HDL的霓虹灯控制器设计第8页共12页
5:beginrow=8'b11011111;ra=8'b00001000;end 6:beginrow=8'b10111111;ra=8'b00001000;end 7:beginrow=8'b01111111;ra=8'b00011100;end endcase b=b+1;
if(b>7) beginb=0;end end 14:begin case(b)
0:beginrow=8'b11111110;ra=8'b00100010;end 1:beginrow=8'b11111101;ra=8'b00010100;end 2:beginrow=8'b11111011;ra=8'b00001000;end 3:beginrow=8'b11110111;ra=8'b00001000;end 4:beginrow=8'b11101111;ra=8'b00001000;end 5:beginrow=8'b11011111;ra=8'b00001000;end 6:beginrow=8'b10111111;ra=8'b00001000;end 7:beginrow=8'b01111111;ra=8'b00001000;end endcase b=b+1;
if(b>7) beginb=0;end end
default:beginrow=8'b00000000;ra=8'b00000000;end endcase end endmodule
2.3波形仿真图
如图2所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=0表示正在显示图1中a图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
基于HDL的霓虹灯控制器设计第9页共12页
图2图1中a图形的波形仿真图 如图3所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=1表示正在显示图1中b图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图3图1中b图形的波形仿真图
如图4所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=2表示正在显示图1中c图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图4图1中c图形的波形仿真图
如图5所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=3表示正在显示图1中d图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图5图1中d图形的波形仿真图
如图6所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=4表示正在显示图1中e图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图6图1中e图形的波形仿真图
基于HDL的霓虹灯控制器设计第10页共12页
如图7所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=5表示正在显示图1中f图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图7图1中f图形的波形仿真图
如图8所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=6表示正在显示图1中g图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图8图1中g图形的波形仿真图
如图9所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=7表示正在显示图1中h图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图9图1中h图形的波形仿真图
如图10所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=8表示正在显示图1中i图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图10图1中i图形的波形仿真图
基于HDL的霓虹灯控制器设计第11页共12页
如图11所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=9表示正在显示图1中j图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图11图1中j图形的波形仿真图
如图12所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=10表示正在显示图1中k图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图12图1中k图形的波形仿真图
如图13所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=11表示正在显示图1中l图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图13图1中l图形的波形仿真图
如图14所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=12表示正在显示图1中m图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图14图1中m图形的波形仿真图
基于HDL的霓虹灯控制器设计第12页共12页
如图15所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=13表示正在显示图1中n图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图15图1中n图形的波形仿真图
如图16所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=14表示正在显示图1中o图形。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图16图1中o图形的波形仿真图
如图17所示,clk2是显示模块用来扫描点阵的高频时钟信号,clk1是循环模块用于切换画面的低频时钟信号。a=15表示置零的显示状态。b则从0变化到7代表对点阵进行逐行扫描。row、ra表示行列的输出状态。
图17霓虹灯循环一次后置零的状态
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务