verilog课程设计—交通灯

合集下载

verilog课程设计交通灯

verilog课程设计交通灯

verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。

具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。

二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。

具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。

三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。

首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。

四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。

此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。

verilog交通灯课程设计

verilog交通灯课程设计

verilog交通灯课程设计一、课程目标知识目标:1. 让学生掌握Verilog硬件描述语言的基本语法和结构;2. 使学生理解交通灯系统的基本工作原理和逻辑设计;3. 帮助学生掌握利用Verilog设计交通灯控制器的方法。

技能目标:1. 培养学生运用Verilog语言进行数字系统设计的能力;2. 提高学生分析和解决实际问题的能力;3. 培养学生运用仿真工具对设计进行验证和调试的能力。

情感态度价值观目标:1. 培养学生积极探索、勇于实践的精神;2. 培养团队合作意识,提高沟通与协作能力;3. 增强学生对我国交通事业的关注和责任感。

课程性质:本课程为电子信息类专业的实践性课程,旨在通过实际项目设计,提高学生对Verilog语言和数字系统设计的理解和应用能力。

学生特点:学生已具备一定的数字电路基础知识,熟悉Verilog基本语法,但缺乏实际项目经验。

教学要求:结合实际交通灯系统,引导学生运用所学知识进行设计,注重理论与实践相结合,培养学生的实际操作能力和创新能力。

在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 交通灯系统原理介绍:分析交通灯系统的基本工作原理,包括信号灯的时序关系和控制逻辑。

- 相关教材章节:第二章 数字电路基础,第三节 时序逻辑电路。

2. Verilog基础知识回顾:复习Verilog的基本语法、数据类型、运算符和模块结构。

- 相关教材章节:第一章 Verilog语言概述,第二节 Verilog语言基础。

3. 交通灯控制器设计:指导学生使用Verilog设计一个简单的交通灯控制器。

- 相关教材章节:第三章 数字系统设计,第四节 状态机的设计与应用。

4. 仿真与验证:介绍仿真工具的使用,对设计的交通灯控制器进行功能验证和时序分析。

- 相关教材章节:第四章 仿真与验证,第一节 ModelSim仿真工具的使用。

5. 实践操作:组织学生进行实际操作,编写代码、配置仿真环境、运行仿真并调试程序。

基于verilog的交通灯设计(状态机)

基于verilog的交通灯设计(状态机)

实验课题:基于verilog的交通灯设计(状态机)一、Verilog程序(主程序+激励)1)主程序/*顶层模块*/module traffic_light(clk,rst,out);input clk,rst;output [5:0]out;wire [4:0] x;delay D(.clk(clk),.rst(rst),.cnt(x));state S(.in(x),.rst(rst),.clk(clk),.out(out));endmodule/*延时模块*/module delay(clk,rst,cnt);input clk,rst;output[4:0]cnt;reg[4:0]cnt;always@(posedge clk)beginif(!rst)cnt<=0;else if(cnt<29)cnt<=cnt+1;else cnt<=0;endendmodule/*状态机模块*/module state(clk,in,rst,out);input clk,rst;input[4:0]in;output [5:0]out;reg [5:0]out;reg[3:0]state;parameter r1_g2or1_2_y=6'b100010,r1_y2og1_r2=6'b001100,g1_r2oy1_r2=6'b010100, y1_r2or1_g2=6'b100001,A='b0001,B='b0010,C='b0100,D='b1000;always@(posedge clk)beginif(!rst)beginstate<=A;out<= y1_r2or1_g2;endelsebegincase(state)A: beginif(in<25)state<=A;elsebeginstate<=B;out<=r1_g2or1_2_y;endendB: beginif(in>24)state<=B;elsebeginstate<=C;out<=r1_y2og1_r2;endendC: beginif(in<25)state<=C;elsebeginstate<=D;out<=g1_r2oy1_r2;endendD: beginif(in>24)state<=D;elsebeginstate<=A;out<=y1_r2or1_g2;endendendcaseendendendmodule2)激励module test;reg clk,rst;wire [5:0]out;traffic_light test(clk,rst,out);initialbeginclk='b1;forever #5 clk=~clk;endinitialbeginrst='b0;#10 rst='b1;#500 rst='b0;#10 rst='b1;endendmodule二、实验波形图截图三、波形分析输出out[5:0]分别对应:out[5]:主干道红灯out[4]:主干道黄灯out[3]:主干道绿灯out[2]:支干道红灯out[1]:支干道黄灯out[0]:支干道绿灯初始状态为:主干道红灯亮,支干道绿灯亮。

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G100100IDLE100001S1100010S2001100S3010100S4根据实验要求画出控制器的状态转移图如下:三、代码1、源代码(1)控制器模块module traffic_lights(clk,rst,count,ew,sn);input clk,rst;input[5:0] count;output[2:0] ew,sn;reg[2:0] ew,sn;reg[3:0] state;parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk)if(!rst)beginstate<=Idle;endelsecasex(state)Idle: if(rst)beginstate<=s1;ends1: if(count=='d25)beginstate<=s2;ends2: if(count=='d30)beginstate<=s3;ends3: if(count=='d55)beginstate<=s4;ends4: if(count=='d60)beginstate<=s1;endendcasealways @(posedge clk)beginif(!rst)beginew<=3'b100;sn<=3'b100;endelsecasex(state)Idle: if(rst)beginew<=3'b100;sn<=3'b001;ends1: if(count=='d25)beginew<=3'b100;sn<=3'b010;ends2: if(count=='d30)beginew<=3'b001;sn<=3'b100;ends3: if(count=='d55)beginew<=3'b010;sn<=3'b100;ends4: if(count=='d60)beginew<=3'b100;sn<=3'b001;enddefault: state<=Idle;endcaseendendmodule(2)计数器模块module counter(en,clk,rst,out);output[5:0]out;input en,clk,rst;reg[5:0] out;always@(posedge clk or negedge rst)beginif(!rst)out<='d0;else if(!en&&out<'d60)out<=out+1;elseout<='d1;endendmodule(3)将控制器与计数器进行连接module traffic_lights_top(out,clk,rst,en,ew,sn); input clk,rst,en;output[2:0] ew,sn;output[5:0]out;wire[5:0] out;traffic_lights u1(.clk(clk),.rst(rst),.count(out),.ew(ew),.sn(sn));counter u2(.en(en),.clk(clk),.rst(rst),.out(out));endmodule2、激励`timescale 1ns/100ps module traffic_lights_tb;reg clk,rst,en;wire[2:0] ew,sn;wire[5:0]out;traffic_lights_top m(.clk(clk),.rst(rst),.en(en),.ew(ew),.sn(sn),.out(out));always#5 clk=~clk;initialen<=1;initialbeginclk<=1;en<=0;rst<=0;#5 rst<=1;endendmodule四、仿真波形(图一)(图二)五、波形说明波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。

