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处结束,如果没有就是作用于当前整个文件 ...
随机推荐
- .Net下引用多目标框架项目导致XAML无法识别类型的问题
背景 我的项目(以下称为LibA)中有一个多目标框架编译的项目,即项目文件包含如下代码: <PropertyGroup> ... <TargetFrameworks>netco ...
- 技术分享|JavaScript的前世今生
目录 一.什么是JavaScript 二.JavaScript的功能 三.JavaScript可以做什么 四.JavaScript框架 五.HTML,CSS和JavaScript 六.JavaScri ...
- 转载:Windows使用tail -f 监控文件
https://www.cnblogs.com/my-bambi/p/11793770.html
- Mysql 事务特性和隔离级别
事务的特性 原子性(Atomicity) 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到 ...
- 【工具类】Stream流构建指定长度的时间集合
package com.gabriel.stage.utils; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.Dat ...
- IOS Widget(3):SwiftUI开发小组件布局入门
引言 经过上一篇文章,我们已经可以在桌面上展示出一个小组件出来了,你肯定想小试牛刀,动手改一改,那我们就从改小组件的布局做起吧.本文不会讲解Swift语法,如果是熟悉Flutter,Kotlin这 ...
- 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现
前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...
- Web漏洞小结
本文是对Web中最常见漏洞的一个小结: 注入类漏洞: SQL注入:SQL注入漏洞详解 XML注入:XXE(XML外部实体注入) 代码注入:代码注入漏洞 CRLF注入:CRLF注入 注入类漏洞是应用违背 ...
- 【axios】get/post请求params/data传参总结
axios中get/post请求方式 1. 前言 最近突然发现post请求可以使用params方式传值,然后想总结一下其中的用法. 2.1 分类 get请求中没有data传值方式 2.2 get请求 ...
- 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...