verilog四位呼吸灯设计

verilog四位呼吸灯设计
verilog四位呼吸灯设计

呼吸灯

1)实现效果

呼吸灯:从最暗到最亮,再从最亮到最暗

2)原理

LED 的亮度与流过的电流成正比。在一定的频率之下,如果占空比是0,则LED 不亮;如果占空比是100%,则LED 最亮;如果占空比刚好是50%,则LED 亮度适中。如果我们让占空比从0~100%变化,再从100%~0不断变化,就可以实现LED 一呼一吸的效果。 其波形占空比示意图如下所示:

Cnt_2s

led

3)呼吸灯程序设计思路

(1)首先确定PWM 的频率为2Khz

(2)由频率算出周期 T = 1/f = 2ms

(3)根据每次呼2s ,吸2s ,算出计数值 2s/2ms=1000

(4)然后将2ms 分成1000份,每一份是2us

(5)写三个 2us 、2ms 、2s 的3个计数器cnt_2us 、 cnt2_ms 、cnt_2s ,最后cnt_2ms 和cnt2s 进行比较

程序

module hxd(

input wire clk,

input wire rst_n,

output reg [3:0] led

);

reg [10:0] cnt_2us;

reg [15:0]cnt_2ms;

reg [15:0]cnt_2s;

parameter CNT_MIN=99;//99 parameter CNT_MAX=999;//999

wire flag_2us;

wire flag_2ms;

wire flag_2s;

reg flag;

always @(posedge clk or negedge rst_n) if(rst_n==0)

cnt_2us<=0;

else if(cnt_2us==CNT_MIN)

cnt_2us<=0;

else

cnt_2us<=cnt_2us+1;

assign flag_2us=(cnt_2us==CNT_MIN)?1:0;

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_2ms<=0;

else if(cnt_2ms==CNT_MAX&&cnt_2us==CNT_MIN)

cnt_2ms<=0;

else if (cnt_2us==CNT_MIN)

cnt_2ms<=cnt_2ms+1;

assign flag_2ms=(cnt_2ms==CNT_MAX)?(1&&flag_2us):0;

always@(posedge clk or negedge rst_n)

if(rst_n==0)

cnt_2s<=0;

else if(cnt_2s==CNT_MAX&&cnt_2ms==CNT_MAX&cnt_2us==CNT_MIN) cnt_2s<=0;

else if(cnt_2ms==CNT_MAX&cnt_2us==CNT_MIN)

cnt_2s<=cnt_2s+1;

assign flag_2s=(cnt_2s==CNT_MAX)?(1&&flag_2ms):0;

always@(posedge clk or negedge rst_n)

if(rst_n==0)

flag<=0;

else if(flag_2s==1)

flag<=~flag;

else

flag<=flag;

always@(posedge clk or negedge rst_n)

if(rst_n==0)

led<=4'b0000;

else if (flag==0&&cnt_2ms<=cnt_2s)

led<=4'b1111;

else if (flag==1&&cnt_2s<=cnt_2ms)

led<=4'b1111;

else

led<=4'b0000;

endmodule

基于VerilogHDL的通行时间可变的交通灯控制器

通行时间可变的交通灯控制器设计 module tr1(ng,clk,reset,resets,emergency,lighta,lightb,seg,select); input ng,clk,reset,emergency,resets; output[6:0]seg;//显示用的 output[3:0] lighta,lightb;//a是主干道,b是支干道 output [3:0] select;//选择那一个管子进行显示 reg clk1,clk2;//clk1要5HZ clk2要几千HZ reg [3:0] select; reg tim1,tim2;//这是看你的等有没有变过颜色的控制信号 reg [1:0] cont; reg[2:0]state1,state2,ste;两个控制颜色变化状态的信号。 reg[3:0]lighta,lightb;//a是主干道,b是支干道 reg[3:0]num;//译码器是根据这个东西来译码的 reg [35:0] fout; reg[6:0]seg;//显示 reg[7:0] numa,numb; reg[7:0] red1,red2,green1,green2,yellow1,yellow2,left1,left2; always @(ng ) if(!ng) begin //设置计数初值 green1 <=8'b00110000;//30S red1 <=8'b01010001;//51S yellow1<=8'b00000011;//3S left1 <=8'b00010101; //15S green2 <=8'b00110000;//30S

Verilog流水灯实验报告

