【Verilog】UDP用户原语
User-defined primitives
- 概述
- 基本语法
- 组合逻辑的UDP
- 时序逻辑的UDP
- UDP 符号表
Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。
Verilog 不仅定义了语法,还对语法结构都定义了清晰的仿真语义。因此,Verilog 编写的数字模型就能够使用 Verilog 仿真器进行验证
概述
在使用 Verilog 进行门级建模的时候,除了使用内置的门单元(and、or、nor等)之外,还可以使用自定义的逻辑门,这些自定义的逻辑门就是 User-defined primitives (UDPs)。
and、or、nor 等这些门单元属于是 Verilog 自带的一整套标准原语,即通常所说的内置原语。
但是当我们需要使用更加复杂的门电路的时候,这些内置原语不能满足需求,就需要使用 UDPs。
UDPs的出现,给予了IC工程师定义自己设计的基本逻辑元件的能力。但是 UDP 语句没有办法综合,因此它更多的使用在验证功能上。
UDPs 可以分为如三类:
- 组合逻辑 UDPs
- 时序逻辑 UDPs
- 混合型 UDPs
基本语法
UDPs 的基本结构如下:
primitive name(/*在括号内定义端口*/); table/*在这里定义输入与输出的的关系*/endtableendprimitive
① primitive 和 endprimitive 类似于 module 和 endmodule;
② UDP可以有多个输入,但是只能存在一个输出,在端口声明的时候,输出端口需要处在第一个的位置上;
③ inout 双向端口在UDP中不被允许,同时无论是输入端口还是输出端口都必须是标量(即一位位宽);
④ 时序逻辑UDP,输出端口都需要定义成reg型;
⑤ 时序逻辑的UDP中,可以使用 initial 语句对 reg 类型变量(输出)进行赋初值;
组合逻辑的UDP
使用 UDPs 定义的一个 mux 如下所示:
primitive mux_tmp (q,d0,d1,s);output q; // 输出端口放在第一个intput s,d0,d1;table// d0 d1 s : q0 ? 0 : 0 ;1 ? 0 : 1 ;? 0 1 : 0 ;? 1 1 : 1 ;0 o x : 0 ;1 1 x : 1 ;endtable
endprimitive
关于状态表:
① 状态表的每一行的输出端口顺序一定要和端口列表相同;
② 输入和输出之间使用 : 隔开,每一行以 ; 结束;
③ 状态表中的值可以包含 0、1 或 x ,? 表示的是无关项。UDP不能处理z值,输入UDP的 z 值被当作 x 值处理;
④ 尽可能完整的列出UDP中的状态表,对于没有给出的输入组合情况,默认输出为不定态 x;
时序逻辑的UDP
① 时序逻辑的 UDP 的输出必须声明为 reg 类型,并且可以使用 initial 进行初始化;
② 时序逻辑 UDP 状态表的每一行内容为:<输入1><输入2>…<输入N> : <当前状态> : <下一状态>
③ 状态表的输入项可以是电平或者跳变沿的形式,输出项中的 - 表示的是状态保持不变
④ 当前状态是寄存器的当前值,下一状态是计算得到值会被存到寄存器中成为新值。
示例1:电平敏感
带清零端口的电平敏感的锁存器对应的 UDP 如下所示:
primitive latch(output reg q = 0input d, clock, clear);initial q = 0; // 锁存器的初始值为 0table // d clock clear : q : q+;? ? 1 : ? : 0;// clock = 1 时将 d 值锁存到 q 中1 1 0 : ? :1;0 1 0 : ? : 0;? 0 0 : ? : -;endtable
endprimitive
示例2:边沿敏感
带清零端口,时钟下降沿敏感的 D 触发器的 UDP 如下:
primitive edge_dff(output reg q=0input d, clock, clear);
table
// d clock clear : q : q+;? ? 1 : ? : 0 ;? ? (10) : ? : - ; //(10) 由1向0跳变1 (10) 0 : ? : 1 ;0 (10) 0 : ? : 0 ;? (1x) 0 : ? : - ; //(1x)由1向不确定状态跳变? (0?) 0 : ? : - ; ? (x1) 0 : ? : - ;(??) ? 0 : ? : - : //(??)信号值再0,1,x三者之间任意跳变
endtable
endprimitive
UDP 符号表

