第二章:systemverilog声明的位置
1.package 定义及从package中导入定义(***)
verilog中,对于变量、线网、task、function的声明必须在module和endmodule之间。如果task被多个module引用呢?
verilog用include解决,systemverilog借用VHDL的package解决。
@1: package可以包含的可综合的结构有:
1.parameter和localparam常量定义
2.const变量定义
3.typedef 用户自定义类型
4.全自动task和function定义
5.import语句
6.操作符重载定义
eg: package definition;
parameter VERSION = "1.1";
typedef enum{ADD,SUB,MUL} opcodes_t;
typedef struct{
logic [31:0]a,b;
opcodes_t opcode;
}instruction_t;
function automatic [31:0] multipler(input[31:0]a,b);
return a*b;
endfunction
endpackage
@2:package 内容引用方式:
1.使用范围操作符::
module ALU(input definitions::instruction_t IW, input logic clock, output logic [31:0] result);
always_ff @(posedge clock) begin
case (IW.opcode)
definitions::ADD: result = IW.a + IW.b;
definitions::SUB: result = IW.a – IW.b;
definitions::MUL: result = definitions::multiplier(IW.a, IW.b);
endcase
end
endmodule
2.import语句导入特定子项到模块或接口中
module ALU(input definitions::instruction_t IW, input logic clock, output logic [31:0] result);
import definitions::ADD;
import definitions::SUB;
import definitions::MUL;
import definitions::multiplier;
always_ff @(posedge clock) begin
case (IW.opcode)
ADD: result = IW.a + IW.b;
SUB: result = IW.a – IW.b;
MUL: result = multiplier(IW.a, IW.b);
endcase
end // import definitions::opcodes_t; ?
endmodule
3.import语句通配符导入到模块或接口中
module ALU(input definitions::instruction_t IW, input logic clock, output logic [31:0] result);
import definitions::*;
always_comb begin case (IW.opcode)
ADD: result = IW.a + IW.b;
SUB: result = IW.a – IW.b;
MUL: result = multiplier(IW.a, IW.b);
endcase
end
endmodule
通配符导入并不自动导入整个package,只是相当于添加了一条搜索路径!!
4.将子项导入$unit中
import definitions :: instruction_t;
module ALU (input instruction_t iw, input logic clock; output logic [31 : 0] result);
package也可以通过通配符导入到$unit域中。通配符导入只是将package加到SystemVerilog源路径中!!
2.$unit编译声明空间
不要在$unit空间进行任何声明,所有共享的声明都要在package中。
需要时,可以将package导入到$unit中。
声明过于分散,结构乱,逻辑差,不利于调试。
3.未命名块中的声明
块命名后可以层次化引用其中变量,但不可以综合。
4.增强的时间单位定义
1. 包含时间单位的时间值:
forever #5ns clock = ~clock; //时间值与单位之间不能有空格!!
2. 使用关键字timeunit和timeprecision:
module adder(input wire[63 : 0] a, b, output reg [63 :0] sum, output reg carry);
timeunit 1ns;
timeprecision 10ps;//是模块的一部分,
…… //而不是作为软件工具的指令
endmodule
timeunit和timeprecision使模块、接口或程序块与时间单位和精度信息直接绑定,
解决了timescale存在的不确定性和对文件顺序的依赖性。
它必须在其它声明或语句之前,紧随模块、接口或程序的声明之后。
timeunit和timeprecision的声明可以在编译单元域中,但必须在其它声明的前面。
第二章:systemverilog声明的位置的更多相关文章
- 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明
内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布 ...
- Laxcus大数据管理系统2.0(5)- 第二章 数据组织
第二章 数据组织 在数据的组织结构设计上,Laxcus严格遵循数据和数据描述分离的原则,这个理念与关系数据库完全一致.在此基础上,为了保证大规模数据存取和计算的需要,我们设计了大量新的数据处理技术.同 ...
- C#本质论读书笔记:第一章 C#概述|第二章 数据类型
第一章 1.字符串是不可变的:所有string类型的数据,都不可变,也可以说是不可修改的,不能修改变量最初引用的数据,只能对其重新赋值,让其指向内存中的一个新位置. 第二章 2.1 预定义类型或基本类 ...
- 《驾驭Core Data》 第二章 Core Data入门
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- C++ primer的第二章的主要内容
这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- 第二章 开始学习C++
第二章 开始学习C++ 2.1 main函数 简单代码如下: #include <iostream> int main() { //This is my first program u ...
- 学习opencv中文版教程——第二章
学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...
随机推荐
- Jquery禁用网页右键菜单
$(function(){ $(document).bind("contextmenu",function(e){ return false; }); });
- shell Syntax error: Bad fd number 错误解决
最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...
- PHPmail 亲测可用
2017年5月8日9:10:47 1.在模块的配置文件中加入下里面代码,账号最好用126邮箱'THINK_EMAIL' => array( 'SMTP_HOST' => 'smtp.163 ...
- Travelling HDU - 3001
Travelling HDU - 3001 方法:3进制状态压缩dp(更好的方法是预处理出每个状态数字对应的y数组,然后用刷表,时间复杂度可以少一个n) #include<cstdio> ...
- archsummit_bj2016
http://bj2016.archsummit.com/schedule 大会日程 2016年12月02日,星期五 7:45-9:00 签到 8:45-9:00 开始入场 9:00-9:30 开场致 ...
- AJPFX总结匿名类及其使用
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义.内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员也可以在一个语句块的内部定义还可以在表达式内部匿名定义匿名类与其他类的不同就 ...
- 【转】彻底解析Android缓存机制——LruCache
彻底解析Android缓存机制——LruCache 关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存.这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻 ...
- SIRI课程表
wen 周一@0@{今天没课哦}周一 周二今天共一节课 第2节,可编程控制器应用,11号教学楼1 0 3房间 周二 周三今天共三节课 第二节,过程控制系统,2号楼2 1 0房间,第三节机械制造技术11 ...
- Android自定义zxing扫描界面的实现
首先,我们需要导入zxing的jar文件,其次复制所需要的资源文件以及放入自己需要添加的资源文件,复制出源码的必要相关类文件.对布局文件进行一定的修改,再修改CaptureActivity与Viewf ...
- appium学习链接记录
乙醇大师的园子: http://www.cnblogs.com/nbkhic/tag/appium/ webDriver java版 https://github.com/easonhan007/we ...