流水灯实验报告 实验二流水灯 一、实验目的 学会编写一个简单的流水灯程序并掌握分频的方法。熟悉Modelsim仿真软件的使用。 二、实验要求 用Quartus编写流水灯程序,在Modelsim软件中进行仿真。 三、实验仪器和设备 1、硬件:计算机 2、软件:Quartus、Modelsim、(UE) 四、实验内容 1、将时钟周期进行分频。 2、编写Verilog程序实现LED等依次亮灭,用Modelsim进行仿真,绘制波形图。 五、实验设计 (一)分频原理 已知时钟周期f为50MHz,周期T为1/f,即20ns。若想得到四分频计数器,即周期为80ns的时钟,需要把时钟进行分频。即每四个时钟周期合并为一个周期。原理图如图1所示。 图1 四分频原理图 (二)流水灯设计思路 1、实现4盏LED灯依次隔1s亮灭,即周期为1s; 2、计算出频率f为1/T=1Hz; 3、设置计数器cnt,当检测到clk上升沿时开始计数,当cnt计数到24_999_999时,clk_4跳变为1,LED灯亮起,当cnt计数49_999_999时,clk_4置0,LED灯熄灭。 4、给LED赋初值4’b0001,第一盏灯亮。 5、利用位拼接,实现循环。 (三)设计框图 图2 设计基本框图 (四)位拼接的用法 若输入a=4'b1010,b=3'b101,c=4'b0101,想要使输出d=5'b10001 用位拼接,符号“{ }”:d<={b[2:1],c[1],a[2:1]} 即把b的低1~2位10,c的低1位0,a的低1~2位01拼接起来,得到10 0 01。 流水灯 4'b0001 4'b0010 4'b0100 4'b1000

高速电路设计的经典案例

该文章版权归 smarteebit 所有。若有疑问,请联系 songmin2@https://www.360docs.net/doc/953188648.html,
高速数字设计的经典案例若干则
【摘要】 随着这些年半导体工艺突飞猛进的发展, “高速数字设计”对广大硬件工程师来说,已经不再是一 个陌生的词。从航空、雷达到汽车电子,从无线通信到有线接入,甚至在一些低端的嵌入式系统上,高 速数字电路都已经在大行其道。 目前行业内已经有不少关于高速数字电路理论的好文章, 笔者就不在这 上面掺和了。 本文着眼于理论和实际相结合, 所用的素材都来自笔者亲历过的案例, 相信活生生的事实, 比空洞的理论更有说服力,也希望能使入行不久的硬件工程师们得到他们想要的信息,今后少走弯路。 由于不会对理论作过多的阐述, 因此, 本文的阅读对象应该具有一点点高速数字设计的理论基础, 请知。 【关键词】 高速数字设计 高速数字电路 案例
1 信号完整性
什么词汇在高速数字设计中出现得最多?对了,SI(Signal Integrity),也就是信号完整性。信 号完整性问题的表现形式多种多样,主要有如下种类:
图 1 过冲(OVERSHOOT)
图 2 振铃(RING)
图 3 非单调性(NON MONOTONIC)
过冲: 当较快的信号沿驱动一段较长的走线, 而走线拓扑上又没有有效的匹配时, 往往会产生过冲。 过冲带来的问题主要是“1”电平高于接收端器件的输入最大电压值(VIHmax),或“0”电平低于接收端 器件的输入最小电压值(VILmin),这样可能给器件带来潜在的累积性伤害,缩短其工作寿命,从而影响 产品的长期稳定性。
Smarteebit
Page 1 of 17

交通灯设计 verilog

数电课程设计 学生姓名: 专业:电子信息工程 指导教师: 完成日期: 2016-6-30

摘要 Verilog HDL作为一种规范的硬件描述语言,被广泛应用于电路的设计中。它的设计描述可被不同的工具所支持,可用不同器件来实现。利用Verilog HDL语言自顶向下的设计方法设计交通灯控制系统,使其实现道路交通的正常运转,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Quartus5.0完成综合、仿真。此程序通过下载到FPGA芯片后,可应用于实际的交通灯控制系统中。 关键词:Verilog HDL;硬件描述语言;状态;FPGA Abstract As a common language for the description of hardware, Verilog HDL is widely applied in circuit designing. The design description can be supportted by differenttools and implemented by different devices.In this paper, the process of design ing traffic light controller system by the Verilog HDL topdown design method is presented, which has made the road traffic work well, the design of t his system has shown the readability, portability and easily understanding of Verilog HDL as a hard description language Circuit synthesis and simulation are pe rformed by Quartus5.0. The program can be used in the truly traffic light controller system by downloading to the FPGA chip Keywords:Verilog HDL; hardware description language; state; FPGA

VerilogHDL流水灯设计讲课稿

V e r i l o g H D L流水灯 设计