verilog交通灯课程设计

verilog交通灯课程设计

verilog交通灯课程设计一、课程目标知识目标:1. 让学生掌握Verilog硬件描述语言的基本语法和使用方法。

2. 使学生了解交通灯系统的基本工作原理和组成。

3. 帮助学生理解数字电路设计的基本流程和仿真测试方法。

技能目标:1. 培养学生运用Verilog语言设计简单数字电路的能力。

2. 培养学生运用仿真工具对交通灯系统进行功能验证和性能分析的能力。

3. 培养学生通过小组合作,解决实际问题的能力。

情感态度价值观目标:1. 培养学生对数字电路设计的兴趣和热情,提高其学习积极性。

2. 培养学生严谨的科学态度和良好的团队协作精神。

3. 培养学生关注社会问题,将所学知识应用于实际生活中的意识。

课程性质:本课程为电子信息类专业的实践课程,通过Verilog语言设计交通灯系统,锻炼学生的实际操作能力。

学生特点:学生已具备一定的电子技术和Verilog语言基础,具有较强的学习能力和动手能力。

教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,培养学生解决实际问题的能力。

通过课程学习,使学生能够独立完成交通灯系统的设计和仿真,达到预期的学习成果。

1. Verilog基础知识回顾:包括数据类型、运算符、控制语句、模块和端口定义等,对应教材第1-3章内容。

2. 交通灯系统原理介绍:讲解交通灯系统的基本工作原理、状态转换和时序控制,对应教材第4章内容。

3. 交通灯系统设计:a. 设计要求:明确交通灯系统的功能要求和性能指标,对应教材第5章内容。

b. Verilog代码编写:指导学生运用Verilog语言编写交通灯控制模块,对应教材第6章内容。

c. 仿真测试:使用仿真工具对设计进行功能验证和性能分析,对应教材第7章内容。

4. 实践操作:a. 硬件描述语言实践:指导学生进行Verilog代码编写和调试,对应教材第8章内容。

b. 交通灯系统综合实践:组织学生进行交通灯系统设计和仿真,对应教材第9章内容。

5. 课程总结与评价:对学生的学习成果进行评价,总结课程收获和不足,对应教材第10章内容。

Verilog交通灯(模块化)

Verilog交通灯(模块化)

