EDA技术与Verilog HDL技术实验报告
Verilog HDL实验报告

HDL实验报告专业电子科学与技术姓名学号指导老师1 实验一Modelsim仿真软件的使用1.1 实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法;(3)熟练运用Modelsim 软件进行HDL 程序设计开发。
1.2 实验步骤(1)学习使用Modelsim软件;(2)分析原理及功能;(3)用Verilog HDL编写程序;(4)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
1.3 实验内容用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。
1.4.1 程序module my_xor(ina,inb,out);input ina,inb;output out;assign out=ina^inb;endmodulemodule t_xor;reg ina,inb;wire out;initialbeginina=1'b0;forever #20 ina=~ina;endinitialbegininb=1'b0;forever #10 inb=~inb;endmy_xor tt(.ina(ina),.inb(inb),.out(out));endmodule2 实验二简单组合电路设计2.1 实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法2.2 实验步骤(1)分析原理及功能;(2)根据原理用Verilog HDL编写程序;(3)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
2.3 实验内容设计一个三人表决器(高电平表示通过) ,实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。
eda电子设计使用verilog语言电子琴实验报告

电子设计自动化课程设计报告院系:信息工程学院专业:电子信息工程学号:姓名:指导教师:2013 年月日目录1设计目的 (3)2题目描述与要求 (3)3课程设计报告内容 (3)3.1设计原理与思路 (3)3.2操作过程 (4)3.3设计和调试过程中出现的问题及解决方法 (7)4设计总结和心得体会 (8)一、课程设计目的使用VerilogHDL语言进行前端设计,并使用Quaruts软件在实验箱上实现仿真,实现硬件电子琴。
电子琴要求有8个音阶,使用外部时钟信号32MHz,能同步显示音阶。
二、课程设计题目描述和要求题目:简易电子琴的设计主要功能:(1)设计一个八音电子琴。
(2)由键盘输入控制音响,同时可自动演奏乐曲。
(3)用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。
三、课程设计报告内容3.1设计原理与思路系统由数控分频器、乐曲存储模块以及发声模块组成。
数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。
乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。
由发声模块产生音符对应的频率的信号来使扬声器发音。
(1)模块automusic模块automsic由auto信号来选择发声的方式,auto=0时系统自动播放内置的音乐,auto=1时由键盘来手动演奏音乐。
(2)模块TONE模块Tone是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。
(3)模块Speaker模块Speaker中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speaker由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。
Verilog HDL 实验报告

Verilog实验报告班级:学号:姓名:实验1 :用 Verilog HDL 程序实现直通线1 实验要求:(1) 编写一位直通线的 Veirlog HDL 程序.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 建议用模式 52 试验程序:module wl(in,out);input in;output out;wire out;assign out=in;endmodule3 测试基准:`include “wl.v”module wl_tb;reg in_tb;wire out_tb;initialbeginin_tb =0;#100 in_tb =1;#130 in_tb =0;endendmodule4 仿真图形:实验2 :用 Verilog HDL 程序实现一位四选一多路选择器1实验要求:(1) 编写一位四选一多路选择器的 Veirlog HDL 程序.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4)建议用模式 52 试验程序:module mux4_to_1 (out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3;input s1, s0;reg out;always @ (s1 or s0 or i0 or i1 or i2 or i3)begincase ({s1, s0})2'b00: out=i0;2'b01: out=i1;2'b10: out=i2;2'b11: out=i3;default: out=1'bx;endcaseendendmodule3 测试基准:`include "mux4_to_1.v"module mux4_to_1_tb1;reg ain,bin,cin,din;reg[1:0] select;reg clock;wire outw;initialbeginain=0;bin=0;cin=0;din=0;select=2'b00;clock=0;endalways #50 clock=~clock;always @(posedge clock)begin#1 ain={$random} %2;#3 bin={$random} %2;#5 cin={$random} %2;#7 din={$random} %2;endalways #1000 select[0]=!select[0];always #2000 select[1]=!select[1];mux4_to_1 m(.out(outw),.i0(ain),.i1(bin),.i2(cin),.i3(din),.s1(select[1]),.s0(select[0])); endmodule4 仿真图形:实验3:用 Verilog HDL 程序实现十进制计数器1实验要求:(1) 编写十进制计数器的 Veirlog HDL 程序. 有清零端与进位端, 进位端出在输出为 9 时为高电平.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 自行选择合适的模式2 实验程序:module counter_10c (Q, clock, clear, ov);output [3:0] Q;output ov;input clock, clear;reg [3:0] Q;reg ov;initial Q=4'b0000;always @ (posedge clear or negedge clock)beginif (clear)Q<=4'b0;else if (Q==8)beginQ<=Q+1;ov<=1'b1;endelse if (Q==9)beginQ<=4'b0000;ov<=1'b0;endelsebeginQ<=Q+1;ov<=1'b0;endendendmodule3 测试基准:`include"./counter_10c.v"module counter_10c_tb;wire[3:0] D_out;reg clk,clr;wire c_out;reg[3:0] temp;initialbeginclk=0;clr=0;#100 clr=1;#20 clr=0;endalways #20 clk=~clk;counter_10c m_1(.Q(D_out),.clear(clr),.clock(clk),.ov(c_out)); endmodule4 仿真波形:实验4 :用 Verilog HDL 程序实现序列检测器1 实验要求:、(1) 编写序列检测器的 Veirlog HDL 程序. 检测串行输入的数据序列中是否有目标序列5'b10010, 检测到指定序列后, 用一个端口输出高电平表示.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 自行选择合适的模式2试验程序:module e15d1_seqdet( x, z, clk, rst);input x,clk, rst;output z;reg [2:0] state;wire z;parameter IDLE = 3 'd0,A = 3'd1,B = 3'd2,C = 3'd3,D = 3'd4,E = 3'd5,F = 3'd6,G = 3'd7;assign z =(state==D && x==0)?1:0;always @(posedge clk or negedge rst)if(!rst)beginstate<=IDLE;endelsecasex(state)IDLE: if(x==1)state<=A;else state<=IDLE;A: if (x==0)state<=B;else state<=A;B: if (x==0)state<=C;else state<=F;C: if(x==1)state<=D;else state<=G;D: if(x==0)state<=E;else state<=A;E: if(x==0)state<=C;else state<=A;F: if(x==1)state<=A;else state<=B;G: if(x==1)state<=F;else state <=G;default: state<=IDLE;endcaseendmodule3测试基准:`include"e15d1_seqdet.v"`timescale 1ns/1ns`define halfperiod 20module e15d1_seqdet_tb;reg clk, rst;reg [23:0] data;wire z;reg x;initialbeginclk =0;rst =1;#2 rst =0;#30 rst =1;data= 20 'b1100_1001_0000_1001_0100;#(`halfperiod*1000) $stop;endalways #(`halfperiod) clk=~clk;always @ (posedge clk)begin#2 data={data[22:0],data[23]};x=data[23];ende15d1_seqdet m(.x(x),.z(z),.clk(clk),.rst(rst)); endmodule4仿真波形:。
EDA技术与Verilog HDL 实验报告

