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 ...
随机推荐
- 2018ccpc_hn
A. Easy h-index #include <iostream> #include <algorithm> #include <cstring> #inclu ...
- “玲珑杯”ACM比赛 Round #4 E -- array DP
http://www.ifrog.cc/acm/problem/1050?contest=1006&no=4 DP[val]表示以val这个值结尾的等差数列有多少个 DP[val] += DP ...
- Exception in thread "main" java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package解决办法(图文详解)
不多说,直接上干货! 问题详情 SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF ...
- 代码中看见一共8个变量参数{SEO,0,0,0,0,0,0,0} 解读!{Top,0,0,0,0,0,0,Top}{Nav,0,0,0,0,0,0,Nav}
代码中看见{SEO,0,0,0,0,0,0,0}{Top,0,0,0,0,0,0,Top}{Nav,0,0,0,0,0,0,Nav}解读! 举个例子: {GetNew,977,0,23,500,0,0 ...
- go查询mysql到list<map>
func selects() { db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?cha ...
- 洛谷P4017 最大食物链计数
拓扑排序板子题 #include <iostream> #include <cstdio> #include <cstring> #include <queu ...
- RStudio的Markdown
Title This is an R Markdown document. Markdown is a simple formatting syntax for authoring web pages ...
- Jenkins怎么启动和停止服务
笔者没有把Jenkins配置到tomcat中,每次都是用命令行来启动Jenkins.但是遇到一个问题:Jenkins一直是开着的,想关闭也关闭不了.百度了一些资料,均不靠谱(必须吐槽一下百度).于是进 ...
- 10个优秀的移动Web应用开发框架
在最近几年里,移动互联网高速发展.市场潜力巨大.继计算机.互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术.新应用不断涌现.今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者 ...
- JSON数组不用字符串转换的写法
var organization = []; //机构组织 //初始化用户数据列表中用户机构列的数据源 admin.ajax("GetOrganizationInfo", null ...