广东建设网 工程信息网站国内最大的网站建设公司

news/2025/10/9 8:24:20/文章来源:
广东建设网 工程信息网站,国内最大的网站建设公司,管理信息系统开发方法,网站你懂我意思正能量不用下载视频1. Interface概念 System Verilog中引入了接口定义#xff0c;接口与module 等价的定义#xff0c;是要在其他的接口、module中直接定义#xff0c;不能写在块语句中#xff0c;跟class是不同的。接口是将一组线捆绑起来#xff0c;可以将接口传递给module。 2. 接口的优…1. Interface概念 System Verilog中引入了接口定义接口与module 等价的定义是要在其他的接口、module中直接定义不能写在块语句中跟class是不同的。接口是将一组线捆绑起来可以将接口传递给module。 2. 接口的优点 一通过接口在module之间或内部进行信号传递模块的输入列表就是一个接口这样简单避免手动连线的错误。 二如果需要增加模块的IO只需要在接口中增加不需要改变模块的输入列表防止输入错误、少改了哪个模块的列表。 三在UVM 中需要在不同的class之间传递信号用接口的话传递一组信号只需要uvm_config_db一个接口就可以了如果不用接口那么就需要好多条uvm_config_db语句。 四接口中可以定义一些initial生成时钟always块任务函数类的句柄。 3. 定义接口 可以在接口中定义一些信号、函数、任务、class对象也可以有alwaysinitial语句块。比如可以在initial块中生成时钟clk。 3.1 定义 interface if(input bit clk);logic data;logic valid;logic addr; endinterface 3.2 modport 可以用modport将接口中的信号分组。比如总线接口中master、slave、arbiter需要的信号是不同的输入输出也不同。 interface if(input bit clk);logic [7:0] data;logic valid;logic [7:0] addr;logic request;logic grant;logic command;logic ready;modport MASTER(output request,addr,command);modport SLAVE(input request,addr,command,output ready);modport ARBITER(input request,output grant); endinterface module Master (if.MASTER if_u); ... endmodule module test;if if_u;Master m_u(if_u.MASTER); endmodule 4. 激励时序 测试平台需要和设计之间的时序密切配合。比如在同一个时间片内一个信号需要被同时写入和读取那么采样到新值还是旧值非阻塞赋值可以解决这个问题值的计算在active区域值的更新在NBA区域——采样到的是旧值。 4.1 时钟块控制同步信号的时序 在接口中定义时钟块时钟块中的任何信号都相对于时钟同步驱动和采样。时钟块大都在测试平台中使用。 interface if(input bit clk);logic [7:0] data;logic valid;logic [7:0] addr;clocking cb(posedge clk);input valid;input data;input addr;endclockingmodport TEST(clocking cb);modport DUT(input valid ,input data); endinterface 一个接口中可以有多个时钟块但每个时钟块只有一个时钟表达式。如(posedge clk)定义了单时钟(clk)定义了DDR时钟双数据率两个沿。 4.2 logic还是wire 在测试平台中如果用过程赋值语句驱动接口中的信号那么信号要在接口中定义为logic如果是连续赋值驱动定义成wire。 定义成logic的一个好处是如果多个信号驱动logic那么编译器会报错这样你就知道写错了如果是wire这个错误就隐藏了。 4.3 对测试平台和DUT中事件的调度 如果没有用时钟块测试平台对DUT的驱动和采样存在竞争这是因为测试平台的事件和DUT的事件混合在同一个时间片中。 SV中将测试平台中的事件和DUT中的事件分离。 时间片划分 SV的主要调度区域 4.4 设计和测试平台之间的时序 时钟块测试平台在#1step延时之后采样DUT也就是采样上一个时间片postponed区域的数据。也就是前面讲的采样旧值。时钟块测试平台在#0延时之后驱动DUT信号。0延迟说明还在同一个time slotDUT能够捕捉到变化。         更细致的时间片划分 time slotactivedesigninactive显示0延迟阻塞赋值observedSVAreactiveSVpostponedSV 采样 5. 接口采样和驱动信号的时序 为了同步接口中的信号可以在时钟沿采样或者驱动接口信号。可以在接口中定义时钟块来同步接口信号 interface if(input bit clk);logic data;logic valid;logic addr;clocking cb(posedge clk);input valid;input data;input addr;endclockingmodport TEST(clocking cb);modport DUT(input valid ,input data); endinterface 在测试平台中的信号才需要同步。 5.1 接口信号采样时序 如果时钟块中的信号采样DUT中的信号采样的是上一个时间片time slotpostponed区域的数据。即如果DUT信号在时钟沿发生0-1跳变那么采样到0。DUT接口想要驱动TEST接口中时钟块里的信号需要线给DUT接口信号赋值 module dut(if.DUT if0);....#10 if0.valid 1;#10 if0.valid 2;.... endmodule 5.2 接口信号驱动时序 如果时钟块驱动DUT信号值会立即传入到设计中。即如果时钟块中的信号在时钟沿发生0-1跳变则时钟沿之后DUT中为1。         时钟块想要驱动DUT需要在testbench给时钟块中的信号赋值在tb中驱动时钟块中的信号需要同步驱动用“”符号。时钟块中的信号驱动采样 program tb(if.TEST if1);...#10 if1.cb.valid 1;#10 if1.cb.valid 0;... endprogram 6. 使用虚接口 之前介绍的接口都是跟module一样来描述硬件的在SV中有面向对象的概念在class里面使用虚接口——virtual interface。虚接口是一个物理接口的句柄handler同这个句柄来访问硬件接口。虚接口是唯一链接动态对象和静态模块、接口的一种机制。 6.1 在测试平台中使用接口 interface inf; //定义接口 ... endinterface program test(inf if0); // 接口传入测试平台driver drv;initial begindrv new(if0); // 接口传给driver对象end endprogram class driver;virtual vif; // 在class中为虚接口function new(inf i);vifi;endfunction endclass module top;inf inf0(); // 例化接口test t1(inf0);dut d1(inf0); endmodule 也可以在tb中跨模块引用XMRcross module reference接口 program test(); //没有接口参数virtual inf if0top.inf0;//top是顶层模块... endprogram module top;inf inf0(); // 例化接口test t1(); // tb无接口列表dut d1(inf0); endmodule 6.2 使用端口传递接口数组 interface inf(input clk); ... endinterface parameter NUM10; module top;inf xi[NUM](clk); // 顶层例化多个接口,接口名后跟个数test t1(xi);// 接口作为参数dut... endmodule program test(inf xi[NUM]); // 接口参数列表virtual inf vxi[NUM];initial beginvxixi;end endprogram 也可以用跨模块引用。 7. 接口中的代码 接口中可以定义信号、函数、任务、class对象也可以有alwaysinitial语句块。下面给一个在《UVMPrimer》中的例子 interface tinyalu_bfm;import tinyalu_pkg::*; ​byte unsigned A;byte unsigned B;bit clk;bit reset_n;wire [2:0] op;bit start;wire done;wire [15:0] result;operation_t op_set; ​assign op op_set; ​task reset_alu();reset_n 1b0;(negedge clk);(negedge clk);reset_n 1b1;start 1b0;endtask : reset_alutask send_op(input byte iA, input byte iB, input operation_t iop, shortint result);if (iop rst_op) begin(posedge clk);reset_n 1b0;start 1b0;(posedge clk);#1;reset_n 1b1;end else begin(negedge clk);op_set iop;A iA;B iB;start 1b1;if (iop no_op) begin(posedge clk);#1;start 1b0; end else begindo(negedge clk);while (done 0);start 1b0;endend // else: !if(iop rst_op)endtask : send_opcommand_monitor command_monitor_h; ​function operation_t op2enum();case(op)3b000 : return no_op;3b001 : return add_op;3b010 : return and_op;3b011 : return xor_op;3b100 : return mul_op;default : $fatal(Illegal operation on op bus);endcase // case (op)endfunction : op2enum ​ ​always (posedge clk) begin : op_monitorstatic bit in_command 0;command_s command;if (start) begin : start_highif (!in_command) begin : new_commandcommand.A A;command.B B;command.op op2enum();command_monitor_h.write_to_monitor(command);in_command (command.op ! no_op);end : new_commandend : start_highelse // start lowin_command 0;end : op_monitor ​always (negedge reset_n) begin : rst_monitorcommand_s command;command.op rst_op;command_monitor_h.write_to_monitor(command);end : rst_monitorresult_monitor result_monitor_h; ​initial begin : result_monitor_threadforever begin(posedge clk) ;if (done) result_monitor_h.write_to_monitor(result);endend : result_monitor_threadinitial beginclk 0;forever begin#10;clk ~clk;endend endinterface : tinyalu_bfm 函数使用的时候通过接口对象调用就行了 virtual tinyalu_bfm inf; initial begininf.send_op(..); end 8. 接口使用注意事项 接口不能在package中被include 。 下面这种写法是会报错的。 package pkg;include apb_if.sv…… endpackage 而要放在package外面 include apb_if.sv package pkg;…… endpackage         如果要在UVM中要通过hierarchy访问DUT中的信号最好将这些信号放在interface中然后将virtual interface传给UVM。 // 在接口中定义信号 interface bfm;bit[7:0 addr; endinterface// 实例化接口 bfm u_bfm();// 将虚接口传给UVM initial beginuvm_config_db#(vitual bfm)::set(, uvm_test_top, bfm, bfm); end// 在UVM可直接操作虚接口         如果不这样的话当uvm componentdriver monitor agent等文件是通过package来管理的话就不能在UVM中hierarchy引用DUT中的信号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建设监督网站首页自己在线制作logo免费圆形

