资源描述
汽车尾灯控制器报告书写要求1、 报告的撰写要求条理清晰、语言准确、表述简明。报告中段首空两个字符,中文字体为宋体五号,数字、字符、字母为Times New Roman五号,且单倍行距。2、 报告中插图应与文字紧密配合,文图相符,技术内容正确。每个图都应配有图题(由图号和图名组成)。图题(宋体小五号)置于图下居中,其中图号按顺序编排,图名在图号之后空一格排写。图中若有分图时,分图号用(a)、(b)等置于分图之下。注:框图、流程图(矢量图)用专业画图软件。3、 报告中插表应与文字紧密配合,文表相符,技术内容正确。表格不加左、右边线,上、下线需加粗(1.5磅),每个表应配有表题(由表号和表名组成)。表题(宋体小五号)置于表上居中,其中表号按顺序编排,表名在表号之后空一格排写。4、 报告中公式原则上居中书写。注:公式编辑器编写。5、 设计报告应按如下内容和顺序A4纸打印、左侧装订成册。 一、设计目的1掌握数字系统的设计方法;2掌握硬件描述语言Verilog HDL;3掌握模块化设计方法;4掌握开发软件的使用方法。二、设计要求(1)汽车正常使用时指示灯不亮;(2)汽车右转时,右侧的一盏灯亮;(3)汽车左转时,左侧的一盏灯亮;(4)汽车刹车时,左右两侧的指示灯同时亮;(5)汽车夜间行驶时,左右两侧的指示灯同时一直亮,供照明使用。 (6)记录车行驶的里程并用8位显示电路显示。(7)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、下载验证等。三、设计环境 计算机、QuatusII开发软件四、设计内容(设计原理和方案、程序设计、仿真分析和适配)4.1设计原理和方案1、汽车尾灯控制器就是一个状态机的实例。当汽车正常行驶时所有指示灯都不亮;当汽车向右转弯时,汽车右侧的指示灯RD1亮;当汽车向左侧转弯时,汽车左侧的指示灯LD1亮;当汽车刹车时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时亮;当汽车在夜间行驶时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时一直亮。通过设置系统的输入信号:系统时钟信号clkin、clkin1,汽车左转弯控制信号left,汽车右转弯控制信号right,刹车信号brake,夜间行驶信号night和系统的输出信号:汽车左侧2盏指示灯LD1、LD2和汽车右侧2盏指示灯RD1、RD2.41.1系统分析(1)汽车正常使用时指示灯不亮;(2)汽车右转时,右侧的一盏灯亮;(3)汽车左转时,左侧的一盏灯亮;(4)汽车刹车时,左右两侧的指示灯同时亮;(5)汽车夜间行驶时,左右两侧的指示灯同时一直亮,供照明使用。 (6)记录车行驶的里程并用8位显示电路显示。汽车行驶信号里 程计数器BCD码扫描模块主控模块显示左灯控制模块右灯控制模块时钟系统整体设计框图4.2程序设计及仿真各组成模块原理及程序汽车尾灯控制器由5个模块组成,分别为:时钟分频模块(1、2、3)、汽车尾灯主控模块(左边灯控制模块和右边灯控制模块)、里程计数器模块、BCD码扫描模块、数码管显示模块。以下介绍各模块的详细设计:4.2.1时钟分频模块1程序设计及仿真时钟分频模块由Verilog程序来实现,下面是其Verilog代码:module fenpin1(clkin,clkout);input clkin;output clkout;parameter L=2;reg clkout;integer cnt; / ding yi zheng xing bian liang always(posedge clkin) begin if(cnt=L) begin cnt=0; clkout=clkout; /bo xing fan zhuan end else cnt=cnt+1; endendmodule仿真:分频模块14.2.2主控模块1程序设计及仿真主控模块1由Verilog程序来实现,下面是其Verilog代码:module zhukong1(clk,left,right,brake,night,LD1,RD1,LD2,RD2); input clk,left,right,brake,night; output LD1,RD1,LD2,RD2; reg LD1,RD1,LD2,RD2;always(posedge clk) begin if(left) begin LD1=1; RD1=0; end else if(right) begin LD1=0; RD1=1; end else if(brake) begin LD2=1; RD2=1; end else if(night) begin LD2=1; RD2=1; end else begin LD1=0; RD1=0; LD2=0; RD2=0; end endendmodule 仿真:主控模块14.2.3时钟分频模块2 (实现左转右转灯闪烁)程序设计及仿真时钟分频模块2由Verilog程序来实现,下面是其Verilog代码:module fenpin2(clkin1,clkout1);input clkin1;output clkout1;parameter L=3;/(25000000/2)-1=6249999reg clkout1;integer cnt1; / ding yi zheng xing bian liang always(posedge clkin1) begin if(cnt1=L) begin cnt1=0; clkout1=clkout1; /bo xing fan zhuan end else cnt1=cnt1+1; endendmodule仿真:分频模块24.2.4主控模块2(控制左转右转灯的闪烁) 程序设计及仿真主控模块2由Verilog程序来实现,下面是其Verilog代码: module zhukong2(clk1,LD,RD,LDD1,RDD1); input clk1,LD,RD; output LDD1,RDD1; reg LDD1,RDD1;always(posedge clk1) begin if(LD)LDD1=LDD1; else if(RD) RDD1=RDD1; endendmodule 仿真:主控模块2 4.2.5分频模块3(实现每十个脉冲里程数加一)程序设计及仿真 分频模块3由Verilog程序来实现,下面是其Verilog代码:module fenpin3(clkin2,clkout2);input clkin2;output clkout2;parameter L=8;reg clkout2;integer cnt2; / ding yi zheng xing bian liang always(posedge clkin2) begin if(cnt2=L) begin cnt2=0; clkout2=clkout2; /bo xing fan zhuan end else cnt2=cnt2+1; endendmodule仿真:分频模块34.2.6里程计数器模块程序设计及仿真里程计数器模块由Verilog程序来实现,下面是其Verilog代码:module lcjishuqi(clk,reset,D,D1,D2,D3,D4,D5,D6,D7);input clk,reset;output 3:0 D,D1,D2,D3,D4,D5,D6,D7;reg3:0D,D1,D2,D3,D4,D5,D6,D7;always(posedge clk or posedge reset)begin if(reset) D7=0; else if(D7=9) D7=0; else D7=D7+1;endalways(posedge clk or posedge reset)begin if(reset) D6=0; else if(D7=9) if(D6=9) D6=0; else D6=D6+1;end always(posedge clk or posedge reset)begin if(reset) D5=0; else if(D7=9&D6=9) if(D5=9) D5=0; else D5=D5+1;end always(posedge clk or posedge reset)begin if(reset) D4=0; else if(D5=9&D6=9&D7=9) if(D4=9) D4=0; else D4=D4+1;endalways(posedge clk or posedge reset)begin if(reset) D3=0; else if(D5=9&D6=9&D7=9&D4=9) if(D3=9) D3=0; else D3=D3+1;endalways(posedge clk or posedge reset)begin if(reset) D2=0; else if(D5=9&D6=9&D7=9&D4=9&D3=9) if(D2=9) D2=0; else D2=D2+1;endalways(posedge clk or posedge reset)begin if(reset) D1=0; else if(D5=9&D6=9&D7=9&D4=9&D3=9&D2=9) if(D1=9) D1=0; else D1=D1+1;endalways(posedge clk or posedge reset)begin if(reset) D=0; else if(D5=9&D6=9&D7=9&D4=9&D3=9&D2=9&D1=9) if(D=9) D=0; else D=D+1;endendmodule仿真:里程计数器模块4.2.7BCD码扫描模块程序设计及仿真BCD码扫描模块由Verilog程序来实现,下面是其Verilog代码:module bcd(clk1k,data_b,sel,dout);input clk1k;input31:0data_b;output7:0sel;output3:0dout;reg2:0sel;reg3:0dout;always(posedge clk1k) begin if(sel7) sel=sel+1; else sel=0; endalways(sel) begin case(sel) 0:dout=data_b31:28; 1:dout=data_b27:24; 2:dout=data_b23:20; 3:dout=data_b19:16; 4:dout=data_b15:12; 5:dout=data_b11:8; 6:dout=data_b7:4; 7:dout=data_b3:0; default:dout=4bx; endcase endendmodule仿真:BCD扫描模块4.2.8数码管显示模块(译码器)程序设计及仿真数码管显示模块由Verilog程序来实现,下面是其Verilog代码:module yima(din,dout);input 3:0din;output 6:0dout;reg6:0dout;always(din) begin case(din) 0:dout=7b1111110; /7E 1:dout=7b0110000; /30 2:dout=7b1101101; /6D 3:dout=7b1111001; /79 4:dout=7b0110011; /33 5:dout=7b1011011; /5B 6:dout=7b1011111; /5F 7:dout=7b1110000; /70 8:dout=7b1111111; /7F 9:dout=7b1111011; /7B 10:dout=7b1110111; /77 11:dout=7b0011111; /1F 12:dout=7b1001110; /4E 13:dout=7b0111101; /3D 14:dout=7b1001111; /4F 15:dout=7b1000111; /47 default:dout=7b0000000; endcase endendmodule 仿真:显示译码模块4.2.9顶层设计及仿真下面是其Verilog代码:module wdkz(clkin,clkin1,left,right,brake,night,LD2,RD2,LDD1,RDD1);input clkin,clkin1,left,right,brake,night;output LD2,RD2,LDD1,RDD1;wire clk,clk1,LD,RD;fenpin1 u1(.clkin(clkin),.clkout(clk);fenpin2 u2(.clkin1(clkin1),.clkout1(clk1);zhukong1 A1(.clk(clk),.left(left),.right(right),.brake(brake),.night(night),.LD1(LD),.RD1(RD),.LD2(LD2),.RD2(RD2);zhukong2 A2(.clk1(clk1),.LD(LD),.RD(RD),.LDD1(LDD1),.RDD1(RDD1);endmodule仿真:顶层模块4.3适配五、小结 经过这么多天的努力,终于完成了本学期的硬件描述语言课程设计,过程虽是辛苦的,但从中我学到了很多东西。首先巩固了课上学习的理论知识,对于硬件描述语言的系统化整体化有了更深的认识。在编写程序的过程中遇到了很多困难经过反复修改不断修正最终才能得以执行。再次是经过搜集资料基本了解了Quartus软件的使用。整个设计过程最大的收获就是意识到理论知识扎实的重要性,实践是建立在理论之上的。回顾此次硬件描述语言课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,比如说不懂一些元器件的使用方法,对硬件描述语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在王秀琴、夏洪洋老师的指导下,终于迎刃而解。俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性.
展开阅读全文