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

news2024/11/30 10:35:44

 相关文章

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

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

Verilog基础:数据类型

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

Verilog基础:case、casex、casez语句

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

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


目录

4.function的声明和调用

4.1 function的声明

4.2 function的返回值

4.3 function的调用

4.4 function的规则

4.5 常数函数


4.function的声明和调用

        function的用途就是返回一个值,然后把他用在表达式中(即作为操作数使用)。

4.1 function的声明

        function的声明的语法如下:

        function声明的说明:

        1、第一种是Verilog-1995的语法,输入参数和函数内项目都在function_identifier;后面声明。

        2、第二种是Verilog-2001的语法,输入参数在function_identifier();括号内部声明,而函数内项目在function_identifier();后面声明,这是ANSI-C风格的声明。

        3、函数内项目包括各种类型的变量(reg[signed]、integer、time、real、realtime)、事件声明、本地参数声明和参数声明。

        4、没有使用automatic的function是静态的(Static),所有在function中声明的输入参数和函数内项目都是静态分配内存的,对于所有并发执行的同一个function,他们是共享的。

        5、使用automatic的function是动态的,可重入的,仿真器为每个并发执行的function动态地分配内存。

        6、function_range_or_type用于声明返回值的类型,它是可选的。如果没有说明,那么默认返回1位标量;如果说明,则返回值的类型可以是:[range][signed]、integer、time、realtime、real。

        7、function应至少有一个input参数。

4.2 function的返回值

        在定义function时,同时在function内部隐含地声明了一个和function名字一样的变量。他默认是1位的reg,或是用function_range_or_type指定的。当function返回时,就把这个变量返回。

4.3 function的调用

        函数调用被当做表达式中的操作数使用。函数调用时,输入参数的计算顺序是不定的。

4.4 function的规则

        与task相比,function有许多限制,下面是function的使用规则。

        1、function的定义不能包含任何时序控制的语句,即不能包含#、@和wait。因为function的参数输入,计算、返回都是在一个time-step完成的。

        2、function不能使能task,因为task中可能含有时序控制。

        3、function至少包含一个input参数。

        4、function不能包含任何output和inout参数。

        5、function中不能使用非阻塞赋值(<=),不能使用过程连续赋值。

        6、function内不能触发命名事件。

4.5 常数函数

        常数函数是Verilog-2001标准新加的,用于在elaboration时计算复杂的的值。常数函数要求综合和仿真工具在编译时就计算出函数的返回值。

        常数函数对IP开发非常重要,目的是允许设计人员为一个模块添加local parameters,这些local parameters是在模块实例化时传递的参数得来的。

        让我们考虑一个简单的RAM模型,为了使这个模型参数化,我们需要地址的宽度、存储的深度和数据的宽度。数据的宽度必须传递给模型,但对于地址的宽度和存储的深度,就只需要传递一个即可。如果传递地址的宽度,那么存储的深度可以通过常数函数计算出来;如果传递存储的深度,则地址的宽度可以通过常数函数计算出来。

        为了让工具厂商更加接受常数函数,Verilog标准化组织(Verilog Standard Group,VSG)在常数函数上加了明显的约束,而在常规函数上就没有这些约束。常数函数是常规函数的子集,具有以下的要求。

        1、常数函数不能包含层次引用。

        2、常数函数在调用模块内定义,且参数是常数。

        3、常数函数能调用参数为常数表达式的系统函数,而不能调用其他系统函数。

        4、常数函数将忽略系统任务。

        5、任何常数函数会使用到的parameters都要提前定义。

        6、常数函数使用的parameters不能直接或间接被defparam影响。        

        7、不能在generate块中声明常数函数。

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

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

相关文章

CSS的学习1

使用css的目的是让网页具有美观一致的页面。 语法 CSS规则由两个主要的部分构成&#xff1a;选择器以及一条或多条声明&#xff08;样式&#xff09; 选择器&#xff1a;h3 声明&#xff1a;{color:red;font-size:30px;} 选择器通常是需要改变的HTML元素&#xff1b; 每条…

