如何在SV中使用结构体struct语法

2023-05-16

前言
测试下可综合的struct,
struct和interface的区别:两者都可以是信号的组合,但interface可以定义信号的不同方向,而struct中的所有信号都是同向的。
struct可对像以太网帧格式进行建模(暂未用到)。
流程
(1)为了对struct进行建模,需要三个模块,顶层,信号输出模块,信号输入模块。
(2)对于结构体的定义可放在模块外部的包里面,单独成一个文件。同时为了避免$unit的问题,使用类似C语法规则的条件编译。
(3)条件编译文件中的内容:文件放在src同级目录即可。
`ifndef  DFFS_DONE
     `define   DFFS_DONE
     package   p_demo ;
         typedef struct   {
            logic  l_clk_50M;
            logic  l_clk_100M;
            logic  l_rst_50M;
            logic  l_rst_100M;
         }   t_clk_rst ;
     endpackage  
     import   p_demo ::* ;
`endif
(4)顶层:注意需包含定义文件。同时定义结构体变量。实例化genafic和test模块。
`include   "definitions.sv"
module   demo_sv  (
     input      i_clk       ,
     input      i_rst_n     ,
     input      i_a         ,
     output     o_b           
);
t_clk_rst  t_gene_top;
genafic    inst_genafic  (
    . i_clk              (i_clk),
    . i_rst_n            (i_rst_n),        
    . t_gene             (t_gene_top)
);

test    inst_test  (
    . i_a                   (i_a),
    . o_b                   (o_b),
    . t_gene_in             (t_gene_top)
);

endmodule : demo_sv
(5)genafic文件内容:产生了两个时钟和复位。结构体的方向是输出。
`include   "definitions.sv"
module   genafic  (
     input   logic  i_clk,
     input   logic  i_rst_n,
     output   t_clk_rst  t_gene          
);
logic  l_locked;
clk_wiz_0    inst_clk_wiz_0  (       
    . clk_out1           (t_gene. l_clk_50M ),
    . clk_out2           (t_gene. l_clk_100M ),
    . reset              ( ~ i_rst_n),   
    . locked             (l_locked),  
    . clk_in1            (i_clk)  
);

logic  l_rst_50M  =   1'b1 ;
logic  [ 9 : 0 ] l_cnt_50M  =   '0 ;
always_ff   @ ( posedge  t_gene.l_clk_50M)
begin
     if  ( ! i_rst_n)
        l_cnt_50M  <=   '0 ;
     else   if  (l_cnt_50M  ==   'd200 )
        l_cnt_50M  <=  l_cnt_50M;
     else  
        l_cnt_50M  <=  l_cnt_50M  +   'd1 ;
end
always_ff   @ ( posedge  t_gene.l_clk_50M)
begin
     if  ( ! l_locked)
        l_rst_50M  <=   1'b1 ;
     else   if  (l_cnt_50M  ==   'd200 )
        l_rst_50M  <=   1'b0 ;
end
logic  l_rst_100M  =   1'b1 ;
logic  [ 9 : 0 ] l_cnt_100M  =   '0 ;
always_ff   @ ( posedge  t_gene.l_clk_100M)
begin
     if  ( ! i_rst_n)
        l_cnt_100M  <=   '0 ;
     else   if  (l_cnt_100M  ==   'd200 )
        l_cnt_100M  <=  l_cnt_100M;
     else  
        l_cnt_100M  <=  l_cnt_100M  +   'd1 ;
end
always_ff   @ ( posedge  t_gene.l_clk_100M)
begin
     if  ( ! l_locked)
        l_rst_100M  <=   1'b1 ;
     else   if  (l_cnt_100M  ==   'd200 )
        l_rst_100M  <=   1'b0 ;
end
assign  t_gene.l_rst_50M  =  l_rst_50M;
assign  t_gene.l_rst_100M  =  l_rst_100M;

endmodule : genafic
(6)test文件内容:使用了50M的时钟,结构体为输入。
`include   "definitions.sv"
module   test  (
     input   logic  i_a,
     output   logic  o_b,
     input   t_clk_rst  t_gene_in
);
logic  [ 9 : 0 ] l_cnt_b  =   '0 ;
always_ff   @ ( posedge  t_gene_in.l_clk_50M)
begin
     if  ( ! t_gene_in.l_rst_50M)
        l_cnt_b  <=   '0 ;
     else   if  (i_a)
        l_cnt_b  <=  l_cnt_b  +   'd1 ;
