Verilog基础:标识符的向上向下层次名引用

news2024/9/9 3:56:21

 相关文章

Verilog基础:表达式位宽的确定(位宽拓展)        

Verilog基础:表达式符号的确定

Verilog基础:数据类型

Verilog基础:位宽拓展和有符号数运算的联系

Verilog基础:case、casex、casez语句

Verilog基础:casex和full_case、parallel_case的使用

Verilog基础:表达式中的整数常量(integer)

Verilog基础:task和function的使用(一)

Verilog基础:task和function的使用(二)

Verilog基础:标识符的层次名引用


1.向上向下层次名引用

        在之前的文章中已经介绍了标识符的层次名引用Verilog基础:标识符的层次名引用,如前文所示,所有的完整层次名都是由Top模块开始的由“.”分隔的一系列标识符组成的。但有时候,模块或模块实例的名称足以标识模块及其在层次结构中的位置。较低级别的模块可以在层次结构中引用它上级模块中的项目。如果上级模块的名字,或模块实例的名字已知,则变量可以被引用。对于任务、函数、命名块和生成块,Verilog将在上级模块中查找名称,直到找到它或直到到达层次结构的根,而且只在更高的封闭模块中搜索模块的名称,而不是模块实例名。

        下图是向上层次引用的语法。

         向上的层次名引用也可以使用以下形式。

        其中scope_name是模块实例名或生成块名。这种形式的名称应按下列方式解析:

a)在当前作用域中查找名为scope_name的作用域。如果未找到且当前作用域不是模块作用域,则在上层作用域中查找该名称,必要时重复查找,直到找到该名称或到达模块作用域。如果仍未找到,则继续执行步骤b)。否则,将此名称引用视为从找到该名称的作用域向下引用。

b)在父模块最外层的作用域中查找名为scope_name的作用域。如果发现,则从该范围解析项目名称。

c)重复步骤b),往上走直到顶层模块。

        在实际操作中,笔者发现虽然从形式上看,这两种形式的层次名引用只能由“.”分隔的两部分构成,但它们依然可以像标识符的层次名引用一样,由“.”分隔的多个部分组成。

        下面将会举例说明以上的内容。

例1

module Top;
  reg x;
  Middle middle_0();
  initial fork:a
    reg x;
  join
endmodule

module Middle;
  reg x;
  Below below_0();
  initial fork:b
    reg x;
  join
endmodule

module Below;
  initial Middle.b.x = 0;       //使用模块名引用上层模块的信号 
 //initial middle_0.b.x = 0;    使用实例名引用上层模块的信号
 //initial Top.middle_0.b.x = 0; 完整层次名引用上层模块的信号
    
endmodule

第一种方法是使用模块名引用上层模块的信号,具体过程为,首先搜索本层次(Below模块)有无名字为Middle的层次,然后向上推进到Middle模块的最外层,此时仍然没有Middle层次(本模块名在本模块内不可见),最后搜索Top模块,发现例化了Middle模块,则可以确定x的位置。

第二种方法是使用实例名,与第一种方法类似,不同的是,此时的指向更为清晰,明确指定了是middle_0实例,而第一种方法使用模块名,指的是层次包括了信号使用处层次的实例。

第三种方法则是使用了之前的文章中提到的完整层次名引用,这其实也可以看做是和第一种方法,只不过这时会向上搜索直到Top模块,然后再逐步解析后面的middle_0、b和x。

例2

module Top;
  reg x;
  Middle middle_0();
  initial fork:a
    reg x;
  join
endmodule

module Middle;
  reg x;
  Below below_0();
  initial below_0.x = 0; //向下层引用
  //initial Middle.below_0.x = 0; 首先向上搜索Middle直到在Top中找到Middle,然后向下解析
  //initial Top.middle_0.below_0.x = 0; 完整层次引用,可以理解为向上搜索Top,直到顶层模块
endmodule

module Below;
reg x;
endmodule

