Verilog作业

合集下载

Verilog_HDL教程

Verilog_HDL教程
主要能力: 下面列出的是 Verilog 硬件描述语言的主要能力: * 基本逻辑门,例如 and、or 和 nand 等都内置在语言中。 * 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以 是时序逻辑原语。 * 开关级基本结构模型,例如 pmos 和 nmos 等也被内置在语言中。 * 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。
习题
1. Verilog HDL 是在哪一年首次被 IEEE 标准化的? 2. Verilog HDL 支持哪三种基本描述方式? 3. 可以使用 Verilog HDL 描述一个设计的时序吗? 4. 语言中的什么特性能够用于描述参数化设计? 5. 能够使用 Verilog HDL 编写测试验证程序吗? 6. Verilog HDL 是由哪个公司最先开发的? 7. Verilog HDL 中的两类主要数据类型什么? 8. UDP 代表什么? 9. 写出两个开关级基本门的名称。 10. 写出两个基本逻辑门的名称。
2.3 数据流描述方式
用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋 值语句中,某个值指派给线网变量。 连续赋值语句的语法为:
assign [delay] LHS_net = RHS_ expression;
右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后 变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表 达式之间的持续时间。如果没有定义时延值, 缺省时延为 0。 下面的例子显示了使用数据流描述方式对 2-4 解码器电路的建模的实例模型。
module HalfAdder (A, B, Sum, Carry); input A, B; output Sum, Carry;

Verilog_HDL复杂数字系统设计-2_[1]...

Verilog_HDL复杂数字系统设计-2_[1]...

2013-8-4
南通大学电子信息学院
7
1.3复杂数字系统的设计方法
1.3.1 复杂数字逻辑系统
• 嵌入式微处理机系统
• 数字信号处理系统 • 高速并行计算逻辑
• 高速通信协议电路
• 高速编码/解码、加密/解密电路 • 复杂的多功能智能接口
• 门逻辑总数超过几万门达到几百甚至达几千万门的数
字系统
2013-8-4 南通大学电子信息学院 8
1990 Verilog HDL 公开发表
1995 Verilog IEEE1364 标准公开发表
1990有关Verilog HDL的 全部权利都移交给OVI(Open Verilog International)组织
2013-8-4 南通大学电子信息学院 6
1.2.3 Verilog HDL的优点
2013-8-4
南通大学电子信息学院
24
例2-2b 4选1多路选择器
module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3; input s1, s0; wire s1n, s0n; wire y0, y1, y2, y3; not not0(s1n, s1); not not1(s0n, s0); and and0(y0, i0, s1n, s0n); and and1(y1, i1, s1n, s0); and and2(y2, i2, s1, s0n); and and3(y3, i3, s1, s0); or or0(out, y0, y1, y2, y3); endmodule
2013-8-4 南通大学电子信息学院 3

第5章组合逻辑、时序逻辑Verilog语言描述(已排)

第5章组合逻辑、时序逻辑Verilog语言描述(已排)
3
5.1.1 组合逻辑电路的连续赋值实现
以2路选择器为例:
module mux2to1( a, b, sel, out); input a, b; input sel; output out; assign out = (sel) ? b:a;
endmodule
注意:
连续赋值语句的被赋值变量只能是线网wire型。
注意: 过程块描述的组合逻辑电路: 1. 被赋值变量只能是reg型; 2. 触发方式采用电平触发; 3. always@( )引导的敏感量要完整。
5
always过程块与连续赋值语句描述的组合逻辑电路效果相同 两种方法描述的2路选择器电路均相同, 综合工具根据Verilog代码综合自动生成的电路均为下图所示
4
5.1.2 组合逻辑电路的always过程块实现
仍然以2路选择器为例: module mux2to1( a, b, sel, out);
input a, b; input sel; output out; reg out; always @(sel or a or b)
out = (sel) ? b:a; endmodule
endmodule
13
对应的CMOS工艺下D触发器的电路结构
. d
q
. . . clk
rst clk
d
T1
clk
q
T3
rst
clk clk
clk clk
T2
T4
.q
D触发器符号

clk
clk
D触发器电路图
说明:复位信号不受时钟信号clk的影响。 只要复位信号rst为高电平时,电路就复位,输出q为0。
14

Verilg硬件描述语言及应用

Verilg硬件描述语言及应用