end
assign  o_b  =  l_cnt_b[ 9 ];

endmodule : test

(7)使用vivado2018.3综合看看结果:
采用结构体对信号进行分组,可实现偷懒以及更佳维护性效果。
以上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在SV中使用结构体struct语法 的相关文章

  • C# DataSet和DataTable详解[转]

    1 创建DataSet对象 xff1a DataSet ds 61 new DataSet 34 DataSetName 34 2 查看调用SqlDataAdapter Fill创建的结构 da Fill ds 34 Orders 34 D
  • 【Python】爬取网站图片

    import requests import bs4 import urllib request import urllib import os hdr 61 39 User Agent 39 39 Mozilla 5 0 X11 Linu
  • 纯C++实现的HTTP请求(POST/GET)

    纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0c 进行简单的封装 xff0c 方便调用 实现如下 xff1a include 34 HttpConnect
  • python subprocess执行shell命令

    2019独角兽企业重金招聘Python工程师标准 gt gt gt subprocess的目的就是启动一个新的进程并且与之通信 subprocess模块中只定义了一个类 Popen 可以使用Popen来创建进程 xff0c 并与进程进行复杂
  • HDTV片源

    微软的 点击进入 苹果 quicktime下载 点击进入 国内一个网站 不过收费 电击进入 还有思路 转载于 https blog 51cto com wangjian 1420
  • Onvif鉴权实现方式

    Onvif鉴权实现方式 Digest 61 B64ENCODE SHA1 B64DECODE Nonce 43 Date 43 Password gsoap中digest生成代码 xff1a int soap wsse add Userna
  • 一文搞定Java并发编程面试考点

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 在java中守护线程和本地线程区别 xff1f java中的线程分为两种 xff1a 守护线程 xff08 Daemon xff09 和用户线程 xff08 User
  • 数据结构c语言版创建链表实验报告,C语言数据结构-创建链表的四种方法

    结点类型 xff1a typedef int datatype typedef struct NODE datatype data struct NODE next Node LinkList 1 不带头结点的头插入法创建链表 每创建一个结
  • syslog-ng

    syslog ng配置 March 13th 2012 绚丽也尘埃 Leave a comment Go to comments syslog ng的配置非常简单直观 xff0c 于是乎配置好看看怎么用它实时收集日志 有两台服务器 xff0
  • CMAKE总结(1) .lib .dll .a .so libx.dll libx.dll.a

    2019独角兽企业重金招聘Python工程师标准 gt gt gt win 对应 linux lib a dll 注 so 注 xff1a win中若使用 dll需要一个附带的引入库 lib win gcc中若使用 dll需要一个附带的因入
  • curl命令详解

    cURL 1 手册页 名称 cURL transfer a URL 摘要 cURL 选项 URL 描述 cURL 是一个向服务器或从服务器传输数据的工具 xff0c 它支持HTTP HTTPS FTP FTPS SCP SFTP TFTP
  • curl命令常见用法汇总 good

    curl是一种命令行工具 xff0c 作用是发出网络请求 xff0c 然后得到和提取数据 xff0c 显示在 34 标准输出 34 xff08 stdout xff09 上面 curl是一个强大的命令行工具 xff0c 它可以通过网络将信息
  • Linux编程之select

    select系统调用的的用途是 xff1a 在一段指定的时间内 xff0c 监听用户感兴趣的文件描述符上可读 可写和异常等事件 select 机制的优势 为什么会出现select模型 xff1f 先看一下下面的这句代码 xff1a int
  • DIGEST认证

    为了弥补BASIC认证存在的弱点 xff0c 从HTTP 1 1起就有了DIGEST认证 DIGEST认证同样使用质询 响应的方式 xff08 challenge response xff09 但不会像BASIC认证那样直接发送明文密码 所
  • Linux下搭建一个简单的UDP通信

    基础知识 UDP和TCP的区别 xff1a 1 TCP是面向连接的 xff0c 而UDP是非面向连接的 xff0c 因此TCP更可靠 2 UDP的server端的socket不需要监听 3 二者的server端都需要绑定 代码实现 xff1
  • 四轴飞行器PID调试一周总结

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Arduino 43 XXD 电调 43 1000KV电机 使用PID来调节稳定性 xff0c 今天上午终于调节 x y轴稳定 回想遇到的问题 xff0c 真的是试出来的值
  • 服务器机柜组件是,网络型机柜与服务器型机柜有什么区别

    导读 随着计算机与网络技术的发展 xff0c 服务器以及网络通信设备等IT设备正在向小型化 网络化 机架化的方向发展 xff0c 那么机房对于机柜管理的需求也就日益增长了 那么 xff0c 你们可知网络型机柜与服务器型机柜有什么区别吗 xf
  • live2d模型_使用二次元模型动画人物让自己网站“骚起来”

    预览 直接使用 xff0c 不想将模型或者js文件放到自己的CDN xff0c 则直接按照下面的步骤 下面的地址是我自己的github地址仓库 xff0c 文件一般不会删除 xff0c 直接引入链接即可 node项目 安装需要的js npm
  • 【http】发送POST请求小例子

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 一 HTTP是什么 xff1f 二 使用步骤 一 HTTP是什么 xff1f 请求行 xff08 request line xf
  • python多线程爬取某网站全部h漫画_Python多线程爬虫爬取网页图片

    39 39 39 基于多页面多线程 39 39 39 import os 引入文件模块 import re 正则表达式 importurllib requestimportthreading 连接网页并返回源码 defopen url ur

