Verilog语法回顾--用户定义原语

目录

用户定义原语

UDP定义

UDP状态表

状态表符号

组合UDP

电平敏感UDP

沿敏感时序UDP


参考《Verilog 编程艺术》魏家明著

用户定义原语

用户定义原语(User-defined primitive,UDP)是一种模拟硬件技术,可以通过设计新的原语单元扩大门原语集合。UDP可以和门原语一样使用,用于表示要模拟的电路。

UDP分为两种:

1.组合UDP:使用输入值决定下一个输出值。

2.时序UDP:使用输入值和当前值决定下一个输出值,他可以模拟边沿敏感和电平敏感的行为,所以可以用来模拟触发器和锁存器。

每个UDP只能有一个输出,只能有3种状态:0,1和x。不支持z,如果输入值是z,那就就被当作x。对于时序UDP,输出值总是和内部状态保持一致。

UDP定义

UDP的定义独立于模块,它们和模块定义具有同样的语法层次,不能出现在关键字 module 和 endmodule 之间。

1.使用 primitive 和 endprimitive 定义UDP

2.使用与模块一样的方式声明端口和内部变量

3.使用内部状态表(State table)模拟UDP行为

4.UDP的实例化与模块的实例化类似,但是实例名是可选的,还可以使用延迟值。

UDP状态表

用于定义UDP的行为

1.状态表处于关键字 table endtable 之间,每一行要用分号 ;结束。

2.状态表的每一行都由一些字符组成,用于指出输入值和输出状态,支持01x,不支持z

3.状态表每一行输入状态的顺序要和UDP端口列表的顺序保持一致

4.对于组合UDP,输入信号一个区,输出信号一个区,输入区和输出区要用:分开。每一行用于定义在特定输入下的输出

5.对于时序UDP,在输入区和输出区之间要插入一个附加区。附加区用于表示当前UDP的状态,等价于当前输出值。这三个区同样用:分开。每一行用于定义在当前状态和特定输入组合下的输出。

6.如果所有输入都是x,那么输出值也是x。

7.没有必要清晰地列出所有输入组合,因为对于没有列出的输入组合,输出值默认x

8.不能对同样输入值的组合指定不同的输出值。

状态表符号

组合UDP

primitive tsmc_mux(q, d0, d1, s);output q;input d0, d1, s;table// d0  d1  s   q0   ?   0 : 0;1   ?   0 : 1;?   0   1 : 0;?   1   1 : 1;0   0   X : 0;1   1   X : 1;endtable
endprimitive

电平敏感UDP

与组合UDP的行为类似,只不过输出是reg类型,而且状态表表中要增加一个附加区。附加区用于表示当前UDP的状态,输出区用于表示UDP的下一个状态。

例子:简单的latch

primitive simple_latch(q, clock, data);output reg q;input clock, data;table//clock  data  q   q+0       1 : ? : 1;0       0 : ? : 0;1       ? : ? : -;endtable
endprimitive

例子: 带有复位和置位的Latch

primitive complex_latch(q, d, e, cdn, sdn, notifier);output reg q;input d, e, cdn, sdn, notifier;table1 1 1 ? ? : ? : 1;0 1 ? 1 ? : ? : 0;0 (10) 1 1 ? : ? : 0;1 (10) 1 1 ? : ? : 1;* 0 ? ? ? : ? : -;? ? ? 0 ? : ? : 1;? 0 1 * ? : 1 : 1;1 ? 1 * ? : 1 : 1;1 * 1 ? ? : 1 : 1;? ? 0 1 ? : ? : 0;? 0 * 1 ? : 0 : 0;0 ? * 1 ? : 0 : 0;0 * ? 1 ? : 0 : 0;? ? ? ? * : ? : x;endtable
endprimitive

沿敏感时序UDP

1.表中每一行最多只能有一个输入信号发生变化,(01) (10) 0 : 0 : 1,非法

2.对于所有没有指明的转换,输出默认为x

3.对于所有不改变输出状态的转换都要清晰的指明,否则就会导致输出变成x

4.如果时序UDP对每个输入的沿都敏感,那么这些沿在表中都要列出来

5.对于时序UDP,可以使用initial语句给输出状态一个初始值。

例子:简单的触发器

