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的更多相关文章

  1. systemverilog中module与program的区别

    我们知道,verilog语法标准中是没有program的,program是systemverilog语法标准新增的内容. 那么,为什么要新增一个program呢?主要考量是基于电路的竞争与冒险. 为避 ...

  2. 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 ...

  3. 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 ...

  4. 【转】查询oracle比较慢的session和sql

    -查询最慢的sql select * from ( select parsing_user_id,executions,sorts command_type,disk_reads,sql_text f ...

  5. ORACLE会话连接进程三者总结

    概念介绍 通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户 ...

  6. 使用logminer挖掘日志,分析历史操作 系列一

    ===============STARTED==================================== 事件起因: 业务的人mail过来说是有张表记录的10K+的优惠码记录没了,要我们确 ...

  7. 查询Oracle正在执行和执行过的SQL语句

    ---正在执行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT from v$session a, v$sqlarea b where a.s ...

  8. oracle 查询最近执行过的 SQL语句(转载)

    oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼   分类: Database oracle 查询最近执行过的 SQL语句 select sql_text ...

  9. Windbg使用简明指南

    第一章 准备 1.1.    环境配置 _NT_DEBUGGER_EXTENSION_PATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 _NT_SY ...

随机推荐

  1. Spring MVC工作流程

    本文回答Spring MVC如何处理一个请求的. 1.请求是由中央调度器DispatcherServlet接收的. 2.中央调度器将请求交给处理器映射器HandlerMapping,处理器映射器解析请 ...

  2. swift中Cell的内容定制

    1.cellForTitle 2.register

  3. BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程

    1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox        Gecko 引擎 Safari        WebKit 引擎 Chrom ...

  4. Redis 中可以存储的五种基本类型

    具体介绍 数字还是字符? String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M --- Hash(字典) 键值对集合,即编程语言中的Map类型 ...

  5. if-else案例–开关灯

    首先,创建一个html页面,添加一个div盒子,用css设置相应的样式,用js获取盒子的元素,通过点击事件,设置body的背景颜色,用if..else来判断当什么状态设置相应的颜色,(swith... ...

  6. php发送邮箱重置密码链接,并在重置成功后使链接失效 (ThinkPHP5)

    /** * 重置密码页,验证链接有效性,页面发送邮件调用sendResetPwdEmail()方法 */ public function resetPwd() { $param = input('') ...

  7. Java中如何使用非强制类型转换把字符串转换成int类型

    ①强制类型转换代码如下: String string = "123456"; int a,b = 0; @Test public void String2Int1() { //方法 ...

  8. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  9. PrimeNG之Input(一)

    Input之AutoComplete --自动完成功能是输入组件,提供实时的建议当打字. Import import {AutoCompleteModule} from 'primeng/primen ...

  10. Google 内部代码是不支持异常(Excepton)的,C++ 异常的优劣之处有许多讨论(知乎上的讨论)

    最近 Google 开源了其内部多年使用的 C++ 代码库 Abseil 作为 C++ 标准库的补充,并会对其进行持续更新,本文对其进行简要介绍. 一句话概括,这个库的特点是用 C++ 11 的代码实 ...