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   q
		0   ?   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;
	table
		1 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【北京迅为】《iTOP-3588开发板系统编程手册》第1章 系统编程初探

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

通过nvtx和Nsight Compute分析pytorch算子的耗时

通过nvtx和Nsight Compute分析pytorch算子的耗时 一.效果二.代码 本文演示了如何借助nvtx和Nsight Compute分析pytorch算子的耗时 一.效果 第一次执行,耗时很长 小规模的matmul,调度耗时远大于算子本身 大规模的matmul,对资源的利用率高小规模matmul,各层调用的耗时 二.代码…

болеть和заболеть的区别,柯桥俄语培训哪家好

动词болеть, заболеть是教学的重点,也是难点,在各个群里也是讨论频率极高的词汇,本期进行一下讲解。 请问:如何给学生讲解болеть和заболеть的区别? болеть和заболеть我是这…

1,static 关键字.Java

目录 1.概述 2.定义格式和使用 2.1 静态变量及其访问 2.2 实例变量及其访问 2.3 静态方法及其访问 2.4 实例方法及其访问 3.小结 1.概述 static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。被static修饰后的&#xff…

基于Eigen库的多项式曲线拟合实现(最小二乘法)

本文介绍基于Eigen库的多项式曲线拟合实现(最小二乘法)。 1.基础知识 1)范德蒙矩阵 范德蒙矩阵是一个n*m的矩阵,定义为 其第i 行、第j 列可以表示为。范德蒙矩阵可以应用于多项式的最小二乘法。 2)最小二乘法原理 给出n个点,求…

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年,FA Hashim等人受到自然界中蜜獾狩猎行为启发,提出了蜜獾算法((Honey Badger Algorithm,HBA)。 2.算法原理 2.1算法思想 蜜獾以其…

上传苹果IPA安装包的注意事项与技巧:确保顺利通过审核

目录 引言 摘要 第二步:打开appuploader工具 第二步:打开appuploader工具,第二步:打开appuploader工具 第五步:交付应用程序,在iTunes Connect中查看应用程序 总结 引言 在将应用程序上架到苹果应用商…

权限问题(Windows-System)

方法:用命令来写一个注册表的脚本 ?System是最高级用户,但不拥有最高级权限 编写两文档:system.reg 和 remove.reg,代码如下: system.reg: Windows Registry Editor Version 5.00[-HKEY_CLASSES_ROOT\*…

[StartingPoint][Tier0]Dancing

Task 1 What does the 3-letter acronym SMB stand for? (3个字母的首字母缩略词SMB代表什么?) Server Message Block Task 2 What port does SMB use to operate at? (SMB 使用什么端口进行操作?) 445 Task 3 What is the service name for port…

redis持久化管理

目录 查看Redis内存使用 查看Redis内存使用 info memory 内存碎片率 内存碎片,如何产生 跟踪内存碎片率对理解Redis实例的资源性能是非常重要的: ●内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明 Redis 没有发…

webapi 允许跨域

1.在Nuget安装webapi.cors 添加完会有这个包 然后在项目App_Start 目录下的WebApiConfig.cs里面添加 // Web API 配置和服务// 添加跨域设置config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

前端跨页面通信方案介绍

在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页面之间同步页面的数据、信息或状态。这就是本文说说…

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel 0.环境搭建补档NFS服务TFTP服务 一、linux kernel编译二、运行 0.环境搭建补档 linux kernel验证时,使用tftp服务从ubuntu主机下载启动更加方便,等到验证无误后再一次性烧写到tf卡。所以…

使用 Docker 部署 Photopea 在线 PS 工具

1)Photopea 介绍 GitHub:https://github.com/photopea/photopea 官方手册:https://www.photopea.com/learn/ Adobe 出品的「PhotoShop」想必大家都很熟悉啦,但是「PhotoShop」现在对电脑配置要求越来越高,体积越来越大…

中兴R5300 G4服务器BMC远程管理启用防火墙设置

中兴R5300 G4服务器启用了BMC远程管理,为保障设备安全配置启用防火墙只放通特定维护服务器可以访问。 一、设备初始登录信息 1、中兴R5300G4服务器,默认BMC管理地址https//192.168.5.7 2、中兴zteroot用户的默认密码为:Superuser9! 二、…

python文件处理:解析docx/word文件文字、图片、复选框

前言 因为一些项目原因,我需要提供解析docx内容功能。本来以为这是一件比较简单的工作,没想到在解析复选框选项上吃了亏,并且较长一段时间内通过各种渠道都没有真正解决这一问题,反而绕了远路。 终于,我在github pytho…

中颖51芯片学习1. 系统时钟及IO口输出操作

中颖51芯片学习1. 系统时钟及IO口输出操作 一、芯片介绍1. 规格2. 资源3. 中断源:4. 方框图5. 封装(1)32脚LQFP封装(2)28脚SOP封装(3)20脚SOP封装 二、开发环境搭建1. 安装keil2. 安装中颖keil插…

【管理咨询宝藏47】AA银行风险管理体系提升分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏47】AA银行风险管理体系提升分析报告 【格式】PPT版本,可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上…

Java入门基础day27

day27 接口 package com.saas; ​ public interface MyInterface { ​int NUM 100; ​public void test(); } package com.saas; ​ public class MyClass01 extends Object implements MyInterface{ ​int NUM 200; ​Overridepublic void test() {System.out.println(NUM)…

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来,有关智慧城市的讨论主要围绕在技术进步方面,如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上,智慧城市是一个关于未来的设想,其重要原因在于城市中存在各种基础设施、政治、地理、财…