primitive simple_dff (q, clock, data);output reg q;input clock, data;table//clock data q q+// obtain output on rising edge of clock(01) 0 : ? : 0;(01) 1 : ? : 1; (0?) 1 : 1 : 1;(0?) 0 : 0 : 0;// ignore negative edge of clock(?0) ? : ? : -;// ignore data changes on steady clock? (??) : ? : -;endtable
endprimitive

UDP允许把沿敏感和电平敏感混合在一起使用。当输入变化时,沿敏感的变化先处理,电平敏感的变化后处理,所以当沿敏感和电平敏感的变化得出不同状态时,最后结果由电平敏感变化的结果决定。

例子:复杂JK触发器

primitive complex_jk_ff(q, clock, j, k, preset, clear);output reg q;input clock, j, k, preset, clear;table// clock  jk  pc  state  ouptut/next state?    ??  01 :   ?   :  1;?    ??  *1 :   1   :  1;?    ??  10 :   ?   :  0;?    ??  1* :   0   :  0;x    00  00 :   0   :  1;x    00  11 :   ?   :  -;x    01  11 :   ?   :  0;x    10  11 :   ?   :  1;x    11  11 :   0   :  1;x    11  11 :   1   :  0;f    ??  ?? :   ?   :  -;b    *?  ?? :   ?   :  -;b    ?*  ?? :   ?   :  -;endtable
endprimitive

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

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

相关文章

人工智能产业应用--具身智能

五、下一个浪潮 (一) 跳出缸中脑——虚实结合 在探索人工智能的边界时,“跳出缸中脑——虚实结合”这一概念提出了一个引人深思的视角,尤其是在具身智能的领域。具身智能是一种思想,强调智能体通过与其环境的直接物理互动来实现智能行为。然…

【JavaScript编程】ArrayBuffer转JSON

将ArrayBuffer转换为JSON是一个复杂的过程,因为它涉及到从二进制数据到文本数据的转换。 步骤如下: 将ArrayBuffer转换为字节数组:你可以使用Uint8Array或其他TypedArray视图来读取ArrayBuffer中的数据。 解码字节数组:使用Text…

QT-左框选项卡软件界面框架

QT-左框选项卡软件界面框架 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <QTextBrowser> #include <QLabel> #include <QPushButton> #include <QSpacerItem> #include <QToolButton> #include <QDebug> #i…

在 QML 中,ComboBox 是一种常用的用户界面控件,通常用于提供一个下拉式的选择框,允许用户从预定义的选项列表中选择一个值

ComboBox 详解&#xff1a; 以下是 ComboBox 的一些重要属性和特性&#xff1a; model: 用于指定 ComboBox 中的选项列表&#xff0c;可以是一个数组、列表、模型或者其他可迭代的数据结构。 editable: 用于指定是否允许用户编辑 ComboBox 中的文本输入框&#xff0c;以便输入…

【MyBatis】MyBatis的介绍和基本使用

目录 一、数据库操作框架的历程 1.1 JDBC 1.2 DBUtils 1.3 Hibernate 1.4 Spring JDBC&#xff1a;JDBCTemplate 1.5 Spring Data JPA 二、什么是MyBatis&#xff1f; 2.1 传统JDBC与MyBatis相比的弊病 2.2 MyBatis中的组件 2.3 MyBatis的体系结构 三、快速搭建MyBa…

Linux的中间件

我们先补充点关于awk的内容 awk的用法其实很广。 $0 表示整条记录 变量&#xff1a; NF 一行中有多少个字段&#xff08;表示字段数&#xff09; NR &#xff1a; 代表当前记录的序号&#xff0c;从1开始计数。每读取一条记录&#xff0c;NR的值就会自动增加1。&#xff08;…

鸿蒙TypeScript入门学习第5天:【TypeScript 运算符】

1、TypeScript 运算符 运算符用于执行程序代码运算&#xff0c;会针对一个以上操作数项目来进行运算。 考虑以下计算&#xff1a; 7 5 12复制以上实例中 7、5 和 12 是操作数。 运算符 用于加值。 运算符 用于赋值。 TypeScript 主要包含以下几种运算&#xff1a; 算…

NEO 学习之 MLE(最大似然估计)

文章目录 简单题目MLE 在不同的分布的运用正态分布指数分布均匀分布泊松分布 如何理解 最大似然估计&#xff1f; 就是我们先取出一堆样本&#xff0c;得到一个L( θ \theta θ) 函数&#xff0c;然后的话&#xff0c;这个是关于 θ \theta θ 的一个函数&#xff0c;那么由于存…

