资源描述
信息工程专业 2009 级可编程逻辑器件及应用课程设计实践报告设计题目交通灯控制器设计专业班级_信息工程091_学号_2009018295_姓 名 _完成时间_20120528_可编程逻辑器件及应用课程设计实践报告1. 设计题目交通灯控制器的设计2. 设计要求利用 VHDL 语言和原理图混合的方法设计一个设计一个由一条主干道和一条支干 道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2) 主干道处于常允许通行状态,而支干道有车来才允许通行。(3) 当主、支道均有车时,两者交替允许通行,主干道每次放行45 s,支干道 每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作 为过渡,并进行减计时显示。3. 设计方案根据交通灯控制器功能设计要求,本系统可由以下 6 个模块组成:45S 计时模块 CNT45S;25S 计时模块 CNT25S;05S 计时模块 CNT05S;交通灯控制模块 JTDKZ;显示子模块 XSKZ;译码器模块 YMQ。4. 具体实现(根据不同的方法进行描述,给出具体实现步骤,包括程序)1. 在 D 盘建立七个文件夹, JTDKZ、 CNT45S、 CNT25S、 CNT05S、 XSKZ、 YMQ、 JTDKZQSJ。2. 运行 Quartus II 软件,选择 File.New Project Wizard 菜单建立一个 新工程。工程名称及顶层文件名称为 JTDKZ , 器件设置对话框中 选择 EPM240T100C5 芯片,完成新工程的建立。3. 选择 File.New 菜单,创建 VHDL 描述语言设计文件,打开文本编辑器 界面。4. 选择 File.Save As 菜单,将创建的 VHDL 设计文件保存为 JTDKZ.VHD。5. 在文本编辑器界面中编写 VHDL 程序,代码如下:-JTDKZ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY JTDKZ ISPORT(CLK,SM,SB:IN STD_LOGIC;MR,MY,MG,BR,BY,BG: OUT STD_LOGIC);END ENTITY JTDKZ;ARCHITECTURE ART OF JTDKZ ISTYPE STATE_TYPE IS(A,B,C,D);SIGNAL STATE: STATE_TYPE;BEGINCNT:PROCESS(CLK) ISVARIABLE S:INTEGER RANGE 0 TO 45;VARIABLE CLR,EN:BIT;BEGINIF(CLKEVENT AND CLK=1)THENIF CLR=0THENS:=0;ELSIF EN=0 THENS:=S;ELSES:=S+1;END IF;CASE STATE ISWHEN A=MR=0; MY=0; MG=1;BR=1; BY=0; BG=0;IF(SB AND SM)=1 THENIF S=45 THENSTATE=B; CLR:=0; EN:=0; ELSESTATE=A; CLR:=1; EN:=1; END IF;ELSIF(SB AND (NOT SM)=1 THEN STATE=B; CLR:=0; EN:=0;ELSESTATEMR=0; MY=1; MG=0; BR=1; BY=0; BG=0; IF S=5 THENSTATE=C;CLR:=0; EN:=0; ELSESTATEMR=1; MY=0; MG=0;BR=0; BY=0; BG=1;IF(SM AND SB)=1 THENIF S=25 THENSTATE=D; CLR:=0; EN:=0;ELSESTATE=C; CLR:=1; EN:=1;END IF;ELSIF SB=0 THENSTATE=D; CLR:=0; EN:=0;ELSESTATEMR=1; MY=0; MG=0;BR=0; BY=1; BG=0;IF S=5 THENSTATE=A;CLR:=0; EN:=0;ELSESTATE=D; CLR:=1; EN:=1;END IF;END CASE;END IF;END PROCESS CNT;END ARCHITECTURE ART;6. 选择 Tools.Compiler Tool 菜单,编译 JTDKZ.VHD 源文件。(可选项: 编译无误后建立仿真波形文件JTDKZ.VWF。选择Tools.Simulator Tool菜单进 行仿真)。选择 File.Create/Update .Create Symbol File for Current File 菜单,为当前工程生成一个符号文件 JTDKZ.BSF 文件。选择 File.CloseProject 菜单关闭工程 JTDKZ。重复上面的过程,建立CNT45S,最后为当前工程生成一个符号文件CNT45SBSF 文件。-CNT45S.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT45S ISPORT(SB,CLK,EN45:IN STD_LOGIC;DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY CNT45S;ARCHITECTURE ART OF CNT45S ISSIGNAL CNT6B: STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(SB,CLK,EN45) ISBEGINIF SB=0THEN CNT6B=CNT6B-CNT6B-1;ELSIF(CLKEVENT AND CLK= 1)THENIF EN45=1THEN CNT6B=CNT6B+1;ELSIF EN45=0THEN CNT6BDOUT45M=01000101; DOUT45BDOUT45M=01000100; DOUT45BDOUT45M=01000011; DOUT45BDOUT45M=01000010; DOUT45BDOUT45M=01000001; DOUT45BDOUT45M=01000000; DOUT45BDOUT45M=00111001; DOUT45BDOUT45M=00111000; DOUT45BDOUT45M=00110111; DOUT45BDOUT45M=00110110; DOUT45BDOUT45M=00110101;DOUT45BDOUT45M=00110100; DOUT45BDOUT45M=00110011; DOUT45BDOUT45M=00110010; DOUT45BDOUT45M=00110001; DOUT45BDOUT45M=00110000; DOUT45BDOUT45M=00101001; DOUT45BDOUT45M=00101000; DOUT45BDOUT45M=00100111; DOUT45BDOUT45M=00100110; DOUT45BDOUT45M=00100101; DOUT45BDOUT45M=00100100; DOUT45BDOUT45M=00100011; DOUT45BDOUT45M=00100010; DOUT45BDOUT45M=00100001; DOUT45BDOUT45M=00100000; DOUT45BDOUT45M=00011001; DOUT45BDOUT45M=00011000; DOUT45BDOUT45M=00010111; DOUT45BDOUT45M=00010110; DOUT45BDOUT45M=00010101; DOUT45BDOUT45M=00010100; DOUT45BDOUT45M=00010011; DOUT45BDOUT45M=00010010; DOUT45BDOUT45M=00010001; DOUT45BDOUT45M=00010000; DOUT45BDOUT45M=00001001; DOUT45BDOUT45M=00001000; DOUT45BDOUT45M=00000111; DOUT45BDOUT45M=00000110; DOUT45BDOUT45M=00000101; DOUT45BDOUT45M=00000100; DOUT45BDOUT45M=00000011; DOUT45BDOUT45M=00000010; DOUT45BDOUT45M=00000001; DOUT45BDOUT45M=00000000; DOUT45B=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;重复上面的过程,建立CNT25S,最后为当前工程生成一个符号文件CNT25SBSF 文件。-CNT25S.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT25S ISPORT(SB,SM,CLK,EN25:IN STD_LOGIC;DOUT25M,DOUT25B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY CNT25S;ARCHITECTURE ART OF CNT25S ISSIGNAL CNT5B: STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINPROCESS(SB,SM,CLK,EN25) ISBEGINIF SB=0 OR SM=0 THENCNT5B=CNT5B-CNT5B-1;ELSIF(CLKEVENT AND CLK= 1)THENIF EN25=1 THENCNT5B=CNT5B+1;ELSIF EN25=0THENCNT5BDOUT25B=00100101; DOUT25MDOUT25B=00100100; DOUT25MDOUT25B=00100011; DOUT25MDOUT25B=00100010; DOUT25MDOUT25B=00100001; DOUT25MDOUT25B=00100000; DOUT25MDOUT25B=00011001; DOUT25MDOUT25B=00011000; DOUT25MDOUT25B=00010111; DOUT25MDOUT25B=00010110; DOUT25MDOUT25B=00010101; DOUT25MDOUT25B=00010100; DOUT25MDOUT25B=00010011; DOUT25MDOUT25B=00010010; DOUT25MDOUT25B=00010001; DOUT25MDOUT25B=00010000; DOUT25MDOUT25B=00001001; DOUT25MDOUT25B=00001000; DOUT25MDOUT25B=00000111; DOUT25MDOUT25B=00000110; DOUT25MDOUT25B=00000101; DOUT25MDOUT25B=00000100; DOUT25MDOUT25B=00000011; DOUT25MDOUT25B=00000010; DOUT25MDOUT25B=00000001; DOUT25MDOUT25B=00000000; DOUT25M=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;重复上面的过程,建立CNT05S,最后为当前工程生成一个符号文件CNT05SBSF 文件。-CNT05SVHDLIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;USE IEEESTD_LOGIC_UNSIGNEDALL;ENTITY CNT05S ISPORT(CLK,EN05M,EN05B:IN STD_LOGIC;DOUT5: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY CNT05S;ARCHITECTURE ART OF CNT05S ISSIGNAL CNT3B: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(CLK,EN05M,EN05B) ISBEGINIF(CLKEVENT AND CLK= 1)THENIF EN05M=1 OR EN05B=1 THENCNT3B=CNT3B+1;ELSECNT3BDOUT5DOUT5DOUT5DOUT5DOUT5-DOUT5=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;重复上面的过程,建立XSKZ,最后为当前工程生成一个符号文件XSKZ.BSF文 件。-XSKZ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XSKZ ISPORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC;AIN45M,AIN45B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);AIN25M,AIN25B,AIN05: IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUTM,DOUTB: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY XSKZ;ARCHITECTURE ART OF XSKZ ISBEGINPROCESS(EN45,EN25,EN05M,EN05B) ISBEGINIF EN45=1THENDOUTM=AIN45M(7 DOWNTO 0); DOUTB=AIN45B(7 DOWNTO 0);ELSIF EN05M=1THEN DOUTM=AIN05(7 DOWNTO 0); DOUTB=AIN05(7 DOWNTO 0);ELSIF EN25=1 THEN DOUTM=AIN25M(7 DOWNTO 0); DOUTB=AIN25B(7 DOWNTO 0);ELSIF EN05B=1THEN DOUTM=AIN05(7 DOWNTO 0); DOUTBDOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7=0000000;END CASE;END PROCESS;END ARCHITECTURE ART;完成上述步骤之后,然后按照下面的步骤进行:1. 选择 File.New Project Wizard 菜单建立一个新工程。工程名称及顶层 文件名称为JTDKZQSJ,器件设置对话框中选择EPM240T100C5芯片,完成新工程 的建立。2. 将 上述六个工程目 录下的 JTDKZ.BSF 、 JTDKZ.VHD 、 CNT45S.BSF 、 CNT45S.VHD、CNT25S.BSF、CNT25S.VHD、CNT05S.BSF、CNT05S.VHD、XSKZ.BSF、 XSKZ.VHD、YMQ.BSF、YMQ.VHD 文件拷贝到 JTDKZQSJ 工程目录下。3. 选择 File.New 菜单,创建图形设计文件,在图形编辑器窗口中双击鼠 标左键,或选择菜单“Edit.Insert Symbol”,在Symbol对话框界面中可以找 到 JTDKZ、 CNT45S、 CNT25S、 CNT05S、 XSKZ、 YMQ 的符号。在图形编辑器界面中 完成如图所示的电路图。CLK|INPUTSMIINPUT一sbiVCCtinstDKZCLKMRSMMYSBMGBRBYBGC卜T45SSBDOUT45M7.0CLKDOUT45B7.0EN45ins t1C卜T25SSBDOUT25M7.0SMDOUT25B7.0CLKEN25inst2CNT05SCLKDOUT57.0EN05MEN05Binst3OUTPUTOUTPUTAIN057.0inst4AIN45M7.OAIN45B7.OAIN25M7.OAIN25B7.Odoutm7;0doutb71OUTPUTOUTPUTDOUTM7.ODOUTB7.OQ30AIN43.ODOUT76.04. 选择 File.Save As 菜单,将设计的图形文件保存为工程顶层文件名JTDKZQSJ.BDF。5. 选择 Tools.Compiler Tool 菜单,编译源文件。6. 选择 Assignments.Assignment Editor 菜单,对工程进行引脚分配。7. 选择Tools.Compiler Tool菜单,点击“Start”按钮对此工程进行编 辑,生成可以配置到CPLD的POF文件。8. 下载、运行。5. 总结与体会本实验是一个交通灯控制系统的设计方案,参考了实验课里交通灯控制 系统的设计程序。通过这个实验我了解了交通灯的工作系统的实现方式,原 来平日里看似复杂的肩负着交通安全重大责任的交通系统也能够通过 VHDL 语言来实现,原来总以为我们所学的知识在生活中的没有实质的用处,但这 个实验让我看到了我们所学的知识在显示生活中的应用。
展开阅读全文