verilog behaviral modeling -- procedural timing contronls
1.delay control : an expression specifies the time duration between initially encountering the statement and when the statement actually executes.
the delay expressiong can be dynamic function of the state of the circuit,but it can be a simple number that separates statement
executions in time.
2.event control: which allows statement execution to be delayed until the occurence of some simulation event occurring in a procedure executing
concurrently with this procedure.
a simulation event can be a change of value on a net or variable(an implicit event) or the occurrence of an explicity named event
that is triggered from other procedures(an explicit event).
most often , an event control is p positive or negative edge on a clock signal.
Simulation time can advance by one of the following three methods:
1.a delay control ----> introduced by the symbol #
2.an event control -----> introduced by the symbol @
3.the wait statement ----> operates like a combination of the event control and the while loop
Delay control:
1.the delay expression evaluates to an unknow or high-impedance value, it shall be interpreted as zero delay.
2.the delay expression evaluates to a negative value, it shall be interpreted as a two-complement unsigned integer of
the same size as a time variable.
3.specify parameters are permitted in the delay expression.
eg: #10 rega = regb;
#D rega = regb; //D is parameter
#((d+e)/2) rega = regb;
#regr regr = regr + 1; // delay is the value in regr
Event control:
1.implicity event( a value change on a net or variable)
2.explicity event(the occurrence of a declared event即named event)
1.a negedge : from 1 to x / z /0; from x /z to 0
2.a posedge : from x/z/0 to 1 ; from x /z to 1
1.an implicity event shall be detected on any change in the value of the expression.
2.an edge event shall be detected only on the least significant bit (LSB)of the expression.
3.a change of value in any operand of the expression without a change in the expression in the result of the expression shall not be detected as an event.
@xx statements;
@(posedge xx) statements;
@(negedge xx) statements;
an event shall not hold any data. The following are the characteristic of a named event:
---It can be made to occur at any particular time.
---It has no time duration
--- Its occurrence can be recognized by using the event control
事件event 可以做或运算:
@(trig or enable) rega = regb;
@(posedge clk_a or posedge clk_b or trig) rega = regb;
可以把上面的or换成逗号(,)。
对@*解析:
All net and variable indentifiers that appear in the statement will be automatically added to the event expression with
these exception:
1.Identifiers that only appear in wait or event expressions
2.Identifiers that only appear as a hierachical_variable_identifier in the variable_lvalue of the left_hand side of assignments
Nets and variables that appear on the right_hand side of assignments,in function and task calls, in case and conditional expressions, as an index variable on the left-hand side of assignments, or as variables in case item expressions shall all be included by these rules.
eg1: //此例子或许可以实现event与操作
always@* begin ///equivalent to @(b)
@(i) kid = b; //i is not added to @*
end
eg2:
always@*begin //same as @(a or en)
y = 8'bff;
y[a] = !en;
eg3:
always@* begin //same as @(a or en)
next = 4'b0;
case(1'b1)
state[IDLE] : if(go) next[READ] = 1'b1;
else next[IDLE] = 1'b1;
state[READ] : next[DLY] = 1'b1;
state[DLY] : if(!ws) next[DONE] = 1'b1;
else next[READ] = 1'b1;
state[DONE] : next[IDLE] = 1'b1;
endcase
end
level-sensitive event control / edge-senstive event control
1.@(xx)
@(posedge xx)
@(negedge xx)
分别是双边沿、上升沿、下降沿三种事件控制格式。
2.wait(xx) 是电平事件控制 ,xx为真是执行wait后面的语句。
intra-assignment timing controls / inter-assignment timing controls
1. An intra-assignment delay or event control shall delay the assignment of the new value to the left-hand side,but
right-hand expression shall be evaluated before the delay,instead of after the delay .
2. the intra-assignment delay and event control can be applied to both blocking assignments and nonblocking assignments.(此条Verilog标准讲的不是很细,有些模糊)
3.the number of occurrences of an event can be variable
repeat (a) @(event_expression)
INTRA-ASSIGNMENT TIMING CONTROL EQUIVALENCE(有些像非阻塞赋值)
with intra-assignment construct without intra-assignment construct
a = #5 b; ===========================================> begin
temp =b;
# a = temp;
end
---------------------------------------------------------------------------------------------------------------------------------------------------------
a = @(posedge clk) b; begin
temp = b;
@(posedge clk);
a = temp;
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
a = repeat(3) @(posedge clk) b; begin
temp = b;
@(posedge clk);
@(posedge clk);
@(posedge clk);
a = temp;
end
PS:1.intra-assignment can prevent a race-condition
fork ///data swap
a = #4 b;
b = #4 a;
end
2.intra-assignment waiting for events is also effective
fork ///data shift
a = @(posedge clk) b;
b = @(posedge clk) c;
end
verilog behaviral modeling -- procedural timing contronls的更多相关文章
- verilog behavioral modeling --procedural assignments
1.procedural assignments are used for updating reg ,integer , time ,real,realtime and memory data ty ...
- verilog behavioral modeling ---Block statements
block statements : 1. sequential block : begin-end block 2.parallel block : fork - join bloc ...
- verilog behavioral modeling --loop statement
1.forever 2.repeat 3.while 4.for The for statement accomplishes the same results as the following ps ...
- ModelSim+Synplify+Quartus的Alte
[page_break] 本文适合初学者,源代码:mux4_to_1.v 工作内容: 1.设计一个多路选择器,利用ModelSimSE做功能仿真: 2.利用Synplify Pro进行综合,生成xx ...
- Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
A code sequence made up multiple instructions and specifying an offset from a base address is identi ...
- Verilog中的specify block和timing check
在ASIC设计中,有两种HDL construct来描述delay信息: 1)Distributed delays:通过specify event经过gates和nets的time,来描述delay; ...
- Verilog Tips and Interview Questions
Verilog Interiew Quetions Collection : What is the difference between $display and $monitor and $wr ...
- verilog FAQ(zz)
1. What is the race condition in verilog? Ans :The situation when two expressions are allowed to exe ...
- 9.3.1 The assign and deassign procedural statements
IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language The assign procedural cont ...
随机推荐
- day04 基本类型包装类
- hashCode方法里为什么选择数字31作为生成hashCode值的乘数
前提: 偶然的机会看到了大神的一篇博客,介绍的是hashCode()方法里为什么要用31这个数字作为生成hashCode的乘数.hashCode我在比较自定义类时曾经用到过 - 由于java默认比较的 ...
- Codeforces Round #533(Div. 2) A.Salem and Sticks
链接:https://codeforces.com/contest/1105/problem/A 题意: 给n个数,找到一个数t使i(1-n)∑|ai-t| 最小. ai-t 差距1 以内都满足 思路 ...
- 使用 MiniProfiler 来分析 ASP.NET Core 应用
MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析ASP.NET Core应用. 优点 针对ASP.NET Core MV ...
- [译]Understanding ECMAScript6 对象
对象 ECMAScript6将大量精力聚焦在提升对象的实用性性上.聚焦的意义在于JavaScript中几乎每一个值是由对象中的某种类型表示.此外,在一个普通的JavaScript程序中使用对象的数量持 ...
- Function ereg() is deprecated in
PHP 5.3 ereg() 无法正常使用,提示"Function ereg() is deprecated Error".问题根源是php中有两种正则表示方法,一个是posix, ...
- WebService学习之旅(六)使用Apache Axis2实现WebService客户端调用
上节介绍了如何使用Axis2 发布一个WebService,Axis2除了为我们编写WebService应用带来了便利,也同样简化的客户端调用的过程,本节在上节的基础上使用Axis2自带的工具生成客户 ...
- 【Android】SlidingMenu属性详解
SlidingMenu 常用属性介绍: menu.setMode(SlidingMenu.LEFT);//设置左滑菜单menu.setTouchModeAbove(SlidingMenu.TOUCHM ...
- MySQL出现GROUP BY clause错误解决办法
#1)当mysql数据库出现如下错误:#which is not functionally dependent on columns in GROUP BY clause; this is incom ...
- Mysql的Root密码忘记,查看或修改的解决方法
Mysql的Root密码忘记,查看或修改的解决方法:1.首先启动命令行2.在命令行运行:taskkill /f /im mysqld-nt.exe3.继续在命令行运行:mysqld-nt --skip ...