input in,enable; output out; assign out = enable? in:’bz; endmodule
硬件描述语言及应用
第二章、 Verilog语法的基本概念
2.2 Verilg用于模块的测试
见动画。
硬件描述语言及应用
硬件描述语言及应用
第一章、 Verilog的基本知识
1.4、 Verilog应用情况和适用的设计 • Verilog适用于系统级、算法级、寄存器传输级、门级、 电路开关级设计。器件级除外。 • ASIC 和FPGA设计师可用它来编写可综合的代码。 • 描述系统的结构,做高层次的仿真。 • 验证工程师编写各种层次的测试模块对具体电路设计工 程师所设计的模块进行全面细致的验证。 • 库模型的设计:可以用于描述ASIC 和FPGA的基本单 元(Cell)部件,也可以描述复杂的宏单元(Macro Cell)。
a b sl out
硬件描述语言及应用
第二章、 Verilog语法的基本概念 2.1、Verilog模块的基本概念
1)数据流建模。 采用连续赋值语句,模拟数据流动的现象叫数据流建模。
硬件描述语言及应用
第二章、 Verilog语法的基本概念
数据流建模
module muxtwo (out, a, b, sl); input a,b,sl; output out; assign ns1= ~sl; assign sela= a & nsl; assign selb= b & sl; assign out = sela | selb; endmodule
硬件描述语言及应用
Verilog HDL 公开发表 Verilog IEEE1364-2001

Verilog HDL入门

Verilog HDL入门

