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处结束,如果没有就是作用于当前整个文件 ...
随机推荐
- Spring Boot demo系列(三):Spring Web+MyBatis Plus
2021.2.24 更新 1 概述 Spring Web+MyBatis Plus的一个Demo,内容和上一篇类似,因此重点放在MyBatis Plus这里. 2 dao层 MyBatis Plus相 ...
- Pycharm Fiddler Requests https in _create raise ValueError("check_hostname requires server_hostname
打开Fiddler, 开启抓取https, 在PyCharm中使用requests 发送https请求, 遇到 in _create raise ValueError("check_ho ...
- Horovod-Usage
Usage 代码中要包含以下6步: 初始化 Run hvd.init() to initialize Horovod. 将每个GPU固定到单个进程以避免资源争用. 一个线程一个GPU,设置到 loca ...
- @valid和自定义异常
@valid和自定义异常 问题的产生: 当有很多参数需要校验时,比如name,age,email等很多参数都需要判空,或者有长度限制时,如果后端写很多if-else就有很多代码,不美观,不优雅.前端每 ...
- odoo字段属性列举
罗列一些Odoo中的字段属性,基本包含大部分的属性. 常用字段属性 平平无奇常用字段属性 string:字段的标题,在UI视图标签中使用.它是可选项,如未设置,会通过首字母大写及将空格替换成为下划线来 ...
- 1.4.17 base标签
如果我们定义的超链接在另一个窗口打开,代码如下: <!DOCTYPE html> <html lang="en"> <head> <met ...
- 通过中转DLL函数实现DLL劫持
当我们运行程序时,一般情况下会默认加载Ntdll.dll和Kernel32.dll这两个链接库,在进程未被创建之前Ntdll.dll库就被默认加载了,三环下任何对其劫持都是无效的,除了该Dll外,其他 ...
- POJ2186 强联通
题意: 有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的. 思路: 假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才 ...
- Nmap 扫描器的使用技巧
1.nmap语法 -A 全面扫描/综合扫描 例如:nmap -A 127.0.0.1 扫描指定段 例如:nmap 127.0.0.1-200&nmap 127.0.0.1/24 2.Nmap ...
- XAMPP修改Apache默认网站目录htdocs的详解
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成环境包,大量站长在使用.正确安装好XAMPP后,默认是必须将php程序放到xampp\htdocs文件 ...