1、燕 山 大 学 课 程 设 计 说 明 书 燕山大学 课 程 设 计 说 明 书 题目: 电子路标二 学院(系): 电气工程学院 年级专业: 应用电子技术四班 学 号: 080103030185 学生姓名: 李明华 指导教师: 吕宏诗 张强 教师职称: 实验师 燕山大学课程设计(论文)任务书 院(系):电气工程学院 基层教学单位:电子实验中心 学 号 080103030185 学生姓
2、名 李明华 专业(班级) 08应电四班 设计题目 电子路标二 设 计 技 术 参 数 ●在双色点阵上显示电子路标(指示人物); ●电子路标能够行走和停止(用不同颜色表示)。 设 计 要 求 ●用双色点阵发光管显示电子路标; ●用频率组模块作为频率信号发生器。 工 作 量 ●学会使用Max+PlusII软件、Verilog HDL语言和实验箱; ●独立完成电路设计,编程下载、连接电路和调试; ●参加答辩并书写任务书。 工 作 计 划 1. 了解EDA的基本知识,学习使用软件Max+PlusII,下发任务书,开始电路设计; 2.
3、 学习Verilog HDL语言,用Verilog HDL进行程序设计 3. 学习使用实验箱,继续电路设计; 4. 完成电路设计; 5. 编程下载、连接电路、调试和验收; 6. 答辩并书写任务书 参 考 资 料 《数字电子技术基础》.阎石主编.高等教育出版社. 《EDA课程设计A指导书》.郑兆兆等编. 指导教师签字 吕宏诗 张强 基层教学单位主任签字 金海龙 2011年1月14日 目 录 第1章 设明说明…………………………………………………………………………3 第2章 verilog HDL设
4、计源程序………………………………………………………5 第3章 波形仿真…………………………………………………………………………13 第4章 管脚锁定及硬件连线……………………………………………………………16 第5章 总结………………………………………………………………………………18 第6章 参考文献…………………………………………………………………………19 第1章 设计说明 1.1设计思路 本设计“电子路标二”实现在双色8*8点阵上显示电子路标(指示人物),人物能够行走和停止。行走时人物呈
5、绿色,停止时人物呈红色。具体显示效果见下图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
6、b画面的交替循环显示和人物停止时图1.1-c画面自身的循环显示。 8*8点阵一次只能点亮一行或一列,为了使人感觉各行或各列是同时点亮,需要较高频率的扫描,256Hz的频率信号就是扫描信号,在本次设计中采用逐行扫描,因为点阵是行共阴,列共阳,所以逐行扫描采用每个钟上升沿点亮一行,依次循环点亮各行,即各行依次循环置0,各列输出显示的图形。 ` 1.2模块介绍 本次设计只采用了一个模块来实现设计的要求。 其中clk1,clk2为输入端口,row是一个八位输出端口,lineg为一个六位输出端口,liner为一个四位输出端口。 在模块中设置了变量j,用来对时钟脉
7、冲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)
8、 //显示图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
9、 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
10、 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设计源程序 本次课程设计的Verilo
11、g 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 e
12、nd 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'b0
13、01100; 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
14、 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
15、 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'b110111
16、11; 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.
17、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'b00
18、00; 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
19、 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'b
20、11111011; 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; l
21、iner=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;
22、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'b11
23、011111; 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 (附)后来又加入了橙色人形闪动的画面,扩展后的源程序为
24、 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 alwa
25、ys@(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'b
26、11110111; 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; lin
27、eg=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 ro
28、w=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
29、 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:beg
30、in 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'
31、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)
32、 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; l
33、ineg=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;
34、 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'b11
35、110111; 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; lin
36、er=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'b11111
37、011; 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=
38、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'b111111
39、01; 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
40、'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'b
41、11111110; 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; lin
42、eg=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 e
43、lse 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
44、 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
45、 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'
46、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
47、 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'
48、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
49、 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脉冲没
50、有变化时图1.1-a的逐行扫描的输入输出管脚的波形仿真图 图1.21 (2)下图是j1—j7循环变化的图.






