FPGA课程设计交通灯信号控制器的设计报告
- 格式:doc
- 大小:337.05 KB
- 文档页数:14
数字逻辑课程设计报告题目:基于FPGA的智能交通灯控制器课程名称:数字逻辑课程设计专业班级:学号:姓名:报告日期:2013-9-12计算机科学与技术学院1. 实验目的通过V erilog的编程,深入了解并掌握可编程芯片的使用技术,完成规定的设计任务,加强对《数字逻辑》课程所学知识的理解,培养学生创造性思维能力和独立解决实际问题的能力。
2. 实验内容用V erilog代码实现智能交通灯信号控制器设计,具体内容及要求如下:(1)在主干道与次干道公路十字交叉路口,为确保人员、车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。
红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。
(2)主干道和次干道公路十字交叉路口都安装了车辆检测传感器(C),要求如下:(A)在每日的早、晚高峰时段,双边“C=1”则主干道通行时间是次干道通行时间的2倍;(B)全天主、次干道有车一方有优先通行权;(3)主干道公路路口安装有人员通过请求按钮(PQ),一旦有请求信息,控制器应给与放行。
(4)Online控制信号由交通控制中心发出,(Online=1)一旦它有效,则主干道放行,十字交叉路口控制器“失效”,Online=0十字交叉路口控制器恢复控制权。
(6)在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。
(7)用“开关”代替传感器作为人员通过请求和车辆是否到来的信号。
用红、绿、黄三种颜色的发光二极管作交通灯。
(8)要求显示时间,倒计时。
3. 实验环境PC 个人计算机、ISE14.2 软件、Adept软件、开发板Basys2、USB下载线4. 实验设计方案4.1 输入输出与引脚分配说明4.1.1输入信号:PQ,人员请求信号——接板子“E2”开关ONLINE, 控制中心接管信号——接“N3”SET, 控制器开关——接“P11”RST, 复位开关——接“L3”RUSH, 高峰判断开关——接“F3”CM, 主道车辆传感器——接“G3”CC, 支道车辆传感器——接“B4”CLK, 系统时钟——接“B8”4.1.2输出信号:[2:0] ML, ML0~2 主道绿、黄、红灯——分别接“G1、P4、N4”[2:0] CL , CL0~1 支道绿、黄、红灯——分别接“P7、M11、M5”[6:0] a_to_g, 七段数码管接口——a_to_g0~6分别接“M12、L13、P12、N11、N14、H12、L14”[3:0] an, 四选一控制接口——an0~4分别接“F12、J12、M13、K14”4.2 模块图4.2.1 模块层级图4.2.2 模块1.时钟生成模块4.2.3 模块2. 控制模块【1】输入信号input wire clk1s, 近似1s的时钟信号input wire PQ, 人员请求信号input wire ONLINE, 控制中心请求信号input wire SET, 控制器开关信号input wire RST, 复位信号input wire RUSH, 高峰信号input wire CM, 主道车辆检测信号input wire CC, 支道车辆检测信号【2】输出信号output reg [2:0] ML, 主道信号灯接口output reg [2:0] CL, 支道信号灯接口output [7:0] ACOUNT,存放主道两个时间数字的8421码output [7:0] BCOUNT,存放支道两个时间数字的8421码(ACOUNT、BCOUNT整合到顶层文件b[15:0]中,方便调用七段显示模块)【3】模块内部流程图4.2.4 模块3. 七段显示模块【1】显示原理使用同步扫描电路,对4位数码管的控制端口进行扫描,每一个时刻只有一个数码管亮,只要设置足够快的频率扫描,由于眼睛的视觉停留效应,就会使得显示结果达到4位同时亮的效果。
交通灯实验报告一,实验目的实现两路信号灯交替亮起,并利用两组数码管分别对两路信号进行倒计时。
两路信号时间分别为:V:绿灯(30S)H:红灯(35S)黄灯(5s)绿灯(30S)红灯(35S)黄灯(5S)二,实验步骤建立工程可在欢迎界面点击“Creat a New Project”进入工程建立界面,亦可关闭欢迎界面,点击菜单栏的“File”,点击“New Project Wizard”进入建立工程界面。
右侧为建立工程界面,点击next。
在此界面选定工程路径,取好工程名,点击“Next”。
注意:路径中不能有中文,工程名也不能有中文。
一直点击“Next”进入器件设置界面,DE2-70开发工具采用的Cyclone II系列的EP2C70F896C6N。
点击“Finish”,完成工程建立1、点击“File”,点击“New”选择“Verilog HDL”2,点击主界面工具栏中的选择“Verilog HDL”3、写入verilog代码。
代码如下:moduletraffic(Clk_50M,Rst,LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V,Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL,led15);parameter S1=2'b00;parameter S2=2'b01;parameter S3=2'b10;parameter S4=2'b11;input Clk_50M,Rst;output LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;output[6:0] Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL;output led15;//-------------div for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always(posedge Clk_50M or negedge Rst)beginif(!Rst)beginCnt_1Hz<=1;Clk_1Hz<=1;endelsebeginif(Cnt_1Hz>=25000000)beginCnt_1Hz<=1;Clk_1Hz<=~Clk_1Hz;endelseCnt_1Hz<=Cnt_1Hz + 1;endend//-----------div for 1Hz------end-----reg[7:0] Cnt30,CntH,CntV,CntHH,CntVV;reg[7:0] CntDis,CntDiss;//-----------30 counter and seg7---start---reg LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;always(posedge Clk_1Hz)begincase(state)S1:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS2:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS3:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS4:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endendcaseendalways(posedge Clk_1Hz) begincase(stateV)S1:beginif(CntV>=30)CntV<=1;elseCntV<=CntV + 1;endS2:beginif(CntV>=5)CntV<=1;elseCntV<=CntV + 1;endS3:beginif(CntV>=35)CntV<=1;elseCntV<=CntV + 1;endendcaseendalways(posedge Clk_1Hz)begincase(stateH)S1:beginif(CntH>=35)CntH<=1;elseCntH<=CntH + 1;endS2:beginif(CntH>=30)CntH<=1;elseCntH<=CntH + 1;endS3:beginif(CntH>=5)CntH<=1;elseCntH<=CntH + 1;endendcaseendalways(negedge Clk_50M or negedge Rst) begincase(state)S1:CntVV=30-CntV;S2:CntVV=5-CntV;S3:CntVV=35-CntV;S4:CntVV=35-CntV;endcaseendalways(negedge Clk_50M or negedge Rst)begincase(state)S1:CntHH=35-CntH;S2:CntHH=35-CntH;S3:CntHH=30-CntH;S4:CntHH=5-CntH;endcaseend//16进制计数器转换为用于显示的10进制计数器always(posedge Clk_50M)beginif(CntVV>29)beginCntDis[7:4]<=3;CntDis[3:0]<=CntVV - 30;endelse if(CntVV>19)beginCntDis[7:4]<=2;CntDis[3:0]<=CntVV - 20;endelse if(CntVV>9)beginCntDis[7:4]<=1;CntDis[3:0]<=CntVV - 10;elseCntDis<=CntVV;endSEG7_LUT hex4(Seg7_VL,CntDis[3:0]); SEG7_LUT hex5(Seg7_VH,CntDis[7:4]);always(posedge Clk_50M)beginif(CntHH>29)beginCntDiss[7:4]<=3;CntDiss[3:0]<=CntHH - 30;endelse if(CntHH>19)beginCntDiss[7:4]<=2;CntDiss[3:0]<=CntHH - 20;endelse if(CntHH>9)beginCntDiss[7:4]<=1;CntDiss[3:0]<=CntHH - 10;endelseCntDiss<=CntHH;endSEG7_LUT hex1(Seg7_HL,CntDiss[3:0]); SEG7_LUT hex2(Seg7_HH,CntDiss[7:4]); //-----------30 counter and seg7----end---- reg [1:0]state,stateH,stateV;always(posedge Clk_1Hz)begincase(state)S1:if(Cnt30>=30)beginstate<=S2;endS2:if(Cnt30>=5)beginstate<=S3;S3:if(Cnt30>=30)beginstate<=S4;endS4:if(Cnt30>=5)beginstate<=S1;enddefault:beginstate<=S1;endendcaseendalways(posedge Clk_1Hz)begincase(state)S1:beginstateH<=S1;stateV<=S1;endS2:beginstateH<=S1;stateV<=S2;endS3:beginstateH<=S2;stateV<=S3;endS4:beginstateH<=S3;stateV<=S3;endendcaseendalways(posedge Clk_50M or negedge Rst)beginif(!Rst)beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endelsebegincase(state)S1:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;endS2:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;endS3:beginLedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;endS4:beginLedR_H<=0;LedG_H<=0;LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;enddefault:beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endendcaseendendassign led15=state;endmodulemodule SEG7_LUT ( oSEG,iDIG );input [3:0] iDIG;output [6:0] oSEG;reg [6:0] oSEG;always (iDIG)begincase(iDIG)4'h1: oSEG = 7'b1111001; // ---t----4'h2: oSEG = 7'b0100100; // | |4'h3: oSEG = 7'b0110000; // lt rt4'h4: oSEG = 7'b0011001; // | |4'h5: oSEG = 7'b0010010; // ---m----4'h6: oSEG = 7'b0000010; // | |4'h7: oSEG = 7'b1111000; // lb rb4'h8: oSEG = 7'b0000000; // | |4'h9: oSEG = 7'b0011000; // ---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcaseendendmodule编译工程保存文件,将文件放在所建工程所在路径下点击主界面工具栏中的图标也可点击菜单栏中“Pro cessing”,点击“Start Compilation”分配关键如下:Clk_50M Input PIN_AD15LedG_H Output PIN_AD9LedG_V Output PIN_AJ6LedR_H Output PIN_AJ7 )LedR_V Output PIN_AJ5 )LedY_H Output PIN_AD8LedY_V Output PIN_AK5Rst Input PIN_AA23Seg7_HH[6] Output PIN_G1Seg7_HH[5] Output PIN_H3Seg7_HH[4] Output PIN_H2Seg7_HH[3] Output PIN_H1Seg7_HH[2] Output PIN_J2Seg7_HH[1] Output PIN_J1Seg7_HH[0] Output PIN_K3Seg7_HL[6] Output PIN_E4Seg7_HL[5] Output PIN_F4Seg7_HL[4] Output PIN_G4Seg7_HL[3] Output PIN_H8Seg7_HL[2] Output PIN_H7Seg7_HL[1] Output PIN_H4Seg7_HL[0] Output PIN_H6Seg7_VH[6] Output PIN_AD17Seg7_VH[5] Output PIN_AF17 7Seg7_VH[4] Output PIN_AE17 7Seg7_VH[3] Output PIN_AG16Seg7_VH[2] Output PIN_AF16 7Seg7_VH[1] Output PIN_AE16 7Seg7_VH[0] Output PIN_AG13Seg7_VL[6] Output PIN_AD12Seg7_VL[5] Output PIN_AD11Seg7_VL[4] Output PIN_AF10 8Seg7_VL[3] Output PIN_AD10Seg7_VL[2] Output PIN_AH9 8Seg7_VL[1] Output PIN_AF9 8Seg7_VL[0] Output PIN_AE8 8烧写代码在管脚配置完成后,还需将工程再编译一次,成功后,点击主界面工具栏中的亦可点击主界面菜单栏中“Tools”,点击“Programmer”进入代码烧写界面后,点击“Start”,当“Progress”为100%时,表示烧写完成,这是可观察DE2-70板现象获得预期的效果,两组的信号红黄绿灯交替切换,计数器记为零时信号灯切换状态,红灯35s,黄灯5s,绿灯30s。
fpga课程设计交通信号灯课程设计一、课程目标知识目标:1. 理解FPGA的基本原理和编程方法,掌握Verilog HDL语言的基本语法;2. 掌握交通信号灯的工作原理,了解其控制逻辑;3. 学会使用FPGA设计交通信号灯控制系统,并能进行基本的功能测试。
技能目标:1. 能够运用Verilog HDL语言设计基本的数字电路;2. 能够分析交通信号灯系统的需求,编写相应的控制代码;3. 能够在FPGA开发板上实现交通信号灯控制系统,并进行调试和优化。
情感态度价值观目标:1. 培养学生动手实践能力,提高解决实际问题的信心和兴趣;2. 培养学生团队协作精神,学会与他人共同分析和解决问题;3. 增强学生对交通安全的认识,树立遵守交通规则的意识。
课程性质:本课程为实践性课程,结合理论教学,注重培养学生的实际操作能力和创新意识。
学生特点:学生具备一定的电子技术基础知识,对FPGA和交通信号灯有一定了解,但实际操作能力有待提高。
教学要求:教师需结合学生特点,采用任务驱动法,引导学生自主探究和实践,确保学生能够达到课程目标。
在教学过程中,注重理论与实践相结合,关注学生的学习进度,及时调整教学方法和策略。
通过课程学习,使学生能够独立完成交通信号灯控制系统的设计与实现,提高学生的综合素养。
二、教学内容本课程教学内容主要包括以下三个方面:1. FPGA基础知识:讲解FPGA的基本原理、结构、编程方法和Verilog HDL 语言的基本语法。
参考教材相关章节,使学生掌握FPGA的基本使用方法。
- 教材章节:FPGA基本原理、Verilog HDL语言基础- 内容列举:FPGA结构、配置方法、Verilog语法、数据类型、运算符、基本语句2. 交通信号灯控制系统原理:分析交通信号灯的工作原理、控制逻辑和系统需求。
结合教材内容,使学生理解交通信号灯控制系统设计的关键环节。
- 教材章节:数字电路设计、交通信号灯控制系统- 内容列举:组合逻辑电路、时序逻辑电路、交通信号灯控制逻辑、系统需求分析3. 实践操作:指导学生运用FPGA和Verilog HDL语言设计并实现交通信号灯控制系统。
课程设计一、设计任务要求基于FPGA的交通灯控制器设计1、总体要求:实现十字路口的交通灯有序显示2、具体要求:按照开发板上的两组红、黄、绿做为南北双向指示灯红灯亮60秒,绿灯亮55秒,黄灯亮5秒要求采用状态机实现状态切换3、附加要求:采用两组两位数码管实现时间倒计时显示二、设计思路1、总体设计方案由设计任务要求可知输入部分有:CLK时钟频率输入,可由实验板上直接提供,本设计选用1kHZ时钟频率。
输出部分有:1)东西方向和南北方向各使用3个LED显示,红黄绿各代表红黄绿灯。
2)东西方向和南北方向计时均为2位数,共需要4个LED七段数码管显示。
由于为共阴极控制,输出三个SEL0,SEL1,SEL2信号控制选择数码管显示,A,B,C,D,E,F,G信号为输出显示的内容。
3)R1,G1,Y1;R2,G2,Y2信号分别为东西南北红绿灯的输出控制信号。
总体设计软件原理图如下所示设计方案原理图:图1A对应13脚; B对应30脚;C对应15脚; D对应31脚;E对应33脚; F对应32脚;G对应35脚; R1对应4脚;R2对应5脚;Y1对应3脚;Y2对应10脚;G2对应8脚;SEL0对应14脚; SEL1对应11脚;SEL2对应12脚.CLK对应24脚;交通灯系统结构图如下所示:红黄绿红黄绿图2状态切换的状态图如下图:图2、模块设计及结果在VHDL设计中,采用自顶向下的设计思路。
顶层模块中,根据硬件设计,设置如下端口:外部时钟信号:Clk东西方向状态灯控制信号:R1,G1,Y1;南北方向状态灯控制信号:R2,G2,Y2;(1)分频模块:由于外部时钟信号clk的频率为1KHz,而实际需要的内部计时时钟频率为1Hz,需要一个分频电路。
输入端口:clk外部时钟信号输出端口:clk_out分频后信号源程序代码如下:数码管显示信号:A,B,C,D,E,F,G;数码管共阴极控制:SEL0,SEL1,SEL2;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Frequency1 isport(clk:in std_logic; --外部时钟信号clk_out:out std_logic --分频后信号);end Frequency1;architecture Frequency1_arc of Frequency1 isbeginprocess(clk)variable temp:integer range 0 to 999;beginif(clk'event and clk='1')thenif(temp=999)then --分频计数temp:=0;clk_out<='0';elsetemp:=temp+1;clk_out<='1';end if;end if;end process;end;图4(2)状态选择模块:由于共需要显示4个数字,需要循环点亮7位数码管,该模块通过输入的时钟信号,循环输出4个选择信号。
课程设计交通灯控制设计FPGA一、课程目标知识目标:1. 学生能理解FPGA的基本原理和功能,掌握交通灯控制电路的设计方法。
2. 学生能描述交通灯控制系统的基本组成,了解信号灯时序逻辑的工作原理。
3. 学生掌握基本的数字电路设计原理,能够运用Verilog HDL语言编写交通灯控制程序。
技能目标:1. 学生能够运用所学知识,独立完成交通灯控制电路的FPGA设计,并进行功能仿真。
2. 学生能够运用问题解决策略,分析交通灯控制过程中的问题,并提出有效的解决方案。
3. 学生能够通过小组合作,进行交通灯控制电路的设计与调试,提高团队协作能力。
情感态度价值观目标:1. 学生通过课程学习,培养对电子工程领域的兴趣,提高科技创新意识。
2. 学生在课程实践中,培养严谨、细致的工作态度,提高安全意识。
3. 学生通过团队合作,培养沟通协调能力,增强集体荣誉感和责任感。
本课程针对高年级电子工程及相关专业学生,结合课程性质、学生特点和教学要求,明确以上课程目标。
通过分解具体学习成果,后续教学设计和评估将有助于提高学生的理论知识水平、实践操作能力和综合素质。
二、教学内容本课程教学内容紧密结合课程目标,涵盖以下方面:1. 数字电路基础:回顾数字电路的基本原理,重点讲解组合逻辑和时序逻辑设计方法,为交通灯控制电路设计打下基础。
2. FPGA原理:介绍FPGA的基本结构、工作原理以及编程方法,结合教材相关章节,让学生了解FPGA在数字系统设计中的应用。
3. 交通灯控制系统:分析交通灯控制系统的基本组成和功能要求,明确信号灯时序逻辑设计方法,参照教材相关内容,指导学生进行电路设计。
4. Verilog HDL编程:讲解Verilog HDL语言的基本语法和编程技巧,指导学生运用Verilog HDL编写交通灯控制程序,实现控制逻辑。
5. 功能仿真与调试:介绍FPGA设计过程中的功能仿真方法,明确仿真工具的使用,指导学生进行交通灯控制电路的功能仿真和调试。
FPGA实训报告实训设计题目基于FPGA的交通灯控制器设计作者 xxxxxxx 分院 xxxxxxxxxxxxxxxxxxx专业班级xxxxxxxxx指导教师(职称) xxxxxxxxxxxxxx 报告完成时间 2012年10月8日基于FPGA的交通灯控制器设计摘要:超高速硬件描述语言VHDL,是对数字系统进行抽象的行为与功能描述到具体的内部线路结构描述,利用EDA工具可以在电子设计的各个阶段、各个层系进行计算机模拟验证,保证设计过程的正确性,可大大降低设计成本,缩短设计周期。
本文介绍的数字秒表设计,利用基于VHDL的EDA设计工具,采用大规模可编程逻辑器件FPGA,通过设计芯片来实现系统功能。
交通灯控制系统可以实现路口红绿灯的自动控制。
基于FPGA设计的交通灯控制系统具有电路简单、可靠性强、实时快速擦写、运算速度高、故障率低、可靠性高,而且体积小的特点。
本设计采用Altera公司Cyclone系列的EPlC3T1444C8芯片,在Quartus II 软件平台上使用VHDL语言,采用自顶向下的设计方法对系统进行了模块化设计和综合,并进行了仿真。
该系统可实现十字路口红绿灯及左转弯控制和倒计时显示,仿真结果结果表明系统能够自动控制交通灯转变。
关键词:EDA;交通灯;VHDL目录引言 (1)1 FPGA概述 (2)1.1 FPGA的简介 (2)1.2 FPGA的应用 (2)2 VHDL硬件描述语言 (3)2.1 VHDL程序基本结构 (3)2.1.1 实体 (3)2.1.2 结构体 (3)2.1.3 库 (4)2.2 VHDL语言 (4)2.2.1 VHDL文字规则 (4)2.2.2 VHDL数据对象 (4)2.2.3 VHDL数据类型 (4)2.2.4 VHDL顺序语句 (5)2.2.5 VHDL并行语句 (5)3系统设计与仿真 (6)3.1 系统介绍 (6)3.1.1 设计任务 (6)3.1.2 设计要求 (6)3.2 系统设计仿真 (6)3.2.1 系统框图设计 (7)3.2.2 系统时序状态图设计 (7)3.2.3 系统工程设计流程图 (8)3.2.4 芯片选择 (8)3.3 功能模块设计与仿真 (8)3.3.1 分频器模块设计 (8)3.3.2 控制模块设计 (9)3.3.3 倒计时模块设计 (10)3.3.4 信号处理模块设计 (11)3.3.5 数据译码模块设计 (12)3.3.6 显示模块设计 (14)3.4 顶层文件设计 (17)结论 (19)参考文献: (19)基于FPGA的交通灯控制器设计xxxxx专业xxxx班xxxx 指导教师xxxx引言当今社会是数字化的社会,是数字集成电路广泛应用的社会。
XXXXXX学院题目:基于FPGA的交通灯控制课程设计学院:信息工程学院班级:设计人:指导教师:设计时间:2016年6月16日目录一.摘要 (1)二.概述 (1)1.FPGA的应用 (1)三.系统总体设计 (2)1.设计任务 (2)2.系统设计流程 (2)四.硬件设计 (4)1.控制模块 (5)2.时钟分频模块 (5)3.分位译码模块 (5)4.计数模块 (6)五.实验程序设计 (6)六.程序仿真与分析 (13)1.仿真结果 (13)2.仿真结果分析 (14)七.心得体会 (14)八.参考文献 (15)九.附录 (15)一.摘要EDA工具对于电子设计人员来说极其重要,它可以在电子设计的各个阶段、层次进行计算机模拟验证,确保设计的准确性,可缩短设计周期,降低设计成本。
目前交通灯广泛应用于道路交通建设中。
交通灯可以实现十字路口红绿灯的自动控制。
本文设计一个十字路口交通灯控制电路,要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。
为了对交通灯系统进行精确控制,采用FPGA实验板,在QuartusⅡ软件环境下,分别实现脉冲发生模块、状态定时模块、交通灯显示模块、时间显示模块,进行仿真实验和硬件下载,获得的测试结果满足设计要求。
基于FPGA的交通灯设计系统具有可靠性强、实时快速擦写、运算速度高、故障率低、电路简单,且体积小的特点。
使用QuartusII软件作为开发平台;采用自顶向下的设计思路对系统进行模块化设计和综合,并通过波形仿真和硬件实现两种方式实现并验证交通灯的功能。
二.概述F PGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在可编程器件的基础上进一步发展的产物。
它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
当今社会是数字化的社会,是数字集成电路广泛应用的社会。
FPGA综合设计实验报告题目基于FPGA的交通灯控制器的设计作者专业日期 2013年3月29日1.设计任务:基于FPGA的交通灯控制器的设计2.设计要求:(1)十字路口由一条东西方向的主干道和一条南北方向的支干道构成,主干道和支干道均有红、黄、绿3种信号灯;(2)保持主、支干道红、绿交替变换;(3)绿灯转红灯过程中,先由绿灯转为黄灯,5秒后再由黄灯转为红灯;同时对方由红灯转为绿灯;(4)系统需具有复位及特殊情况紧急处理功能。
(5)了解交通灯控制器的工作原理,完成控制器的硬件电路设计及软件设计。
3.总体设计方案:从题目中计数值与交通灯的亮灭的关系如图(1)所示。
当主干道绿灯55秒和5秒黄灯过渡时,支干道必须禁止通行,即支干道红灯亮55+5=60秒;当支干道由红灯转为绿灯时,支干道亮55秒绿灯和5秒黄灯过渡,此时主干道红灯应亮55+5=60秒。
图1 交通灯控制要求4.硬件电路基本原理分析:动态LED显示的设计方法是将不同LED模块的所有的LED的驱动端一对一地连接到一起,而将其公共极(阴极或阳极)分别由不同的IO口来驱动(主要针对7段码和LED点阵模块)。
动态显示方式主要是出于简化电路和产品成本考虑在大多数场合都可以达到用户要求。
动态显示虽然占用的CPU时间多,但使用的硬件少,能节省线路板空间。
另外,本设计显示需要使用的是4个七段显示数码管。
在计时结果显示电路中,七段数码管显示部分是一个不容忽视的环节,如若处理不得当,可能引起系统功率过大,产生散热问题,严重时甚至会导致系统的烧毁。
为了解决好以上问题,下面就对七段数码管显示电路做简要的分析和介绍。
通常点亮一个LED所需的电流是5~50 mA,通电的电流愈大,LED的亮度愈高,相对的也会使其寿命缩短。
一般以10 mA的导通电流来估算它所必须串联的阻值,其计算方式参考如图1所示。
图1 单个LED的串接电阻计算方式七段显示器可分为共阳极、共阴极型两种,它们都可以等效成8个LED的连接电路,其中如图2就是共阴极型七段显示器的等效电路和每节LED的定义位置图。
合肥学院综合课程设计报告题目:基于FPGA的交通灯设计专业:电子信息工程班级:09电子(2)班姓名:周峰导师:成绩:2012年12月11日基于FPGA的交通灯设计一:题目要求1:主干道绿灯时,支干道红灯亮,反之亦然,两者交替允许通行。
主干道每次放行40秒,支干道每次放行30秒。
每次路灯亮,前10秒为左转灯亮,后5秒为黄灯亮。
余下为直行灯亮、2:能实现正常的倒计时显示功能。
3:能实现总体清零功能;计数器由初始状态开始计数,对应状态的指示灯亮。
二:题目分析1:在十字路口东西方向和南北方向各设一组左转灯、;显示的顺序为:左转灯绿灯黄灯红灯。
2:设计一个倒计时显示器。
倒计时只显示总体时间。
主干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、30秒、25秒、5秒。
支干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、40秒、15秒、5秒状态表如表3-1所示:3三:选择方案1:方案一在VHDL设计描述中,采用自顶向下的设计思路,该思路在自顶向下的VHDL 设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。
根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。
通过上面的分析,不难得知可以把交通灯控制系统划分为3个模块:时钟模块、控制模块、分频模块。
2:方案二不采用方案一的分模块设计,直接用进程写程序。
该程序由7个进程组成,进程P1将CLK信号分频后产生1秒信号,P2形成0-49的计数器,进程P3、P4用来控制的信号灯亮灭的,其中P5、P6产生数码管显示的倒数的十进制形式。
进程P7实现状态转换和产生状态转换的控制信号,进而控制数码管显示。
由于方案一中使用进程会使程序变得很复杂,不易理解,所以我采用了方案二。
四:方案二ASM图设计开关控制部分ASM图ASM图说明:i、j、k、分别代表开关状态;1表示开关闭合,为高电平;0表示开关断开为低电平。
当开关处于不同的状态时,分别给变量G不同的值,用来实现控制通行时间。
交通灯实验报告一,实验目的实现两路信号灯交替亮起,并利用两组数码管分别对两路信号进行倒计时。
两路信号时间分别为:V:绿灯(30S)H:红灯(35S)黄灯(5s)绿灯(30S)红灯(35S)黄灯(5S)二,实验步骤建立工程可在欢迎界面点击“Creat a New Project”进入工程建立界面,亦可关闭欢迎界面,点击菜单栏的“File”,点击“New Project Wizard”进入建立工程界面。
右侧为建立工程界面,点击next。
在此界面选定工程路径,取好工程名,点击“Next”。
注意:路径中不能有中文,工程名也不能有中文。
一直点击“Next”进入器件设置界面,DE2-70开发工具采用的Cyclone II系列的EP2C70F896C6N。
点击“Finish”,完成工程建立1、点击“File”,点击“New”选择“Verilog HDL”2,点击主界面工具栏中的选择“Verilog HDL”3、写入verilog代码。
代码如下:moduletraffic(Clk_50M,Rst,LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V,Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL,led15);parameter S1=2'b00;parameter S2=2'b01;parameter S3=2'b10;parameter S4=2'b11;input Clk_50M,Rst;output LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;output[6:0] Seg7_VH,Seg7_VL,Seg7_HH,Seg7_HL;output led15;//-------------div for 1Hz-------start----reg Clk_1Hz;reg [31:0] Cnt_1Hz;always@(posedge Clk_50M or negedge Rst)beginif(!Rst)beginCnt_1Hz<=1;Clk_1Hz<=1;endelsebeginif(Cnt_1Hz>=25000000)beginCnt_1Hz<=1;Clk_1Hz<=~Clk_1Hz;endelseCnt_1Hz<=Cnt_1Hz + 1;endend//-----------div for 1Hz------end-----reg[7:0] Cnt30,CntH,CntV,CntHH,CntVV;reg[7:0] CntDis,CntDiss;//-----------30 counter and seg7---start---reg LedR_H,LedG_H,LedY_H,LedR_V,LedG_V,LedY_V;always@(posedge Clk_1Hz)begincase(state)S1:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS2:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS3:beginif(Cnt30>=30)Cnt30<=1;elseCnt30<=Cnt30 + 1;endS4:beginif(Cnt30>=5)Cnt30<=1;elseCnt30<=Cnt30 + 1;endendcaseendalways@(posedge Clk_1Hz) begincase(stateV)S1:beginif(CntV>=30)CntV<=1;elseCntV<=CntV + 1;endS2:beginif(CntV>=5)CntV<=1;elseCntV<=CntV + 1;endS3:beginif(CntV>=35)CntV<=1;elseCntV<=CntV + 1;endendcaseendalways@(posedge Clk_1Hz)begincase(stateH)S1:beginif(CntH>=35)CntH<=1;elseCntH<=CntH + 1;endS2:beginif(CntH>=30)CntH<=1;elseCntH<=CntH + 1;endS3:beginif(CntH>=5)CntH<=1;elseCntH<=CntH + 1;endendcaseendalways@(negedge Clk_50M or negedge Rst) begincase(state)S1:CntVV=30-CntV;S2:CntVV=5-CntV;S3:CntVV=35-CntV;S4:CntVV=35-CntV;endcaseendalways@(negedge Clk_50M or negedge Rst) begincase(state)S1:CntHH=35-CntH;S2:CntHH=35-CntH;S3:CntHH=30-CntH;S4:CntHH=5-CntH;endcaseend//16进制计数器转换为用于显示的10进制计数器always@(posedge Clk_50M)beginif(CntVV>29)beginCntDis[7:4]<=3;CntDis[3:0]<=CntVV - 30;endelse if(CntVV>19)beginCntDis[7:4]<=2;CntDis[3:0]<=CntVV - 20;endelse if(CntVV>9)beginCntDis[7:4]<=1;CntDis[3:0]<=CntVV - 10;elseCntDis<=CntVV;endSEG7_LUT hex4(Seg7_VL,CntDis[3:0]); SEG7_LUT hex5(Seg7_VH,CntDis[7:4]);always@(posedge Clk_50M)beginif(CntHH>29)beginCntDiss[7:4]<=3;CntDiss[3:0]<=CntHH - 30;endelse if(CntHH>19)beginCntDiss[7:4]<=2;CntDiss[3:0]<=CntHH - 20;endelse if(CntHH>9)beginCntDiss[7:4]<=1;CntDiss[3:0]<=CntHH - 10;endelseCntDiss<=CntHH;endSEG7_LUT hex1(Seg7_HL,CntDiss[3:0]); SEG7_LUT hex2(Seg7_HH,CntDiss[7:4]); //-----------30 counter and seg7----end---- reg [1:0]state,stateH,stateV;always@(posedge Clk_1Hz)begincase(state)S1:if(Cnt30>=30)beginstate<=S2;endS2:if(Cnt30>=5)beginstate<=S3;S3:if(Cnt30>=30)beginstate<=S4;endS4:if(Cnt30>=5)beginstate<=S1;enddefault:beginstate<=S1;endendcaseendalways@(posedge Clk_1Hz)begincase(state)S1:beginstateH<=S1;stateV<=S1;endS2:beginstateH<=S1;stateV<=S2;endS3:beginstateH<=S2;stateV<=S3;endS4:beginstateH<=S3;stateV<=S3;endendcaseendalways@(posedge Clk_50M or negedge Rst)beginif(!Rst)beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endelsebegincase(state)S1:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=1;LedY_V<=0;endS2:beginLedR_H<=1;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=1;endS3:beginLedR_H<=0;LedG_H<=1;LedY_H<=0;LedR_V<=1;LedG_V<=0;LedY_V<=0;endS4:beginLedR_H<=0;LedG_H<=0;LedY_H<=1;LedR_V<=1;LedG_V<=0;LedY_V<=0;enddefault:beginLedR_H<=0;LedG_H<=0;LedY_H<=0;LedR_V<=0;LedG_V<=0;LedY_V<=0;endendcaseendendassign led15=state;endmodulemodule SEG7_LUT ( oSEG,iDIG );input [3:0] iDIG;output [6:0] oSEG;reg [6:0] oSEG;always @(iDIG)begincase(iDIG)4'h1: oSEG = 7'b1111001; // ---t----4'h2: oSEG = 7'b0100100; // | |4'h3: oSEG = 7'b0110000; // lt rt4'h4: oSEG = 7'b0011001; // | |4'h5: oSEG = 7'b0010010; // ---m----4'h6: oSEG = 7'b0000010; // | |4'h7: oSEG = 7'b1111000; // lb rb4'h8: oSEG = 7'b0000000; // | |4'h9: oSEG = 7'b0011000; // ---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcaseendendmodule编译工程保存文件,将文件放在所建工程所在路径下点击主界面工具栏中的图标也可点击菜单栏中“Processing”,点击“Start Compilation”分配关键如下:Clk_50M Input PIN_AD15LedG_H Output PIN_AD9LedG_V Output PIN_AJ6LedR_H Output PIN_AJ7 )LedR_V Output PIN_AJ5 )LedY_H Output PIN_AD8LedY_V Output PIN_AK5Rst Input PIN_AA23Seg7_HH[6] Output PIN_G1Seg7_HH[5] Output PIN_H3Seg7_HH[4] Output PIN_H2Seg7_HH[3] Output PIN_H1Seg7_HH[2] Output PIN_J2Seg7_HH[1] Output PIN_J1Seg7_HH[0] Output PIN_K3Seg7_HL[6] Output PIN_E4Seg7_HL[5] Output PIN_F4Seg7_HL[4] Output PIN_G4Seg7_HL[3] Output PIN_H8Seg7_HL[2] Output PIN_H7Seg7_HL[1] Output PIN_H4Seg7_HL[0] Output PIN_H6Seg7_VH[6] Output PIN_AD17Seg7_VH[5] Output PIN_AF17 7Seg7_VH[4] Output PIN_AE17 7Seg7_VH[3] Output PIN_AG16Seg7_VH[2] Output PIN_AF16 7Seg7_VH[1] Output PIN_AE16 7Seg7_VH[0] Output PIN_AG13Seg7_VL[6] Output PIN_AD12Seg7_VL[5] Output PIN_AD11Seg7_VL[4] Output PIN_AF10 8Seg7_VL[3] Output PIN_AD10Seg7_VL[2] Output PIN_AH9 8Seg7_VL[1] Output PIN_AF9 8Seg7_VL[0] Output PIN_AE8 8烧写代码在管脚配置完成后,还需将工程再编译一次,成功后,点击主界面工具栏中的亦可点击主界面菜单栏中“Tools”,点击“Programmer”进入代码烧写界面后,点击“Start”,当“Progress”为100%时,表示烧写完成,这是可观察DE2-70板现象获得预期的效果,两组的信号红黄绿灯交替切换,计数器记为零时信号灯切换状态,红灯35s,黄灯5s,绿灯30s。
交通灯信号控制器的设计报告学院专业班级学号姓名交通灯信号控制器的设计1、实验目的(1)熟悉QuartusⅡ/ISE Design Suite/ispLEVER软件的基本使用方法。
(2)熟悉GW48-CK或其他EDA实验开发系统的基本使用方法。
(3)学习和掌握Verilog HDL过程区块语句、if条件语句、case 选择语句、for循环语句和元件实例化语句等的综合使用。
(4)学习计数器、分频器、选择器等Verilog HDL基本逻辑电路、动态扫描显示电路和状态机控制电路的综合设计应用。
2、实验要求设计并调试好一个十字交叉口的交通灯信号控制器,要求为:(1)设置两个开关SW1、SW2,其中固定开关实现交通警察人为监督交通秩序和无人自动控制交通秩序之间的切换,默认开关置于高电平端,为自动控制模式—交通灯按事先的规定工作,开关置于低电平时,为人为监督控制模式(交通灯不再工作)。
点动开关SW2用于整个系统的总复位,如系统出现故障,则需要总复位。
(2)当交通灯处于无人控制自动状态时,若方向灯1绿灯亮,则方向2红灯亮。
计数55s后,方向1的绿灯熄灭、黄灯亮,再计数5s后,方向1的红灯亮,黄灯灭,同时方向2的绿灯亮,然后方向2重复方向1的工作过程,这样就实现了无人自动控制交通灯。
有关控制的定时使用倒计时方式,计时过程用数码管显示。
3、总体设计思路3.1系统组成交通灯控制器拟由单片的CPLD/FPGA来实现,结合设计任务要求和确定的实现方案,按照自顶向下的层次化设计方法,整个系统可分为6个模块组成。
①主控制模块control:根据外部输入控制信号及来自内部计时模块的控制信号,控制两个方向道路信号灯的亮与灭。
②55s倒计时模块cnt55:实现55s绿灯点亮时间的倒计时。
③5s倒计时模块cnt05:实现5s黄灯点亮时间的倒计时。
④时钟信号分频模块fdiv:将给定的主频时钟信号经分频得到频率分别是1KHZ和1HZ.⑤显示数据多路选择模块datasel:根据来自control模块的控制信号进行倒计时模块cnt55和cnt05计时结果的显示数据选择。
⑥数据动态显示驱动模块display:使用动态扫描的方式,进行显示数据的选择及显示驱动译码。
3.2功能模块设置及实现系统采用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL 语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各个功能模块连接起来。
下面分别来介绍各个功能模块的实现和调试过程。
◆主控制模块输入端口:en0、en1:分别来自cnt55、cnt5的定时溢出信号sw1:交通控制转换开关rst:复位信号输出端口:ce0、ce1:用于cnt05、cnt55模块是否定时的控制信号sel:用于datasel模块进行数据选择的控制信号red1、red2、gre1、gre2、yel1、yel2:信号灯控制该模块主要完成根据外部输入信号rst、sw1控制输出,用于控制交通灯的信号Red1,Red2,Yellow1,Yellow2,Green1,Green2。
这中间包含了必要的内部模块之间的信号EN(来自倒计时时间选择驱动模块)。
◆55s定时模块输入端口:clk:时钟脉冲信号rst:复位信号ce:来自控制模块的计数使能信号输出端口:dout1、dout0:分别为定时值的高4位和低四位cout:定时计数溢出信号该模块主要完成55 秒的倒计时,控制红灯的点亮时间。
实际中在1 分钟内还要有绿到黄灯的转换以提醒车辆与行人,所以选择了55 秒作为绿灯的点亮时间。
◆5s定时模块输入端口:clk:时钟脉冲信号rst:复位信号ce:来自控制模块的计数使能信号输出端口:dout1、dout0:分别为定时值的高4位和低四位cout:定时计数溢出信号该模块主要完成5 秒的倒计时,控制黄灯的点亮时间。
实际中在1 分钟内还要有红到黄灯的转换以提醒车辆与行人,所以选择了55 秒作为红灯的点亮时间后,黄灯的点亮时间必定为5 秒。
◆分频器模块输入端口:clk:输入主频时钟脉冲信号,假设为10MHZ输出端口:clk1Khz:分频后为1Khz的输出信号clk1hz:分频后为1hz的输出信号该模块完成从10MHz 的主频时钟信号经过分频得到1KHz的时钟信号,即完成一个10000 分频的分频器,完成从模块1KHz 中的1KHz 时钟信号经过分频得到1Hz 的计数时钟信号,即完成一个1000 分频的分频器。
◆显示数据多路选择模块输入端口:din:数据显示选择信号sel:控制选择信号输出端口:dout1、dout0:选择输出该模块主要完成两组不同倒计时时间数据的选择输出到后续显示模块中。
4 总体调试与结果说明4.1 顶层电路在设计完各个模块后,需要将各个模块有机地组合成一个整体,最后来实现系统的功能在数字频率计的设计中,同时采用了电路原理图的设计以及Verilog HDL语言来编写的顶层电路。
电路原理图见下图总系统电路图4.2 系统仿真图4.3 管脚分配4.4 硬件仿真通过试验箱下载程序调试之后,基本满足了要求。
5 心得与体会本次实验所学的VHDL和QUARTUSII的知识的巩固和应用,通过对一个综合性的课题的分析、设计、编写代码、调试和实践来检验学习的成果和提高独立思考能力和动手实践能力。
并且,我们在实验课中继续学习了综合性课题的设计方法----自顶向下的设计方法,从单一性的设计到模块化的设计,在深入理解VHDL 语言的同时,锻炼了个人的逻辑思维和设计能力,提高了个人的自学能力个学习素质。
虽然在设计的过程中也会出现一些问题,但是通过和同学们的交流和对程序的调试和改进,最终成功完成了课题任务的设计和实践,基本上算是一次成功的实验经历。
本次实验是对VHDL语言的深入学习,主要学习并实践了VHDL的自顶向下的设计方法。
在学习和实践的过程中,体会到各种语言的共同性。
如C++高级语言程序设计也是利用自顶向下的设计方法来完成课题功能的设计,从这一点可以看出各个高级语言的逻辑互通性。
这给我们今后的思维和学习一个很大的启示。
程序://control.vmodule control (en0,en1,sw1,rst,ce0,ce1,sel,red1,red2,yel1,yel2,gre1,gre2); input en0,en1;input sw1,rst;output ce0,ce1;output [1:0]sel;output red1,red2,yel1,yel2,gre1,gre2;wire en;reg ce1,ce0;reg[1:0]sel;reg red1,red2,yel1,yel2,gre1,gre2,dout;assign en=en1|en0;always @(posedge en)beginsel<=sel+2'b01;endalwaysbegincase(sel)2'b00:{ce1,ce0}<=2'b10;2'b01:{ce1,ce0}<=2'b01;2'b10:{ce1,ce0}<=2'b10;2'b11:{ce1,ce0}<=2'b01;default:{ce1,ce0}<=2'b00;endcaseendalways @(sel,rst,sw1)beginif(sw1==0||rst==0){red1,red2,yel1,yel2,gre1,gre2}=6'b0;elsebegincase(sel)2'b00:{red1,red2,yel1,yel2,gre1,gre2}=6'b010010;2'b01:{red1,red2,yel1,yel2,gre1,gre2}=6'b011000;2'b10:{red1,red2,yel1,yel2,gre1,gre2}=6'b100001;2'b11:{red1,red2,yel1,yel2,gre1,gre2}=6'b100100;default:{red1,red2,yel1,yel2,gre1,gre2}=6'b0;endcaseendendEndmodule//cnt05s.vmodule cnt05s(clk,rst,ce,dout1,dout0,cout);input clk,rst,ce;output [3:0]dout1,dout0;output cout;reg [3:0]dout1,dout0;reg cout;reg [3:0]cdata1,cdata0;reg [7:0]data;always @(posedge clk)beginif(rst==0||ce==0)begin cout<=1'b0;cdata1<=4'b0000;cdata0<=4'b0000;end elsebeginif(cdata0!=4'b0101)begin cdata0<=cdata0+1;cout<=1'b0;endelsebegin cdata1<=4'b0000;cdata0<=4'b0000;cout<=1'b1; endendendalwaysbegindata<=8'b00000101-((cdata1<<4)+cdata0);dout1<=4'b0000;if((data&4'b1111)>4'b0101)dout0<=data&4'b1111-4'b1011;elsedout0<=data&4'b1111;endendmodule//cnt55s.vmodule cnt55s(clk,rst,ce,dout1,dout0,cout);input clk,rst,ce;output [3:0]dout1,dout0;output cout;reg [3:0]dout1,dout0;reg cout;reg [3:0]cdata1,cdata0;reg [7:0]data;always @(posedge clk)beginif(rst==0||ce==0)begin cdata1<=4'b0000;cdata0<=4'b0000;cout<=1'b0;endelsebeginif(cdata0==4'b0101&&cdata1==4'b0101)begin cdata1<=4'b0000;cdata0<=4'b0000;cout=1'b1; end else if(cdata0!=4'b1001)begin cdata0<=cdata0+1;cout<=1'b0;endelse if(cdata0==4'b1001&&cdata1!=4'b0110)begin cdata1<=cdata1+1;cdata0<=4'b0000;cout<=1'b0;endelsebegin cdata1<=4'b0000;cdata0<=4'b0000;cout=1'b1; end endendalwaysbegindata<=8'b01010101-((cdata1<<4)+cdata0);if(((data>>4)&4'b1111)>4'b0101)dout1<=(data>>4)&4'b1111-4'b1111;elsedout1<=(data>>4)&4'b1111;if((data&4'b1111)>4'b1001)dout0<=(data&4'b1111)-4'b0110;elsedout0<=data&4'b1111;endEndmodule//datasel.vmodule datasel(din0,din1,din2,din3,sel,dout0,dout1); input[3:0] din0,din1,din2,din3;input[1:0] sel;output[3:0] dout0,dout1;reg [3:0] dout0,dout1;alwaysbeginif(sel==2'b00)begin dout1<=din2;dout0<=din3;endelse if(sel==2'b01)begin dout1<=din0;dout0<=din1;endelse if(sel==2'b10)begin dout1<=din2;dout0<=din3;endelse if(sel==2'b11)begin dout1<=din0;dout0<=din1;endelsebegin dout1<=4'b0000;dout0<=4'b0000;endendendmodule//fdiv.vmodule fdiv(clk,clk1khz,clk1hz);input clk;output clk1khz,clk1hz;reg clk1khz,clk1hz;integer cnt1=0;integer cnt2=0;always@(posedge clk)beginif(cnt1<9999)//if(cnt1<19)begincnt1=cnt1+1;clk1khz<=1'b0;endelsebegincnt1=0;clk1khz<=1'b1;endendalways@(posedge clk1khz)beginif(cnt2<999)//if(cnt2<9)begincnt2=cnt2+1;clk1hz<=1'b0; endelsebegincnt2=0;clk1hz<=1'b1;endendendmodule。