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 ...
随机推荐
- Serervlet | 慕课课程实战 | 编写登录逻辑
Users.java package com.po; public class Users { private String username; private String password; pu ...
- 消息队列介绍、RabbitMQ&Redis的重点介绍与简单应用
消息队列介绍.RabbitMQ&Redis的重点介绍与简单应用 消息队列介绍.RabbitMQ.Redis 一.什么是消息队列 这个概念我们百度Google能查到一大堆文章,所以我就通俗的讲下 ...
- monxin cms 任意文件删除漏洞
\program\diypage\receive\edit.php首先看到一个unlink($path);本来应该先看sql语句的,但知道是任意文件删除先跳过删除语句,看看$path怎么传入的倒推上去 ...
- Git本地分支与远程分支关联
当clone完版本库,切换到开发分支后,使用git pull -r 拉取并合并分支之后会出现一下提示: $ git pull -rFrom ssh://192.168.1.226:29418/etha ...
- Hadoop启动datanode失败,clusterId有问题
问题: 搭建伪Hadoop集群的时候,运行命令: hdfs namenode -format 格式化或者说初始化namenode. 然后用命令: start-dfs.sh 来启动hdfs时,jps发现 ...
- jQuery对表格的操作
1.表格变色 (1)普通的隔行变色 CSS代码: .even{background:#fff;} //偶数行样式 .even{background:#fff;} //奇数行样式 ①包括表头 $ ...
- this的三个要点
1.this的指向是什么? 指向对象 2.this可以书写在哪里? 可以写在全局,也可以写在函数里 三种写在函数里的方式: 2.1 this可变 function f() { this.name = ...
- 微信支付v3开发(5) 扫码并输入金额支付
关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...
- Mysql如何为表字段添加索引???
1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) : ALTE ...
- jmeter中通过beanshell访问eclipse中导出jar中的java类的方法
主要步骤 1.在eclipse中导出要引用的java代码为jar文件 2.将生成的jar文件放到jmeter的lib的ext目录下 3.在jmeter的jsr223处理器中导入要引用的java类型文件 ...