verilog

verilog里面&和|的用法??????????【verilog】|integrator[15:0]这个意思是按位或的意思,就是integrator[15] | integrator[14] | ..........integrator[1] | integrator[0]16个数或的结果 。然后再和integrator[31]与 。懂?

Verilog中 &&和&的区别前者是逻辑与
后面是与门运算(按位与)

5'b10000 && 5'b10001 结果为1
5'b10000 &b'b10001 结果为5'b10000

在verilog中#的用法# 是延迟的意思,井号后面数字是延迟的数量 , 延迟的单位由`timescale控制
比如有:`timescale 1ns/1ps 意思就是时间单位为1ns,精度是1ps
那么,#10.5 就是延迟10.5ns的意思
在同步时序数字逻辑电路的verilog代码中 , 不能加入“#”进行延迟,这不是代码编写阶段能决定的

verilog语言中assign怎么用

verilog

文章插图

assign相当于连线 , 一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用 , 比如把一个模块的输出给另一个模块当输入 。例如:wire A,B,SEL,L;//声明4个线型变量assign L=(A&~SEL)|(B&SEL);//连续赋值在assign语句中 , 左边变量的数据类型必须是wire型 。input和output如果不特别声明类型,默认是wire类型 。举例2选1的数据选择器:module mux2x1_df(A,B,SEL,L);input A,B,SEL;output L;assign L=SEL?A:B;endmodule扩展资料:注意事项assign的功能属于组合逻辑的范畴 , 应用范围可概括为以下三点:1、持续赋值;2、连线;3、对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量 。wire型变量的值随时变化 。其实以上三点是相通的 。要更好的把握assign的使用 , Verilog中有几个要点需要深入理解和掌握:1、在Verilog module中的所有过程块(如initial块和always块)、连续赋值语句(如assign语句)和实例引用都是并行的 。在同一module中这三者出现的先后顺序没有关系 。2、只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于module的功能定义部分 。3、连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句 。
verilog 中begin 和end 的详细用法
verilog

文章插图

1、首先,在项目上右键,点击New Source创建新的代码文件 。2、选择User Document创建自定义的文本文件,文件名和后缀随意 。3、创建好后,在下方切换到Files面板,双击打开该文件,按照自己喜欢的形式输入数据 。4、数据文件写好后,在项目上右键,点击New Source,接着选择Verilog Test Fixture,输入文件名并继续,选择待测模块,接着创建文件 。5、双击打开该文件,看到待测试模块输入对应了一些reg寄存器类型,输出部分对应了一些wire类型 。添加两个parameter常量 , 接着添加计数变量J用于for循环,添加一个向量数组用于存放文件读取的数据 。6、如图是程序自动生成的实例化和连接待测模块的代码,在下面的initial begin ... end之间编写测试代码就可以了 。
Verilog中&与&&的区别
verilog

文章插图

Verilog中&与&&的区别为:性质不同、计算结果不同、参数不同 。一、性质不同1、&:&是位运算符 , 表示是按位与 。2、&&:&&是逻辑运算符,表示是逻辑与 。二、计算结果不同1、&:&的计算结果为十进制数 。2、&&:&&的计算结果为true或false 。三、参数不同1、&:&的参数为进制数 , 可以是二进制、十进制、十六进制数,也可以是整数、负数 。2、&&:&&的参数为进制数,也可以是比较公式,将比较公式值作为最终的参数 。
verilog语言中~和!区别1.~ 按位取反 比如:11110 取反后卫00001
2.!逻辑取反,如!非0 为0 !0 为1

初学者请教Verilog.不同的module可以放在同一个.V文件里吗1.分开放,这是verilog coding style的一种良好习惯,每个文件里面只包含一个独立的module
2.把所有这些文件放在同一个目录下,在top文件里实例化这些module就可以调用了
3.top文件和新建一个module一样的,不过模块里主要是定义连线和实例化子模块,你随便找本verilog的教程就有啦:)
实例化是这样的,greycode是你的module名字,G1是实例化名字(可任意),后面括号里的东东需要跟你定义的端口顺序一致 。建议不要采用这种顺序绑定的形式,建议采用端口命名绑定方式
你可以先找本基本的verilog语法书看看,上手很快的

verilog语言中任务和函数的区别?任务和函数有助于简化程序,有点类似与Fortran语言的subroutine和function 。

任务和函数的共同点:

1.任务和函数必须在模块内定义,其作用范围仅适用于该模块 , 可以在模块内多次调用 。

2.任务和函数中可以声明局部变量 , 如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量 。

3.任务和函数中只能使用行为级语句 , 但是不能包含always和initial块 , 设计者可以在always和initial块中调用任务和函数 。

任务和函数的不同点:
函数任务
函数能调用另一个函数,但是不能调用任务任务可以调用另一个任务 , 也可以调用函数
函数总是在仿真时刻0开始任务可以在非零时刻开始执行
函数一定不能包含任何延迟,事件或者时序控制声明语句任务可以包含延迟 , 事件或者时序控制声明语句
函数至少要有一个输入变量,也可以有多个输入变量任务可以没有或者有多个输入,输出,输入输出变量
函数只能返回一个值,函数不能有输出或者双向变量任务不返回任何值 , 或者返回多个输出或双向变量值

由上述的特点决定:函数用于替代纯组合逻辑的verilog代码,而任务可以代替verilog的任何代码 。

8.2任务

任务使用关键字task和endtask来进行声明,如果子程序满足下面任何一个条件,则必须使用任务而不能使用函数 。

1.子程序中包含有延迟,时序或者事件控制结构

2.没有输出或者输出变量超过一个

3.没有输入变量

例:

module operation;
parameter delay=10;
reg [15:0] A,B, AB_AND,AB_OR,AB_XOR;
always @(A or B)
begin
bitwise_ope(AB_AND,AB_OR,AB_XOR,A,B);
end
taskbitwise_oper;
output [15:0] ab_and,ab_or,ab_xor;
input [15:0] a,b;
begin
#delay ab_and=a&b;
ab_or=a|b;
ab_xor=a^b;
end
endtask
always @(posedge clk)
bitwise_xor(ef_xor,e,f);
always @(posedege clk2)
bitwise_xor(cd_xor,c,d)
task autumatic bitwise_xor;
output ab_xor;
inputa,b;
begin
ab_xor=a^b;
end
endtask
endmodule

自动(可重入)任务:verilog任务中所有声明的变量地址空间都是静态分配的,因此如果在一个模块中多次调用任务时,可能会造成地址空间的冲突,为了避免这个问题,verilog通过在task关键字后面添加automatic使任务称为可重入的 , 这时在调用任务时,会自动给任务声明变量分配动态地址空间,这样有效避免了地址空间的冲突 。

8.3 函数

函数使用关键字function和endfunction定义,对于子程序,如果满足下述所有条件则可以用函数来完成:

1.在子程序中不含有延迟时序或者控制结构
2.子程序只有一个返回值
3.至少有一个输入变量
4.没有输出或者双向变量
5.不含有非阻塞赋值语句

例:

module parity;
reg [31:0] addr;
reg parity;
always @(addr)
begin
parity=calc_parity(addr);
end
function calc_parity;
input [31:0] addr;
begin
calc_parity=^addr;
end
endfunction
endmodule

跟任务调用一样,在模块中如果调用多次函数 , 也会碰到地址冲突的问题,因此也引入automatic关键字来对函数可重用性声明 。没有进行可重用性声明的函数不可以多次或者递归调用 , 进行了可重用性声明的函数可以递归调用 。

常量函数和带符号函数(函数声明时加signed关键字说明)

module ram;
parameter RAM_DEPTH=256;
input [clogb2(RAM_DEPTH)-1:0] addr;//clogb2函数返回值为8
function integer clogb2(input integer depth);
begin
for(clogb2=0; depth>0;clogb2=clogb2+1)
depth=depth>1;
end
endfunction
endmodule

练习:用两种不同的方法设计一个功能相同的模块,完成4个8位2进制输入数据的冒泡排序 。第一种,用纯组合逻辑实现;第二种,假设8位数据按照时钟节拍串行输入,要求时钟触发任务的执行,每个时钟周期完成一次数据交换的操作 。

//----------------- 第一种 ------------------

module sort4(ra,rb,rc,rd,a,b,c,d);

output[7:0] ra,rb,rc,rd;

input[7:0] a,b,c,d;

reg[7:0] ra,rb,rc,rd;

reg[7:0] va,vb,vc,vd;

always @ (a or b or c or d)

begin

{va,vb,vc,vd}={a,b,c,d};

change(va,vb);

change(vb,vc);

change(vc,vd);

change(va,vb);

change(vb,vc);

change(va,vb);

{ra,rb,rc,rd}={va,vb,vc,vd};

end

task change;//make a task of comparing

inout[7:0] x,y;

reg[7:0] tmp;

if(x>y)

begin

tmp=x;

x=y;

y=tmp;

end

endtask

endmodule

//----------------- 第二种 ------------------

module sort4(clk,reset,ra,rb,rc,rd,a);

output[7:0] ra,rb,rc,rd;

input[7:0] a;

input clk,reset;

reg[7:0] ra,rb,rc,rd;

reg[7:0] va,vb,vc,vd;

always @ (posedge clk)

begin

if(!reset)

begin

va<=0;vb<=0;vc<=0;vd<=0;

end

else

va<=a;

end

always @ (posedge clk)

begin

change(va,vb);

change(vb,vc);

change(vc,vd);

change(va,vb);

change(vb,vc);

change(va,vb);

{ra,rb,rc,rd}={va,vb,vc,vd};

end

task change;//make a task of comparing

inout[7:0] x,y;

reg[7:0] tmp;

if(x>y)

begin

tmp=x;

x=y;

y=tmp;

end

endtask

endmodule

verilog中这几种写法有区别吗?我觉得没什么区别啊 ,  写代码的时候遇到几个语法问题,在此向各位求助一下<=是非堵塞赋值,也就是一个块里的所有<=语句都是同时运行 。
第二个写法里,不管出现何种情况,cnt_2都会被赋值两次 。但这两次赋值是同时的 。你想,同时赋两个不同的值,这个电路怎么画?
也就是说,一个块里,一个变量在任何情况下都只能被<=赋值一次 。

因为你编的实际上是电路,不能用软件的思想去想问题 。

在Verilog语言中#是什么意思?前仿真用的,无法综合的 。
例如:#5
data_in
=
data_tmp;
就是延迟5个时间单位后,在进行复制 。
具体延迟多少,得看你的
timescale
`timescale
n/n
根据这个来看你具体延迟的时间