第一种方法先在本层次(Middle模块最外层)搜索below_0,结果显示可以找到,below_0中也可找到x,所以这被解释为向下引用below_0中的信号。

后面两种方法和之前一致,其中第二种方法似乎有点奇怪,是一种不完整的层次引用,先向上查找,然后再向下解析below_0和x。

例3

module Top;
  reg x;
  Middle middle_0();
  initial fork:a
    reg x;
  join
endmodule

module Middle;
  reg x;
  Below below_0();
  fork: Middle
      reg x;
      //fork: Middle
          //reg x;              无法被Middle.x搜索到
      //join  
  join
  
endmodule

module Below;
//fork: Middle
    //reg x;    如果有注释内容,则x在此处就会被解析到,而不会继续向上搜索了
    //fork: b     
        initial Middle.x = 0;
    //join
//join
endmodule

上例可以说明,本模块名在本模块中是不可见的,其中initial语句改变的是Middle命名块中x的值,而不是Middle模块中x的值。注意,在向上搜索引用的第一个结点名字的过程中,只会在上层模块的最外层搜索,注释中的x是无法被Middle.x搜索到的,需要使用Middle.Middle.x才能搜索到。

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

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

相关文章

基于阿尔法均值滤波的FPGA图像系统(工程+原理图+PCB+仿真)