SQLAlchemy 是 Python 中一款非常流行的数据库工具包,它对底层的数据库操作提供了高层次的抽象。在本篇文章中,我们将介绍 SQLAlchemy 的两个主要组成部分:SQL 工具包 (SQL Toolkit) 和对象关系映射器 (Object-Relational Mapper, ORM) 的基本…

【GitHub每日速递 251009】AI时代必备!Stagehand浏览器自动化框架解锁高效新玩法

原文:https://mp.weixin.qq.com/s/gbezGRvVAHdkf87-rY4nig Stremio:一站式视频娱乐神器,解锁自由观影新体验! stremio-web 是一个提供自由流媒体播放功能的网页应用。简单讲,它是一个能让你在线观看各种影视内容的…

iOS应用商店遭遇首次大规模恶意软件攻击

苹果iOS应用商店遭遇首次大规模恶意软件攻击,数百款应用被植入XcodeGhost恶意代码,包括微信、滴滴打车等知名应用,安全公司发现344款受感染应用,苹果已开始清理受污染程序。iOS应用商店数百款应用包含恶意软件 来源…

重庆网站开发服务wordpress主题文件夹在哪里设置

来源:popsci编译: 网易智能 (乐邦)近年来有关飞行汽车、超级高铁、喷气背包、无人驾驶汽车等新型交通工具的报道一直不绝于耳,但目前这些领域的产品似乎都还算不上真正切实可行。说好的移动出行未来在哪里呢?人们梦寐以求的这些交…

