资源描述
燕 山 大 学 课 程 设 计 说 明 书
燕山大学
课 程 设 计 说 明 书
题目: 电子路标二
学院(系): 电气工程学院
年级专业: 应用电子技术四班
学 号: 080103030185
学生姓名: 李明华
指导教师: 吕宏诗 张强
教师职称: 实验师
燕山大学课程设计(论文)任务书
院(系):电气工程学院 基层教学单位:电子实验中心
学 号
080103030185
学生姓名
李明华
专业(班级)
08应电四班
设计题目
电子路标二
设
计
技
术
参
数
●在双色点阵上显示电子路标(指示人物);
●电子路标能够行走和停止(用不同颜色表示)。
设
计
要
求
●用双色点阵发光管显示电子路标;
●用频率组模块作为频率信号发生器。
工
作
量
●学会使用Max+PlusII软件、Verilog HDL语言和实验箱;
●独立完成电路设计,编程下载、连接电路和调试;
●参加答辩并书写任务书。
工
作
计
划
1. 了解EDA的基本知识,学习使用软件Max+PlusII,下发任务书,开始电路设计;
2. 学习Verilog HDL语言,用Verilog HDL进行程序设计
3. 学习使用实验箱,继续电路设计;
4. 完成电路设计;
5. 编程下载、连接电路、调试和验收;
6. 答辩并书写任务书
参
考
资
料
《数字电子技术基础》.阎石主编.高等教育出版社.
《EDA课程设计A指导书》.郑兆兆等编.
指导教师签字
吕宏诗 张强
基层教学单位主任签字
金海龙
2011年1月14日
目 录
第1章 设明说明…………………………………………………………………………3
第2章 verilog HDL设计源程序………………………………………………………5
第3章 波形仿真…………………………………………………………………………13
第4章 管脚锁定及硬件连线……………………………………………………………16
第5章 总结………………………………………………………………………………18
第6章 参考文献…………………………………………………………………………19
第1章 设计说明
1.1设计思路
本设计“电子路标二”实现在双色8*8点阵上显示电子路标(指示人物),人物能够行走和停止。行走时人物呈绿色,停止时人物呈红色。具体显示效果见下图1.1-a,1.1-b,1.1-c三图,也可以加入橙灯闪动作为缓冲。
1.1-a 1.1-b
1.1-c
要实现人物的“行走”,需要两幅画面交替循环显示,即图1.1-a,图1.1-b两幅图。停止状态人物画面需要显示较长时间,可以通过自身循环显示实现。
在本设计中使用了频率组模块作为频率信号发生器。本设计采用了两个频率,即低频率组中的2Hz和低频率组中的256Hz。2Hz频率用来进行画面的切换,即人物行走时图1.1-a和图1.1-b画面的交替循环显示和人物停止时图1.1-c画面自身的循环显示。
8*8点阵一次只能点亮一行或一列,为了使人感觉各行或各列是同时点亮,需要较高频率的扫描,256Hz的频率信号就是扫描信号,在本次设计中采用逐行扫描,因为点阵是行共阴,列共阳,所以逐行扫描采用每个钟上升沿点亮一行,依次循环点亮各行,即各行依次循环置0,各列输出显示的图形。
`
1.2模块介绍
本次设计只采用了一个模块来实现设计的要求。
其中clk1,clk2为输入端口,row是一个八位输出端口,lineg为一个六位输出端口,liner为一个四位输出端口。
在模块中设置了变量j,用来对时钟脉冲clk1时钟脉冲进行计数,j=0时输出显示图1.1-a的画面,j=1时输出显示图1.1-b的画面,j=2时输出显示图1.1-a的画面,j=3时输出显示图1.1-b的画面,这样可以实现人物的行走状态。j=4,5,6,7时输出显示图1.1-c的画面,这样可以实现人物的停止状态。在j=7的下一个clk1的时钟上升沿,j的值被重新置0。这样就可以实现行走和停止两种状态的交替显示。通过更改clk1的输入时钟频率还可以变化交替间隔时间。
模块中的另一个时钟信号clk2用来实现逐行扫描。通过如下语句实现一个画面的显示。
if(j==0)
begin
case(a) //显示图1.1-b所示图形
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b001100; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b001100; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001100; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b001100; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b001100; liner=4'b0000; end
endcase
a=a+1;
if(a>7)
begin a=0; end
end
end
其中的变量a对clk2进行计数,每个clk2的上升沿a的值加1,通过case语句输出显示一行。a的值大于7时被重新置0,从而实现逐行扫描。
由于要求实现双色显示,所以用到两个输出lineg和liner,分别接绿色和红色二极管阳极端口。模块中在点亮一种颜色的二极管时封锁另一色二极管,从而避免出现色彩显示的错误。
第2章 Verilog HDL设计源程序
本次课程设计的Verilog HDL源程序如下:
module lubiao(clk1,clk2,lineg,liner,row);
output lineg,liner,row;
input clk1,clk2;
reg[7:0] row;
reg[6:1] lineg;
reg[5:2] liner;
reg[2:0] a,b,c,d,e;
reg[3:0] j;
always@(posedge clk1) //变量j从0到6循环
begin
j=j+1;
if(j>7)
begin
j=0;
end
end
always@(posedge clk2)
begin
if(j==0) //j=0时显示图1.1-a所示图形
begin
case(a)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b001100; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b001100; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001100; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b001100; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b001100; liner=4'b0000; end
endcase
a=a+1;
if(a>7)
begin a=0; end
end
else if(j==1) //j=1时显示图1.1-b所示图形
begin
case(b)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b011110; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b101101; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001110; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b010010; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b100010; liner=4'b0000; end
endcase
b=b+1;
if(b>7)
begin b=0; end
end
else if(j==2) //j=2时显示图1.1-a所示图形
begin
case(c)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b001100; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b001100; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001100; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b001100; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b001100; liner=4'b0000; end
endcase
c=c+1;
if(c>7)
begin c=0; end
end
else if(j==3) //j=3时显示图1.1-b所示图形
begin
case(d)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b011110; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b101101; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001110; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b010010; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b100010; liner=4'b0000; end
endcase
d=d+1;
if(d>7)
begin d=0; end
end
else
begin
case(e) //j=4,5,6,7时都显示图1.1-c所示图形
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b000000; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b000000; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b000000; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b000000; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b000000; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b000000; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b000000; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b000000; end
endcase
e=e+1;
if(e>7)
begin e=0;end
end
end
endmodule
(附)后来又加入了橙色人形闪动的画面,扩展后的源程序为:
module lubiao(clk1,clk2,lineg,liner,row);
output lineg,liner,row;
input clk1,clk2;
reg[7:0] row;
reg[6:1] lineg;
reg[5:2] liner;
reg[2:0] a,b,c,d,e,f,g,h,m,n,o;
reg[3:0] j;
always@(posedge clk1)
begin
j=j+1;
if(j>13)
begin
j=0;
end
end
always@(posedge clk2)
begin
if(j==0)
begin
case(a)
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b001100; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b001100; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b011110; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b011110; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b011110; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b001100; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b001100; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b001100; end
endcase
a=a+1;
if(a>7)
begin a=0;end
end
else if(j==1)
begin
case(b)
0:begin row=8'b11111110; liner=4'b0000; lineg=6'b000000; end
1:begin row=8'b11111101; liner=4'b0000; lineg=6'b000000; end
2:begin row=8'b11111011; liner=4'b0000; lineg=6'b000000; end
3:begin row=8'b11110111; liner=4'b0000; lineg=6'b000000; end
4:begin row=8'b11101111; liner=4'b0000; lineg=6'b000000; end
5:begin row=8'b11011111; liner=4'b0000; lineg=6'b000000; end
6:begin row=8'b10111111; liner=4'b0000; lineg=6'b000000; end
7:begin row=8'b01111111; liner=4'b0000; lineg=6'b000000; end
endcase
b=b+1;
if(b>7)
begin b=0;end
end
else if(j==2)
begin
case(c)
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b001100; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b001100; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b011110; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b011110; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b011110; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b001100; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b001100; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b001100; end
endcase
c=c+1;
if(c>7)
begin c=0;end
end
else if(j==3)
begin
case(d)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b001100; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b001100; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001100; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b001100; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b001100; liner=4'b0000; end
endcase
d=d+1;
if(d>7)
begin d=0; end
end
else if(j==4)
begin
case(e)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b011110; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b101101; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001110; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b010010; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b100010; liner=4'b0000; end
endcase
e=e+1;
if(e>7)
begin e=0; end
end
else if(j==5)
begin
case(f)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b001100; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b001100; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001100; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b001100; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b001100; liner=4'b0000; end
endcase
f=f+1;
if(f>7)
begin f=0; end
end
else if(j==6)
begin
case(g)
0:begin row=8'b11111110; lineg=6'b001100; liner=4'b0000; end
1:begin row=8'b11111101; lineg=6'b001100; liner=4'b0000; end
2:begin row=8'b11111011; lineg=6'b011110; liner=4'b0000; end
3:begin row=8'b11110111; lineg=6'b101101; liner=4'b0000; end
4:begin row=8'b11101111; lineg=6'b001100; liner=4'b0000; end
5:begin row=8'b11011111; lineg=6'b001110; liner=4'b0000; end
6:begin row=8'b10111111; lineg=6'b010010; liner=4'b0000; end
7:begin row=8'b01111111; lineg=6'b100010; liner=4'b0000; end
endcase
g=g+1;
if(g>7)
begin g=0; end
end
else if(j==7)
begin
case(h)
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b001100; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b001100; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b011110; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b011110; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b011110; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b001100; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b001100; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b001100; end
endcase
h=h+1;
if(h>7)
begin h=0;end
end
else if(j==8)
begin
case(m)
0:begin row=8'b11111110; liner=4'b0000; lineg=6'b000000; end
1:begin row=8'b11111101; liner=4'b0000; lineg=6'b000000; end
2:begin row=8'b11111011; liner=4'b0000; lineg=6'b000000; end
3:begin row=8'b11110111; liner=4'b0000; lineg=6'b000000; end
4:begin row=8'b11101111; liner=4'b0000; lineg=6'b000000; end
5:begin row=8'b11011111; liner=4'b0000; lineg=6'b000000; end
6:begin row=8'b10111111; liner=4'b0000; lineg=6'b000000; end
7:begin row=8'b01111111; liner=4'b0000; lineg=6'b000000; end
endcase
m=m+1;
if(m>7)
begin m=0;end
end
else if(j==9)
begin
case(n)
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b001100; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b001100; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b011110; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b011110; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b011110; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b001100; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b001100; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b001100; end
endcase
n=n+1;
if(n>7)
begin n=0;end
end
else
begin
case(o)
0:begin row=8'b11111110; liner=4'b0110; lineg=6'b000000; end
1:begin row=8'b11111101; liner=4'b0110; lineg=6'b000000; end
2:begin row=8'b11111011; liner=4'b1111; lineg=6'b000000; end
3:begin row=8'b11110111; liner=4'b1111; lineg=6'b000000; end
4:begin row=8'b11101111; liner=4'b1111; lineg=6'b000000; end
5:begin row=8'b11011111; liner=4'b0110; lineg=6'b000000; end
6:begin row=8'b10111111; liner=4'b0110; lineg=6'b000000; end
7:begin row=8'b01111111; liner=4'b0110; lineg=6'b000000; end
endcase
o=o+1;
if(o>7)
begin o=0;end
end
end
endmodule
第3章 波形仿真
波形的各仿真图如下:
(1)下图显示的是clk1脉冲没有变化时图1.1-a的逐行扫描的输入输出管脚的波形仿真图
图1.21
(2)下图是j1—j7循环变化的图.
展开阅读全文