当前位置: 首页 > news >正文

Verilog基础:模块端口(port)定义的语法(2001标准)

相关阅读

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        Verilog中的端口定义有两种风格,一种是Verilog Standard 1995风格,一种是Verilog Standard 2001风格,本文将对Verilog Standard 1995风格进行详细阐述。

        首先来看一下模块定义的BNF范式(语法),有关BNF范式相关内容,可以参考之前的文章。

Verilog基础:巴科斯范式(BNF)icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/article/details/132567389?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172381461616800207085955%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172381461616800207085955&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-132567389-null-null.nonecase&utm_term=BNF&spm=1018.2226.3001.4450

图1 模块定义的BNF范式

        从上图可以看出,module_declaration有两种形式,由符号|分隔:前一种使用list_of_ports形式的是Verilog Standard 1995风格;后一种使用list_of_port_declarations形式的是Verilog Standard 2001风格,这是一种ANSI C风格的形式(对于一个模块来说,只能二选其一)。 

        图2将图1中与端口定义有关的语法单独列出来了。 

图2 端口定义的BNF范式 

         下面将对Verilog Standard 2001风格端口定义的格式进行逐步分析。

list_of_port_declarations

        list_of_port_declarations是用小括号包围的一个或多个port_declaration(如有多个,用逗号分隔),它还可以只是简单的左右括号,表示没有一个没有输入输出端口的模块(比如testbench)。有三个类型的port declaration:输入端口声明、输出端口声明和双向端口声明,它们的BNF范式如图3所示。

图3 端口声明的BNF范式

        从图3中我们可以看出,输入端口和输出端口有可选的net_type,这是因为输入端口的连接就像是一个assign连续赋值,作为等号左边的信号自然得是net大类(图4所示,除了trireg类型),其中wire类型最常用。 

图4 net大类 

        输出端口则没有这些限制,所以它可以是net大类(除了trireg类型),也可以是variable大类中的reg,integer和time类型。 

        port declaration可以用net_type,reg,signed,range,描述一个信号的信息。

        与Verilog Standard 1995风格不同的是, Verilog Standard 2001风格能够减少端口定义时的重复说明,如下例所示。

// 1995风格的端口声明
module my_module (input1, input2, output1, output2);// 端口方向和位宽定义input [7:0] input1;input [7:0] input2;output [7:0] output1;output [7:0] output2;// 信号类型定义wire [7:0] input1;wire [7:0] input2;reg [7:0] output1;reg [7:0] output2;// 逻辑实现// ********
endmodule// 2001风格的端口声明
module my_module (input wire [7:0] input1,input wire [7:0] input2,output reg [7:0] output1,output reg [7:0] output2
);// 逻辑实现// ********
endmodule

        但Verilog Standard 2001风格不支持Verilog Standard 1995风格中的显式端口的特性,即.port_identifier加上可选的port_expression这种形式。同时也不支持port_reference拼接,且port_reference必须是一个简单的标识符(包括转义标识符)而不是向量的常量位选或常量域选(见图中的constant_range_expression)。

        不能使用net declaration或variable declaration对其再次进行声明也导致了不能使用[delay3]可选项和线网声明赋值(尽管这很少见),即如下所示的Verilog Standard 1995风格的特性。

module examlpe(a, b);// port declarationinput a;input [1:0] b;// additional declarationwire a=1'b1;      // 线网声明赋值wire [1:0] #1 b;  // [delay3]endmodule

Verilog基础:模块端口(port)定义的语法(1995标准)icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/article/details/141254289?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22141254289%22%2C%22source%22%3A%22weixin_45791458%22%7D

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++基础编程100题-040 OpenJudge-1.5-01 求平均年龄
  • 大语言模型的简易可扩展增量预训练策略
  • 代码随想录算法训练营day43 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 水库大坝安全监测:筑起水坝安全防线
  • 搜索最新全国工商信息的软件
  • 【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)
  • 代码随想录算法训练营第十六天
  • android13 禁用wifi
  • 【单片机】51单片机入门教程(一):深入理解普通IO口与外部中断
  • 哪些平台和市场备受大卖们青睐?今年第二季度热门平台排行
  • C语言的结构体在内存中是如何存放的?
  • [Spring] Spring事务与事务的传播
  • 以下关于revision历史版本说法正确的是:
  • C语言-使用指针数组作为函数参数,实现对10个字符串进行排序
  • 海南云亿商务咨询有限公司引领抖音电商新潮流
  • #Java异常处理
  • Git的一些常用操作
  • javascript面向对象之创建对象
  • js 实现textarea输入字数提示
  • node.js
  • nodejs调试方法
  • SAP云平台里Global Account和Sub Account的关系
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 仿天猫超市收藏抛物线动画工具库
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 普通函数和构造函数的区别
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 新书推荐|Windows黑客编程技术详解
  • 用简单代码看卷积组块发展
  • 云大使推广中的常见热门问题
  • ​一些不规范的GTID使用场景
  • #pragma pack(1)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (2.2w字)前端单元测试之Jest详解篇
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (九)c52学习之旅-定时器
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)汇编语言——简单程序
  • (转)shell调试方法
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .DFS.
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC之AOP
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 回调、接口回调、 委托
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .Net组件程序设计之线程、并发管理(一)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @ComponentScan比较
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择