EDA技术与Verilog HDL实验报告学生姓名:樊奇峰学生学号:20102533所在班级:10级电科(2)班实验老师:陈亮亮实验地点地点:理工楼实验一 EDA实验箱使用一.实验目的1.GW48教学实验系统原理与使用介绍2.熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
二.实验内容首先了解GW48系统使用注意事项以及GW48系统主板结构与使用方法,接着对各实验电路结构图特点与适用范围简述。
最后在QuartusII界面下,用文本输入和图形输入分别验证七选一多路选择器的功能。
三.程序清单文本输入如下所示:module mux71(a,b,c,d,e,f,g,s,y);input a,b,c,d,e,f,g;output y;input [2:0] s;reg y ;always @(a,b,c,d,e,f,g,s)case (s)0: y<=a;1: y<=b;2: y<=c;3: y<=d;4: y<=e;5: y<=f;6: y<=g;default: y<=a;endcaseendmodule图形输入如下所示:四、实验步骤1、新建一个名称为MUX71a的工程,并在该文件夹中新建一个MUX71a.v的文件。
2、编译代码,编译成功后进行第三步,若不成功则查改代码中的错误。
3、在工程文件夹中新建一个MUX71a.vwf的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否达到七选一多路选择器的功能。
五、实验数据仿真波形如下图所示。
六、实验小结通过对EDA实验箱使用,了解了GW48教学实验系统原理与使用介绍;熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
实验二用原理图和VerilogHDL语言设计一位全加器一.实验目的熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。
Verilog HDL 实验报告

实验一Modelsim仿真软件的使用一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤1、建立工程2、添加文件到工程3、编译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真3、方法moduleyihuo (a,b,c);inputa,b;output c;assign c=a^b;endmodule测试程序:module t_yihuo;reg a,b;wire c;initialbegina=0;forever #20 a=~a;endinitialbeginb=0;forever #30 b=~b;endyihuou1(a,b,c);endmodule二、实验结果波形图:三、分析和心得通过这次的实验,我基本熟悉Modelsim软件,掌握了Modelsim软件的编译、仿真方法。
同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。
实验二简单组合电路设计一、实验目的(1)掌握基于Modelsim的数字电路设计方法(2)熟练掌握HDL 程序的不同实现方法二、实验内容1、实验要求设计一个三人表决器(高电平表示通过),实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真。
2、方法module test(a,b,c,s);inputa,b,c;output s;assign s=c|(b&a);endmodulemodulet_test;rega,b,c;wire s;initialbegina=0;forever#10 a=~a;endinitialbeginb=0;forever #20 b=~b;endinitialbeginc=0;forever#40 c=~c;endtest u1(a,b,c,s);endmodule三、实验结果四、分析和心得通过本次实验,我掌握基于Modelsim的简单数字电路设计方法,且尝试了用不同方法实现功能,三人表决器可以通过testbench测试程序实现,也可以利用always模块实现,可见程序的设计思想是很重要的。
Verilog-HDL实验报告

HDL实验报告专业电子科学与技术姓名学号指导老师1 实验一Modelsim仿真软件的使用1.1 实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法;(3)熟练运用Modelsim 软件进行HDL 程序设计开发。
1.2 实验步骤(1)学习使用Modelsim软件;(2)分析原理及功能;(3)用Verilog HDL编写程序;(4)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
1.3 实验内容用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。
1.4.1 程序module my_xor(ina,inb,out);input ina,inb;output out;assign out=ina^inb;endmodulemodule t_xor;reg ina,inb;wire out;initialbeginina=1'b0;forever #20 ina=~ina;endinitialbegininb=1'b0;forever #10 inb=~inb;endmy_xor tt(.ina(ina),.inb(inb),.out(out));endmodule2 实验二简单组合电路设计2.1 实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法2.2 实验步骤(1)分析原理及功能;(2)根据原理用Verilog HDL编写程序;(3)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
2.3 实验内容设计一个三人表决器(高电平表示通过) ,实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。
EDA实验报告完结版

