SystemVerilog 语言部分(二)
接口interface:
既可以设计,也可以用来验证。
验证环境:interface使得连接变得简单不容易出错。
interface可以定义端口,单双向信号,内控部使用initial always task function
interface 可以在硬件环境和软件环境中传递。也可以作为软件方法的形式参数
可以把interface看做“插排”。
testbench<--->interface<----->arbiter

通过interface name+ . +logic
通过$finish在testbench结束仿真。
在interface的端口列表之中只需要定义:时钟,复位等公共信号,或者不定义任何端口信号,转而在变量列表中定义哥哥需要跟DUT和TB连接的logic的变量。为了简单易用,推荐使用logic的定义变量。
interface也可以进行参数化
习题:

答案:ABCD
module中可以例化module,interface
interface可以例化interface,但是不能例化module。
2.采样和数据驱动
RTL的竞争解决方法:
1.使用非阻塞赋值语句
2.信号进行延迟来解决同步的问题

阻塞赋值,在上例中 a 被设计为4个寄存器,但是 b = a 在同一拍子中b被设计成导线的形式,不是寄存器的形式。
在进行仿真时候为了避免时序电路中时钟和驱动信号的时序竞争问题,我们需要给出尽量明确的驱动时序和采样时序。
默认情况下时钟对于组合电路的 驱动会添加一个无限小的delta-cycle,而且该延迟无法用绝对实践单位衡量,它要比最小的时间单位精度还小。
一个时间片:time-slot 可以发生很多事
在仿真时候run0,让仿真器跑一个delta-cycle的时间。
竞争的问题:
timescale 1ns/1ns
module race1;
bit clk1,clk2;
bit rstn;
logic[7:0] d1;
initial begin//generate clk1
forever #5 clk1< = ~clk1;
end
//clk2 generate
always@(clk1)
clk2<=clk1;//即使clk2与1完全同步,但是也有delt-delay
initial begin
#10 rstn <=0;
#20 rstn<=1;
end
//mini counter
always@(posedge clk1,negedge rstn)begin
if(!rstn)
d1<=0;
else
d1<=d1+1;
end
//clk1,2POSedge print data d1
always@(posedge clk1)
$display("%0t ns d1 value is 0x%0x",$time,d1);
always@(posedge clk2)
$display("%0t ns d1 value is 0x%0x",$time ,d1);
endmodule

NB的题,这里应该是A.2
使用打印的数据比用仿真观察波形得到的数据要准确。


如何避免采样的竞争问题?
(1)在驱动时,添加相应的人为延迟。模拟真实的延迟
同时加大clk与变量之间的延迟,提高DUT使用信号时的准确度和TB
采样信号时的可靠性。
(2)在采样时间前的某时段中进行采样。
SystemVerilog 语言部分(二)的更多相关文章
- SystemVerilog语言简介(二)
6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...
- 使用C语言实现二维,三维绘图算法(1)-透视投影
使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- Swift语言指南(二)--语言基础之注释和分号
原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...
- #r语言(二)笔记
#r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...
- iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
在<SQLite的C语言接口规范(一)>中介绍了如何去连接打开数据库,本篇博客就介绍如何操作数据库,本篇主要给出了如何执行数据库查询语句(Select), 然后遍历结果集.本篇博客就直接使 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- C语言 预处理二(宏定义--#define)
//#define 宏定义(宏定义一般大写) //知识点一-->#define的作用域:从#define开始,从上往下,如果遇到#undef就到#undef处结束,如果没有就是作用于当前整个文件 ...
随机推荐
- linux安装cmake
1 概述 linux下安装cmake,目前最新的版本为3.17.0-rc2,安装的方式一共有三种:通过软件包仓库安装,通过编译好的版本进行安装,从源码手动编译安装. 2 仓库安装 笔者的是deepin ...
- Unix ls UVA - 400
The computer company you work for is introducing a brand new computer line and is developing a new ...
- Django 入门范例
1. Django 介绍 2. Django 环境搭建 3. 模型(Model) 4. 站点管理 5. 视图(View) 6. 模板(Template) 1. Django 介绍 MVC 模型 大部分 ...
- IDEA 2021版新建Maven、TomCat工程
目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...
- 【新手/零基础】Hexo+Gitee个人博客搭建教程--详细版
前言 点此转到--精简版 可能很多小伙伴都有搭建一个属于自己的博客的想法.但是经常是无奈于自己匮乏的知识.但是,每个老手都是新手过来的,再困难的事情,只要肯花一点时间都可以办成. 本次教程分为详细版和 ...
- hdu2102 水搜索
题意: A计划 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次 ...
- (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告
前言 攻击互操作性(Attacking Interoperability)是 Mark & Ryan & David 发表于 2009 年的美国黑帽大会(Black Hat)上的一份研 ...
- JMM 最最最核心的概念:Happens-before 原则
关于 Happens-before,<Java 并发编程的艺术>书中是这样介绍的: Happens-before 是 JMM 最核心的概念.对应 Java 程序员来说,理解 Happens ...
- 【js】Leetcode每日一题-数组异或操作
[js]Leetcode每日一题-数组异或操作 [题目描述] 给你两个整数,n 和 start . 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == ...
- 前端小白的学习之路html与css的较量【一】
html和css的较量 web结构的组成 html标签规则 快速生成一个html html的基本结构 标签的关系 标签 标题标签 段落 图片 超链接 a 属性 a标签里面的值 字符实体 新增的标签 1 ...