本交通灯由四个模块组成:1、顶层例化模块(traffic)2、同步时钟模块(mast_clk)3、东西方向(traffic_x)4、南北方向(traffic_y)module traffic(RESET,CLK,num_x,red_x,green_x,yellow_x,num_y,red_y,green_y,yellow_y);input RESET;input CLK;output red_x;output green_x;output yellow_x;output red_y;output green_y;output yellow_y;output [4:0] num_x,num_y;wire [6:0] num;mast_clk clk(.CLK(CLK),.RESET(RESET),.num(num));traffic_x Xx(.CLK(CLK),.RESET(RESET),.NUM(num),.red_x(red_x),.green_x(green_x),.yellow_x(yellow_x),.num_x(num_x));traffic_y Yy(.CLK(CLK),.RESET(RESET),.NUM(num),.red_y(red_y),.green_y(green_y),.yellow_y(yellow_y),.num_y(num_y));endmodulemodule mast_clk(CLK,RESET,num);input CLK;input RESET;output reg [6:0] num;always @(posedge CLK,negedge RESET)beginif(!RESET)num<=0;else if(num==59)num<=0;else num<=num+1'b1;endendmodulemodule traffic_x(CLK,RESET,NUM,red_x,green_x,yellow_x,num_x);input CLK;input RESET;input [6:0] NUM;output reg red_x;output reg green_x;output reg yellow_x;output [6:0] num_x;reg [6:0] num_x;parameter [2:0] red =3'b001,green =3'b010,yellow=3'b100;reg [2:0] state,next_state;always @(posedge CLK,negedge RESET)beginif(!RESET) state<=red;else state<=next_state;endalways @(NUM)begincase(state)red:beginif(NUM>'d29) begin next_state<=green;red_x<=0;green_x<=1;yellow_x<=0;num_x<=7'd54-NUM;endelse beginnext_state<=red;red_x<=1;green_x<=0;yellow_x<=0;num_x<=7'd29-NUM;endendgreen:beginif(NUM>'d54) begin next_state<=yellow;red_x<=0;green_x<=0;yellow_x<=1;num_x<=7'd59-NUM; endelse beginnext_state<=green;red_x<=0;green_x<=1;yellow_x<=0;num_x<=7'd54-NUM;endendyellow:beginif(NUM>'d58) begin next_state<=red; num_x=7'b0;endelse beginnext_state<=yellow;red_x<=0;green_x<=0;yellow_x<=1;num_x<=7'd59-NUM;endenddefault:next_state<=red;endcaseendendmodulemodule traffic_y(CLK,RESET,NUM,red_y,green_y,yellow_y,num_y);input CLK;input RESET;input [6:0] NUM;output reg red_y;output reg green_y;output reg yellow_y;output [6:0] num_y;reg [6:0] num_y;parameter [2:0] red =3'b001,green =3'b010,yellow=3'b100;reg [2:0] state,next_state;always @(posedge CLK,negedge RESET)beginif(!RESET) state<=green;else state<=next_state;endalways @(NUM)begincase(state)green:beginif(NUM>7'd29) begin next_state<=yellow;red_y<=1'b0;green_y<=1'b0;yellow_y<=1'b1;num_y<=7'd34-NUM;endelse beginnext_state<=green;red_y<=1'b0;green_y<=1'b1;yellow_y<=1'b0;num_y<=7'd29-NUM;endendyellow:beginif(NUM>7'd34) begin next_state<=red;red_y<=1'b1;green_y<=1'b0;yellow_y<=1'b0;num_y<=7'd59-NUM;endelse beginnext_state<=yellow;red_y<=1'b0;green_y<=1'b0;yellow_y<=1'b1;num_y<=7'd34-NUM;endendred:beginif(NUM>7'd58) beginnext_state<=green;num_y<=7'd0;endelse beginnext_state<=red;red_y<=1'b1;green_y<=1'b0;yellow_y<=1'b0;num_y<=7'd59-NUM;endenddefault:next_state<=green;endcaseendendmodule。

verilog课程设计-交通灯

verilog课程设计-交通灯

课程论文论文题目基于DE2的交通灯设计完成时间课程名称 Verilog语言设计任课老师专业年级1.交通信号控制器设计要求与思路1.1设计背景FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。

本文介绍了用VerilogHDL语言设计交通灯控制器的方法,并在QuartusII系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。

本文通过EDA设计,利用VerilogHDL语言模拟仿真交通灯控制电路。

1.2设计要求根据交通灯控制器要实现的功能,考虑用两个并行执行的always语句来分别控制A方向和B方向的3盏灯。

这两个always语句使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。

每个always语句控制一个方向的3种灯按如下顺序点亮,并往复循环:绿灯----黄灯----红灯,每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置数法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行预置数就可以。

为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A方向和B方向各用两个数码管。

设定A方向红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s,B方向的红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s。

假如要改变这些时间,只需要改变计数器的预置数即可。

1.3设计思路两个方向各种灯亮的时间能够进行设置和修改,此外,假设B方向是主干道,车流量大,因此B方向通行的时间应该比A方向长。

交通灯控制器的状态转换表见下表。

表中,1表示灯亮,0表示灯不亮。

A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。

交通灯控制器状态转换表从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。

vivado交通灯课程设计

vivado交通灯课程设计

vivado交通灯课程设计一、课程目标知识目标:1. 理解交通灯工作原理,掌握交通灯控制系统的基础知识。

2. 学习使用Vivado软件进行基本的数字电路设计和仿真。

3. 了解Verilog HDL语言的基本结构,能运用其编写简单的交通灯控制程序。

技能目标:4. 能够运用Vivado软件进行电路设计,完成交通灯控制电路的搭建。

5. 能够利用Verilog HDL语言实现交通灯的定时切换和紧急车辆优先通过功能。

6. 培养动手实践能力,通过实际操作解决交通灯控制系统中的问题。

情感态度价值观目标:7. 培养学生对电子设计工程的兴趣,激发创新意识和探索精神。

8. 增强团队合作意识,学会在项目实施中分工合作,共同解决问题。

9. 认识到科技在生活中的应用,理解技术对提高社会生活质量的重要性。

课程性质:本课程为实践性强的课程设计项目,旨在通过实际操作让学生将理论知识与实际应用相结合。

学生特点:学生应为具有一定电子工程基础知识和Verilog HDL语言基础的年级学生,具备基本的逻辑思维能力和动手操作能力。

教学要求:课程要求学生在教师的指导下,独立完成交通灯控制系统的设计、编程、仿真与调试。

通过本课程的学习,学生应能够展示出对知识的应用能力和解决实际问题的能力。

二、教学内容1. 交通灯控制系统原理介绍:讲解交通灯的工作机制,包括信号灯的定时控制、相位差设置、紧急车辆优先通行等基础知识。

- 相关教材章节:第五章“交通控制系统概述”2. Vivado软件操作:学习Vivado设计环境的基本操作,包括创建工程、添加源文件、配置硬件和仿真。

- 相关教材章节:第三章“数字电路设计工具介绍”3. Verilog HDL语言基础:回顾Verilog HDL的基本语法,包括数据类型、运算符、控制语句等。

- 相关教材章节:第四章“Verilog HDL基础”4. 交通灯控制模块设计:- 定时控制模块设计:设计实现交通灯的定时切换功能。

verilog交通灯设计说明

verilog交通灯设计说明

module jtd (zhi,clk,u,i); input zhi,clk;output [2:0]u,i;reg[2:0]u,i;reg d;always(posedge clk)beginif(zhi)beginu[2:0]<=3'b100;i[2:0]<=3'b001;endelse begind<=d+1;if(d==30)u[2:0]<=3'b010; if(d==34)beginu[2:0]<=3'b001; i[2:0]<=3'b100; endif(d==64)beginu[2:0]<=3'b001; i[2:0]<=3'b010; endif(d==68)beginu[2:0]<=3'b100; i[2:0]<=3'b001; d<=0;endmodule jtd(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [5:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always(posedge clk)beginif(!rst) begin state<=s0;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin u[2:0]<=3'b010;i[2:0]<=3'b001;d=d+1;if(d==4)begin state<=s2;d=0;end else state<=s1;ends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin u[2:0]<=3'b001;i[2:0]<=3'b010;d=d+1;if(d==4)begin state<=s4;d=0;end else state<=s3;enddefault: state<=s4;endcaseendendendmodule黄灯闪module jtde(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [6:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin d=d+1;if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s1;endif(d==3)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==4)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s2;d=0;endends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin d=d+1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d=0;endenddefault: state<=s4;endcaseendend黄灯闪且倒计时module mnb(zhi,u,i,clk,rst,ugx,usx,igx,isx);input zhi,clk,rst;output [2:0]u,i;output [3:0]ugx,usx,igx,isx;reg [2:0]u,i;reg[4:0]state;reg [4:0]ugx,usx,igx,isx;reg [6:0]d,e,f;initialbegin d<=0;e<=30;f<=34;endparameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=0;usx<=0;igx<=0;isx<=0;if(zhi)begin state<=s0;d<=0;e<=30;f<=35;end else state<=s4;ends0:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e< =e-1;f<=f-1;if(d==30)begin state<=s1;d<=0;e<=4;f<=4;end else state<=s0;ends1:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;e<=e-1;f<=f-1;if(d==0)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==3)beginu[2:0]<=3'b000;i[2:0]<=3'b001;state<=s2;d<=0;e<=35;f<=30;endends2:beginu[2:0]<=3'b001;i[2:0]<=3'b100;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f<=f-1;if(d==30) begin state<=s3;d<=0;e<=4;f<=4;end else state<=s2; ends3:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f<=f-1; if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d<=0;endenddefault: state<=s4;endcaseendendendmodule黄灯闪。

VerilogHDL编写的交通灯

VerilogHDL编写的交通灯

1. module trafficlight(clk,lx,lx_l,lx_r,ly,ly_l,ly_r,c,done,m);input clk,c;//始终和初始化控制output done;output [5:0]m;//倒计时寄存器output lx,lx_l,lx_r,ly,ly_l,ly_r;//指示灯(分别是X、Y方向的直行、左转和右转)reg lx,lx_l,lx_r,ly,ly_l,ly_r;reg [5:0]m;reg [1:0]state;//状态机reg done;parameters0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;//-------------------------------------------//状态模块always@(posedge clk)if(c)begin done<=1;state<=2'b00;endelsebegincase(state)s0:if(done)begin m<=6'd44;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s1;done<=1;m<=0;ends1:if(done)begin m<=6'd24;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s2;done<=1;m<=0;ends2:if(done)begin m<=6'd29;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s3;done<=1;m<=0;ends3:if(done)begin m<=6'd14;done<=0;endelse if(m>1) m<=m-1;elsebegin state<=s0;done<=1;m<=0;endendcaseend//-----------------------------------------//输出模块always@(posedge clk)begincase(state)s0:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b101001;s1:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b011001; s2:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001101; s3:{lx,lx_l,lx_r,ly,ly_l,ly_r}<=6'b001011; endcaseend//-------------------------------------------- endmodule2.生成的状态机3.整体的图,四个状态都包括X方向由直行变左转,符合倒计时的要求。

verilog交通灯设计

verilog交通灯设计

module jtd (zhi,clk,u,i); input zhi,clk;output [2:0]u,i;reg[2:0]u,i;reg d;always@(posedge clk) beginif(zhi)beginu[2:0]<=3'b100;i[2:0]<=3'b001;endelse begind<=d+1;if(d==30)u[2:0]<=3'b010;if(d==34)beginu[2:0]<=3'b001;i[2:0]<=3'b100;endif(d==64)beginu[2:0]<=3'b001;i[2:0]<=3'b010;endif(d==68)beginu[2:0]<=3'b100;i[2:0]<=3'b001;d<=0;endmodule jtd(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [5:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s0;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin u[2:0]<=3'b010;i[2:0]<=3'b001;d=d+1;if(d==4)begin state<=s2;d=0;end else state<=s1;ends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin u[2:0]<=3'b001;i[2:0]<=3'b010;d=d+1;if(d==4)begin state<=s4;d=0;end else state<=s3;enddefault: state<=s4;endcaseendendendmodule黄灯闪module jtde(zhi,u,i,clk,rst);input zhi,clk,rst;output [2:0]u,i;reg [2:0]u,i;reg[4:0]state;reg [6:0]d;initial d=0;parameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;if(zhi)begin state<=s0;end else state<=s4;ends0:begin u[2:0]<=3'b100;i[2:0]<=3'b001;d=d+1;if(d==30)begin state<=s1;d=0;end else state<=s0;ends1:begin d=d+1;if(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s1;endif(d==3)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s1;endif(d==4)begin u[2:0]<=3'b010;i[2:0]<=3'b001;state<=s2;d=0;endends2:begin u[2:0]<=3'b001;i[2:0]<=3'b100;d=d+1;if(d==30) begin state<=s3;d=0;end else state<=s2;ends3:begin d=d+1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d=0;endenddefault: state<=s4;endcaseendend黄灯闪且倒计时module mnb(zhi,u,i,clk,rst,ugx,usx,igx,isx);input zhi,clk,rst;output [2:0]u,i;output [3:0]ugx,usx,igx,isx;reg [2:0]u,i;reg[4:0]state;reg [4:0]ugx,usx,igx,isx;reg [6:0]d,e,f;initialbegin d<=0;e<=30;f<=34;endparameter s0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;always@(posedge clk)beginif(!rst) begin state<=s4;u[2:0]<=3'b100;i[2:0]<=3'b001;endelsebegincase(state)s4:begin u[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=0;usx<=0;igx<=0;isx<=0;if(zhi)begin state<=s0;d<=0;e<=30;f<=35;end else state<=s4;ends0:beginu[2:0]<=3'b100;i[2:0]<=3'b001;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f< =f-1;if(d==30)begin state<=s1;d<=0;e<=4;f<=4;end else state<=s0;ends1:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;e<=e-1;f<=f-1;if(d==0)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==1)begin u[2:0]<=3'b000;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==2)begin u[2:0]<=3'b010;i[2:0]<=3'b001;d<=d+1;state<=s1;endif(d==3)begin u[2:0]<=3'b000;i[2:0]<=3'b001;state<=s2;d<=0;e<=35;f<=30;endends2:beginu[2:0]<=3'b001;i[2:0]<=3'b100;ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f< =f-1;if(d==30) begin state<=s3;d<=0;e<=4;f<=4;end else state<=s2;ends3:begin ugx<=e%10;usx<=e/10;igx<=f%10;isx<=f/10;d<=d+1;e<=e-1;f<=f-1;if(d==1)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==2)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s3;endif(d==3)begin i[2:0]<=3'b000;u[2:0]<=3'b001;state<=s3;endif(d==4)begin i[2:0]<=3'b010;u[2:0]<=3'b001;state<=s4;d<=0;endenddefault: state<=s4;endcaseendendendmodule黄灯闪。