六一儿童节-王者连连看

庆祝六一 用java实现的连连看练手小游戏 王者连连看 &#x1f923; 游戏介绍&#x1f61c; 核心&#x1f62e;‍&#x1f4a8;总结&#xff1a; &#x1f923; 游戏介绍 王者连连看游戏的目标是通过消除相同的图案来得分并进入更高级别的挑战。   游戏分为四个难度   可以自…

cpp: Visitor Pattern

/*****************************************************************//*** \file Gold.h* \brief 访问者模式 Visitor Pattern C 14 行为模式* 2023年6月8日 涂聚文 Geovin Du Visual Studio 2022 edit.文章来源《C新经典设计模式》 王健伟编著 清华大学出版社* \author…

记录:VS2019+OpenCV4.7.0编译

一、准备 OpenCV官网提供了动态库的安装包&#xff0c;但是只有64位&#xff0c;而且没看到编译参数&#xff0c;如果需要32位或者静态链接还是得自己编译。 CMake&#xff1a;https://cmake.org/download/ Visual Studio&#xff1a;https://visualstudio.microsoft.com/zh…

计算机组成原理——中央处理器

文章目录 **一 CPU的功能和基本结构****1 CPU的功能****2 [基本结构](http://t.csdn.cn/bpCt3)****2.1 运算器****2.2 控制器** **二 指令执行过程****1 指令周期****2 指令周期的数据流****2.1 取指周期****2.2 间址周期****2.3 执行周期****2.4 中断周期** **3 指令的执行方案…

chatgpt赋能python:如何下载Python中的jieba包

如何下载Python中的jieba包 随着Python的普及&#xff0c;很多程序员选择使用Python作为自己的主力编程语言。对于自然语言处理方面的任务&#xff0c;jieba是Python中一个非常优秀的分词工具。那么&#xff0c;如何下载和使用Python中的jieba包呢&#xff1f;本篇文章将为您详…

【MySQL数据库 | 第十四篇】多表查询案例

目录 前言&#xff1a; 引入背景&#xff1a; 练习&#xff1a; 前言&#xff1a; 在第十三篇我们已经详细的介绍了多表查询的类别以及每一个类别的语法&#xff1a;【MySQL数据库 | 第十三篇】多表查询&#xff0c;今天我们将通过案例来巩固我们对多表查询语法的熟悉度。 引入…

JavaSE笔记(二)重制版

面向过程篇 前面我们已经认识了Java语言的相关特性&#xff0c;并且已经成功配置好了开发环境&#xff0c;从这节课开始&#xff0c;我们就可以正式进入到Java语言的学习当中了。Java语言是一门面向对象的语言&#xff0c;但是在面向对象之前&#xff0c;我们还得先学会如何面…

【IMX6ULL驱动开发学习】05.IMX6ULL驱动开发_编写第一个hello驱动【熬夜肝】

经过以下四个步骤&#xff0c;终于可以开始驱动开发了 01.安装交叉编译环境【附下载地址】 02.IMX6ULL烧写Linux系统 03.设置IMX6ULL开发板与虚拟机在同一网段 04.IMX6ULL开发板与虚拟机互传文件 目录 一、获取内核、编译内核 二、创建vscode工作区&#xff0c;添加内核目录…

《计算机组成原理》期末考试手写笔记——模块五: 并行主存系统(交叉存储器+顺序存储器“带宽”的计算方法)

目录 &#xff08;一&#xff09;知识点总结 &#xff08;二&#xff09;经典考试例题 1.设主存储器容量为256字&#xff0c;字长为32位&#xff0c;模块数m4&#xff0c;分别用顺序方式和交叉方式进行组织。主存储器的存储周期T200ns&#xff0c;数据总线宽度为32位&#x…

EMQ X(2):EMQ X服务端环境搭建与配置

1 安装 EMQ X 目前支持的操作系统: Centos6Centos7OpenSUSE tumbleweedDebian 8Debian 9Debian 10Ubuntu 14.04Ubuntu 16.04Ubuntu 18.04macOS 10.13macOS 10.14macOS 10.15Windows Server 2019 产品部署建议 Linux 服务器&#xff0c;不推荐 Windows 服务器。 安装的方式有…

【Linux】HTTP协议

目录 &#x1f680;前言&#x1f683;HTTP协议 &#x1f684;1、URL网址&#x1f685;2、URL的编码和解码&#x1f687;3、HTTP协议格式&#x1f688;4、HTTP请求&#x1f689;4.1、 HTTP GET和POST方法&#x1f68b;4.2、HTTP状态码&#x1f68a;4.3、HTTP常见Header &#x1…

redis架构设计: redis-server的启动(硬核分析)

怎么在windows上用clion搭建redis的源码阅读环境 请看我的上一篇文章 redis启动之后都干了什么呢? 我们知道&#xff0c;redis的服务端对应的源码位置是server.c main函数是程序启动的入口 &#xff0c;下面我来一行一行的分析server.c的源码 1、定义时间函数变量 struct …

chatgpt赋能python:Python多种输出格式详解

Python多种输出格式详解 对于Python程序员来说&#xff0c;输出是非常重要的。无论是在开发阶段还是在生产环境中&#xff0c;输出都是我们调试程序和确认程序运行是否正常的重要手段。Python标准库提供了丰富的输出格式&#xff0c;本文介绍了几种常见的输出格式及其使用方法…

因为写不出拖拽移动效果,我恶补了一下Dom中的各种距离

目录 背景 JS Dom各种距离释义 第一个发现 window.devicePixelRatio 的存在 document.body、document.documentElement和window.screen的宽高区别 scrollWidth, scrollLeft, clientWidth关系 元素自身和父级元素的scrollWidth和scrollLeft关系? offsetWidth和clientWid…

【FDA】图像通过傅里叶变换改变光谱风格,实现域自适应

FDA: Fourier Domain Adaptation for Semantic Segmentation, CVPR2020 翻译&#xff1a;CVF2020邻域自适应/语义分割&#xff1a;FDA: Fourier Domain Adaptation for Semantic SegmentationFDA&#xff1a;用于语义分割的傅立叶域自适应算法_傅里叶域适应_HheeFish的博客-CS…

【TCP/IP】多进程服务器的实现(进阶) - 进程和僵尸进程

目录 僵尸(Zombie)进程 僵尸进程的产生机制 僵尸进程的危害 僵尸进程的销毁 wait函数 waitpid函数 进程管理在网络编程中十分重要&#xff0c;如果未处理好&#xff0c;将会导致出现“僵尸进程”&#xff0c;进而影响服务器端对进程的管控。 僵尸(Zombie)进程 第一次听到…

数据类型

常见的数据类型&#xff1a; int&#xff0c;整数类型&#xff08;整形&#xff09;bool&#xff0c;布尔类型str&#xff0c;字符串类型list&#xff0c;列表类型tuple&#xff0c;元组类型dict&#xff0c;字典类型set&#xff0c;集合类型float&#xff0c;浮点类型&#x…

python Web开发 flask轻量级Web框架实战项目--学生管理系统

上次发的一篇文章&#xff0c;有很多朋友私信我要后面的部分&#xff0c;那咱们就今天来一起学习一下吧&#xff0c;因为我的数据库这门课选中的课题是学生管理系统&#xff0c;所以今天就以这个课题为例子&#xff0c;从0到1去实现一个管理系统。数据库设计部分我会专门出一个…

《Java 核心技术面试》课程笔记(十二)

Java 有几种文件拷贝方式&#xff1f;哪一种最高效&#xff1f; 典型回答 Java 有多种比较典型的文件拷贝实现方式&#xff0c;比如&#xff1a;利用java.io 类库&#xff0c;直接为源文件构建一个 FileInputStream 读取&#xff0c;然后再为目标文件构建一个 FileOutputStre…