EDA实验报告完结版一、实验目的本次 EDA 实验的主要目的是通过实际操作和设计,深入理解和掌握电子设计自动化(EDA)技术的基本原理和应用。
具体而言,包括熟悉 EDA 工具的使用方法,学会运用硬件描述语言(HDL)进行逻辑电路的设计与描述,以及通过综合、仿真和实现等流程,将设计转化为实际的硬件电路,并对其性能进行评估和优化。
二、实验环境本次实验所使用的 EDA 工具为_____,该工具提供了丰富的功能模块和强大的设计支持,包括原理图编辑、HDL 代码编写、综合、仿真和下载等。
实验所使用的硬件平台为_____开发板,其具备多种接口和资源,便于对设计的电路进行实际验证和测试。
三、实验内容1、基本逻辑门电路的设计与实现使用 HDL 语言(如 Verilog 或 VHDL)设计常见的基本逻辑门电路,如与门、或门、非门等。
通过编写代码,对逻辑门的输入输出关系进行描述,并进行综合和仿真,验证设计的正确性。
2、组合逻辑电路的设计与实现设计并实现较为复杂的组合逻辑电路,如加法器、减法器、编码器、译码器等。
运用 HDL 语言描述电路的功能,进行综合和仿真,确保电路在各种输入情况下的输出结果符合预期。
3、时序逻辑电路的设计与实现设计常见的时序逻辑电路,如计数器、寄存器、移位寄存器等。
在设计过程中,考虑时钟信号、同步复位和异步复位等因素,通过仿真验证时序逻辑的正确性,并对电路的性能进行分析。
4、有限状态机(FSM)的设计与实现设计一个有限状态机,实现特定的功能,如交通信号灯控制器、数字密码锁等。
明确状态转移条件和输出逻辑,通过编写 HDL 代码实现状态机,并进行综合和仿真,验证其功能的准确性。
5、综合与优化对设计的电路进行综合,生成门级网表,并通过优化工具对电路进行面积、速度等方面的优化,以满足特定的设计要求。
6、硬件实现与测试将综合后的设计下载到硬件开发板上,通过实际的输入输出信号,对电路的功能进行测试和验证。
观察电路在实际运行中的表现,对出现的问题进行分析和解决。
verilog hdl实验报告

verilog hdl实验报告《Verilog HDL实验报告》Verilog HDL(硬件描述语言)是一种用于描述电子系统的硬件的语言,它被广泛应用于数字电路设计和硬件描述。
本实验报告将介绍Verilog HDL的基本概念和使用方法,并通过实验展示其在数字电路设计中的应用。
实验目的:1. 了解Verilog HDL的基本语法和结构2. 掌握Verilog HDL的模块化设计方法3. 熟悉Verilog HDL的仿真和综合工具的使用实验内容:1. Verilog HDL的基本语法和结构Verilog HDL是一种硬件描述语言,其语法和结构类似于C语言。
它包括模块定义、端口声明、信号赋值等基本元素。
在本实验中,我们将学习如何定义Verilog模块,并使用端口声明和信号赋值描述数字电路的行为。
2. Verilog HDL的模块化设计方法Verilog HDL支持模块化设计,可以将复杂的电路分解为多个模块,每个模块描述一个子电路的行为。
在本实验中,我们将学习如何设计和实现Verilog模块,并将多个模块组合成一个完整的数字电路。
3. Verilog HDL的仿真和综合工具的使用Verilog HDL可以通过仿真工具进行功能验证,也可以通过综合工具生成实际的硬件电路。
在本实验中,我们将使用Verilog仿真工具对设计的数字电路进行功能验证,并使用综合工具生成对应的硬件电路。
实验步骤:1. 学习Verilog HDL的基本语法和结构2. 设计一个简单的数字电路,并实现Verilog模块描述其行为3. 使用仿真工具对设计的数字电路进行功能验证4. 使用综合工具生成对应的硬件电路实验结果:通过本实验,我们学习了Verilog HDL的基本概念和使用方法,并成功设计和实现了一个简单的数字电路。
我们使用仿真工具对设计的数字电路进行了功能验证,并使用综合工具生成了对应的硬件电路。
实验结果表明,Verilog HDL在数字电路设计中具有重要的应用价值。
EDA技术与Verilog HDL技术实验报告

