后仿中必须读懂的User-defined primitives(UDP)

news2024/10/4 10:19:22

一 UDP定义规则

UDP,全名:User-defined primitives。 用户自己定义的原语。

UDP可分为:combinational UDP(组合逻辑)和 sequential UDP(时序逻辑)。

1.1 组合逻辑UDP

combinational UDP用于构建组合逻辑模型,常见有mux模块.

如下案例为2选1的mux,sel为1时,out为in1;sel为0时,out为in0。

请注意:信号列表中,输出信号out在第一个。状态表中,out处于最后一列。

1.2 时序逻辑UDP

sequential UDP用于构建寄存器DFF和锁存器latch模型。自然而来,sequential UDP可以是边沿触发,也可以是电平触发。

  • 时序逻辑 UDP 的输出端必须声明为 reg 型
  • 时序逻辑 UDP 可以用 initial 语句初始化
  • 状态表格式也稍有不同,时序UDP 格式 : ...    :  <current_state>  :  <next_state>  ;
  • 时序逻辑 UDP 状态表每行由 3 部分组成:输入部分、当前状态和输出状态,用冒号":"隔开
  • current_state 就是输出寄存器的当前值, next_state 就是输出寄存器的新值;next_state 由输入和 current_state 共同决定;
  • 状态表的输入项可以是电平,也可以是跳边沿的形式
1.2.1 电平触发UDP

 电平触发 UDP 的输出是根据输入电平状态的改变而改变。

带有清零端的 D 锁存器的功能描述为:

清零端为 1 时,输出端恒为 0 ;
清零端为 0 、使能控制端为 1 时,锁存器透明,输出端等于输入端;
清零端为 0 、使能控制端为 0 时,锁存器呈保持状态,输出端保持不变。
其真值表为(q 表示当前状态,q+ 表示下一个状态):

其实编写 UDP 的过程,可以理解为换一种格式编写真值表的过程。

带有清零端的 D 锁存器的 UDP 可以描述如下:

primitive d_latch(q, clear, en, d);
   output       q ;
   reg          q ;
   input        d, en, clear ;
 
   initial
     q = 0 ;
 
   table
    //clear     en      d       :q      :q+ ;
      1         ?       ?       :?      :0 ;    //clear
      0         0       ?       :?      :- ;    //"-" means stable
 
      0         1       0       :?      :0 ;    //q = d
      0         1       1       :?      :1 ;
   endtable
endprimitive

当然,也可以在罗列端口信号时就声明其类型,并且赋初值。

primitive d_latch2(
   output reg   q = 0,
   input        clear, en, d);
   ......
endprimitive

如下案例为一个低电平触发的latch。使用reg申明了一个内部变量,表示当前状态q,即当前udp的输出状态。table中的q+代表的是下一个有效周期的输出状态。

 

1.2.2 边沿触发UDP

边沿触发 UDP 的输出,是根据输入跳边沿和(或)输入电平状态的改变而改变。

下面举例,带有异步复位端(RST)且在时钟下降沿采集信号的 D 触发器的"真值表":

此"真值表"中还加入了上下沿的概念,是为了方便编写 UDP 代码。

此 D 触发器的时序逻辑 UDP 描述如下:

primitive D_TRI(
            output reg  Q = 0,
            input       RST, CP, D);
   table
      //RST       CP      D       :Q      :Q+ ;
      //(描述1) 清零
      1         ?       ?       :?      :0 ;  //RST=1 时清零
      (??)      ?       ?       :?      :- ;  //忽略 RST 边沿变化
      //(描述2) 时钟下降沿采集
      0         (10)    0       :?      :0 ;  //时钟下降沿采集信号
      0         (10)    1       :?      :1 ;
      //(描述3)possible negedge
      0         (1x)    ?       :?      :- ;  //可能是时钟下降沿时保持
      0         (x0)    ?       :?      :- ;
      //(描述4) 时钟上升沿保持
      0         (0?)    ?       :?      :- ;  //时钟上升沿时保持
      //(描述5)possible posedge
      0         (x1)    ?       :?      :- ;  //可能是时钟上升沿时保持
      //(描述6) 非时钟沿变化时,即便数据有跳变,输出仍然保持
      0         ?       (??)    :?      :- ;  
   endtable