用verilog语言编写交通灯程序

用verilog语言编写交通灯程序

交通灯一、实验目的写一个交通灯,要求:①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理根据实验要求的逻辑功能描述,可以分析得出原理图如下:控制器即可以设计为一个有限状态机的形式:E-W方向S-N方向状态R Y G R Y G1 0 0 1 0 0 IDLE1 0 0 0 0 1 S11 0 0 0 1 0 S20 0 1 1 0 0 S30 1 0 1 0 0 S4根据实验要求画出控制器的状态转移图如下:三、代码1、源代码(1)控制器模块module traffic_lights(clk,rst,count,ew,sn);input clk,rst;input[5:0] count;output[2:0] ew,sn;reg[2:0] ew,sn;reg[3:0] state;parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always (posedge clk)if(!rst)beginstate<=Idle;endelsecasex(state)Idle: if(rst)beginstate<=s1;ends1: if(count=='d25)beginstate<=s2;ends2: if(count=='d30)beginstate<=s3;ends3: if(count=='d55)beginstate<=s4;ends4: if(count=='d60)beginstate<=s1;endendcasealways (posedge clk)beginif(!rst)beginew<=3'b100;sn<=3'b100;endelsecasex(state)Idle: if(rst)beginew<=3'b100;sn<=3'b001;ends1: if(count=='d25)beginew<=3'b100;sn<=3'b010;ends2: if(count=='d30)beginew<=3'b001;sn<=3'b100;ends3: if(count=='d55)beginew<=3'b010;sn<=3'b100;ends4: if(count=='d60)beginew<=3'b100;sn<=3'b001;enddefault: state<=Idle;endcaseendendmodule(2)计数器模块module counter(en,clk,rst,out);output[5:0]out;input en,clk,rst;reg[5:0] out;always(posedge clk or negedge rst)beginif(!rst)out<='d0;else if(!en&&out<'d60)out<=out+1;elseout<='d1;endendmodule(3)将控制器与计数器进行连接module traffic_lights_top(out,clk,rst,en,ew,sn); input clk,rst,en;output[2:0] ew,sn;output[5:0]out;wire[5:0] out;traffic_lights u1(.clk(clk),.rst(rst),.count(out),.ew(ew),.sn(sn));counter u2(.en(en),.clk(clk),.rst(rst),.out(out));endmodule2、激励`timescale 1ns/100psmodule traffic_lights_tb;reg clk,rst,en;wire[2:0] ew,sn;wire[5:0]out;traffic_lights_top m(.clk(clk),.rst(rst),.en(en),.ew(ew),.sn(sn),.out(out));always#5 clk=~clk;initialen<=1;initialbeginclk<=1;en<=0;rst<=0;#5 rst<=1;endendmodule四、仿真波形(图一)(图二)五、波形说明波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。

