program与module
program,各方面与module都类似,其中声明的变量在program中都可见,
生命周期也是static类型的,
program的结束,也是需要等待其中的所有initial块都执行结束。
与module最大的不同是,program中的时间都是在reactive的区域中执行的。
所以如果clock块写在program中,非阻塞赋值,都先发生在program中的Re_NBA中。
program中的信号的toggle变化,都是在module之后的,且当拍可以看见module中信号的变化。
共发断言也可以在program中,但是不推荐,
(concurrent assertion,采样都是在prepone中,evalution在reactive区域。
其中的property的断言用program中的信号。)
program中不能例化module,interface,其他program,不能包含always模块。
可以包含initial final等。
module中不能调用program中的function,task,
program中可以调用module中的function,task,此时在program中,task的执行时间片也是在reactive中。
program中特有的控制task,$exit(),exit函数的调用,必须在initial块中,否则不起作用。
module的声明有两种方式:
1) non-ANSI, module_name (port_list);
parameter_declaration_list
port_direction_and_size_declarations
port_type_declarations
2)ANSI,module_name #(para_port_list) (port_direction_and_type_list)
module generic_fifo(clk, read, write, reset, out, full, empty);
parameter MSB=3, LSB=0,DEPTH=4;
endmodule
module generic_fifo #(parameter MSB=3, LSB=0, DEPTH=4) (input wire [MSB:LSB] in,
)
endmodule
module中,可以声明function,task,
interface,program,
assertion,assign,checker,clocking,
initial,final,always,generate,
module中还可以声明module,这样的小module,称为nest module,与wrap的module scope相同,可以访问其中的任何变量。
只是做logic上的区分。
module还可以声明extern,来做分步或者partial的编译,extern module的声明,包括extern关键字,module name,module的list port。
extern module m(a,b,c,d); //之后定义该module的时候,port声明可以省略,inst连接可以使用通配符,.*
module m (.*);
endmodule
module top ();
m mm(.*);
endmodule
module的port,可以连接一个interface,event,var,net,array,或者struct,union。
如果direction,被省略,SV默认为inout;
如果port kind,被省略,SV默认为`default_nettye类型定义,可以是wire,tri等。
如果data type,被省略,SV默认为logic,除了interconnect类型port。
module中的hier引用,可以使用a.b.c来表示,无法区分root层与地下某一层这样的hier。
也可以通过$root.a.b.c来表示最顶层的hier。
module例化时的信号连接,有三种方法:
1) module alu_accum1 () //按order来进行连接
alu u_alu (alu_out, , ain, bin, opcode); //在逗号之间空格表示该值使用module内部的default value、
endmodule
2) module alu_accum1 () //按name来进行连接
alu u_alu (.alu_out(alu_out), .zero(), .ain(ain), .bin(bin), .opcode(opcode)); // .zero()表示使用module内部的default value,
endmodule
隐式的name连接,要求port_name与expression的name相同,只保留port_name即可。
module alu_accum1 ()
alu u_alu (.alu_out, .zero(), .ain, .bin, .opcode); // .zero()表示使用module内部的default value,
endmodule
3) module alu_accum1() //按.*的匹配来进行连接,自动连接name相同的port,剩下的单独连接
alu u_alu (.*, .zero()); // .zero()表示使用module内部的default value,
endmodule
bind结构可以将一个或多个module,interface,program,checker,例化在一个module中。
bind结构有两种:
1) bind target_scope :instance_list bind_module_inst;
编译器会在scope指定的范围内,找齐instance_list,然后将bind_module的inst插入到target_scope的末尾进行例化,否则就在所有的inst中都插入bind_module。
2) bind target_inst bind_mdule_inst;
编译器直接将bind_module的inst插入到target_inst中。
bind cpu fpu_props fpu_rules_1(
.a1 (a),
.b1 (b1));
表示将program fpu_props例化在所有的cpu的instance中,例化的名字叫fpu_rules_1,内部信号的连接是
program fpu_props中的a1信号,连接到a信号。
指定cpu inst, bind cpu:cpu1,cpu2 fpu_props fpu_rules_1(.a(a), .b(b));
bind的这个预编译命令,可以写在module,interface,或者compilation-unit scope中。bind中的port连接,可以直接通过相对的hier path来连接底层module的信号。
program与module的更多相关文章
- systemverilog中module与program的区别
我们知道,verilog语法标准中是没有program的,program是systemverilog语法标准新增的内容. 那么,为什么要新增一个program呢?主要考量是基于电路的竞争与冒险. 为避 ...
- Application binary interface and method of interfacing binary application program to digital computer
An application binary interface includes linkage structures for interfacing a binary application pro ...
- SAP 实例 12 List Box with Value List from PBO Module
REPORT demo_dynpro_dropdown_listbox. DATA: name TYPE vrm_id, list TYPE vrm_values, value LIKE LINE O ...
- 【转】查询oracle比较慢的session和sql
-查询最慢的sql select * from ( select parsing_user_id,executions,sorts command_type,disk_reads,sql_text f ...
- ORACLE会话连接进程三者总结
概念介绍 通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户 ...
- 使用logminer挖掘日志,分析历史操作 系列一
===============STARTED==================================== 事件起因: 业务的人mail过来说是有张表记录的10K+的优惠码记录没了,要我们确 ...
- 查询Oracle正在执行和执行过的SQL语句
---正在执行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT from v$session a, v$sqlarea b where a.s ...
- oracle 查询最近执行过的 SQL语句(转载)
oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼ 分类: Database oracle 查询最近执行过的 SQL语句 select sql_text ...
- Windbg使用简明指南
第一章 准备 1.1. 环境配置 _NT_DEBUGGER_EXTENSION_PATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 _NT_SY ...
随机推荐
- BZOJ.3566.[SHOI2014]概率充电器(概率DP 树形DP)
BZOJ 洛谷 这里写的不错,虽然基本还是自己看转移... 每个点的贡献都是\(1\),所以直接求每个点通电的概率\(F_i\),答案就是\(\sum F_i\). 把\(F_x\)分成:父节点通电给 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第七课 界面美化和静态文件处理(课堂笔记)
tornado 相关说明 使用 Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 美化项目 twittel 的开源项目, 在 static 目录下 ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of SPb
A. Base $i - 1$ Notation 两个性质: $2=1100$ $122=0$ 利用这两条性质实现高精度加法即可. 时间复杂度$O(n)$. #include<stdio.h&g ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习5
#include <iostream>using namespace std;const MAXSIZE=12;const year=3;int main(){ char *month[M ...
- __x__(35)0908第五天__opacity 透明度
opacity 透明度 设置一个 0 - 1 之间的值. opacity: 0; 完全透明 opacity: 0.5 半透明 opacity: 1; 完全不透明 缺点: IE8及以 ...
- react_app 项目开发 (2)_axios_pubsub-js
生产环境打包并运行 yarn run build 会src代码进行打包处理,在内存中生成打包文件 将打包文件保存至内存 yarn global add serve serve -s build 将 b ...
- [LeetCode] Design Circular Deque 设计环形双向队列
Design your implementation of the circular double-ended queue (deque). Your implementation should su ...
- 一键安装metasploit(linux,os x)
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit- ...
- Selenium 3----设置元素等待
在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...
- 如何使用post请求下载文件
使用get请求下载文件非常简便,但是get请求的url有长度和大小的限制,所以当请求参数非常多时无法满足需求,所以改成post请求const res = await fetch('xxxxxxxxx' ...