在Verilog语言中#是什么意思表示延时



刚开始学verilog,请问#号在verilog中都能表达什么意思?井号就是延迟的意思 , 无论在哪里,但是不能被综合,只对仿真的时候可以产生延时效果

Verilog中,#符号是什么意思#5的概念是延迟的意思 。但是是行为级描述 综合时将被过滤 。

一般#+数字的组合在仿真器中产生一定的延迟 。延迟结构如下~~

首先`timescale 1ns/100ps 这个是整个延迟的定义 。`timescale是关键字,然后后面的两位时间 第一位是用来表示你的延迟因子的 。第二位用来表示步进时间 。

举例:

`timescale 1ns/100ps
......

always(这里用forever亦可)
#10 clk=~clk;

那么也就是说,10个延迟因子时clk取反 。也就是说10纳秒时clk取反 。所以你就得到一个50Mhz的时钟 。
后面的100ps代表的意思是机器仿真的步进时间,当你写1ns/100ps时 。在屏幕上显示的1ns时间内 。机器做10次的运算 。
如果不能直观理解 。那么就尝试一下`timescale 1ns/1ps的区别 。你就知道了 。

千万注意的是:这个只能在仿真工具中运用 。综合成电路时 。你不要希望有这类延迟存在 。

在verilog中#的用法#
是延迟的意思,井号后面数字是延迟的数量 , 延迟的单位由`timescale控制
比如有:`timescale
1ns/1ps
意思就是时间单位为1ns,精度是1ps
那么 , #10.5
就是延迟10.5ns的意思
在同步时序数字逻辑电路的verilog代码中,不能加入“#”进行延迟,这不是代码编写阶段能决定的