vue3使用ts传参教程

在Vue 3中使用TypeScript进行组件间传参是开发中常见的需求,它能提供类型安全和更好的开发体验。以下是Vue 3 + TypeScript组件传参的详细教程: 1. 父组件向子组件传参(Props) 子组件定义Props类型 使用defineProp…

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit - 实践

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit - 实践2025-10-09 08:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

pt-table-checksum 原理解析

pt-table-checksum 原理解析在 MySQL 主从复制架构中,“数据一致性” 是业务可靠性的底线,但原生复制仅保证 binlog 的传输与执行,无法规避网络中断、SQL 错误、从库延迟等导致的数据偏差。而 Percona Toolkit 中的…

给别人做网站在那里接单wordpress自定义文章顺序

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…

vue搭建点击按钮input保持聚焦状态

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

如何做自助网站网站报备

产品描述 AP5179是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V,输出电流 可达 2.0A 。根据不同的输入电压和 外部器件, 可以驱动高达数十瓦的 LED。 内置功率开关,采用高端电流采样…

带数据库的网站做wordpres做视频网站

想知道你的网站每天的访问情况吗?有多少人访问了?访问最多的页面是哪个?哪个时段访问的人最多?哪个地方访问的最多?每秒有多少请求?很好奇吧,只要你是使用了nginx进行请求抓发,那么就…

解密prompt系列61. 手搓代码沙箱与FastAPI-MCP实战

前两章我们讨论了JupyterAgent,当时用的是E2B的代码沙箱。这次我决定自己动手,用字节的TRAE从头构建一个Python代码沙箱,并加入MCP支持。完整代码已经开源在github.com/DSXiangLi/simple_sandbox最近Vibe Code在各种…

MySQL 高可用构建方案详解

MySQL 高可用构建方案详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

企业网站建设应该注意什么事项问题雁塔区网站建设

曾经做过单片机和以下20种PLC的Modbus RTU串口通信,现将这20种PLC输入、输出和寄存器元件与Modbus编号地址对应表分享出来。三菱FX3G-40MR/ES-A、西门子S7-200 CPU226 AC/DC/RLY、欧姆龙CP1H-X40DR-A、松下AFPX-C40R、台达DVP-12SA2、信捷XC5-48、永宏FBs-40MC、产电…

VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 标准版和厂商定制版

VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 9.0 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、…

使用sqlite-loadable-rs开发一个简单sqlite uuid 扩展

使用sqlite-loadable-rs开发一个简单sqlite uuid 扩展默认sqlite 缺少uuid 函数, sqlite-loadable-rs 是一个基于rust包装的框架,可以用来快速开发sqlite 扩展,以下是一个简单测试 项目准备cargo.toml注意当前editio…

C语言数据结构笔记3:Union联合体+结构体取8位Bool量 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

多机器人协同首现基础模型技术突破

某机构研发出首个多机器人协同基础模型DeepFleet,通过Transformer架构处理机器人导航数据,能预测交通模式并提升10%运营效率。该技术利用数十亿小时真实数据训练,包含四种不同架构模型的对比实验。多机器人协同首现…

文登做网站的公司wordpress建英文博客

HTML placeholder 属性实例 1带有 placeholder 文本的两个输入字段:尝试一下 placeholder 文本也可以指定颜色。实例 2带有 placeholder 文本设置颜色:尝试一下 浏览器支持Internet Explorer 10、Firefox、Opera、Chrome 和 Safari 支持 placeholder 属性…

做查询系统网站如何写网站文案

OpenSSL(Open Secure Sockets Layer)是一个开源的软件库,提供了SSL和TLS协议的实现,用于加密通信。它广泛用于安全连接,例如在网站上通过HTTPS协议进行安全的数据传输. 但是从openssl申请道德证书是不安全的。对于网站…