大规模数字逻辑题目:流水灯控制 专业电子信息科学与技术 班级 学号 学生姓名 设计时间 教师评分 2013年 12 月 10 日

目录 一、概述 0 二、设计目的 0 三、设计内容 0 四、设计原理图 (1) 五、引脚分配情况 (1) 六、源程序代码 (1) VerilogHDL 程序: (1) 分频器部分: (4) 七、心得体会 (5) 八、参考文献 (6)

一、概述 流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。 二、设计目的 1、熟悉利用Quartus II 开发数字电路的基本流程和Quartus II 软件的相关操作。 2、掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS进行下载等基本操作。 3、了解VerilogHDL 语言设计或原理图设计方法。 4、通过本此设计,了解流水灯的工作原理,掌握其逻辑功能及设计方法。 三、设计内容 1、用VerilogHDL语言设计一个流水灯,输入0的时候led~led7,1Hz正向流水3次,然后全亮;然后2Hz逆向流水5次全亮;循环。输入1的时候led0~led7,0.5Hz奇数流水2次,全亮,1Hz偶数流水4次,全亮,然后循环。 2、用QuartusII 软件进行编译,仿真,下载到实验平台进行验证。

四、设计原理图 en为可调输入,输出为8位数据,为流水灯实验,试用8个LED指示灯来表示,具体引脚分配见下。 五、引脚分配情况 六、源程序代码 VerilogHDL 程序: module LED( clk,led,en ); input clk; input en; output [7:0]led;// 输出端口定义为寄存器型

verilog综合心得

综合:不可综合的运算符:= = = ,!= =,/(除法),%(取余数)。 1、不使用初始化语句。 2、不使用带有延时的描述。 3、不使用循环次数不确定的循环语句,如:forever、while等。 4、尽量采用同步方式设计电路。 5、除非是关键路径的设计,一般不调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 6、用always过程块描述组合逻辑,应在信号敏感列表中列出所有的输入信号。 7、所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 8、在verilog模块中,任务(task)通常被综合成组合逻辑的形式,每个函数(function)在调用时通常也被综合为一个独立的组合电路模块。 9、用户自定义原语(UDP)是不可综合的,它只能用来建立门级元件的仿真模型。 一般综合工具支持的V erilog HDL结构

移位运算符:V erilog HDL提供向右(>>)及向左(<<)两种运算符,运算符高位或地位一旦移出即予丢弃,其空缺的位则予以补零。 连续赋值语句(assign)、case语句、if…else语句都是可以综合的 initial 语句内若包含有多个语句时,必须以begin end 作聚合;单一的初值赋值,因此并不需以begin end做聚合。 循环(Loops)并不能单独地在程序中存在,而必须在initial和always块中才能使用。initial过程块中的语句仅执行一次,而always块中的语句是不断重复执行的。 编写顶层模块的注意事项 每个端口除了要声明是输入、输出还是双向外,还要声明其数据类型,是连线型(wire)还是寄存器型(reg),如果没有声明则综合器默认为wire型。 1、输入和双向端口不能声明为寄存器型。 2、在测试模块中不需要定义端口。 编写testbentch所归纳的心得

数字电路设计实例

数字电路综合设计案例 8.1 十字路口交通管理器 一、要求 设计一个十字路口交通管理器,该管理器自动控制十字路口两组红、黄、绿三色交通灯,指挥各种车辆和行人安全通过。 二、技术指标 1、交通管理器应能有效操纵路口两组红、黄、绿灯,使两条交叉道路上的车辆交替通行,每次通行时间按需要和实际情况设定。 2、在某条道路上有老人、孩子或者残疾人需要横穿马路时,他们可以举旗示意, 执勤人员按动路口设置的开关,交通管理器接受信号,在路口的通行方向发生转换时,响应上述请求信号,让人们横穿马路,这条道上的车辆禁止通行,即管理这条道路的红灯亮。 3、横穿马路的请求结束后,管理器使道口交通恢复交替通行的正常状态。 三、设计原理和过程: 本课题采用自上而下的方法进行设计。 1.确定交通管理器逻辑功能 ⑴、十字路口每条道路各有一组红、黄、绿灯,用以指挥车辆和行人有序地通行。其中红灯亮表示该条道路禁止通行;黄灯亮表示停车;绿灯亮表示通行。因此,十字路口车辆运行情况有以下几种可能: ①甲道通行,乙道禁止通行; ②甲道停车线以外的车辆禁止通行(必须停车),乙道仍然禁止通行,以便让甲道停车线以内的车辆安全通过; ③甲道禁止通行,乙道通行; ④甲道仍然不通行,乙道停车线以外的车辆必须停车,停车线以内的车辆顺利通行。 ⑵、每条道路的通车时间(也可看作禁止通行时间)为30秒~2分钟,可视需要和实际情况调整,而每条道路的停车时间即黄灯亮的时间为5秒~10秒,且也可调整。 ⑶、响应老人、孩子或残疾人特殊请求信号时,必须在一次通行—禁止情况完毕后, 阻止要求横穿的那条马路上车辆的通行。换句话说,使另一条道路增加若干通行时间。 设S1和S2分别为请求横穿甲道和乙道的手控开关,那么,响应S1或S2的时间必定在甲道通乙道禁止或甲道禁止乙道通两种情况结束时,且不必过黄灯的转换。这种规定是为了简化设计。 由上述逻辑功能,画出交通管理器的示意图如图8-1所示,它的简单逻辑流程图如图8-2所示。示意图中甲道的红、黄、绿灯分别用R、Y、G表示,而乙道的红、黄、绿灯分别用r、y、g表示。简单逻辑流程图中设定通行(禁止)时间为60秒,停车时间为10秒。

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来表示。