EDA技术与Verilog HDL技术实验报告班级:09电信实验班姓名:虞鸿鸣组别:Q09610137实验:交通灯控制一、实验目的:1、运用Verilog HDL综合编辑软件实现相应功能;2、进一步使用EDA技术解决实际问题;3、进一步使用EDA工具箱,提高对硬件电路的认识。
二、实验仪器PC计算机、EDA实验工具箱三、简要原理1. 能显示十字路口东西、南北两个方向的红、黄、绿的指示状态用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯。
变化规律为:东西绿灯,南北红灯→东西黄灯,南北红灯→东西红灯,南北绿灯→东西红灯,南北黄灯→东西绿灯,南北红灯……依次循环。
2. 能实现正常的倒计时功能用两组数码管作为东西和南北方向的允许或通行时间的倒计时显示,显示时间为红灯45秒、绿灯40秒、黄灯5秒。
3. 能实现紧急状态处理的功能(1) 出现紧急状态(例如消防车,警车执行特殊任务时要优先通行)时,两路上所有车禁止通行,红灯全亮;(2) 显示到计时的两组数码管闪烁;(3) 计数器停止计数并保持在原来的状态;(4) 特殊状态解除后能返回原来状态继续运行。
4. 能实现系统复位功能系统复位后,东西绿灯,南北红灯,东西计时器显示40秒,南北显示45秒。
5. 用VHDL语言设计符合上述功能要求的交通灯控制器,并用层次化设计方法设计该电路。
6. 控制器、置数器的功能用功能仿真的方法验证,可通过有关波形确认电路设计是否正确。
7. 完成电路全部设计后,通过系统实验箱下载验证设计课题的正确性。
四、设计思路EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号;num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片;light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置;tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效;pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效;state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11;五、源代码及注析module TRAFFIC_LI(EN,CLK,RST,URGEN,num1,num2,light1,light2);input EN,CLK,RST,URGEN;//EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号output[7:0] num1,num2;//num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片output[2:0] light1,light2;//light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置reg tim1,tim2,pb1,pb2;//tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效//pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效reg[1:0]state1,state2;//state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11reg[2:0]light1,light2,light3,light4;//light3,light4用以寄存紧急情况前交通灯状态reg[7:0] num1,num2;//现实时间寄存reg[7:0] red1,red2,green1,green2,yellow1,yellow2;//东西南北方向三种颜色的交通灯亮的时间always @(EN)if(!EN)begin //设置计数初值green1<=8'b01000000;//绿灯40Sred1<=8'b01000000;//红灯40Syellow1<=8'b00000101;//黄灯5Sgreen2<=8'b01000000;red2<=8'b01000000;yellow2<=8'b00000101;endalways @(posedge CLK )beginif(!URGEN)beginlight3<=light1;endif(RST)//东西方向复位控制beginlight1<=3'b001; //亮绿灯num1<=green1;//时间为40Sendelse if(URGEN) //东西方向紧急情况控制beginlight1<=3'b100; //亮红灯//计数暂停pb1<=1;endelse if(pb1)beginlight1<=light3;pb1<=0;endelse if(EN)begin //使能有效开始控制计数if(!tim1) //开始控制begin //东西方向交通灯点亮控制tim1<=1;case(state1)2'b00:beginnum1<=green1;light1<=3'b001;state1<=2'b01;end//绿灯亮40S,跳转至下一状态2'b01:beginnum1<=yellow1-1;light1<=3'b010;state1<=2'b10;end//黄灯亮5秒,跳转至下一状态2'b10:beginnum1<=red1+5;light1<=3'b100;state1<=2'b00;end//红灯亮45S,跳转至初状态default:light1<=3'b100;//其他情况亮红灯endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;endelse num1[3:0]<=num1[3:0]-1;if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge CLK )beginif(!URGEN)beginlight4<=light2;endif(RST) //南北方向复位控制beginlight2<=3'b100;//亮红灯num2<=red2+5;//时间为45Sendelse if(URGEN)//南北方向特殊情况控制beginlight2<=3'b100;//亮红灯//计数暂停pb2<=1;endelse if(pb2)beginlight2<=light4;pb2<=0;endelse if(EN)beginif(!tim2)begin //南北方向交通灯控制tim2<=1;case(state2)2'b00:beginnum2<=red2+5;light2<=3'b100;state2<=2'b01;end2'b01:beginnum2<=green2;light2<=3'b001;state2<=2'b10;end2'b10:beginnum2<=yellow2-1;light2<=3'b010;state2<=2'b00;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendendmodule六、实验结果及分析初始状态时,东西方向绿灯,计时40秒,南北方向红灯,计时45秒。
EDA实验指导(基于verilog)

图1-19管脚分配
在图1-19中以锁定端口A的管脚为例,其它端口的管脚锁定与其基本一致。选择端口A的对应Assignment Name待其变为蓝色,双击之,出现下拉菜单选取如图1-19所示的Location(Accepts wildcards/groups)选项。选择端口A的对应Value栏,待其变为蓝色,依照表1-2和表1-3所示的硬件与FPGA的管脚连接表(或附录),输入对应的管脚名AH12,按回车键,软件将自动将其改为PIN_AH12,同时蓝色选择条会自动跳转到Value栏的下一行,这表明软件已经将输入端口A分配到FPGA的AH12引脚上,如图1-20所示。
LED9display
LED[9]
Pin_F22
JP2_96
LED10display
LED[10]
Pin_E22
JP2_97
LED11display
LED[11]
Pin_F21
JP2_98
LED12display
表1-3 LED灯与FPGA管脚连接表
四、实验步骤
下面将通过这个实验,向读者介绍QUARTUSII的项目文件的生成、编译、管脚分配以及时序仿真等的操作过程。
图1-12设计文件的输入
图1-13保存设计文件对话框
3、对设计文件进行编译
QUARTUSII编译器窗口包含了对设计文件处理的全过程。在QUARTUSII软件中选择Processing>Compiler Tool菜单项,则出现QUARTUSII的编译器窗口,如图1-14所示,图中标明了全编译过程各个模块的功能。
在QUARTUSII图形编辑器窗口(图1-10)中,根据个人爱好,可以随时改变Block Editor的显示选项,如导向线和网格间距、橡皮筋功能、颜色以及基本单元和块的属性等。
EDA实验实验报告2

EDA实验实验报告学号:姓名:彭文勇院系:微电子技术系专业:嵌入式教师:李海2010年12月实验一一位全加器的设计实验地点:第二实验楼405同组人员:孙腾坤一、实验目的通过次实验我们逐步了解、熟悉和掌握FPGA开发软件Quartus II 的使用及Verilog HDL的编程方法。
学习用Verilog HDL语言以不同的方式来描述1位全加器及电路的设计仿真和硬件测试。
二、实验原理和内容本实验的内容是建立一个1位全加器。
具体内容包括:(1)使用Quartus II建立工程、编写程序;(2)进行波形仿真验证;(3)进行硬件测试。
通过SmartSOPC试验箱上的按键KEY1~KEY3输入信号,分别为A、B和cin,并通过LED1~LED3指示相应的状态。
输出Sum和cout通过LED7和LED8指示(灯亮表示输入或输出为“1”)。
三、实验步骤(1)启动Quartus II建立一个空白工程,然后命名为full_add。
(2)新建Verilog HDL源文件full_add.v,输入程序代码并保存,然后进行综合编译。
若在编译过程中发现错误,则找出并更正错误,直至编译成功为止,并生成图形符号文件full_add.bdf。
(3)波形仿真验证。
(4)新建图形设计文件命名为full_add.bdf并保存。
微电子技术系(5)选择目标器件并对相应的引脚进行锁定,我们选Altera公司Cyclone系列的EP1C6Q240C8芯片,引脚锁定方法参考实验书后面的附录A引脚分配。
将为使用的引脚设置为三态输入(一定要设置否则可能损坏芯片)。
(6)将full_add.bdf设置为顶层实体。
对该工程文件进行全程便已处理。
若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
(7)将跳线短接帽调解到JP6的KEY1~KEY3、LED0~LED2、LED6和LED7,使KEY1~KEY3、LED1~LED3、LED7、LED8与芯片对应的引脚相连。
EDA技术4选1多路选择器实验报告

