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

news/2024/5/28 2:53:19/

目录

用户定义原语

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.ppmy.cn/news/1405257.html

相关文章

EFPN代码解读

论文 Extended Feature Pyramid Network for Small Object Detection python3 D:/Project/EFPN-detectron2-master/tools/train_net.py --config-file configs/InstanceSegmentation/pointrend_rcnn_R_50_FPN_1x_coco.yaml --num-gpus 1 训练脚本 cfg 中的配置 先获取配置…

Python(乱学)

字典在转化为其他类型时,会出现是否舍弃value的操作,只有在转化为字符串的时候才不会舍弃value 注释的快捷键是ctrl/ 字符串无法与整数,浮点数,等用加号完成拼接 5不入??? 还有一种格式化的方法…

Java(内部类)

1.内部类 内的五大成员:属性、方法、构造方法、代码块、内部类 解释:在一个类的里面,再定义一个类。举例:在A类的内部定义B类,B类就被称为内部类注意:内部类表示的事物是外部类的一部分,内部类单独出现没…

pymc,一个灵活的的 Python 概率编程库!

目录 前言 安装与配置 概率模型 贝叶斯推断 概率分布 蒙特卡罗采样 贝叶斯网络 实例分析 PyMC库的应用场景 1. 概率建模 2. 时间序列分析 3. 模式识别 总结 前言 大家好,今天为大家分享一个超强的 Python 库 - pymc Github地址:https://gith…

JavaScript 对象管家 Proxy

JavaScript 在 ES6 中,引入了一个新的对象类型 Proxy,它可以用来代理另一个对象,并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人,其提供了一个捕捉器函数,可以在代理对象上拦截…

Qt中实现域(Unix)套接字通信

Qt中实现域&#xff08;Unix&#xff09;套接字通信可以使用QLocalServer和QLocalSocket类。以下是一个简单的示例&#xff0c;演示了如何在两个Qt应用程序之间使用域套接字进行通信。 一、在服务器端&#xff1a; cpp Copy code #include <QtWidgets> #include <QL…

Linux(centos7)部署spark

Spark部署模式主要有4种:Local模式(单机模式)、Standalone模式(使用Spark自带的简单集群管理器)、Spark On Yarn模式(使用YARN作为集群管理器)和Spark On Mesos模式(使用Mesos作为集群管理器)。 下面介绍Local模式(单机模式)、跟Spark On Yarn模式(使用YARN作为集…

OpenHarmony实战:轻量级系统之子系统移植概述

OpenHarmony系统功能按照“系统 > 子系统 > 部件”逐级展开&#xff0c;支持根据实际需求裁剪某些非必要的部件&#xff0c;本文以部分子系统、部件为例进行介绍。若想使用OpenHarmony系统的能力&#xff0c;需要对相应子系统进行适配。 OpenHarmony芯片适配常见子系统列…

Git常用语句

设置用户名 git config --global user.name "用户名" git config --global user.email "邮箱"查看git用户信息 cat ~/.gitconfig初始化本地库 git initclone指定分支的代码 git clone -b my_branch gitgitlabxxxxxxxxxxxxxxxxxxxxxx.gitpush三件套 gi…

Golang- 邮件服务,发送邮件

依赖 go get -u github.com/jordan-wright/email文档 文档 示例代码 邮箱的相关配置 # email configuration email:port: 25 # 端口要配置25 否则可能出现EOF错误from: xxx1qq.comhost: smtp.qq.comis-ssl: truesecret: xxxxxnickname: 大锦余发送邮件代码 package utili…

合宙4G模块Air724UG调试过程(短信发送、上传数据到华为云IOT)

合宙Air724UG-4G模块AT指令调试接线演示 一、前言 上海合宙Air724UG模块是一款高性能的4G Cat.1通信模组(全网通模块,支持移动、联通、电信,支持短信和网络通信),为开发者提供了丰富的接口和开发方式。 在本文中,将详述调试与集成该模块的关键步骤: (1)从基础硬件配…

PyTorch深度学习——框架简介

深度学习的算法是高度结构化的&#xff0c;主要组成部分是线性变换、激活函数、反向传播和梯度优化等模块&#xff0c;实际应用中&#xff0c;为了方便算法的实现&#xff0c;常会将算法模型抽象成对张量的一系列计算&#xff0c;并将计算设计的一些算法抽象层应用程序接口API供…

dm8 开启归档模式

dm8 开启归档模式 1 命令行 [dmdbatest1 dm8]$ disql sysdba/Dameng123localhost:5237服务器[localhost:5237]:处于普通打开状态 登录使用时间 : 3.198(ms) disql V8 SQL> select name,status$,arch_mode from v$database;行号 NAME STATUS$ ARCH_MODE ----------…

数字化营销:电子元器件商城的新战略路径

数字化营销对于电子元器件商城来说是一种重要的新战略路径&#xff0c;可以通过以下方式实施&#xff1a; 建立网上商城平台&#xff1a;搭建一个用户友好的网上商城平台&#xff0c;提供方便快捷的在线购物体验。通过优化网站界面设计、提供多样化的搜索和筛选功能&#xff0c…

uniapp路由传参存在数据类型失真的问题

export default {methods: {jump() {// 通过params传参this.$Router.push({name: demo, params: {number:1,name: 123,value: null}})}} }目标模块接收参数&#xff1a; export default {onLoad() {// 获取参数const {number,name, value} this.$Route.queryconsole.log(numb…

CITE 2024 开幕在即,共赴电子制造业一体化协同增长

“展望2024年&#xff0c;人工智能的热点将持续引领行业趋势&#xff0c;全球对算力的需求预计将持续快速增长。人工智能在前沿技术的开发、产品的商业化落地、市场开拓以及产业链布局等方面的竞争将进一步加剧。 智能可穿戴设备、智能家居等新兴消费电子产品&#xff0c;经过过…

Python 之 Flask 框架学习

毕业那会使用过这个轻量级的框架&#xff0c;最近再来回看一下&#xff0c;依赖相关的就不多说了&#xff0c;直接从例子开始。下面示例中的 html 模板&#xff0c;千万记得要放到 templates 目录下。 快速启动 hello world from flask import Flask, jsonify, url_forapp F…

争光树脂邀您到场参观2024年第13届生物发酵展

参展企业介绍 宁波争光树脂有限公司成立于2006年11月&#xff0c;是浙江争光实业股份有限公司的全资子公司&#xff0c;公司专业生产离子交换树脂&#xff0c;产品的应用领域主要涉及电厂、核能、石油、化工、轻工、医药、食品、饮料、冶金、环保、生物等领域&#xff0c;年生…

vue源码解析——vue如何将template转换为render函数

Vue 将模板&#xff08;template&#xff09;转换为渲染函数&#xff08;render function&#xff09;是 Vue 编译器的核心功能&#xff0c;它是 Vue 实现响应式和虚拟 DOM 的关键步骤。在 Vue 中&#xff0c;模板&#xff08;template&#xff09;是开发者编写的类似 HTML 的代…

WPF-基础及进阶扩展合集(持续更新)

目录 一、基础 1、GridSplitter分割线 2、x:static访问资源文件 3、wpf触发器 4、添加xaml资源文件 5、Convert转换器 6、多路绑定与多路转换器 二、进阶扩展 1、HierarchicalDataTemplate 2、XmlDataProvider从外部文件获取源 3、TextBox在CellTemplate中的焦点问题…