VerilogHDL流水灯设计

大规模数字逻辑题目:流水灯控制 专业电子信息科学与技术 班级 学号 学生 设计时间 教师评分 2013年12 月10 日

目录 一、概述 (1) 二、设计目的 (1) 三、设计容 (1) 四、设计原理图 (2) 五、引脚分配情况 (2) 六、源程序代码 (2) VerilogHDL 程序: (2) 分频器部分: (5) 七、心得体会 (6) 八、参考文献 (7)

一、概述 流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。 二、设计目的 1、熟悉利用Quartus II 开发数字电路的基本流程和Quartus II 软件的相关操作。 2、掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS 进行下载等基本操作。 3、了解VerilogHDL 语言设计或原理图设计方法。 4、通过本此设计,了解流水灯的工作原理,掌握其逻辑功能及设计方法。 三、设计容 1、用VerilogHDL语言设计一个流水灯,输入0的时候led~led7,1Hz正向流水3次,然后全亮;然后2Hz逆向流水5次全亮;循环。输入1的时候led0~led7,0.5Hz奇数流水2次,全亮,1Hz偶数流水4次,全亮,然后循环。 2、用QuartusII 软件进行编译,仿真,下载到实验平台进行验证。

四、设计原理图 en为可调输入,输出为8位数据,为流水灯实验,试用8个LED指示灯来表示,具体引脚分配见下。 五、引脚分配情况 六、源程序代码 VerilogHDL 程序: module LED( clk,led,en ); input clk; input en; output [7:0]led;// 输出端口定义为寄存器型

交通灯设计-verilog.

. 基于Verilog语言交通灯设计报告 院系:工学院自动化系 年级:14级 班级:10班 姓名:周博 学号:14032291

这学期我学习了EDA技术及其创新实践这门课程,通过自己学习的内容和自己查找的一些资料用Verilog语言编写交通灯的程序,并且完成了仿真。Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。现在它们都已成为IEEE标准。两者各有特点,但Verilog HDL拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。一、设计背景和意义 交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。 二、设计任务 (1)设计一个交通红绿灯。要求分主干道和支干道,每条道上安装红(主:red1,支:red2)绿(主:green1,支:green2)黄(主:yellow1,支:yellow2)三种颜色灯,由四种状态自动循环构成; (2)在交通灯处在不同的状态时,设计一个计时器以倒计时方式显示计时,主干道上绿灯亮30S,支干道上绿灯亮20S。每个干道上,在绿灯转为红灯时,要

求黄灯先亮5S。 在完成基本要求的基础上,可进一步增加功能、提高性能,如绿灯亮的时间可调。 三、设计方案 1.工作原理: 城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计: S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30s S1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s S2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20s S3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s 在S3结束后又回到(1)状态,并周期重复进行。 状态图如下: 30秒 5秒5秒

FPGA 用verilog语言写的花样流水灯包含四种变换

FPGA 用verilog语言写的花样流水灯包含四种变换 module ledwater(clk,rst,sla,slb,out); input clk,sla,slb,rst; output[7:0] out; reg[7:0] out,date,count; reg[3:0] h,l; reg flg; always@(posedge clk) if(rst) begin if(count==8'd128) begin count=8'd0; case({sla,slb}) 2'b00: begin date=~date;out=date;end 2'b01: begin date=date<<1;out=~date;if(date==8'b00000000)date=8'b11111111;end 2'b10: begin h=h>>1;l=l<<1;date={h,l};out=~date;if(date==8'b00000000)begin h=4'b1111;l=4'b1111;end end 2'b11: begin if(flg==1'b0)begin date=date<<1;out=~date;if(date==8'b00000000)begin date=8'b11111111; flg=1'b1;end end else begin date=date>>1;out=date;if(date==8'b00000000)begin date=8'b11111111; flg=1'b0;end end end endcase end else count=count+8'd1; end else begin date=8'b11111111;h=4'b1111;l=4'b1111;flg=1'b0;count=8'd0;end endmodule