EDA技术4选1多路选择器实验报告实验报告:EDA技术4选1多路选择器1.引言多路选择器是一种常见的组合电路,用于从多个输入信号中选择出一个输出信号。
在数字电路设计中,采用EDA(Electronic Design Automation)技术可以方便地进行多路选择器的设计、模拟和验证。
本实验旨在使用EDA技术设计、模拟和验证一个4选1多路选择器。
2.设计本实验采用Verilog HDL语言进行设计。
首先,我们定义一个4位的输入端口sel,用于选择4个输入信号in0、in1、in2和in3中的一个。
然后,我们定义一个输出端口out,用于输出被选择的信号。
接下来是设计的核心部分,根据4位选择信号sel的不同取值,选择相应的输入信号作为输出信号。
我们使用一个case语句来实现多路选择器的选择功能。
3.仿真为了验证设计的正确性,我们使用EDA技术对多路选择器进行了仿真。
在仿真中,我们可以输入不同的选择信号和输入信号组合,观察输出结果是否符合预期。
通过仿真,我们可以验证多路选择器在不同输入和选择信号组合下的正确性和稳定性。
如果输出结果与预期一致,那么我们可以得出结论:设计的多路选择器是正确的。
4.验证验证是设计过程中非常重要的一步,通过验证可以判断设计是否达到了预期的功能和性能要求。
我们使用EDA技术对多路选择器进行了验证。
在验证过程中,我们更加注重多路选择器的性能指标,如延迟和功耗等。
我们可以通过模拟分析和优化来改进多路选择器的性能。
5.总结本实验通过使用EDA技术设计、模拟和验证了一个4选1多路选择器。
通过实验我们学习了EDA技术在数字电路设计中的作用和应用。
同时,我们了解了多路选择器的基本原理和设计方法,掌握了Verilog HDL语言的设计和仿真技巧。
通过本实验,我们发现EDA技术能够极大地提高数字电路设计的效率和准确性。
通过合理应用EDA技术,我们可以设计出更加可靠、高效的数字电路,并且可以方便地对其进行仿真和验证。
(完整word版)EDA实验报告