随机推荐

  • python获取图片像素矩阵_用python处理图片实现图像中的像素访问

    这篇文章主要介绍了关于用python处理图片实现图像中的像素访问 xff0c 有着一定的参考价值 xff0c 现在分享给大家 xff0c 有需要的朋友可以参考一下 前面的一些例子中 xff0c 我们都是利用Image open 来打开一幅图
  • 通信upf是什么意思_管理UPF的方法、装置及系统与流程

    本发明涉及通信领域 xff0c 具体而言 xff0c 涉及一种管理UPF 用户面功能 xff0c User plane function 的方法 装置及系统 背景技术 xff1a 图1是根据相关技术的3GPP演进分组系统的结构示意图 xff
  • signature=eb47f6441363b915ee5eb8456d7928a2,yarn.lock

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 abbrev 64 1 version 34 1 1 1 34 resolved 3
  • 绝地求生现在服务器稳定吗,吃鸡服务器不稳定?《绝地求生》国服宣布将首次使用超性能服务器...

    2月26日消息 要说目前最受国内游戏爱好者期待的游戏 xff0c 相信不少小伙伴都会投火遍全球的 绝地求生 一票 xff01 而据最新消息显示 xff0c 为了给玩家们带来更加优秀的游戏体验 xff0c 绝地求生 国服将首次使用超性能服务器
  • 微信服务器是否记录视频信息,微信视频号有访客记录吗 微信视频号可以查看浏览记录吗...

    视频号是微信的一个全新版块 xff0c 我们可以在视频号浏览视频号发布的短视频 xff0c 同时还可以进行点赞 留言 转发等操作 xff0c 那我们自行发布的视频 xff0c 微信视频号有访客记录吗 xff1f 下面就和IT百科一起来看看吧
  • 萨克斯维修服务器,萨克斯常见故障修理方法

    原标题 xff1a 萨克斯常见故障修理方法 1 如果某一按键突然停止工作了 xff0c 那就检测一下相应的弹簧 xff0c 如果是破裂或是遗失 xff0c 可以暂时用硬橡胶带来代替 记住在演奏完毕后要除去橡胶带 xff0c 因为从长远来看它
  • I2C通讯协议介绍

    2019独角兽企业重金招聘Python工程师标准 gt gt gt I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线 具有引脚少 xff0c 硬件实现简单 xff0c 可扩展性强的优点 I2C总线的另一优点是支持多主控 xf
  • postman linux 使用教程,Postman 的实用功能

    封面图 前言 基础使用 Collection Environment Test Collection Runner 参考资料 关于我 前言 我是一个 Android 开发工程师 xff0c 日常开发中最免不了的就是使用 Postman 进行
  • UART和RS232、RS485的基础知识

    博客目录 xff1a 1 UART和RS232 RS485的关系 xff1a 2 RS232和RS485的区别和引脚介绍 3 参考文献 正文如下 一 UART和RS232 RS485的关系 xff1a 通讯问题 xff0c 和交通是一样的
  • C语言截取字符串

    1 从左边截取指定长度的字符串 代码功能 xff1a 从字符串开头 xff0c 截取指定长度的字符 include lt stdio h gt include lt wiringPi h gt int main char arr 128 6
  • 【Android-3】Android中的任务栈(Task)

    一 Android任务栈 概述 xff1a Android中的任务栈其实就是Activity的集合 xff0c 在Android中退出程序的时候必须把任务栈中的所有Activity清除出栈 xff0c 此时才能安全的完全的退出程序 xff0
  • Boost 和 STL 相比有哪些优势和劣势?

    1 在设计原则上 xff0c STL和Boost大体统一 因为STL和Boost基本上都是标准委员会那批人在策划 审核和维护 xff0c 所以口味上是相对接近的 但是因为Boost并不在标准中 xff0c 或者说是下一代标准的试验场 xff
  • udp通信 c 语言,Windows程序设计 | 基于UDP的C/S通讯实现

    作者小序 今天翘课一天 xff0c 本打算一个早上写完网络编程实验报告就出去溜达 xff0c 结果从早上九点到这会没出过宿舍门 xff0c 宅到不能再宅了 xff0c 哎 xff0c 一首凉凉送给自己 分享一下干货吧 xff0c windo
  • Linux 下tcp编程例子

    服务器端server程序 编译命令 xff1a gcc Wall g o server server c lpthread include lt stdio h gt include lt string h gt include lt st
  • 微信开发者工具配置服务器信息,微信开发者中心如何配置

    微信开发者中心配置是怎么样的呢 xff0c 那么微信开发者中心又是如何配置的呢 下面是学习啦小编收集整理的微信开发者中心如何配置 xff0c 希望对大家有帮助 微信开发者中心配置的方法 工具 原料 一台电脑和一个微信公众号 需要再SEA上部
  • 【尖端干货】H.264编码下直播视频添加水印的优化

    2016年被称为 中国网络直播元年 xff0c 网络直播已成为网络文化领域重要的经营模式和文化市场的重要组成部分 而以 直播造人 事件为节点 xff0c 直播行业进入了严格规范化的时期 xff0c 鉴黄 版权保护越来越受到直播行业的关注 在
  • C++ 防止重定义

    防止重定义有2种方法 xff1a 第一种 xff1a ifndef MY HEAD H INCLUDED define MY HEAD H INCLUDED endif MY HEAD H INCLUDED 此种方案是一种很通用的方案 xf
  • 51单片机串口通讯c语言程序,如何使用51单片机实现串口通信

    描述 STC51单片机一般带有1个串口 xff0c 有的带有2个串口 xff0c 串口一般用于下载程序和串口通信 串口通信特别适合控制设备 xff0c 所以工控机的电脑上一般都带有串口 51单片机的串口引脚为P3 0引脚与P3 1引脚 xf
  • nautilus命令

    nautilus 是图形程式 效果是以当前用户打开图形界面 所以如果想以root打开图形界面 使用时记得先切为root xff0c sudo没有用的 转载于 https www cnblogs com wangshaowei p 90313
  • 如何在SV中使用结构体struct语法

    前言 测试下可综合的struct xff0c struct和interface的区别 xff1a 两者都可以是信号的组合 xff0c 但interface可以定义信号的不同方向 xff0c 而struct中的所有信号都是同向的 struct