首页
关于
Search
1
[SystemVerilog] How to get current input line ?
282 阅读
2
[Ethernet] Frame Structure
163 阅读
DV
EDA Tools
Language
登录
Search
标签搜索
SystemVerilog
符珂
累计撰写
3
篇文章
累计收到
0
条评论
首页
栏目
DV
EDA Tools
Language
页面
关于
搜索到
3
篇与
的结果
2024-10-12
此内容被密码保护
加密文章,请前往内页查看详情
2024年10月12日
8 阅读
0 评论
0 点赞
2022-11-20
[SystemVerilog] How to get current input line ?
有时,在验证环境中添加打印信息时,希望知道当前打印语句在文件哪一行,或者某 task 被重复调用时,想知道某条打印信息具体由哪一次 task 调用输出的,例如,有如下 task:... task cmn_chk_0(bit exp); bit act; uvm_hdl_read(signal_scope,act); if(act==exp) uvm_info(this.get_name(),$sformatf("act=%0b,exp=%0b",act,exp),UVM_LOW) else uvm_error(this.get_name(),$sformatf("act=%0b,exp=%0b",act,exp)) endtask:cmn_chk_0 ...cmn_chk_0() 在 main_phase 的不同位置被调用:... cmn_chk_0(1'b1);//0 ... cmn_chk_0(1'b0);//1 ... cmn_chk_0(1'b0);//2 ... cmn_chk_0(1'b1);//3 ...那么当有 uvm_error 报告时,具体是哪一次调用上报的,是比较难区分的,这给 debug 带来了麻烦。systemverilog 中可以使用 `__LINE__ 来获取当前所在的 line number,那么 check task 及其调用可写成如下形式,这样,每一次task调用所在的 line number 都可以输出在打印信息里,方便区分:... task cmn_chk_0(bit exp, int line); bit act; uvm_hdl_read(signal_scope,act); if(act==exp) uvm_info(this.get_name(),$sformatf("line_%0d,act=%0b,exp=%0b",line,act,exp),UVM_LOW) else uvm_error(this.get_name(),$sformatf("line_%0d,act=%0b,exp=%0b",line,act,exp)) endtask:cmn_chk_0 ... ///////////// //each uvm_info or uvm_error will print the input line of each 'cmn_chk_0' ... cmn_chk_0(1'b1,`__LINE__);//0 ... cmn_chk_0(1'b0,`__LINE__);//1 ... cmn_chk_0(1'b0,`__LINE__);//2 ... cmn_chk_0(1'b1,`__LINE__);//3 ...
2022年11月20日
282 阅读
0 评论
0 点赞
2022-11-19
[Ethernet] Frame Structure
参考 《以太网权威指南》第2版,本文内容仅为该书所述内容的部分整理以太网的四个基本元素帧:系统中用来传递数据的一组标准化的数据位。介质访问控制协议 :由⼀组嵌在各个以太⽹接⼜的协议组成,允许以太⽹基站 通过半双⼯或全双⼯模式访问以太⽹信道。信号组件 :可以在以太⽹信道发送或接收信号的标准化电⼦设备。物理介质 :在联⽹的计算机间传递数字以太⽹信号的电缆或者其他硬件。帧结构帧头作为指示信息,告知以太网系统中的各个硬件设备,有数据在传输(帧头是较老的10 Mbit/s的以太网系统中使用的,在更新的系统中不再需要,但是为了保证帧结构的一致性,该部分仍然被保留)帧头后是⽬的地址和源地址。IEEE 标准协会(IEEE-SA)控制地址分配。在分配供应商使⽤的地址块时,IEEE-SA 提供了 24 位的组织唯⼀标识符 (OUI)。每个以太⽹接⼜制造商都有⼀个 OUI。以太⽹接⼜制造商为每个接⼜分配了⼀个独特的 48 位地址,前 24 位地址是制造商的 OUI,后 24 位⽤于确保每个 48 位地址都是独⼀⽆⼆的。这个 48 位的地址通常叫作硬件 (或物理 )地址 ,以表明地址是分配给以太⽹接口的。这个地址也叫作介质访问控制(MAC)地址,这是因为以太⽹介质访问控制系统包括帧和帧的地址。地址域之后是⼀个 16 位的类型或长度域。通常,这个域⽤来标识数据域采⽤的是哪⼀种⾼级⽹络协议(如 TCP/IP)。这个域也可能⽤来携带长度信息。类型域之后便是长度为 46 到 1500 字节的数据。数据必须不短于 46 字节。这个长度保证帧信号在⽹络中停留的时间⾜以让最早的 10 Mbit/s 半双⼯系统识别出来。如果数据域携带的⾼层协议数据短于 46 字节,系统将使⽤填充数据将空余部分填满。最后,在帧的末尾是 32 位的帧校验序列(FCS)域。FCS 包括⼀个循环冗余检验(CRC),⽤来对整帧数据的完整性进⾏检测。介质访问控制协议介质访问控制(Medium Access Control,MAC): 按我目前的理解,应该是“共享同一信道的所有设备的通信管理”,可以参考一篇文章深入了解:MAC (Medium Access Control)协议详解 ,2022年,我的工作将会围绕 EMAC 展开。以太网帧它又来了帧头位宽为 64bit,帧头域的引入是为了帮助10 Mbit/s 以太网接口在实际内容到来之前同步数据流。信号在电缆系统上传递存在延时,帧头域允许若干字节的丢失,在10 Mbit/s的系统上,帧头域可以保护帧的剩余字节。高速以太网采用更加复杂的机制进行信号编码,以此避免信号启动损失,因此这些(高速以太网)系统不需要帧头来保护帧信号。但是为了兼容早期以太网帧并为帧间管理提供时间,帧头部分仍然保留。对于帧头位的定义有两种标准,它们之间略有不同,但在帧头的实际使用方式是没有实质差异的,二者传递位的模式也是完全相同的。本文以 IEEE 标准为重点。- DIX 标准在 DIX 标准中,帧头包括 8 个 “octet”(8位字节):帧头的前 7 字节由交替的 0 和 1 组成。第 8 字节的前 6 位是交替的 0 和 1,末尾两位固定为 “11”,末两位通知接口帧头已经结束,随后传递的将是帧的内容。- IEEE 标准在802.3标准中,帧头域分为两个部分,第一部分是7字节的帧头,第二部分是1字节的起始帧分节符(SFD)。和DIX标准相同,SFD最后两位是 “11”SFD出现了,这里的SFD跟高精度1588中的SFD是同一个东西吗?目的地址目的地址在帧头之后,又称作物理地址 或 硬件地址,位宽为48bit,每个以太网接口的目的地址独一无二。目的地址域长48位,可以是目的基站的接口地址,也可以是多播地址或广播地址。以太⽹接口会读取每帧的⽬的地址。如果⽬的地址既不符合⾃⼰的以太⽹地址,也不和被要求接收的多播或⼴播地址相匹配,那么接口就可以忽略此帧。下⾯是两个标准对⽬的地址的处理⽅式。- DIX 标准⽬的地址的第⼀位⽤于区分物理地址和多播地址。如果第⼀位为 0,那么这个地址就是⼀个接口的物理地址 ,也叫单播地址 ,因为这个地址只对应⼀个⽬的地。如果第⼀位为 1,那么此帧将被发送到⼀个多播地址 。如果 48 位都是 1,那么这就是⼀个⼴播地址 ,也叫作全基站地址。- IEEE 标准IEEE 802.3 标准对⽬的地址的第⼆位赋予了意义,利⽤其区分本地和全局管理地址。全局管理地址是制造商分配给⽹卡的物理地址,⽬的地址的第⼆位为 0 表⽰该地址为全局地址。(DIX 以太⽹地址都是全局管理地址。)如果因为某种原因,以太⽹接口是本地管理的,那么就要把⽬的地址的第⼆位设置为 1。DIX 标准和 IEEE 标准的⼴播地址⼀样,都是所有的位全为 1。理解物理地址以太⽹中,48 位的物理地址由 12 个⼗六进制的数表⽰。这 12 个数两两为⼀组,每组 8 位信息。传送从最左的 8 位开始到最右的 8 位。⼀个字节中位的实际传送顺序是从最低位到最⾼位。也就是说,⼀个⽤⼗六进制字符串 F0-2E-15-6C-77-9B 表⽰的以太⽹地址在以太⽹信道传递的字符串从左到右为:0000 1111 0111 0100 1010 1000 0011 0110 1110 1110 1101 1001。因此,这个以⼗六进制数 0xF0 开始的 48 位⽬的地址是单播地址,因为信道传送的第⼀位为 0。源地址位置:在目的地址之后//TODO
2022年11月19日
163 阅读
0 评论
0 点赞