verilog语言_设计一个交通灯信号控制电路

verilog语言_设计一个交通灯信号控制电路

分频模块:
输入 50MHz 的信号,rst 为“1”时,计数器 j 置“0”,并在以后每经历一个系统时钟周期时加 1,知道 k=49999999 时,clk1=~clk1,同时 k=0.到此分频完成。 (在实际代码编写中,为了代码的精简,此模块已经集成入顶层及控制模块)
专业整理
word 格式文档
clk 50MHz
word 格式文档
//******************************************
//这是分频部分功能实现
//**************??**************************
always@(posedge clk or posedge rst)
begin
专业整理
word 格式文档
2.总体设计框图及说明:
blu
Clk
rst
50Hz
控制
循环变量 k
Clk1
yel
1Hz 129~0
red
专业整理
word 格式文档
图一
输入:clk rst
输出:ctrl_1s ctrl_10s
blu,yel,red
全局时钟信号,50MHz 全局复位端,高电平有效
倒计时个位上数字 倒计时十位上数字
此模块接受主模块输出的个位和十位的数值控制,并间接受(系统时钟)clk(50MHz) 和
(全局复位)rst,及分频时钟 clk1 的控制,均为上升沿触发,当 rst 为高电平时,电路复
位,重新开始工作。当 rst 为低电平时,电路正常。
5.仿真及综合结果
信号 clk blu,yel,red
k led10 led1 out1 out10 rst