"&"在Verilog中的含义一个“&”放在两个数据之间时,表示按位与,用于两个多位宽数据操作 。例如:
reg [31:0] a;
reg [31:0] b;
wire c;
assign c = a | b;
以上代码表示“a”与“b”先按位分别与,再把结果交给“c” 。
如果一个“&”放在一个操作数前面,则表示缩位与 。例如:
assign c = &a;
如果是“&&”放在两个数之间,则表示逻辑与 , 逻辑与操作只能是两个1位宽的数 。对于多位宽的数据进行逻辑与操作,则不能的编译器和综合器对其有不同的解释 , 所以应该避免这样用 。
两个“&&”不能放在一个数之前进行操作 。

verilog中的逻辑与(&&)在vhdl中怎么表示?都是and
1位和1位运算就是按位与
"00100"and"01001"出的结果就是按位与
vhdl这个没有分开

关于在if()里面用& 和&& | 和 ||的区别...你反了一个严重的错误~~~~~~&和|的值不是blooean的~~~~~~~~而是一个int .....
if()里只接受blooean型的结果 所以
if(a!=null&a.Length>0) {}

if(a!=null | a.Length==0) {}

这些都不能通过编译(如果是C语言的话可以通过编译......因为c语言了if括号的值可以是数组1为真0为假)..
其实你上边的例子我没有测试 不过可能会通过编译 因为有运算符的优先级不过如果这么写的话
if((a!=null )| (a.Length==0)) {}是肯定通不过编译的