深入解析前端安全性:构建强大的安全防线

在数字时代的浪潮中&#xff0c;前端作为用户与应用程序之间的重要桥梁&#xff0c;其安全性问题日益凸显。前端安全性的缺失不仅可能导致用户数据泄露、隐私被侵犯&#xff0c;引发更为严重的经济损失和声誉损害&#xff0c;还可能对整个系统造成严重的安全威胁。因此&#xf…

华为昇腾云认证考试内容有哪些?华为昇腾云认证考试报名条件

华为昇腾云认证是华为针对其昇腾计算平台及云服务相关技术所推出的一项专业认证。该认证旨在评估和证明IT专业人员在昇腾计算环境及云服务领域的专业知识、技能和实操能力。以下是关于华为昇腾云认证的一些关键信息&#xff1a; 认证内容&#xff1a; 昇腾计算平台的基础知识、…

C++的入门学习

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一、C关键字(C98) 二、命名空间 2.1 引入 ​编辑2.2 命名空间定义 2.3 命名空间的使用 三. C输入&输出 四.缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 1.全缺省参数 2…

HTTP 协议的基本格式

一 HTTP是什么 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。 HTTP协议的主要特点包括&#xff1a; 无连…

七、Audio,Paper or Kindle:What‘s the best way to read a book?听书、纸书、电纸书,阅读方式该怎么选?

Whats the most effective way to read a book?Should you stick to paper books you can flip the pages, dog-ear and write notes in the margin?What about Kindle or other eReaders, which let you download new books instantly and cheaply?Is it okay to listen to…

针对鼠标滚轮使用时滚动上下跳动失灵问题的极简有效处理办法

首先&#xff0c;如果你遇到时不时的往下滚屏幕却往上跳&#xff0c;这种情况下基本可以肯定是鼠标自身的问题&#xff0c;而非电脑上的程序出错。 解决方法&#xff1a; 1.深吸一口气&#xff0c;然后深情地稳住鼠标滚轮上方&#xff08;打错了&#xff0c;应该是吻住&#…

经验分享:企微文档是什么?对企业有什么用处?

许多在企业单位工作的小伙伴应该都用过企业微信&#xff0c;这是一个专为企业打造的高效办公平台。然而&#xff0c;你是否了解其中的一个功能—企微文档呢&#xff1f;在这篇文章中&#xff0c;我将详细的解读一下企微文档是什么和它对企业的益处。 那么&#xff0c;什么是企微…

多目标优化算法 | Python实现多目标优化算法NSGA-II

目录 概述代码小结概述 多目标优化是解决同时优化多个目标函数的问题,通常涉及在多个决策变量的空间中找到一组解,这组解在一个目标上的优化会影响另一个目标。 NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种经典的多目标优化算法,它是基于遗传算法的改进版…

六、Django开发

六、Django开发 1.新建项目2.创建app2.1 第一种方法&#xff1a;2.2 利用pycharm中tools工具直接创建app 3.设计表结构&#xff08;django&#xff09;4.在MySQL中生成表5.静态文件管理6.部门管理6.1 部门列表 7.模板的继承8.用户管理8.1初识Form1.views.py2.user_add.html 8.2…

如何做一个知识博主? 善用互联网检索

Google 使用引号: 使用双引号将要搜索的短语括起来,以便搜索结果中只包含该短语。例如,搜索 "人工智能" 将只返回包含该短语的页面。 排除词汇: 在搜索中使用减号 "-" 可以排除特定词汇。例如,搜索 "苹果 -手机" 将返回关于苹果公司的结果,但…

7_springboot_shiro_jwt_多端认证鉴权_自定义AuthenticationToken

1. 目标 ​ 本小节会先对Shiro的核心流程进行一次回顾&#xff0c;并进行梳理。然后会介绍如果应用是以API接口的方式提供给它方进行调用&#xff0c;那么在这种情况下如何使用Shiro框架来完成接口调用的认证和授权。 2. 核心架构 引用官方的架构图&#xff1a; 2.1 Subje…

Kimball维度模型之迟到的事实

在数据仓库建设的过程中&#xff0c;面对不断涌现的数据和信息&#xff0c;处理“迟到的事实”是一个至关重要的挑战。所谓“迟到的事实”&#xff0c;指的是在数据仓库已经建立并开始运行后&#xff0c;新增的数据或信息却具有之前时间戳的情况。这可能由于数据采集的延迟(比如…