交通灯Verilog设计

交通灯Verilog设计

module traf_lamp(clk,en,lampa,lampb,acount,bcount);input clk;input en;//使能端高电平有效output reg[3:0] lampa,lampb;//4位分别用于a灯的颜色选择output [7:0] acount,bcount;//分别用于驱动数码管显示reg tempa,tempb;//用于控制路口红绿灯等的变换,低电平有效reg [7:0] numa,numb;//用于显示的数据值reg [2:0] counta,countb;//表示灯的状态reg [7:0] ared,agreen,ayellow,aleft,bred,bgreen,byellow,bleft;//各种灯计数器的预置数always@(en)if(!en) beginared <=8'd55;ayellow <=8'd5;agreen <=8'd40;aleft <=8'd15;bred <=8'd65;byellow <=8'd5;bleft <=8'd15;bgreen <=8'd30;endassign acount=numa;assign bcount=numb;always@(posedge clk) begin//交通灯a的控制if(en)if(!tempa) begintempa<=1;case(counta)0:begin numa<=agreen; lampa<=2; counta<=1;end 1:begin numa<=ayellow; lampa<=4; counta<=2;end 2:begin numa<=aleft; lampa<=1; counta<=3;end 3:begin numa<=ayellow; lampa<=4; counta<=4;end 4:begin numa<=ared; lampa<=8; counta<=0;end default:lampa<=8;endcaseendelse begin //倒计时,体会时序的实现方式if(numa>0)if(numa[3:0]==0) begin numa[3:0]<=4'b1001;numa[7:4]<=numa[7:4]-1;endelse numa[3:0]<=numa[3:0]-1;if(numa==2) tempa<=0;endelse begin counta<=0;tempa<=0;lampa<=4'b1000;endendalways@(posedge clk) begin//交通灯b的控制if(en)if(!tempb) begintempb<=1;case(countb)0:begin numb<=bred; lampb<=8; countb<=1;end1:begin numb<=bgreen; lampb<=2; countb<=2;end2:begin numb<=byellow; lampb<=4; countb<=3;end3:begin numb<=bleft; lampb<=1; countb<=4;end4:begin numb<=byellow; lampb<=4; countb<=0;enddefault:lampb<=8;endcaseendelse begin //倒计时,体会时序的实现方式if(numb>0)if(numb[3:0]==0) begin numb[3:0]<=4'b1001;numb[7:4]<=numb[7:4]-1;endelse numb[3:0]<=numb[3:0]-1;if(numb==2) tempb<=0;endelse begin countb<=0;tempb<=0;lampb<=4'b1000;endendendmodule。

基于verilog HDL数字系统设计--交通灯

基于verilog HDL数字系统设计--交通灯

交通灯控制器-------数字系统设计文档姓名:学号:一.课题简介:我在本课程中所选择的课题是用Verilog HDL 实现的交通灯控制器。

该交通灯控制器处在一个城乡结合处的十字路口,这个十字路口分为主干道和乡村公路,由于主干道的车流量远大于乡村公路的车流量,所以这个交通灯控制器不同于常见的交通灯控制器。

这个交通控制器的功能有如下几点:1.当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。

2.当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。

主干道最短通车时间为25s 。

3.当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。

4.不论主干道情况如何,乡村公路通车最长时间为16s。

5.在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。

6.用开关代替传感器作为检测车辆是否到来的信号。

用红、绿、黄三种颜色的发光二极管作交通灯。

要求显示时间,倒计时。

二.控制框图和设计流程图:1.这个交通灯控制器由三个主要部分组成---核心控制器以及、译码器、分频器。

2.流程图的内容同上面交通灯的功能,这里不再多做解释。

三.各部分组件的具体实现和分析:1.核心控制器实现基本功能:(1)它的输入端有4个输入信号—C、RST、ST、CLK。

C信号是一个检测信号,检测乡村公路是否有车,C=0示无车,这种情况下乡村公路一直亮红灯,主干道一直亮红灯,并且两个计数器都同步30秒重复计数,直到C=1即乡村公路有车是才跳变到其他情况。

RST信号是复位信号,当RST=0时,这个交通灯控制器才能正常工作。

当RST=1时,所有计数器都立刻赋初值,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。

ST信号表示使能信号,当ST=1时,交通灯控制器才能正常工作。