非常好的Verilog设计经验谈

时序是设计出来的 我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera 做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。 在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。 总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求把接口信号的时序波形描述出来)以及将来如何测试设计。在这一级方案中,要保证在今后的设计中时序要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做详细设计的时候,对于一些信号的时序肯定会做一些调整的,但是这种时序的调整最多只能波及到本一级模块,而不能影响到整个设计。记得以前在学校做设计的时候,由于不懂得设计时序,经常因为有一处信号的时序不满足,结果不得不将其它模块信号的时序也改一下,搞得人很郁闷。 在逻辑详细设计方案这一级的时候,我们已经将各级模块的接口时序都设计出来了,各级模块内部是怎么实现的也基本上确定下来了。 由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计会一直处于可控的状态,不会因为某一处的错误引起整个设计从头进行。 ==================================================================== 如何提高电路工作频率 对于设计者来说,我们当然希望我们设计的电路的工作频率(在这里如无特别说明,工作频率指FPGA片内的工作频率)尽量高。我们也经常听说用资源换速度,用流水的方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提高电路的工作频率。 我们先来分析下是什么影响了电路的工作频率。 我们电路的工作频率主要与寄存器到寄存器之间的信号传播时延及 clock skew有关。在FPGA内部如果时钟走长线的话,clock skew很小,基本上可以忽略, 在这里为了简单起见,我们只考虑信号的传播时延的因素。 信号的传播时延包括寄存器的开关时延、走线时延、经过组合逻辑的时延(这样划分或许不是很准确,不过对分析问题来说应该是没有可以的),要提高电路的工作频率,我们就要在这三个时延中做文章,使其尽可能的小。 我们先来看开关时延,这个时延是由器件物理特性决定的,我们没有办法去改变,所以我们只能通过改变走线方式和减少组合逻辑的方法来提高工作频率。

通过Verilog实现交通灯设计实验报告

电子科技大学 实 验 报 告 一、实验室名称:虚拟仪器实验室 二、实验项目名称:交通灯设计实验 三、实验学时:4学时 四、实验原理

假设交通灯处于南北和东西两条大街的“十”字路口,如图1所示。用FPGA 开发板的LED 灯来模拟红、黄、绿3种颜色信号,并按一定顺序、时延来点亮LED ,如图2所示。图3给出了交通灯的状态转移图。设计使用频率为1Hz 的时钟来驱动电路(注1:仿真时采用1MHz 的时钟来驱动电路),则停留1个时钟可得到1S 的延时,类似停留3个时钟可得到3S 的延时,停留15个时钟可得到15S 的延时(注2:开发板工作时钟为50MHz )。 北 南 西东 图1. 六个彩色LED 可以表示一组交通信号灯 图2. 交通灯状态 南北 东西 红 黄 绿 红 黄 绿 S0 1 0 0 0 0 1 S1 1 0 0 0 1 0 S2 1 0 0 1 0 0 S3 0 0 1 1 0 0 S4 0 1 0 1 0 0 S5 1 0 0 1 0 0

图3. 交通灯的状态转移图 顶层模块 时钟分频模块状态机跳转模块 图4. 交通灯的原理框图 五、实验目的 本实验是有限状态机的典型综合实验,掌握如何使用状态转移图来定义Mealy状态机和Moore状态机,熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。并通过一个交通灯的设计掌握利用EDA软件(Xilinx ISE 13.2)进行HDL代码输入方式的电子线路设计与仿真的详细流程。。 六、实验内容 在Xilinx ISE 13.2上完成交通灯设计,输入设计文件,生成二进制码流文件下载到FPGA开发板上进行验证。 七、实验器材(设备、元器件)

Verilog流水灯实验报告