endprimitive // D_TRI

 注意:

(1)状态表每行多个输入部分,最多只能有一个跳边沿,例如下面状态表的表述是错误的。

   table
      ......
      (10)     (10)    1       :?      :1 ;
   endtable

(2)电平触发的状态表输入项,其优先级高于边沿触发的状态表输入项。若两者在同一时刻出现,则输出端的状态由电平触发的状态表决定。

例如上述 D 触发器中,RST 可以看做是电平触发,CP 可以看做是边沿触发。当 RST 上升沿与 CP 端下降沿同时刻来临时,输出端会变为 0 ,如下图 cap 时刻。当然,实际的时序应该避免时钟和复位边沿同时到来。

(3)边沿触发 UDP 中,必须为每一个输入信号都指定边沿变化时输出信号的变化情况,否则在该信号的跳变沿处可能会造成输出端为 X 。

例如缺少 RST 边沿变化的说明:

    //(??)    ?       ?       :?      :- ; //忽略 RST 边沿变化

则在 RST 下降沿输出会变为 x。

再例如缺少时钟稳定、D 端数据变化时的说明:

    //(4) 非时钟沿变化时,即便数据有跳变,输出仍然保持
    //0         ?       (??)    :?      :- ;

则 D 端数据变化的边沿处也会使输出为 x。

如下所示为一个上升沿触发寄存器的模型。其中NOTIFIER信号用于建立时间和保持时间检查,通过建立时间和保持时间检查,则NOTIFIER不变,时序检测不通过则NOTIFIER翻转,udp_dff输出为x态。后仿真中的NOTIFIER是干什么用的!-CSDN博客

二 UDP 状态表符号缩写

三 UDP 设计指导 

针对数字设计时是选择使用 module 还是 primitive,要从设计需求、复杂度等方面进行综合考虑。下面给出一些指导性的建议。

  1. UDP 只能进行功能性建模,不能对电路时序和制造工艺(例如 CMOS,TTL等)进行建模。使用 UDP 的主要目的是以类似于真值表的简洁形式对数字设计进行建模,而 module 可以包含电路时序,并指定制造工艺。
  2. UDP 只能完成有一个输出端口的数字设计。当输出端口大于一个时,只能用 module。
  3. UDP 是使用内存中的查找表实现的,当输入端口较多时,输入端口的组合将会呈指数增长。UDP 输入端口的数量也会受到仿真器的限制。因此输入端口较多时不宜使用 UDP。
  4. 选择使用 UDP 以后,一定要尽可能的用缩写符完整的描述 UDP 状态表。漏掉输入的组合情况,输出端可能会出现 X 的状态,造成设计错误。

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

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

相关文章

Gradio之blocks灵活搭建页面

这里写目录标题 搭建一个UI界面搭建上半部分的框架比例调节以及其他效果搭建下半部分左边部分搭建下半部分右边部分拓展-CSS的应用 使用标签搭建第二个页面示例 补充AccordionGroup() 搭建一个UI界面 搭建上半部分的框架 如下图&#xff0c;我们想要基本还原下图右边的UI界面…

PVZ2 植物克僵尸【第二期】

众所周知&#xff0c;PVZ2&#xff08;植物大战僵尸2&#xff09;中有许多恶心的僵尸&#xff0c;而我们不得不派出它们的————克星&#xff01;&#xff08;*为建议方法&#xff09; 5.战机小鬼 战机小鬼&#xff0c;恶心会发射子弹&#xff0c;所以&#xff1a; 1&…