计算机学院计算机科学与技术专业1班____组、学号姓名协作者______________ 教师评定_________________实验题目_________基于Libero的数字逻辑设计仿真及验证实验_________1、熟悉EDA工具的使用;仿真基本门电路。
2、仿真组合逻辑电路。
3、仿真时序逻辑电路。
4、基本门电路、组合电路和时序电路的程序烧录及验证。
5、数字逻辑综合设计仿真及验证。
实验报告1、基本门电路一、实验目的1、了解基于Verilog的基本门电路的设计及其验证。
2、熟悉利用EDA工具进行设计及仿真的流程。
3、学习针对实际门电路芯片74HC00、74HC02、74HC04、74HC08、74HC32、74HC86进行VerilogHDL设计的方法。
二、实验环境Libero仿真软件。
三、实验内容1、掌握Libero软件的使用方法。
2、进行针对74系列基本门电路的设计,并完成相应的仿真实验。
3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC00、74HC02、74HC04、74HC08、74HC32、74HC86相应的设计、综合及仿真。
)4、提交针对74HC00、74HC02、74HC04、74HC08、74HC32、74HC86(任选一个....的综合结果,以及相应的仿真结果。
四、实验结果和数据处理1、所有模块及测试平台代码清单..(完整word版)EDA实验报告//74HC00代码-与非module HC00(A,B,Y);input [4:1]A,B;output [4:1]Y;assign Y=~(A&B);//与非endmodule//74HC00测试平台代码`timescale 1ns/1nsmodule testbench();reg [4:1] a,b;wire [4:1] y;HC00 u1(a,b,y);initialbegina=4'b0000;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;a=4'b1111;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;(完整word版)EDA实验报告endendmodule//74HC02代码-或非module HC02(A,B,Y);input [4:1]A,B;output [4:1]Y;assign Y=~(A|B);//或非endmodule//74HC02测试平台代码`timescale 1ns/1nsmodule testbench();reg [4:1] a,b;wire [4:1] y;HC00 u1(a,b,y);initialbegina=4'b0000;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;a=4'b1111;b=4'b0001;(完整word版)EDA实验报告#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;endendmodule//74HC04代码-非module HC04(A,Y);input [4:1]A;output [4:1]Y;assign Y=~A;endmodule//74HC04测试平台代码`timescale 1ns/1nsmodule testbench();reg [4:1] a,b;wire [4:1] y;HC00 u1(a,b,y);initialbegina=4'b0000;b=4'b0001;#10 b=b<<1;(完整word版)EDA实验报告#10 b=b<<1;#10 b=b<<1;a=4'b1111;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;endendmodule//74HC08代码-与module HC08(A,B,Y);input [4:1]A,B;output [4:1]Y;assign Y=A&B;endmodule//74HC08测试平台代码`timescale 1ns/1nsmodule testbench();reg [4:1] a,b;wire [4:1] y;HC00 u1(a,b,y);initialbegin(完整word版)EDA实验报告a=4'b0000;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;a=4'b1111;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;endendmodule//74HC32代码-或module HC32(A,B,Y);input [4:1]A,B;output [4:1]Y;assign Y=A|B;endmodule//74HC32测试平台代码`timescale 1ns/1nsmodule testbench();reg [4:1] a,b;wire [4:1] y;(完整word版)EDA实验报告HC00 u1(a,b,y);initialbegina=4'b0000;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;a=4'b1111;b=4'b0001;#10 b=b<<1;#10 b=b<<1;#10 b=b<<1;endendmodule//74HC86代码-异或module HC86(A,B,Y);input [4:1]A,B;output [4:1]Y;assign Y=A^B;endmodule//74HC86测试平台代码`timescale 1ns/1ns(完整word 版)EDA 实验报告module testbench(); reg [4:1] a,b; wire [4:1] y;HC00 u1(a,b,y);initial begin a=4'b0000;b=4'b0001; #10 b=b<<1; #10 b=b<<1; #10 b=b<<1;a=4'b1111;b=4'b0001; #10 b=b<<1; #10 b=b<<1;#10 b=b<<1;endendmodule2、第一次仿真结果(任选一个....门,请注明,......插入截图,.....下同..)。
EDA实验报告

EDA实验报告一、实验目的本次 EDA 实验的主要目的是熟悉电子设计自动化(EDA)软件的使用,掌握数字电路的设计、仿真和实现流程,提高对数字逻辑电路的理解和设计能力。
二、实验设备与环境1、计算机一台2、 EDA 软件(如 Quartus II 等)三、实验原理1、数字逻辑基础数字电路中的基本逻辑门包括与门、或门、非门、与非门、或非门等。
通过这些基本逻辑门的组合,可以实现各种复杂的数字逻辑功能。
2、组合逻辑电路组合逻辑电路的输出仅取决于当前的输入,不存在存储单元。
常见的组合逻辑电路有加法器、编码器、译码器等。
3、时序逻辑电路时序逻辑电路的输出不仅取决于当前的输入,还与电路的过去状态有关。
常见的时序逻辑电路有计数器、寄存器等。
四、实验内容1、设计一个简单的加法器使用基本逻辑门设计一个两位加法器,输入为两个两位的二进制数A 和 B,输出为它们的和 S 以及进位 C。
2、设计一个 4 位计数器实现一个 4 位的计数器,能够在时钟信号的上升沿进行计数,计数范围为 0 到 15。
3、设计一个数码管显示译码器将输入的 4 位二进制数转换为数码管的 7 段显示编码,实现数字 0 到 9 的显示。
五、实验步骤1、加法器设计(1)打开 EDA 软件,创建一个新的项目。
(2)使用原理图输入方式,绘制出加法器的逻辑电路图,包括两个半加器和一个或门。
(3)对设计进行编译,检查是否存在语法错误。
(4)创建仿真文件,设置输入信号的激励,进行功能仿真,观察输出结果是否符合预期。
2、计数器设计(1)在项目中新建一个模块,使用 Verilog HDL 语言描述计数器的功能。
(2)编写测试代码,对计数器进行仿真验证。
(3)将计数器下载到硬件开发板上,通过观察实际的输出结果验证其功能。
3、数码管显示译码器设计(1)同样使用原理图输入方式,设计数码管显示译码器的逻辑电路。
(2)进行编译和仿真,确保译码器的功能正确。
(3)将译码器与计数器连接起来,实现数码管的动态显示。
EDA实验报告

EDA 实验报告交通灯实验一.实验目的通过此实验让用户进一步了解、熟悉和掌握 CPLD/FPGA 开发软件的的使用方法及Verilog HDL 的编程方法。
学习简单状态机的设计和硬件测试。
二.实验内容本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。
整个设计在SmartSOPC 实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。
此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A方向的红、绿、黄灯三种信号,用第六、第七、第八个LED 灯代表B方向的红、绿、黄等三种信号。
三.实验原理本实验设计的交通灯控制器要求实现对 A、B 两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。
因此每个方向的信号可用一个状态机实现(参考交通灯.ppt),状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。
最后将交通灯的状态信息输出至数码管和对应LED灯。
注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。
四.实验步骤1) 启动Quartus II 建立一个空白工程,然后命名为traffic_test.qpf(器件为:EP3C55F484C8)。
2)加入并完成交通灯控制模块traffic_ctrl.v,加入顶层模块traffic_test 及交通灯显示模块traffic_display.v,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
3)运行引脚绑定脚本文件setup.tcl;文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
5)确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。
6)按核芯板上的复位按键,观察交通灯是否正常运作。
五. 结构图六.实验代码//*********************************************************//** 交通灯实验//** 控制模块:traffic_ctrl.v//*********************************************************module traffic_ctrl(clock,rst_n,lampa,lampb,acount,bcount);input clock; //系统时钟48MHzinput rst_n; //同步复位信号,低电平有效output [2:0] lampa; //控制A 方向三盏灯的亮灭;其中lampa[2:0]分//别控制A 方向的黄灯、绿灯、红灯(低电平灯亮) output [2:0] lampb; //控制B 方向三盏灯的亮灭;其中lampb[2:0]分//别控制B 方向的黄灯、绿灯、红灯(低电平灯亮) output [7:0] acount; //用于A 方向灯的时间显示,8 位BCD 码输出output [7:0] bcount; //用于B 方向灯的时间显示,8 位BCD 码输出reg [26:0]clk_cnt;wire clken;//设置各种灯的计数器的预置数parameter ared =8'd30, //30秒ared = bgreen + byellowayellow =8'd5, //5秒agreen =8'd15, //15秒bred =8'd20, //20秒bred = agreen + ayellowbyellow =8'd5, //5秒bgreen =8'd25; //25秒//产生1Hz时钟使能信号always @(posedge clock)beginif(clken)clk_cnt <= 26'h0;elseclk_cnt <= clk_cnt + 26'h1;endassign clken = (clk_cnt >= 26'd4*******);//// A方向信号灯控制//reg[2:0] lampa;reg[7:0] acount;reg acount_startred, acount_startgreen, acount_startyellow; // 用于倒数计数器的复位//状态机Areg[1:0] currentstate_A, nextstate_A; parameter s0=0,s1=1,s2=2,s3=3,s4=4;// 以下状态机A的代码自己完成always@(posedge clock or negedge rst_n) beginif(!rst_n) currentstate_A<=s0;else currentstate_A<=nextstate_A;endalways@(currentstate_A or acount)begincase(currentstate_A)s0:begin lampa=3'b111;acount_startred=1'b1;acount_startgreen=1'b0;acount_startyellow=1'b0;nextstate_A<=s1;ends1:begin lampa=3'b110;acount_startred=1'b0;acount_startyellow=1'b0;if(acount==0)beginnextstate_A<=s2;acount_startgreen=1'b1;endelse beginnextstate_A<=s1;acount_startgreen=1'b0;endends2:begin lampa=3'b101;acount_startgreen=1'b0;acount_startred=1'b0;if(acount==0)beginnextstate_A<=s3;acount_startyellow=1'b1;endelse beginnextstate_A<=s2;acount_startyellow=1'b0;endends3:begin acount_startgreen=1'b0;acount_startyellow=1'b0;lampa<=3'b011;if(acount==0)beginnextstate_A<=s1;acount_startred=1'b1;endelse beginnextstate_A<=s3;acount_startred=1'b0;endenddefault:begin bcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(acount==0)beginnextstate_A<=s2;acount_startyellow=1'b1;endelse beginnextstate_A<=s1;acount_startgreen=1'b0;endendendcaseend// 倒数计数器Aalways @(posedge clock)beginif(acount_startred)acount <= ared;else if (acount_startgreen)acount <= agreen;else if (acount_startyellow)acount <= ayellow;else if (clken)acount <= acount - 1'b1;end//// B方向信号灯控制//reg[2:0] lampb;reg[7:0] bcount;reg bcount_startred, bcount_startgreen, bcount_startyellow; // 用于倒数计数器的复位//状态机Breg[1:0] currentstate_B, nextstate_B;// 以下状态机B的代码自己完成always@(posedge clock or negedge rst_n)beginif(!rst_n) currentstate_B<=s0;else currentstate_B<=nextstate_B;endalways@(currentstate_B or bcount)begincase(currentstate_B)s0: beginlampb=3'b111;bcount_startgreen=1'b1;bcount_startred=1'b0;bcount_startyellow=1'b0;nextstate_B<=s1;ends1:begin bcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(bcount==0)beginnextstate_B<=s2;bcount_startyellow=1'b1;endelsebeginnextstate_B<=s1;endends2:begin bcount_startyellow=1'b0;lampb<=3'b011;bcount_startgreen=1'b0;if(bcount==0)beginnextstate_B<=s3;bcount_startred=1'b1;endelsebeginnextstate_B<=s2;bcount_startred=1'b0;endends3:beginbcount_startred=1'b0;bcount_startyellow=1'b0;lampb<=3'b110;if(bcount==0)beginnextstate_B<=s1;bcount_startgreen=1'b1;endelsebeginnextstate_B<=s3;bcount_startgreen=1'b0;endenddefault:beginbcount_startgreen=1'b0;bcount_startred=1'b0;lampb<=3'b101;if(bcount==0)beginnextstate_B<=s2;bcount_startyellow=1'b1;endelse beginnextstate_B<=s1;endendendcaseend// 倒数计数器Balways @(posedge clock) beginif(bcount_startred)bcount <= bred;else if (bcount_startgreen)bcount <= bgreen;else if (bcount_startyellow)bcount <= byellow;else if (clken)bcount <= bcount - 1'b1; endendmodule七.实验现象1.A方向红灯,B方向黄灯。
EDA技术实用教程——Verilog-HDL版学习报告