线网型:wire,tri
wor,trior,wand,triand,trireg,tri1,tri0 supply0,supply1
寄存器型:
reg integer,time real,realtime
wire和tri
用于连接单元的连线是最常见的线网类型。 默认值为z。 wire与tri语法和语义一致; 三态线可以用于描述多个驱动源驱动同一根线 的线网类型;并且没有其他特殊的意义。 通常都用wire。 其他线网型用于底层设计与仿真,FPGA设计通 常不会涉及。
简单的Verilog程序
该程序例子通过另一种方法描述了一个三态 门。 在这个例子中存在着两个模块:模块trist1 在这个例子中存在着两个模块:模块trist1 tri_inst。 调用模块 mytri 的实例元件 tri_inst。 是上层模块。 模块 trist1 是上层模块。模块 mytri 则被 称为子模块。 称为子模块。 通过这种结构性模块构造可构成特大型模块 。
例:always @(b or c) always a=b&c;
元件(实)例化
例:and and1(a,b,c); BUFG BUFG_inst ( .O(out), // Clock buffer output .I(in) // Clock buffer input );
注意
三种方式可以在同一个模块之内混合使用 ; 同一个模块内可以有多个always块,多个 assign和多个元件例化。 所有这些单元是并行执行的。 这些单元的书写顺序不影响逻辑功能;
128状态值集合:包含强度信息
其他值集合
整数(32bits) 实数 字符串 时间(64bits) 布尔值(0,1) ……
提纲

校园智能打铃系统的设计

校园智能打铃系统的设计

smg_data[3]=8'h0d;
smg_data[4]=8'h99;
smg_data[5]=8'h49;
smg_data[6]=8'h41;
smg_data[7]=8'h1f;
smg_data[8]=8'h01;
smg_data[9]=8'h09;
end
reg [15:0] count_1ms; //1ms计时 always@(posedge clk or negedge reset) begin if(!reset) count_1ms<=0; else if(is_en&&count_1ms==t1ms) count_1ms<=0; else if(is_en) count_1ms<=count_1ms+1'b1; else if(!is_en) count_1ms<=0; end
四、确定输入和输出变量
• 输入变量 clk ,reset ,is_en
输出变量 ring ,smg_out,smg_en
五、确定输入状态
• 程序开始时内部计时显示在共阳数码管上,
• 初始状态 : 8点开始计时打铃。

打铃下课

午休

17点20放学电源关闭
七、输入和输出变量对应部件说明
输入变量:
always@(posedge clk_qian or negedge reset)
begin
if(!reset)
qian<=0;
else
if(qian==1'b1)
begin
qian<=0; end

西南交通大学.电子设计自动化.课程设计报告.寻迹小车

2016-2017学年电子设计自动化[作业1]小车四个轮子的驱动电机为四个4.5V的直流电机,请以FPGA为控制芯片,以L298为驱动芯片,设计并搭建小车的控制及驱动电路,并用Verilog HDL 编写电机的驱动控制程序,实现对小车左转、右转、直行、后退等行进方向和行进速度的控制。

要求设置若干开关,分别用于控制小车的左转、右转、直行、后退、停止及速度。

课程:电子设计自动化教师:怡学号:2014*6:********一、任务要求小车四个轮子的驱动电机为四个4.5V的直流电机,请以FPGA为控制芯片,以L298为驱动芯片,设计并搭建小车的控制及驱动电路,并用Verilog HDL编写电机的驱动及控制程序,实现对小车左转、右转、直行、后退等行进方向和行进速度的控制。

要求设置若干开关,分别用于控制小车的左转、右转、直行、后退、停止及速度。

二、实现方案主要方案:以FPGA为控制芯片,以L298为驱动芯片。

使用ANVYL FPGA开发板作为主控板L298N驱动芯片驱动电路:使能引脚可用于输入PWM脉宽调制信号对电机进行调速控制。

如果无须调速可将两引脚接5V,使电机工作在最高速状态。

输入信号端IN1接高电平输入端IN2接低电平,电机M1正转;反之,电机M1反转。

M2同理。

EN A、EN B通过输入PWM波以控制M1、M2调速。

采用两片L298N控制4个电机,两只前置电机用同一片,控制芯片部分采用FPGA开发板编写,主要按键有:前(↑)、后(↓)、左(←)、右(→)、停止(S)、半速(1/2)、全速(1)。

片1:控制前面两只轮子,A为左片2:控制后面两只轮子,A为左左转:左前轮停止,其余正常右转:右前轮停止,其余正常停止:片1片2使能为零半速(1/2):片1片2使能为pwm调制波,占空比50%全速(1):片1片2使能为pwm调制波,占空比100%FPGA部分设计控制器部分:三、硬件连接图前轮部分四、Verilog程序设计控制器程序设计:PWM控制设计:五、仿真结果PWM档位控制方向控制六、参考资料L298中文资料+PWM调速_不二的第九只兔子_新浪博客/s/blog_852d92f80101fsxp.html数字电子技术实验教程.西南交通大学数字电子技术.华中科技大学。

FPGAverilog课程设计报告

FPGA verilog课程设计报告一、教学目标本课程旨在通过FPGA Verilog的学习,让学生掌握数字电路设计的基本原理和方法,学会使用Verilog硬件描述语言进行数字电路设计和仿真。

具体目标如下:1.理解FPGA的基本原理和结构。

2.掌握Verilog语言的基本语法和编程技巧。

3.熟悉数字电路的设计方法和流程。

4.能够使用Verilog语言编写简单的数字电路模块。

5.能够进行FPGA的配置和编程。

6.能够使用FPGA开发工具进行数字电路的仿真和测试。

情感态度价值观目标:1.培养学生的创新意识和团队合作精神。

2.增强学生对新技术的敏感性和学习兴趣。

3.培养学生对工程实践的热爱和责任感。

二、教学内容本课程的教学内容主要包括FPGA的基本原理和结构、Verilog语言的基本语法和编程技巧、数字电路的设计方法和流程。

具体安排如下:第1-2课时:FPGA的基本原理和结构1.FPGA的定义和发展历程。

2.FPGA的内部结构和组成。

3.FPGA的配置和编程方法。

第3-4课时:Verilog语言的基本语法和编程技巧1.Verilog语言的基本数据类型和操作符。

2.Verilog语言的逻辑表达式和语句。

3.Verilog语言的模块结构和参数传递。

第5-6课时:数字电路的设计方法和流程1.数字电路的设计原则和技巧。

2.数字电路的设计流程和步骤。

3.数字电路的仿真和测试方法。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:通过讲解和演示,让学生掌握FPGA和Verilog的基本知识和技巧。

2.案例分析法:通过分析具体的数字电路设计案例,让学生熟悉设计方法和流程。

3.实验法:通过动手实验,让学生亲手配置FPGA、编写Verilog代码并进行仿真测试,提高学生的实际操作能力。

四、教学资源1.教材:《FPGA Verilog设计与实践》。

2.参考书:《数字电路与FPGA设计入门》、《Verilog HDL入门与提高》。

verilog(1)


Z or z
High Impedance
0、1代表常见的布尔状态或者电平的状态 X常用于仿真中表示发生冲突或者错误,也可用于表示“don’t care” Z代表电路中的高阻状态 0、1、Z状态存在于真实的电路当中
9
常量
整数型:
8’b0100_1011
实数:1.34,1.3e2(130) 字符串:“FourValue”
基于名字
7
语法规范与注释
标志符由数字、字母、符号($)和下划线构成,但
是必须以字母或者下划线作为首字符 标志符区分大小写 语句遵循自由格式,可以每一条语句占用一行或者 多条语句共用一行 基本语句以“;”结束 注释有两种形式“//”和“/* */”
//单行注释 /* 多行注释 可以单行也可以跨行 */
有关Verilog的 全部权利都移交 OVI Cadence购买 Verilog版权 Verilog XL 诞生 1980 s
,
1990
Verilog IEEE1364-2001 标准发布
1987 1989 Synopsys公 司支持 Verilog输入
4
Verilog is a HDL
软件编程语言最终被转换为机器指令,可以在一台
– ABEL、ISPS、VHDL、Verilog、SystemC、SystemVerilog ……
3
Verilog语言的发展历史
“Verilog”= “Verification” + “Logic”
Verilog IEEE1364-2005 标准发布 使用模拟和数字 的Verilog 标准 发布 1995 1999 Verilog IEEE1364-1995 标准发布 Verilog HDL 公开发表 2001 2005 并入 SystemVerilog 标准IEEE 1800 2009

verilog fork join用法

verilog fork join用法Verilog中的fork-join语句是一种并发控制结构,它允许多个任务同时执行。

在fork-join语句中,任务被分成多个分支,每个分支都是一个独立的任务,它们可以同时执行,而不需要等待其他分支的完成。

当所有分支都完成时,程序将继续执行下一个语句。

fork-join语句的语法如下:fork// 分支1begin// 任务1end// 分支2begin// 任务2end// 分支3begin// 任务3endjoin在fork-join语句中,fork关键字表示开始一个并发块,join关键字表示结束并发块。

在fork和join之间的代码块是多个任务的集合,每个任务都是一个独立的代码块。

当fork-join语句执行时,每个任务都将在一个独立的线程中执行,这些线程可以同时执行,而不需要等待其他线程的完成。

使用fork-join语句可以提高程序的并发性和执行效率。

例如,在一个大型的设计中,可能需要同时执行多个任务,如数据传输、状态机控制等。

使用fork-join语句可以将这些任务分成多个分支,每个分支都可以在独立的线程中执行,从而提高程序的并发性和执行效率。

除了fork-join语句外,Verilog还提供了其他的并发控制结构,如begin-end块、if-else语句、case语句等。

这些结构可以用于控制程序的执行顺序和并发性,从而实现复杂的设计。

总之,fork-join语句是Verilog中一种重要的并发控制结构,它可以提高程序的并发性和执行效率。

在设计复杂的电路时,可以使用fork-join语句将任务分成多个分支,从而实现并发执行。

同时,还需要注意合理使用其他的并发控制结构,以实现更加复杂的设计。

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

Verilog作业1、8位加法器源代码adder.vmodule adder8(ina,inb,cin,cout,sum);input[7:0]ina,inb;input cin;output[7:0]sum;output cout;assign{cout,sum}=ina+inb+cin;endmodule测试代码adder_tp.v`timescale1ns/1ns`include"adder.v"module adder_tp;reg[7:0]a,b;reg cin;wire[7:0]sum;wire cout;adder8adder(a,b,cin,cout,sum);always#5cin=~cin;initialbegina=0;b=0;cin=0;repeat(100)#10a={$random}%256;//a is a random number between0and255 endinitialbegin#10b={$random}%256;//b is a random number between0and255 endinitialbegin$monitor($time,,,"%d+%d+%b={%b+%d}",a,b,cin,cout,sum);#1000$finish;endendmodule2、8位计数器源代码count.vmodule count8(reset,clk,out);input reset;input clk;output[7:0]out;reg[7:0]out;always@(posedge clk)beginif(reset)out<=0;else out<=out+1;endendmodule测试代码count_tp.v`timescale1ns/1ns`include"count.v"module count_tp;reg clk,reset;wire[7:0]out;parameter DELY=100;count8counter(reset,clk,out);always#(DELY/2)clk=~clk;initialbeginreset=0;clk=0;#DELY reset=1;#DELY reset=0;#(DELY*200)$finish;endinitial$monitor($time,,,"clk=%d reset=%d out=%d",clk,reset,out); endmodule3、4位移位寄存器源代码shifter.v//4Bit shift Registermodule shifter(din,clk,rst,out);input din;input rst;input clk;output[3:0]out;reg[3:0]out;always@(posedge clk)beginif(rst)out<=4'b0;elsebeginout<=out<<1;out[0]<=din;endendendmodule测试代码shifter_tp.vtimescale1ns/1ns`include"shifter.v"module shifter_tp;reg din,clk,rst;wire[3:0]out;parameter DELY=10;shifter myshift(din,clk,rst,out); always#(DELY/2)clk=~clk; initialbeginclk=0;//initializationrst=0;din=0;#DELY rst=1;#(DELY*2)rst=0;//reset#DELY din=1;//input data#DELY din=0;#DELY din=1;#DELY din=1;#DELY$finish;//finish simulationendinitial$monitor($time,,,"clk=%d rst=%d din=%d out=%b",clk,rst,din,out); endmodule5、7人投票表决器源代码voter.vmodule voter(vote,result);input[6:0]vote;output result;reg result;reg[2:0]sum;integer i;always@(vote)beginsum=0;for(i=0;i<7;i=i+1)if(vote[i])sum=sum+1;if(sum[2])result=1;else result=0;endendmodule测试代码voter_tp.v`timescale1us/1us`include"voter.v"module voter_tp;parameter DELY=100;reg[6:0]vote;wire result;voter myvoter(vote,result);initialbeginvote=0;#DELY vote=7'b0111011;#DELY vote=7'b0101000;#DELY vote=7'b1011111;#DELY$finish;endinitial$monitor($time,,,"vote=%d result is%b",vote,result); endmodule6、32位整数循环1)for语句实现源代码int_loop_for.v`timescale1us/1usmodule int_loop_for(num);input[31:0]num;reg[31:0]temp;reg lsb;integer i;parameter DELY=10;always@(num)begintemp=num;for(i=0;i<32;i=i+1)begin#DELY$display("num=%b i=%d",temp,i);lsb=temp[0];temp=temp>>1;temp[31]=lsb;endendendmodule测试代码Int_loop_tp.v`timescale1us/1us`include"int_loop_for.v"module int_loop_tp;reg[31:0]num;parameter DELY=10;int_loop_for my_int_loop(num);initialbeginnum=32'ha5363a2d;//32-bit integer 10100101001101100011101000101101#(DELY*33)$finish;endendmodule2)repeat语句实现源代码int_loop_repeat.v`timescale1us/1usmodule int_loop_repeat(num);input[31:0]num;reg[31:0]temp;reg lsb;parameter DELY=10;always@(num)begintemp=num;repeat(32)begin#DELY$display("num=%b",temp);lsb=temp[0];temp=temp>>1;temp[31]=lsb;endendendmodule测试代码int_loop_tp.v`timescale1us/1us`include"int_loop_repeat.v"module int_loop_tp;reg[31:0]num;parameter DELY=10;int_loop_repeat my_int_loop(num);initialbeginnum=32'ha5363a2d;//32-bit integer 10100101001101100011101000101101#(DELY*33)$finish;endendmodule3)while语句实现源代码int_loop_while.v`timescale1us/1usmodule int_loop_while(num);input[31:0]num;reg[31:0]temp;reg lsb;integer i;parameter DELY=10;always@(num)begintemp=num;i=32;while(i)begin#DELY$display("num=%b",temp);lsb=temp[0];temp=temp>>1;temp[31]=lsb;i=i-1;endendendmodule测试代码int_loop_tp.v`timescale1us/1us`include"int_loop_while.v"module int_loop_tp;reg[31:0]num;parameter DELY=10;int_loop_while my_int_loop(num);initialbeginnum=32'ha5363a2d;//32-bit integer 10100101001101100011101000101101#(DELY*33)$finish;endendmodule7、空调机状态图源代码air_condition.vmodule air_condition(clk,rst,temp_high,temp_low,cool,heat); input clk,rst,temp_high,temp_low;output cool,heat;reg cool,heat;parameter right=3'h1;//one-hot codeparameter too_hot=3'h2;parameter too_cold=3'h4;reg[2:0]state;always@(posedge clk)beginif(!rst)beginstate<=right;heat<=0;cool<=0;endcase(state)right:beginif(temp_high&&!temp_low)state<=too_hot;else if(!temp_high&&temp_low)state<=too_cold;else state<=right;endtoo_hot:beginif(temp_high&&!temp_low)state<=too_hot;else if(!temp_high&&temp_low)state<=too_cold;else state<=right;endtoo_cold:beginif(temp_high&&!temp_low)state<=too_hot;else if(!temp_high&&temp_low)state<=too_cold;else state<=right;enddefault:state<=right;endcaseendalways@(state)case(state)too_hot:begin cool<=1;heat<=0;endtoo_cold:begin cool<=0;heat<=1;endright:begin cool<=0;heat<=0;enddefault:begin cool<=0;heat<=0;endendcaseEndmodule测试代码air_conditon_tp.v//Herison`timescale1ns/1ns`include"air_condition.v"module air_condition_tp;reg rst,clk,temp_high,temp_low;wire heat,cool;parameter DELY=100;always#(DELY/2)clk=~clk;air_condition mytest(clk,rst,temp_high,temp_low,cool,heat); initialbeginrst=1;//initializationclk=0;temp_high=0;temp_low=0;#DELY rst=0;#DELY rst=1;//reset#DELY{temp_high,temp_low}=01;#DELY{temp_high,temp_low}=10;#DELY{temp_high,temp_low}=10;#DELY{temp_high,temp_low}=00;#DELY{temp_high,temp_low}=01;#DELY{temp_high,temp_low}=11;#DELY{temp_high,temp_low}=01;#DELY{temp_high,temp_low}=10;endinitialbegin$monitor($time,,,"temp_high=%d temp_low=%d heat=%d cool=%d",temp_high,temp_low,heat,cool);#(DELY*10)$finish;endendmodule8、交通灯状态图源代码traffic_light.v/*signal descriptionclk:system clockreset:reset portsensor:signal of sensorLAMPH:the lights signal of HighWay LAMPH[2]~LAMPH[0]:GREEN_H,RED_H,YELLOW_HLAMPC:the lights signal of CountyWay LAMPC[2]~LAMPC[0]:GREEN_C,RED_C,YELLOW_C*/module traffic_light(clk,reset,sensor,LAMPH,LAMPC);input clk,reset,sensor;output[2:0]LAMPH;output[2:0]LAMPC;reg[2:0]LAMPH;reg[2:0]LAMPC;reg[3:0]state;//record the stateparameter t_green_h=8'd36,//36st_red_h=8'd16,//16st_yellow=8'd4;//4sparameter s0=0,//h_Green c_Reds1=1,//h_Yellow c_reds2=2,//h_Red c_greens3=3;//h_Red c_yellow//the contol process of lightsalways@(posedge clk)beginif(!reset)//resetbeginLAMPH=3'b100;//Green lightLAMPC=3'b010;//Red lightstate=s0;endcase(state)s0:beginLAMPH=3'b100;//Green lightLAMPC=3'b010;//Red lightif(sensor)begin light(t_green_h);state=s1;endends1:beginLAMPH=3'b001;//Yellow lightLAMPC=3'b010;//Red lightstate=s2;light(t_yellow);ends2:beginLAMPH=3'b010;//Red lightLAMPC=3'b100;//Green lightstate=s3;light(t_red_h);ends3:beginLAMPH=3'b010;//Red lightLAMPC=3'b001;//Yellow lightstate=s0;light(t_yellow);endendcaseend//delay time tasktask light;input[7:0]t_color;beginrepeat(t_color)@(posedge clk);endendtaskEndmodule测试代码traffic_light_tp.v`timescale1us/1us`include"traffic_light.v"module traffic_light_tp;reg clk,reset,sensor;wire[2:0]LAMPH,LAMPC;parameter DELY=1000;//1s//generate the clk signalalways#(DELY/2)clk=~clk;traffic_light mylight(clk,reset,sensor,LAMPH,LAMPC);initialbeginclk=0;reset=1;sensor=0;#DELY reset=0;#(2*DELY)reset=1;#DELY sensor=1;#(DELY*100)sensor=0;#DELY$finish;endinitial$monitor($time,,,"clk=%d reset=%d sensor=%d LAMPH=%b LAMPC=%b", clk,reset,sensor,LAMPH,LAMPC);endmoduleBy Herison。

相关文档
最新文档