ST=0时,所有计数器都停止计数,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程论文论文题目基于DE2的交通灯设计完成时间课程名称Verilog语言设计任课老师专业年级1.交通信号控制器设计要求与思路1.1设计背景FPGA是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,其种类很多,内部结构也不同,但共同的特点是体积小、使用方便。

本文介绍了用VerilogHDL语言设计交通灯控制器的方法,并在QuartusII系统对FPGA芯片进行编译下载,由于生成的是集成化的数字电路,没有传统设计中的接线问题,所以故障率低、可靠性高,而且体积非常小。

本文通过EDA设计,利用VerilogHDL语言模拟仿真交通灯控制电路。

1.2设计要求根据交通灯控制器要实现的功能,考虑用两个并行执行的always语句来分别控制A方向和B方向的3盏灯。

这两个always语句使用同一个时钟信号,以进行同步,也就是说,两个进程的敏感信号是同一个。

每个always语句控制一个方向的3种灯按如下顺序点亮,并往复循环:绿灯----黄灯----红灯,每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置数法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行预置数就可以。

为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A方向和B方向各用两个数码管。

设定A方向红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s,B方向的红灯、黄灯、绿灯亮的时间分别为:35s、5s、35s。

假如要改变这些时间,只需要改变计数器的预置数即可。

1.3设计思路两个方向各种灯亮的时间能够进行设置和修改,此外,假设B方向是主干道,车流量大,因此B方向通行的时间应该比A方向长。

交通灯控制器的状态转换表见下表。

表中,1表示灯亮,0表示灯不亮。

A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。

交通灯控制器状态转换表从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。

黄灯所起的作用是用来在绿灯后进行缓冲,以提醒行人该方向马上要禁行了。

在使能控制信号(EN)控制时系统工作,并且要求有两个控制输入信号:即复位信号(Reset)和备用模式设置信号(Standby),在复位信号控制时,两个方向均为红灯,在备用模式设置信号控制时,两个方向均为黄灯。

1.4系统设计框图系统采用的时钟频率为10KHZ,经分频为1HZ后送入控制计时电路,同时送入控制计时电路的还有控制信号M2M1M0以及复位信号RST,控制交通灯的运行状态。

经处理后输出LED灯以及数码管显示电路的控制信号,从而完成整个电路的控制与实现。

时钟CLK10K 分频CLK1复位RST M2M1M0复位RST复位RST时钟CLK10K B 组信号灯A 组信号灯分频clk1控制计时电路数码管显示电路AL AR AY AGBL BR BY BG图1 系统设计示意图2.交通信号控制器具体模块设计2.1时钟分频模块设计系统的时钟输入为10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。

分频模块主要为系统提供所需的时钟计时脉冲。

该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。

计时模块用来设定路口计时器的初值,并为扫描显示译码模块提供倒计时时间。