verilog中@是什么意思?有什么用?看看英文意思就能明白、助记 。@读作at, 当...的时候 。always, 总是 , 一直 。
always @(posedge CLK), 意思是:当CLK信号上升沿的时候,总是(执行下述语句)

verilog里的位宽是什么概念?一、verilog位宽的概念:
verilog语法上不要求一致 赋值语句等号右端位宽大则截位 位宽少则补0(高位补零) 。位宽是显存在一个时钟周期内所能传送数据的位数,位数越大则瞬间所能传输的数据量越大,这是显存的重要参数之一 。

二、verilog的简单介绍:
Verilog是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能 。Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的 。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发 。两种HDL均为IEEE标准 。

verilog中%2t是什么意思?% 用在算数运算中是取模操作符a % b 按照a 和 b中的长度长的补齐 。两个参数都为有符号数结果为有符号数,否则为无符号数 。用在$display语句里面是转意操作符%b %B二进制%o %O八进制 %d %D十进制 %h %H十六进制 %e %E %f %F %g %G 实数 %c %C字符 %s %S字符串 %v %V二进制和强度%t %T时间 %m %M层次实例

在Verilog里边 always@(*)语句是什么意思?
verilog

文章插图

在Verilog中always@(*)语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行 。1、always语句有两种触发方式 。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量 , 当其中一个发生变化时,下方的语句将被执行 。2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被执行 。3、而对于always@(*),意思是以上两种触发方式都包含在内,任意一种发生变化都会触发该语句 。扩展资料:Verilog语言中的两种过程:always过程和initial过程 。过程可以是包含时序的过程描述,而不包含时序的过程还可以表达组合逻辑 。always过程从关键字always开始,可以连续多次运行,当过程的最后一行代码执行完成后,再次从第一行代码开始执行 。如果没有使用系统任务$finish,always过程将不断循环执行 。initial过程从关键字initial开始,它只能执行一次 。一个模块中可以包含多个过程,各个过程相互之间是并发执行的 。不过,过程不能够嵌套使用 。如果过程中有多个语句,则需要使用关键字begin、end或fork、join将它们组成一个代码块 。这两种关键字组合代表着顺序代码块和并行代码块,后面的部分会讲述这两种结构 。参考资料来源:百度百科-verilog
verilog中递归函数的例子中%0d是什么意思在%后面加一个“0”的作用是自动调整显示输出数据的宽度 。即输出结果总是用最少的位数来显示结果值 。