可编程逻辑器件与EDA技术学习报告院系:自动化工程学院电子学系专业:电子信息科学与技术班级: 2009级2班姓名:何伍健2011年7月2日一、EDA技术概述1.1EDA技术及其发展20世纪70年代,在集成电路整理方面,双极工艺,MOS工艺已得到广泛的应用;20世纪80年代,集成电路设计进入了CMOS(互补场效应管)时代;20世纪90年代,集成电路设计工艺进入了超深亚微米阶段;21世纪,全方面进入了EDA时代。
1.2EDA技术实现目标1.可编程逻辑器件2.半定制或全定制ASIC(1)门阵列ASIC(2)标准单元ASIC3.混合ASIC1.3 硬件描述语言Verilog HDL1.VHDL2.Verilog HDL3.SystemVerilog和System C1.4 其他常用HDLVHDL与Verilog相比,有下列优势:1.语法比Verilog严谨,通过EDA工具自动语法检查,易排除许多设计中的疏忽;2.有很好的行为级描述能力和一定的系统级描述能力,而Verilog建模时,行为与系统级抽象及相关描述能力不及VHDL。
与Verilog相比,有下列不足:1.VHDL代码较冗长,在相同逻辑功能描述时,Verilog的代码比VHDL少许多;2.VHDL对数据类型匹配要求过于严格,初学时会感到不是很方便,编程耗时也较多;而Verilog支持自动类型转换,初学者容易入门;3.VHDL对版图级,管子级这些较为低层的描述级别,几乎不支持,无法直接用于集成电路低层建模。
SystemVerilog主要定位于集成电路的实现和验证流程,并为系统级设计流程提供了强大的链接能力。
System C是C++语言的硬件描述扩展,主要用于ESL(电子系统级)建模与验证。
1.5HDL综合1.从自然语言转换到Verilog HDL语言算法表述,即自然语言综合;2.从算法表述转换到寄存器输出级表述,即行为综合;3.从RTL级表述转换到逻辑门的表述,即逻辑综合;4.从逻辑门表述转换到版图级表述,或转换到FPGA的配置网标文件,可称为版图综合或结构综合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术与Verilog HDL技术实验报告班级:09电信实验班姓名:虞鸿鸣组别:Q09610137实验:交通灯控制一、实验目的:1、运用Verilog HDL综合编辑软件实现相应功能;2、进一步使用EDA技术解决实际问题;3、进一步使用EDA工具箱,提高对硬件电路的认识。
二、实验仪器PC计算机、EDA实验工具箱三、简要原理1. 能显示十字路口东西、南北两个方向的红、黄、绿的指示状态用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯。
变化规律为:东西绿灯,南北红灯→东西黄灯,南北红灯→东西红灯,南北绿灯→东西红灯,南北黄灯→东西绿灯,南北红灯……依次循环。
2. 能实现正常的倒计时功能用两组数码管作为东西和南北方向的允许或通行时间的倒计时显示,显示时间为红灯45秒、绿灯40秒、黄灯5秒。
3. 能实现紧急状态处理的功能(1) 出现紧急状态(例如消防车,警车执行特殊任务时要优先通行)时,两路上所有车禁止通行,红灯全亮;(2) 显示到计时的两组数码管闪烁;(3) 计数器停止计数并保持在原来的状态;(4) 特殊状态解除后能返回原来状态继续运行。
4. 能实现系统复位功能系统复位后,东西绿灯,南北红灯,东西计时器显示40秒,南北显示45秒。
5. 用VHDL语言设计符合上述功能要求的交通灯控制器,并用层次化设计方法设计该电路。
6. 控制器、置数器的功能用功能仿真的方法验证,可通过有关波形确认电路设计是否正确。
7. 完成电路全部设计后,通过系统实验箱下载验证设计课题的正确性。
四、设计思路EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号;num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片;light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置;tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效;pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效;state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11;五、源代码及注析module TRAFFIC_LI(EN,CLK,RST,URGEN,num1,num2,light1,light2);input EN,CLK,RST,URGEN;//EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号output[7:0] num1,num2;//num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片output[2:0] light1,light2;//light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置reg tim1,tim2,pb1,pb2;//tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效//pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效reg[1:0]state1,state2;//state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11reg[2:0]light1,light2,light3,light4;//light3,light4用以寄存紧急情况前交通灯状态reg[7:0] num1,num2;//现实时间寄存reg[7:0] red1,red2,green1,green2,yellow1,yellow2;//东西南北方向三种颜色的交通灯亮的时间always @(EN)if(!EN)begin //设置计数初值green1<=8'b01000000;//绿灯40Sred1<=8'b01000000;//红灯40Syellow1<=8'b00000101;//黄灯5Sgreen2<=8'b01000000;red2<=8'b01000000;yellow2<=8'b00000101;endalways @(posedge CLK )beginif(!URGEN)beginlight3<=light1;endif(RST)//东西方向复位控制beginlight1<=3'b001; //亮绿灯num1<=green1;//时间为40Sendelse if(URGEN) //东西方向紧急情况控制beginlight1<=3'b100; //亮红灯//计数暂停pb1<=1;endelse if(pb1)beginlight1<=light3;pb1<=0;endelse if(EN)begin //使能有效开始控制计数if(!tim1) //开始控制begin //东西方向交通灯点亮控制tim1<=1;case(state1)2'b00:beginnum1<=green1;light1<=3'b001;state1<=2'b01;end//绿灯亮40S,跳转至下一状态2'b01:beginnum1<=yellow1-1;light1<=3'b010;state1<=2'b10;end//黄灯亮5秒,跳转至下一状态2'b10:beginnum1<=red1+5;light1<=3'b100;state1<=2'b00;end//红灯亮45S,跳转至初状态default:light1<=3'b100;//其他情况亮红灯endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;endelse num1[3:0]<=num1[3:0]-1;if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge CLK )beginif(!URGEN)beginlight4<=light2;endif(RST) //南北方向复位控制beginlight2<=3'b100;//亮红灯num2<=red2+5;//时间为45Sendelse if(URGEN)//南北方向特殊情况控制beginlight2<=3'b100;//亮红灯//计数暂停pb2<=1;endelse if(pb2)beginlight2<=light4;pb2<=0;endelse if(EN)beginif(!tim2)begin //南北方向交通灯控制tim2<=1;case(state2)2'b00:beginnum2<=red2+5;light2<=3'b100;state2<=2'b01;end2'b01:beginnum2<=green2;light2<=3'b001;state2<=2'b10;end2'b10:beginnum2<=yellow2-1;light2<=3'b010;state2<=2'b00;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendendmodule六、实验结果及分析初始状态时,东西方向绿灯,计时40秒,南北方向红灯,计时45秒。
当有RST高电平触发时,系统自动进入初始化状态,东西方向绿灯,南北方向红灯,计时分别为40秒和45秒。
RST后,程序自动重新开始计数,减1运行计时功能。
当URGEN高电平时,即出现紧急情况,东西和南北方向均亮起红灯,当紧急信号过去后再恢复原来的状态,计时继续进行。
紧急情况过去后,程序继续正常按照规定的时序进行运行。
当绿灯计时40秒后,就进入5秒种的黄灯阶段。
在此期间,红灯仍继续工作5秒,直到5秒过后,两个方向的交通灯同时发生变化。
讨论:1、在仿真阶段,由于CLK时钟频率设置不合理,一直没有得到想要的实验结果。
通过改变CLK的参数设置和检查程序设计,实现了预期目的,波形达到了预期的效果。
2、在绿灯→黄灯阶段,在先前的设计中,始终不能保证两者的实时控制。
经讨论研究,其问题出在黄灯的延时上面。
因为绿灯和黄灯之间会有1秒的时间重合,这就导致了两者不能同时计时,实验结果自然不能达到预期效果。
实验心得:这是期末作业,同时也是对这一学期EDA学习的综合应用。
在程序设计中,的的确确遇到了不少问题,但通过查阅资料,相互探讨得以解决。
EDA的作用也不言而喻,因而在以后的学习中也应加强对其的学习。