流水灯实验报告 实验二 流水灯 一、 实验目的 学会编写一个简单的流水灯程序并掌握分频的方法。熟悉Modelsim 仿真软件的使用。 二、 实验要求 用Quartus 编写流水灯程序,在Modelsim 软件中进行仿真。 三、 实验仪器和设备 1、 硬件:计算机 2、 软件:Quartus 、Modelsim 、(UE ) 四、 实验内容 1、 将时钟周期进行分频。 2、 编写Verilog 程序实现LED 等依次亮灭,用Modelsim 进行仿真,绘制波形图。 五、 实验设计 (一)分频原理 已知时钟周期f 为50MHz ,周期T 为1/f ,即20ns 。若想得到四分频计数器,即周期为80ns 的时钟,需要把时钟进行分频。即每四个时钟周期合并为一个周期。原理图如图1所示。 rst_n clk clk_4 图1 四分频原理图 (二)流水灯设计思路 1、实现4盏LED 灯依次隔1s 亮灭,即周期为1s ; 2、计算出频率f 为1/T=1Hz ; 3、设置计数器cnt ,当检测到clk 上升沿时开始计数,当cnt 计数到24_999_999时,clk_4跳变为1,LED 灯亮起,当cnt 计数49_999_999时,clk_4置0,LED 灯熄灭。 4、给LED 赋初值4’b0001,第一盏灯亮。 5、利用位拼接,实现循环。 (三)设计框图

FPGA clk cnt LED LED 图2 设计基本框图 (四)位拼接的用法 若输入a=4'b1010,b=3'b101,c=4'b0101,想要使输出d=5'b10001 用位拼接,符号“{ }”:d<={b[2:1],c[1],a[2:1]} 即把b 的低1~2位10,c 的低1位0,a 的低1~2位01拼接起来,得到10 0 01。 流水灯 4'b0001 4'b0010 4'b0100 4'b1000 相当于把低三位左移,并最高位放在最低位。 用位拼接可写为: led<={led[2:0], led[3]}; 低三位 最高位 六、 实验方法和步骤 (一)时钟分频 1、 编写分频程序。 2、 编写测试程序。 3、 进行仿真,波形如图3所示。 图3 分频仿真结果 (二)流水灯 1、编写分频程序。

Saber常见电路仿真实例

Saber常见电路仿真实例 一稳压管电路仿真 (2) 二带输出钳位功能的运算放大器 (3) 三5V/2A的线性稳压源仿真 (4) 四方波发生器的仿真 (7) 五整流电路的仿真 (10) 六数字脉冲发生器电路的仿真 (11) 七分频移相电路的仿真 (16) 八梯形波发生器电路的仿真 (17) 九三角波发生器电路的仿真 (18) 十正弦波发生器电路的仿真 (20) 十一锁相环电路的仿真 (21)

一稳压管电路仿真 稳压管在电路设计当中经常会用到,通常在需要控制电路的最大输入、输出或者在需要提供精度不高的电压参考的时候都会使用。下面就介绍一个简单例子,仿真电路如下图所示: 在分析稳压管电路时,可以用TR分析,也可以用DT分析。从分析稳压电路特性的角度看,DT分析更为直观,它可以直接得到稳压电路输出与输入之间的关系。因此对上面的电路执行DT分析,扫描输入电压从9V到15V,步长为0.1V,分析结果如下图所示: 从图中可以看到,输入电压在9~15V变化,输出基本稳定在6V。需要注意的是,由于Saber仿真软件中的电源都是理想电源,其输出阻抗为零,因此不能直接将电源和稳压管相连接,如果直接连接,稳压管将无法发挥作用,因为理想电源能够输

出足以超出稳压管工作范围的电流。 二带输出钳位功能的运算放大器 运算放大器在电路设计中很常用,在Saber软件中提供了8个运放模板和大量的运放器件模型,因此利用Saber软件可以很方便的完成各种运方电路的仿真验证工作.如下图所示的由lm258构成的反向放大器电路,其放大倍数是5,稳压二极管1N5233用于钳位输出电压. 对该电路执行的DT分析,扫描输入电压从-2V->2V,步长为0.1V,仿真结果如下图所示:

verilog课程设计—交通灯1

课程设计 课程名称__EDA技术综合设计与实践__ 题目名称交通灯控制系统 学生学院信息工程学院 专业班级通信工程08(4) 学号 3108002925 学生姓名高高 指导教师李学易 2011 年12 月26 日