目录 前言一、研究背景及意义二、本文研究内容三、硬件系统框架设计1、总框架设计2、原理图&PCB设计3、实物设计4、电路介绍 三、中值滤波算法研究及改进1、图像噪声的产生及危害2、中值滤波算法3、高斯滤波算法4、改进的中值滤波算法(α均值滤波算法&#xff0…

【跑实验05】利用CLIP中的图像编码器,如何遍历文件夹中的图像,将图像文件改为28*28的尺寸,然后输出到excel中的每一列,最后一列全都标记为0

文章目录 一、初步实现二、警告信息的解决 一、初步实现 要遍历文件夹中的图像并将其尺寸调整为28x28,并将结果输出到Excel中,可以按照以下步骤进行操作: 首先,确保您已经安装了Pandas库,用于处理Excel文件。可以使用…

简单认识Nginx主配置文件及实操模拟

文章目录 一、Nginx主配置文件1、全局配置2、添加 I/O事件配置4.HTTP配置 实操模拟部分一、Nginx虚拟主机配置1.1基于域名1.2.基于IP1.3.基于端口 二、Nginx访问状态统计三、Nginx配置访问控制1.基于授权的访问控制2.基于客户端的访问控制 一、Nginx主配置文件 位置&#xff1…

【机器学习】sklearn数据集的使用,数据集的获取和划分

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 sklearn数据集 二、安装sklearn二、获取数据集三、…

python第三方库概览

目录 第三方库的获取和安装 脚本程序转变为可执行程序的第三方库PyInstaller jieba库(必选)、wordcloud库(可选) 知识导图: 1.Python第三方库的获取和安装 Python第三方库依照安装方式灵活性和难易程度有三个方法:pip工具安装…

树莓派使用VNC、SSH、Xrdp等方式进行远程控制的方法和注意事项

下面来总结一下远程操控树莓派用到的三种方式及其注意事项,其实这三种方式对于所有的Linux系统来说都是适用的。 目录 一、ssh控制树莓派 1.开启 ssh服务方法一 2.开启 ssh服务方法二 二、VNC远程连接 三、xrdp远程连接 四、其他注意事项 一、ssh控制树莓派 S…

石油化工领域生产作业流程合规检测 yolov8

石油化工领域生产作业流程合规检测通过引入yolov8视觉数据智能分析技术,石油化工领域生产作业流程合规检测对生产作业流程进行实时监测和合规性检测,通过与预设标准进行比对,系统能够检测出不合规的操作或异常情况,并及时发出警报…

【Python】实现一个鼠标连击器,每秒点击1000次

前言 鼠标连击是指在很短的时间内多次点击鼠标按钮,通常是鼠标左键。当触发鼠标连击时,鼠标按钮会迅速按下和释放多次,产生连续的点击效果。 在这里鼠标连击的主要用途是: 帮助我们进行鼠标点击,疯狂连击&#xff1…

NUCLEO-F411RE RT-Thread 体验 (6) - GCC环境 I2C驱动移植以及i2c-tool的编写

NUCLEO-F411RE RT-Thread 体验 (6) - GCC环境 I2C驱动移植以及i2c-tool的编写 1、I2C驱动移植 RT-Rhread这里用的是软件模拟i2c,stm32的驱动里并没有找到硬件i2c的驱动,但是在GD32里面却有硬件i2c的驱动,有兴趣的小伙伴可以根据gd32的代码写…

Ubutun开机黑屏解决方法

开机黑屏解决方法 临时性解决方法永久性解决方法补充说明 在项目支持过程中发现Ubuntu 16 在新终端上开机黑屏,没有显示图形界面,这个可能是因为系统版本太低,对新显卡不兼容导致的,后通过查资料有如下解决方法。 临时性解决方法 …

腾讯云+PicGo+Typora图床,生成专属图片链接

腾讯云PicGoTypora搭建自己的图床 原创声明,转载请注明文章链接来源、作者信息 TyporaPicGogitHub搭建自己的图床,写作效率大大提升 索奇问答 问:图床是什么? 答:用户可以将图片上传到图床,然后将生成的…

代码随想录算法训练营第四十一天 |

01背包:n种物品,每种物品只有1个,有相应的重量和价值 最多只能装m的重量,最多价值为多少? dp[i][j] : [0, i]物品任取放进容量为j的背包里 不放物品i:dp[i-1][j] 放物品i:dp[i-1][j-weight[…

递归的浅浅应用

首先,这里是一道简单题目,浅浅地验证了我之前发过的这篇文章 写递归题目的思路 ,我结合它来讲解一下这道题的思路: 剑指 Offer 27 和 method 226.翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,…

python数据清洗 —— re.split()划分字符串

需求 对于一行字符串: route-views6.routeviews.org 141694 2a0c:b641:24f:fffe::7 184891 | CN | apnic | OTAKUJAPAN-AS Otaku Limited, CN要将其划分成如下7个部分, [route-views6.routeviews.org, 141694…

【C++篇】OOP下部分:友元、运算符重载与多态

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

精选MyBatis面试题

什么是MyBatis? MyBatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能&a…

Python高级语法--迭代器和生成器的区别

迭代器 在 Python 中,迭代器(iterator)是访问集合元素的一种方式,它可以遍历一个序列中的元素,而无需事先确定序列的大小(即无需全部载入到内存中),且支持惰性求值。使用迭代器可以…

程序员 35 岁以后就真的要返乡种田了么?如果家里没田怎么办?

前言 在科技互联网高速发展的当下,程序员这个职业无疑是备受关注的。然而,这个行业似乎总是被一种说法所笼罩:程序员年龄一旦超过35岁,就会面临职业生涯的下坡路,甚至需要考虑“返乡种田”。这种说法是否真实呢&#x…

【Software Testing】【期末习题库】【2023年春】【仅供参考】

文章目录 ①单选②多选③填空④判断⑤大题 类型总分占比平时成绩40%考试/考查60% 题型题量分值备注单选201’多选103’全对3’,错1个0’,少选-1’填空102’判断52’大题210’ 平时习题(3次): ①软件测试概述 ②黑盒测…

【五子棋实战】第5章 开发五子棋前端页面

【五子棋实战】第5章 开发五子棋前端页面 页面设计原则 开发页面 ## 基础HTML骨架 ## 添加页面响应式功能 编写JS ## 获取画布对象与DOM对象 ## 定义棋子、棋盘对象 ## 定义绘画对象(重要!!) ## 初始化绘制棋盘 ## 添加点…