Verilog中“&&”和“&”的区别是什么?
verilog

文章插图

一、意思不同1、&&:代表逻辑与 。2、&:代表与门运算(按位与) 。二、计算方式不同1、&&:5'b10000 && 5'b10001 结果为1 。2、&:5'b10000 & b'b10001 结果为5'b10000 。扩展资料Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言 , C语言在Verilog设计之初,已经在许多领域得到广泛应用,C语言的许多语言要素已经被许多人习惯 。一种与C语言相似的硬件描述语言,可以让电路设计人员更容易学习和接受 。不过 , Verilog与C语言还是存在许多差别 。另外 , 作为一种与普通计算机编程语言不同的硬件描述语言 , 它还具有一些独特的语言要素 , 例如向量形式的线网和寄存器、过程中的非阻塞赋值等 。总的来说,具备C语言的设计人员将能够很快掌握Verilog硬件描述语言 。参考资料来源:百度百科-Verilog
verilog中$符号是什么意思?$是一种标识符 , 可以用来命名变量,就和 下划线 _ 似的 , 只是不能放在首位,就如你给的代码所示 。也可以被用来标识系统任务 , 在系统任务名称前加$使之与用户定义的任务和函数相区分,比如常用的$display,$monitor , $time等

verilog中的^表示什么意思??表示什么都可以,例如:5'b00???表示匹配的值高三位一定要是两个0,而低三位则可以是任意值,包括0、1、Z等

verilog中@ (*)是什么意思@*和@(*):它们都表示对其后语句块中的所有输入变量的变化是敏感的 。

在veriloghdl里面 # 代表什么 veriloghdl#+数字 , 一般表示延迟时间的如:assign #5 data_temp=din;表示延迟5个时钟单位 , 将din赋给data_temp;如果是*.do文件的话 , 就表示注释的意思,如vlog *.v若前有# vlog *.v表示注释这一句

请教这个verilog HDL中的parameter中的,'d0 'd1等是什么意思?谢谢!'d0表示十进制数0,'d1表示十进制数1,'d19表示十进制数19 。parameter语句用于声明常量,parameter S0='d0,S1='d1,...... , S19='d19; 声明标识符S0代表常量十进制数0、标识符S1代表常量十进制数1、......标识符S19代表常量十进制数19 。

verilog中cnt <= 20'd0;是什么意思<=是非阻塞赋值,用于时序逻辑,在语句执行完以后,cnt被赋值为20bit的十进制数0 。
和阻塞赋值=不同的是 , 使用=赋值时,语句执行到此处后立即赋值 。

verilog语言中的Count1 <= 23'd0是什么意思对Count1赋23位十进制的0

verilog hdl语言中.a(d0)是什么意思这是调用模块时用到的
定义的wire型d0连到了这个模块的接口a上

verilog中的#是什么意思:`timescale 1ns/10ps; reg wave;parameter d; #(d) wave=0;#(2*d) wave=1.'timescale 1 ns/ 1 ps 一般用在VerilogHDL编程最开始声明的地方,意思是时间单位为1ns,精度为1ps.
如果程序后面要用到延时(比如生成clk),那么你可以使用“#d”来直接调用这个时间,例如#3就是“延时3ns”的意思,但是精度为1ps的偏差,一般精度没有多大影响,主要是使用前面的时间单位1ns.

verilog HDL中=&是什么意思?急急急!这里=和&是分开的, &是对count进行按位与操作, 得到一个逻辑值(0或者1)
=表示将&count得到的结果赋值给div_clkout

Verilog 里面 Q <= 4'b0 是什么意思<=在不同的地方有不同的意思,这里是非阻塞赋值,一般用在时序逻辑里,意思是在同一进程或块语句里所有的非阻塞赋值语句同时进行的,=是阻塞赋值语句,要等这句执行完才能进行下一句的操作. <=在进行逻辑运算的时候也作为逻辑运算符