基于FPGA 的交通灯控制器的设计 摘要:Verilog 是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD 结构,成为设计专用集成电路和其他集成电路的主流。现代城市在日常运行控制中,越来越多的使用红绿灯对交通进行指挥和管理。而一套完整的交通灯控制系统通常要实现自动控制和手动控制去实现其红绿灯的转换。 基于FPGA 设计的交通灯控制系统电路简单、可靠性好。本设计利用Verilog HDL 语言、采用层次化混合输入方式,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。在QUARTUSⅡ下对系统进行了综合与仿真。仿真结果表明系统可实现十字路口红绿灯及左转弯控制和倒计时显示,并能够自动控制交通灯转变。通过应用Verilog HDL 对交通灯控制器的设计,达到对Verilog HDL 的理解 关键词:FPGA;交通灯自动控制;V erilog HDL;Quartus Ⅱ 1.交通信号控制器设计要求与思路 1.1设计要求 在交通灯系统中(图1),路口1、2、3、4均需要红、黄、绿、左转四盏灯(用RYGL分别表示) ,并且每个路口都需要一个倒数的计时器,假设绿灯每次维持的时间是40 s ,黄灯为5 s ,左转灯10s,红灯60s,黄灯亮时以一定的频率闪动。交通灯系统大多是自动控制来指挥交通的,但有时需要由交警手动控制红绿灯,所以要求设 计的该交通信号系统需要具有该功能。 实现设计目标如下: (1)设计一个十字路口的交通灯控制电路,每条路配有红、黄、绿交通信号灯,通过电路对十字路口的两组交通灯的状态实现自动循环控制; (2)实现东西车道和南北车道上的车辆交替运行,绿灯每次维持的时间是40 s ,黄灯为5 s ,左转灯10s,红灯60s; (3)要求黄灯亮5 秒后,红灯才能转为绿灯,黄灯亮时以一定的频率闪动; (4)东西车道和南北车道每次通行的时间不同且可调; 图1 交通灯系统示意图

LED灯移位显示,ise开发环境Verilog编程流水灯

DDPP课程设计 八位LED可控移位显示设计与实现 本设计基于Xilinx ISE Design Suite 13.2软件开发平台和其综合工具进行八位LED可控移位显示数字电路的功能设计,在FPGA BSSYS2开发板上来完成设计的测试和实现。 I、总体RTL SCHEMATIC 端口说明: CLK_IN:50MHZ时钟输入 C:控制左右移,0为 LED[0]-LED[7],1反之。 S:选择移动频率,共四档。 RST:重置 LED:点亮LED灯 II、源程序 module led_shiftingdisplay(LED,CLK_IN,RST,S,C); input CLK_IN,RST,C; input [1:0] S; output [7:0] LED; reg [25:0] cn; reg CLK; reg [7:0] LED; wire CLK_OUT;

wire CLK2_OUT; wire CLK3_OUT; wire CLK4_OUT; initial begin cn=0; end always @(posedge CLK_IN) begin if(cn==49999999) begin cn<=0; end else cn<=cn+26'd1; end assign CLK_OUT=cn[25]; //1HZ assign CLK2_OUT=cn[24]; //2HZ assign CLK3_OUT=cn[21]; //16HZ assign CLK4_OUT=cn[20]; //32HZ always @(S,CLK_OUT,CLK2_OUT,CLK3_OUT,CLK4_OUT) begin case(S) 2'd0:CLK<=CLK_OUT; 2'd1:CLK<=CLK2_OUT; 2'd2:CLK<=CLK3_OUT; 2'd3:CLK<=CLK4_OUT; endcase end initial begin LED=8'b00000000;end always @(posedge CLK) begin if(C) //C==1,left shifting if(RST) LED<=8'b00000001; else if(LED==8'b00000000) LED<=8'b00000001; else LED<=LED<<1; else //C==1,right shifting if(RST) LED<=8'b10000000; else if(LED==8'b00000000) LED<=8'b10000000; else LED<=LED>>1; end endmodule

个人总结FPGA设计中Verilog编程的27条经验

个人总结Verilog编程27条经验 1.强烈建议用同步设计; 2.在设计时总是记住时序问题; 3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿 或下降沿触发等问题,在所有模块中都要遵守它; 4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合 适,当在3层以上时,最好修改写法,因为这样不仅可以reduce area,而且可以获得好的timing); 5.在锁存一个信号或总线时要小心,对于整个design,尽量避免使用latch, 因为在DFT时很难test; 6.确信所有的信号被复位,在DFT时,所有的FlipFlop都是controllable; 7.永远不要再写入之前读取任何内部存储器(如SRAM); 8.从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时 钟FIFO(是异步的),可以用Async SRAM搭建Async FIFO; 9.在VHDL中二维数组可以使用,它是非常有用的。在VERILOG中他仅仅可以使 用在测试模块中,不能被综合; 10.遵守register-in register-out规则; 11.像synopsys的DC的综合工具是非常稳定的,任何bugs都不会从综合工具中 产生 12.确保FPGA版本与ASIC的版本尽可能的相似,特别是SRAM类型,若版本一致 是最理想的,但是在工作中FPGA版本一般用FPGA自带的SRAM,ASIC版本一般用厂商提供的SRAM; 13.在嵌入式存储器中使用BIST; 14.虚单元和一些修正电路是必需的; 15.一些简单的测试电路也是需要的,经常在一个芯片中有许多测试模块; 16.除非低功耗不要用门控时钟,强烈建议不要在design中使用gate clock; 17.不要依靠脚本来保证设计。但是在脚本中的一些好的约束能够起到更好的性 能(例如前向加法器); 18.如果时间充裕,通过时钟做一个多锁存器来取代用MUX; 19.不要用内部tri-state, ASIC需要总线保持器来处理内部tri-state,如IO cell; 20.在top level中作pad insertion; 21.选择pad时要小心(如上拉能力,施密特触发器,5伏耐压等),选择合适的 IO cell; 22.小心由时钟偏差引起的问题; 23.不要试着产生半周期信号; 24.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数; 25.在一个计算等式中排列每个信号的位数是一个好习惯,即使综合工具能做; 26.不要使用HDL提供的除法器; 27.削减不必要的时钟。它会在设计和布局中引起很多麻烦,大多数FPGA有1- 4个专门的时钟通道;