相关文章:
【Verilog】UDP用户原语
User-defined primitives 概述基本语法组合逻辑的UDP时序逻辑的UDPUDP 符号表 Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog 不仅定义了语法&…...
问题小记-达梦数据库报错“字符串转换出错”处理
最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题,这个问题主要是涉及到一条sql语句的执行,在此分享下这个报错的处理过程。 问题表现为:一样的表结构和数据,执行相同的SQL,在Oracle数据库中执行正常&…...
MyBatis入门的详细应用实例
目录 MyBatis第一章:代理Dao方式的CRUD操作1. 代理Dao方式的增删改查 第二章:MyBatis参数详解1. parameterType2. resultType 第三章:SqlMapConfig.xml配置文件1. 定义properties标签的方式管理数据库的信息2. 类型别名定义 MyBatis 第一章&…...
Sequelize ORM sql 语句工具
Sequelize ORM sql 语句工具 初始化配置 Sequelize orm 配置文章落日沉溺于海 在命令行中全局安装 npm i -g sequelize-clisequelize 执行需要匹配 mysql2 对应的依赖(安装 mysql2) npm i sequelize mysql2初始化项目 sequelize init熟悉初始化项目后…...
增强LabVIEW与PLC通信稳定性
在工业自动化系统中,上位机与PLC之间的通信稳定性至关重要,尤其是在数据采集和控制任务的实时性要求较高的场景中。LabVIEW作为常用的上位机开发平台,通过合理优化通信协议、硬件接口、数据传输方式以及系统容错机制,可以大大提升…...
UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作,请确认防火墙和网络设置允许UDP通信,并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...
NK细胞杀伐功能如何实现?
在人体的免疫系统中,自然杀伐细胞(Natural Killer Cells,简称NK细胞)是一类完全自然的免疫激活力量。它们为人体提供了快速反应能力,不依赖类元的特定识别力,但能直接寻找和毁灭毒病感染细胞和肿瘤细胞。那…...
Ubuntu搭建ES8集群+加密通讯+https访问
目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…...
PC寄存器(Program Counter Register)jvm
在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…...
预览和下载 (pc和微信小程序)
1.微信小程序 预览pdf 或者 图片等 //utils.js 文件//通过接口返回文件链接 打开文档 export default function previewFile({ downLinkUrl, tempFilePath }) {let url "https://" downLinkUrl.replace("http://", "").replace("https:…...
使用 DeepSpeed 微调 OPT 基础语言模型
文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…...
BSM和BMS什么区别?
BSM BSM(Battery System Manager)是指用于管理和控制电动车辆的电池系统的设备,其功能包括监测电池状态、控制充放电过程、保护电池安全等。 BMS BMS(Battery Management System)是指用于监测、控制和保护电池组的设…...
使用Maven打包javaagent.jar
1、简介 javaagent 是 Java1.5 之后引入的新特性,其主要作用是在class被加载之前对其拦截,以插入我们的字节码。 java1.5 之前使用的是JVMTI(jvm tool interface)技术来实现对class的拦截,不过这个是用 C 编写的&#…...
R语言混合模型回归GBTM群组轨迹模型绘图可视化研究
全文链接:https://tecdat.cn/?p38581 在回归分析的广袤领域中,面对具有多条未知函数线的复杂数据时,传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生,其在处理此类复杂情境时展现出独特的优势与潜力(…...
【毕业设计】A079-基于Java的影院订票系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
Vue.js前端框架教程11:Vue监听器watch和watchEffect
文章目录 监听器(watchers)基本用法deep: trueimmediate: true总结 watchEffect基本用法自动追踪依赖停止监听与 watch 的对比性能优化总结 监听器(watchers) 在 Vue 中,监听器(watchers)是一种…...
疾风大模型气象系统:精准预报,引领未来
精准预报,引领未来 在当今快速变化的世界中,天气预报已成为日常生活和社会运行中不可或缺的一部分。从规划日常出行到防范极端天气影响,高精准的气象服务正在重新定义我们的生活方式。而在这一领域,疾风大模型气象系统以其卓越的技术实力和领先的预测能力,正引领气象服务…...
U9应收单拉单生成时找不到退货单
财务说做应收单时抓不到一张退货单。2022年单据。这样的单据让人联想翩翩,胡思乱想。怎么复杂怎么想,钻了牛角尖。分析了1天也没有结果。不知道系统的逻辑,只能用猜想的形式去分析。 问过顾问之后,原来是单据类型错了。从而知道了…...
设计模式--单例模式【创建型模式】
设计模式的分类 我们都知道有 23 种设计模式,这 23 种设计模式可分为如下三类: 创建型模式(5 种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式(7 种)࿱…...
挑战一个月基本掌握C++(第七天)了解指针,引用,时间,输入输出,结构体,vector容器,数据结构 - 通用完结
一 指针 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 下面的实例,它将输出定义的变量地址: #include <iostream>using…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