Verilog HDL源代码如下:module fenpin(clk10k,rst,clk1); //将10K的频率分频为1input clk10k,rst;output clk1;reg [7:0]j;reg clk1;always@(posedge clk10k or posedge rst)if(rst)beginclk1<=0;j<=0;endelse if(j==9999)beginj<=0;clk1<=~clk1;endelse j<=j+1;Endmodule2.2控制模块设计Verilog HDL源代码如下:module control(EN_in,SW1,RST,Red1,Red2,Yellow1,Yellow2,Green1,Green2);output Red1;output Red2;output Yellow1;output Yellow2;output Green1;output Green2;input [1:0] EN_in;input SW1;input RST;reg Red1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;always @(EN_in,RST,SW1)beginif(SW1==0||RST==0) {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;elsebegincase(EN_in)2'b00 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b010010;2'b01 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b011000;2'b10 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100001;2'b11 : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b100100;default : {Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;endcaseendendEndmodule2.3倒计时选择模块Verilog HDL源代码如下:module counter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);output C_out;output [3:0] D_OUT1;output [3:0] D_OUT0;input C_CLK;input RST;input C_EN;reg [3:0] D_OUT1;reg [3:0] D_OUT0;reg C_out;reg [3:0] CData1;reg [3:0] CData0;reg [7:0] DATA;always @(posedge C_CLK)beginif(RST==0||C_EN==0)beginC_out <= 1'b0;CData1 <= 4'b0000;CData0 <= 4'b0000;endelsebeginif(CData0 == 4'b0101 && CData1 == 4'b0101)beginCData1 <= 4'b0000;CData0 <= 4'b0000;C_out = 1'b1;endelse if(CData0 != 4'b1001)beginCData0 <= CData0 + 1;C_out <= 1'b0;endelse if(CData0 == 4'b1001 && CData1 != 4'b0110)beginCData1 <= CData1 + 1;CData0 <= 4'b0000;C_out <= 1'b0;endelsebeginCData1 <= 4'b0000;CData0 <= 4'b0000;C_out = 1'b1;endendendalwaysbeginDATA <= 8'b01010101-((CData1<<4)+CData0);if(((DATA>>4)&4'b1111)>4'b0101)D_OUT1 <= (DATA>>4)&4'b1111-4'b1111;elseD_OUT1 <= (DATA>>4)&4'b1111;if((DATA&4'b1111)>4'b1001)D_OUT0 <= (DATA&4'b1111)-4'b0110;elseD_OUT0 <= DATA&4'b1111; endendmodule2.4 倒计时数码管的动态显示Verilog HDL源代码如下:module dispselect(CLK,D_OUT); output [1:0] D_OUT;input CLK;reg [1:0] D_OUT;always @(posedge CLK)beginif(D_OUT < 2'b10)D_OUT <= D_OUT + 2'b01;elseD_OUT <= 2'b01;endendmodule2.5扫描显示译码模块设计Verilog HDL源代码如下:module dispdecoder (data_in,data_out); input [3:0]data_in;output [6:0] data_out;reg [6:0] r_seg;assign data_out = r_seg;always @(*)begincase(data_in)4'd0: r_seg = 7'b0000001;4'd1: r_seg = 7'b1001111;4'd2: r_seg = 7'b0010010;4'd3: r_seg = 7'b0000110;4'd4: r_seg = 7'b1001100;4'd5: r_seg = 7'b0100100;4'd6: r_seg = 7'b0100000;4'd7: r_seg = 7'b0001111;4'd8: r_seg = 7'b0000000;4'd9: r_seg = 7'b0000100;4'd10: r_seg = 7'b0001000;default r_seg = 7'b1111111;endcaseendEndmodule2.5.顶层文件设计Verilog HDL源代码如下:module jtd(Reset,SW,CLK,Red1,Red2,Yellow1,Yellow2,Green1,Green2,SEG_Data1,SEG_Data2,SEG_Data3,SEG_Data4,//SEG_Sel);input Reset;input SW;input CLK;output Red1;output Red2;output Yellow1;output Yellow2;output Green1;output Green2;output [6:0] SEG_Data1;output [6:0] SEG_Data2;output [6:0] SEG_Data3;output [6:0] SEG_Data4;//output [1:0] SEG_Sel;wire SYNTHESIZED_WIRE_0; wire SYNTHESIZED_WIRE_1; wire SYNTHESIZED_WIRE_19;wire SYNTHESIZED_WIRE_3;wire SYNTHESIZED_WIRE_20;wire [1:0] SYNTHESIZED_WIRE_21;wire SYNTHESIZED_WIRE_7;wire [3:0] SYNTHESIZED_WIRE_9;wire [3:0] SYNTHESIZED_WIRE_10;wire [3:0] SYNTHESIZED_WIRE_11;wire [3:0] SYNTHESIZED_WIRE_12;//wire [3:0] SYNTHESIZED_WIRE_14;wire [3:0] SYNTHESIZED_WIRE_15;wire [3:0] SYNTHESIZED_WIRE_16;//wire [1:0] SYNTHESIZED_WIRE_17;//assign SEG_Sel = SYNTHESIZED_WIRE_17;scan b2v_inst(.EN_in1(SYNTHESIZED_WIRE_0),.EN_in0(SYNTHESIZED_WIRE_1),.sdata(SYNTHESIZED_WIRE_21));counter05 b2v_inst1(.C_CLK(SYNTHESIZED_WIRE_19),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_3),.C_out(SYNTHESIZED_WIRE_1),.D_OUT0(SY NTHESIZED_WIRE_11),.D_OUT1(SYNTHESIZED_WIRE_12));fdiv1hz b2v_inst11(.clk_in(SYNTHESIZED_WIRE_20),.clk_out(SYNTHESIZED_WIRE_19));fdiv1khz b2v_inst12(.clk_in(CLK),.clk_out(SYNTHESIZED_WIRE_20));control b2v_inst14(.SW1(SW),.RST(Reset),.EN_in(SYNTHESIZED_WIRE_21),.Red1(Red1),.Red2(Red2),.Yellow1(Yellow1),.Y ellow2(Yellow2),.Green1(Green1),.Green2(Green2));counter55 b2v_inst2(.C_CLK(SYNTHESIZED_WIRE_19),.RST(Reset),.C_EN(SYNTHESIZED_WIRE_7),.C_out(SYNTHESIZED_WIRE_0),.D_OUT0(SY NTHESIZED_WIRE_9),.D_OUT1(SYNTHESIZED_WIRE_10));countersel b2v_inst3(.D_IN(SYNTHESIZED_WIRE_21),.D_OUT1(SYNTHESIZED_WIRE_7),.D_OUT0(SYNTHESIZED_WIRE_3));datamux b2v_inst6(.D_IN0(SYNTHESIZED_WIRE_9),.D_IN1(SYNTHESIZED_WIRE_10),.D_IN2(SYNTHESIZED_WIRE_11),.D_IN3(SYNTHESIZE D_WIRE_12),.SEL(SYNTHESIZED_WIRE_21),.D_OUT0(SYNTHESIZED_WIRE_15),.D_OUT1 (SYNTHESIZED_WIRE_16));//dispdecoder b2v_inst7(.data_in(SYNTHESIZED_WIRE_14),//.data_out(SEG_Data));//dispmux b2v_inst8(.D_IN0(SYNTHESIZED_WIRE_15),//.D_IN1(SYNTHESIZED_WIRE_16),.SEL(SYNTHESIZED_WIRE_17),.D_OUT(SYNTHESIZE D_WIRE_14));//dispselect b2v_inst9(.CLK(SYNTHESIZED_WIRE_20),//.D_OUT(SYNTHESIZED_WIRE_17));dispdecoder u0(.data_in(SYNTHESIZED_WIRE_11),.data_out(SEG_Data2));dispdecoder u1(.data_in(SYNTHESIZED_WIRE_12),.data_out(SEG_Data1));dispdecoder u2(.data_in(SYNTHESIZED_WIRE_9),.data_out(SEG_Data4));dispdecoder u3(.data_in(SYNTHESIZED_WIRE_10),.data_out(SEG_Data3));endmodule3 小结再一次的体验到了细心对一个编程者的重要性和程序的规范性对于程序的重要。

相关文档
最新文档