【华为OD机试】攀登者2(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[…

[Java EE] 多线程(九):ReentrantLock,Semaphore,CountDownLatch与线程安全的集合类(多线程完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

力扣437. 路径总和 III

Problem: 437. 路径总和 III 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义int类型函数rootSum(root, targetSum)&#xff0c;用于求取每一个节点等于目标函数的路径数&#xff1a; 1.1.易知rootSum(root, targetSum)求出的数量等于rootSum(root.left, targetSum - va…

智慧公厕建设,打造智慧城市基础设施新亮点

公共厕所是城市基础设施的重要组成部分&#xff0c;而智慧公厕的建设则是现代城市管理的创新之举。为了实现公厕的精细化管理和提供更便捷的服务&#xff0c;推进智慧公厕建设必须要实现技术融合、业务融合、数据融合的目标&#xff0c;跨越层级、地域、系统、部门和业务的限制…

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与…

自动化运维管理工具----------Ansible模块详细解读

目录 一、自动化运维工具有哪些&#xff1f; 1.1Chef 1.2puppet 1.3Saltstack 二、Ansible介绍 2.1Ansible简介 2.2Ansible特点 2.3Ansible工作原理及流程 2.3.1内部流程 2.3.2外部流程 三、Ansible部署 3.1环境准备 3.2管理端安装 ansible 3.3Ansible相关文件 …

机器学习第二天(监督学习,无监督学习,强化学习,混合学习)

1.是什么 基于数据寻找规律从而建立关系&#xff0c;进行升级&#xff0c;如果是以前的固定算式那就是符号学习了 2.基本框架 3.监督学习和无监督式学习&#xff1a; 监督学习&#xff1a;根据正确结果进行数据的训练&#xff1b; 在监督式学习中&#xff0c;训练数据包括输…

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构&#xff1a;方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…

Day1| Java基础 | 1 面向对象特性

Day1 | Java基础 | 1 面向对象特性 基础补充版Java中的开闭原则面向对象继承实现继承this和super关键字修饰符Object类和转型子父类初始化顺序 多态一个简单应用在构造方法中调用多态方法多态与向下转型 问题回答版面向对象面向对象的三大特性是什么&#xff1f;多态特性你是怎…

基于Springboot+Vue的Java项目-鲜牛奶订购系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

matplotlib和pandas与numpy

1.matplotlib介绍 一个2D绘图库&#xff1b; 2.Pandas介绍&#xff1a; Pandas一个分析结构化数据的工具&#xff1b; 3.NumPy 一个处理n纬数组的包&#xff1b; 4.实践&#xff1a;绘图matplotlip figure()生成一个图像实例 %matplotlib inline&#xff1a;图形直接在…

​​【收录 Hello 算法】3.3 数字编码

目录 3.3 数字编码 3.3.1 原码、反码和补码 3.3.2 浮点数编码 3.3 数字编码 Tip 在本书中&#xff0c;标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难&#xff0c;可以先跳过&#xff0c;等学完必读章节后再单独攻克。 3.3.1 原码、反码和补码 在…

重装win11系统后找不到WiFi

由于电脑崩溃重装了系统&#xff0c;win11,装完之后WiFi图标不见了且网络适配器根本没有无线网络选项。 右键电脑》管理》网络适配器。 在刚装好系统时候并没有前两项&#xff0c;查了很多资料&#xff0c;比如 关机14s 重启&#xff0c;还有通过服务配置 WLAN AutoConfig 都…

值得收藏!修复Windows 10/11中找不到输出或输入设备的五种方法

序言 这篇文章主要关注处理声音输出/输入设备未发现的问题。它提供了许多可行的方法,帮助了许多Windows用户。阅读以下内容以找到你的解决方案。 最近,我将Windows 10更新到21H2,发现我的音频无法工作。当我把鼠标放在任务栏上的声音图标(上面有一个十字图标)上时,它会…

word:三线表的绘制【攻略】

word&#xff1a;三线表的绘制【攻略】 前言版权推荐word&#xff1a;三线表的绘制效果简单方法另外的方法 最后 前言 2024-5-7 18:25:08 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客…

docker jenkins 部署springboot项目

1、创建jenkins容器 1&#xff0c;首先&#xff0c;我们需要创建一个 Jenkins 数据卷&#xff0c;用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷&#xff1a; docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷&#xff1a; docker run -dit…

视频素材库在哪里找免费手机版?8个可以用手机浏览的素材网

在视觉内容占据主导地位的今天&#xff0c;合适的视频素材可以大大提升项目的吸引力和效果。以下列出的视频素材网站为广告制作者、社交媒体策略师及电影制作人提供了从传统到现代风格的各种视频素材选择&#xff0c;满足不同的创作需求。 1. 蛙学府&#xff08;中国&#xff…

PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM

本文首发于公众号&#xff1a;机器感知 PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM PTQ4SAM: Post-Training Quantization for Segment Anything Segment Anything Model (SAM) has achieved impressive performance in many computer vision tasks. Ho…