基于VerilogHDL的交通灯控制器设计

目录 第一章设计原理 (1) 1.1设计要求 (1) 1.2设计思路和原理 (1) 1.3实现方法 (1) 第二章Verilog 程序设计 (2) 2.1整体设计 (2) 2.2 具体设计 (3) 第三章仿真 (7) 3.1 波形仿真 (7) 第四章设计总结 (9) 4.1 总结 (9) 4.2参考资料 (9) 程序清单 (10)

交通灯控制器设计 第一章 设计原理 1.1设计要求 设计一个交通控制器,用LED 显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数 主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s ,支干道每次放行25s 。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s 。能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED 灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。 1.2设计思路和原理 本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。循环往复的直行这个过程。其过程如下图所示: 0s 30s 25s 主干道方向 支干道方向 图1.交通灯点亮时间控制说明 1.3实现方法 本次采用文本编辑法,即利用Verilog 语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

VerilogHDL流水灯设计

VerilogHDL流水灯设计

大规模数字逻辑题目:流水灯控制 专业电子信息科学与技术 班级 学号 学生姓名 设计时间 教师评分 2013年12 月10 日

目录 一、概述 0 二、设计目的 0 三、设计内容 0 四、设计原理图 0 五、引脚分配情况 (1) 六、源程序代码 (1) VerilogHDL 程序: (1) 分频器部分: (11) 七、心得体会 (12) 八、参考文献 (13)

一、概述 流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。 二、设计目的 1、熟悉利用Quartus II 开发数字电路的基本流程和Quartus II 软件的相关操作。 2、掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS 进行下载等基本操作。 3、了解VerilogHDL 语言设计或原理图设计方法。 4、通过本此设计,了解流水灯的工作原理,掌握其逻辑功能及设计方法。 三、设计内容 1、用VerilogHDL语言设计一个流水灯,输入0的时候led~led7,1Hz正向流水3次,然后全亮;然后2Hz逆向流水5次全亮;循环。输入1的时候led0~led7,0.5Hz奇数流水2次,全亮,1Hz偶数流水4次,全亮,然后循环。 2、用QuartusII 软件进行编译,仿真,下载到实验平台进行验证。 四、设计原理图

en为可调输入,输出为8位数据,为流水灯实验,试用8个LED指示灯来表示,具体引脚分配见下。 五、引脚分配情况 六、源程序代码 VerilogHDL 程序: module LED( clk,led,en ); input clk; input en; output [7:0]led;// 输出端口定义为寄存器型 reg [7:0] led; reg [8:0] state1;

Verilog的135个经典设计实例

【例3.1】4位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例3.2】4位计数器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule 【例3.3】4位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //测试模块的名字 reg[3:0] a,b; //测试输入信号定义为reg型 reg cin; wire[3:0] sum; //测试输出信号定义为wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定a的取值 end - 1 -

initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定b的取值 end initial//定义结果显示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例3.4】4位计数器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,reset; //测试输入信号定义为reg型 wire[3:0] out; //测试输出信号定义为wire型 parameter DELY=100; count4 mycount(out,reset,clk); //调用测试对象 always #(DELY/2) clk = ~clk; //产生时钟波形 initial begin//激励信号定义 clk =0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; end //定义结果显示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例3.5】“与-或-非”门电路 module AOI(A,B,C,D,F); //模块名为AOI(端口列表A,B,C,D,F) input A,B,C,D; //模块的输入端口为A,B,C,D output F; //模块的输出端口为F - 2 -

相关文档
最新文档