verilog中a<=(b==1);是什么意思?后面==是判断是否相等,如果相等返回1,否则返回0 。然后将这个返回值通过非阻塞赋值赋给a 。也就是说b等于1的话,赋给a值1;b等于其他任何值,a等于0 。

t<={{8x[7]}},x}; verilog中这条语句是什么意思,求高手解答?x[7]这一位被重复8次,然后和x拼一起

verilog <=运算符是什么意思?“<=”与“=”都是赋值,前者是非阻塞赋值,后者是阻塞赋值 。它们的区别不仅在于使前仿与后仿结果一致 , 更影响到综合时的硬件映射 。

FPGA高手,解答一下assign led_d3 = d1 ? 1'b1 : 1'b0;什么意思?谢谢e=a?b:c------------------如果a为真(非0即为真),则将b的值赋给e , 否则将c的值赋给e 。

那么:
led_d3=d1 ? 1'b1 : 1'b0表示判断d1的值真假,为真则把1赋给led_d3,为假则赋0.

assign 表示直接连线 , 即始终是这个关系,不管时钟是何种状态 。

请采纳哈?。?

verilog连续赋值语句assign a=b==8;什么意思楼上正解,需要补充的是,这种写法的可读性很差,作为工程师来讲,不应该有这种写法 。verilog不是用来玩这些小把戏用的,但它可能出现在学校里的考试当中,用来考察学生对verilog语法的理解程度,仅此而已 。

请教verilog的语句解析,大致说下这段语言的意思首先,使用拼接运算符完成了一个66位寄存器out_data的拼接运算,其高位到低位的组成依次为1'b1 , ……,1'b0;字面上就是起始位是1,结束位是0,中间有check_bit校验位,可能包含多个位,out_data_temp字面可能是温度数据的位

verilog语言中 assign y=e?a:1’bz; assign b=(~e)?y:1’bz; 怎么理解?1'bz表示是一位二进制高阻态 。b是二进制,z是高阻态 。

关于verilog 的assign关于问题补充:其实如果想做赋值的话,一般都会习惯性地定义一下reg型变量,然后在always语句块内直接赋值就可以了,类似于:reg a;a=1 。很少有人定义wire型变量然后再赋值的,wire型一般都是在上层模块中调用下层模块的输入输出时才会定义的类型 , 一般都是这样 。而assign命令一般都习惯性地当做连线用,比如想把一个模块的输出给另一个模块当输入,就可以assign Input=Output;
至于时钟那两句,其实那个也是习惯性的写法 , 一般都习惯使用时钟信号同步整个模块,而时钟信号就是从testbench文件中发出的 。特别是对于大的工程 , 这样的设定会方便各个模块之间的同步 。我可不是什么工程师,只不过是刚学了verilog一年的研究生而已,呵呵
初学者吧?你写的这个有太多不规范的地方= =
虽然assign可以这样用,不过很少有人这么写 。assign相当于连线,一般它的用处是将一个变量的值不间断地赋值给另外一个 , 就像把这两个变量连在一起一样 。
替你写了个testbench,应该还算是比较规范的 , 你可以参考我的改一下 。如果还不行的话你把你的源代码给我我可以帮你看一下
`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:11:03:54 07/01/2010
// Design Name:tb_bin27seg
// Module Name:D:/Xilinx/11.1/myproject/test12/testbench.v
// Project Name:test12
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: tb_bin27seg
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////

`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:搞吓米飞机
//
// Create Date:17:14:55 05/08/2010
// Design Name:test
// Module Name:D:/Xilinx/11.1/myproject/convolution/convolutiontest.v
// Project Name:convolution
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: convolution
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////

module test;

// Inputs
reg clk;
reg din;
reg en;

// Outputs
wire dout;


// Instantiate the Unit Under Test (UUT)
bin27seg tb(
.din(din),
.en(en),
.dout(dout));

initial begin
// Initialize Inputs
clk=0;
din=0;
en=1;

// Wait 100 ns for global reset to finish
#100;
en=0;

// Add stimulus here


end
always #4 Clk=~Clk;
always@(posedge clk)
begin
if(din<=4'b1111)
begin
din=din+1;
end
else
begin
din=0;
end

end
endmodule