verilog进阶语法-触发器原语

概述:

xilinx设计的触发器提供了多种配置方式,方便设计最简触发器,同步复位触发器,异步复位触发器,同步时钟使能触发器,异步时钟使能触发器。输出又分为同步复位和置位,异步清零和预置位。

官方提供的原语

   FDCPE #(
      .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDCPE_inst (
      .Q(Q),      // Data output
      .C(C),      // Clock input
      .CE(CE),    // Clock enable input
      .CLR(CLR),  // Asynchronous clear input
      .D(D),      // Data input
      .PRE(PRE)   // Asynchronous set input
   );
  
   FDCE #(
      .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDCE_inst (
      .Q(Q),      // Data output
      .C(C),      // Clock input
      .CE(CE),    // Clock enable input
      .CLR(CLR),  // Asynchronous clear input
      .D(D)       // Data input
   );

   
   FDRSE #(
      .INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
   ) FDRSE_inst (
      .Q(Q),      // Data output
      .C(C),      // Clock input
      .CE(CE),    // Clock enable input
      .D(D),      // Data input
      .R(R),      // Synchronous reset input
      .S(S)       // Synchronous set input
   );
  

内容

1.同步复位和置位

2. 同步时钟使能

3. 异步清零和预置位

4. 异步时钟使能

1.同步复位和置位

verilog c代码

module primitive1(
	input clk,
	input rst_n,
	input a,
	output reg y,
	output reg y1
    );
always @ (posedge clk )
	if (rst_n==0) 
		y <= 1'b0;
	else 
		y <= a;

always @ (posedge clk )
	if (rst_n==0) 
		y1 <= 1'b1;
	else 
		y1 <= a;
		
endmodule

verilog 原语代码,FDR为复位原语,FDS置位原语


module primitive1 (
  clk, rst_n, a, y, y1
);
  input clk;
  input rst_n;
  input a;
  output y;
  output y1;
  wire a_IBUF_1;
  wire clk_BUFGP_3;
  wire rst_n_IBUF_5;
  wire rst_n_inv;
  wire y1_OBUF_9;
  wire y_OBUF_10;
  FDR   y_1 (
    .C(clk_BUFGP_3),
    .D(a_IBUF_1),
    .R(rst_n_inv),
    .Q(y_OBUF_10)
  );
  FDS   y1_2 (
    .C(clk_BUFGP_3),
    .D(a_IBUF_1),
    .S(rst_n_inv),
    .Q(y1_OBUF_9)
  );
  IBUF   rst_n_IBUF (
    .I(rst_n),
    .O(rst_n_IBUF_5)
  );
  IBUF   a_IBUF (
    .I(a),
    .O(a_IBUF_1)
  );
  OBUF   y_OBUF (
    .I(y_OBUF_10),
    .O(y)
  );
  OBUF   y1_OBUF (
    .I(y1_OBUF_9),
    .O(y1)
  );
  BUFGP   clk_BUFGP (
    .I(clk),
    .O(clk_BUFGP_3)
  );
  INV   rst_n_inv1_INV_0 (
    .I(rst_n_IBUF_5),
    .O(rst_n_inv)
  );
endmodule

RTL结构图

技术原理图

2. 同步时钟使能

verilog c代码

module primitive1(
	input clk,
	input rst_n,
	input a,
	input enable_clk,
	output reg y
    );
always @ (posedge clk )
	if (rst_n==0) 
		y <= 1'b0;
	else  if (enable_clk)
		y <= a;

endmodule

原语代码,使用了FDRE实现同步时钟使能原语


module primitive1 (
  enable_clk, clk, rst_n, a, y
);
  input enable_clk;
  input clk;
  input rst_n;
  input a;
  output y;
  wire a_IBUF_1;
  wire clk_BUFGP_3;
  wire enable_clk_IBUF_5;
  wire rst_n_IBUF_7;
  wire rst_n_inv;
  wire y_OBUF_10;
  FDRE   y_1 (
    .C(clk_BUFGP_3),
    .CE(enable_clk_IBUF_5),
    .D(a_IBUF_1),
    .R(rst_n_inv),
    .Q(y_OBUF_10)
  );
  IBUF   enable_clk_IBUF (
    .I(enable_clk),
    .O(enable_clk_IBUF_5)
  );
  IBUF   rst_n_IBUF (
    .I(rst_n),
    .O(rst_n_IBUF_7)
  );
  IBUF   a_IBUF (
    .I(a),
    .O(a_IBUF_1)
  );
  OBUF   y_OBUF (
    .I(y_OBUF_10),
    .O(y)
  );
  BUFGP   clk_BUFGP (
    .I(clk),
    .O(clk_BUFGP_3)
  );
  INV   rst_n_inv1_INV_0 (
    .I(rst_n_IBUF_7),
    .O(rst_n_inv)
  );
endmodule

RTL结构图,fdre使用了同步复位端口R,以及时钟使能端口CE。

技术原理图

3. 异步清零和预置位

verilog c代码

module primitive1(
	input clk,
	input rst_n,
	input a,
	output reg y,
	output reg y1
    );
always @ (posedge clk or negedge rst_n)
	if (rst_n==0) 
		y <= 1'b0;
	else 
		y <= a;

always @ (posedge clk or negedge rst_n)
	if (rst_n==0) 
		y1 <= 1'b1;
	else 
		y1 <= a;
		
endmodule

原语,使用FDC和FDP实现异步清零和预置位


module primitive1 (
  clk, rst_n, a, y, y1
);
  input clk;
  input rst_n;
  input a;
  output y;
  output y1;
  wire a_IBUF_1;
  wire clk_BUFGP_3;
  wire rst_n_IBUF_5;
  wire rst_n_inv;
  wire y1_OBUF_9;
  wire y_OBUF_10;
  FDC   y_1 (
    .C(clk_BUFGP_3),
    .CLR(rst_n_inv),
    .D(a_IBUF_1),
    .Q(y_OBUF_10)
  );
  FDP   y1_2 (
    .C(clk_BUFGP_3),
    .D(a_IBUF_1),
    .PRE(rst_n_inv),
    .Q(y1_OBUF_9)
  );
  IBUF   rst_n_IBUF (
    .I(rst_n),
    .O(rst_n_IBUF_5)
  );
  IBUF   a_IBUF (
    .I(a),
    .O(a_IBUF_1)
  );
  OBUF   y_OBUF (
    .I(y_OBUF_10),
    .O(y)
  );
  OBUF   y1_OBUF (
    .I(y1_OBUF_9),
    .O(y1)
  );
  BUFGP   clk_BUFGP (
    .I(clk),
    .O(clk_BUFGP_3)
  );
  INV   rst_n_inv1_INV_0 (
    .I(rst_n_IBUF_5),
    .O(rst_n_inv)
  );
endmodule

RTL结构图,异步清零连接到了CLR端口,异步预置位连接到了PRE端口

技术原理图

4. 异步时钟使能

verilog c代码

module primitive1(
	input clk,
	input rst_n,
	input a,
	input enable_clk,
	output reg y
    );
always @ (posedge clk or negedge rst_n)
	if (rst_n==0) 
		y <= 1'b0;
	else  if (enable_clk)
		y <= a;

endmodule

原语,使能端连接到了CE,异步清零连接到了CLR。


module primitive1 (
  enable_clk, clk, rst_n, a, y
);
  input enable_clk;
  input clk;
  input rst_n;
  input a;
  output y;
  wire a_IBUF_1;
  wire clk_BUFGP_3;
  wire enable_clk_IBUF_5;
  wire rst_n_IBUF_7;
  wire rst_n_inv;
  wire y_OBUF_10;
  FDCE   y_1 (
    .C(clk_BUFGP_3),
    .CE(enable_clk_IBUF_5),
    .CLR(rst_n_inv),
    .D(a_IBUF_1),
    .Q(y_OBUF_10)
  );
  IBUF   enable_clk_IBUF (
    .I(enable_clk),
    .O(enable_clk_IBUF_5)
  );
  IBUF   rst_n_IBUF (
    .I(rst_n),
    .O(rst_n_IBUF_7)
  );
  IBUF   a_IBUF (
    .I(a),
    .O(a_IBUF_1)
  );
  OBUF   y_OBUF (
    .I(y_OBUF_10),
    .O(y)
  );
  BUFGP   clk_BUFGP (
    .I(clk),
    .O(clk_BUFGP_3)
  );
  INV   rst_n_inv1_INV_0 (
    .I(rst_n_IBUF_7),
    .O(rst_n_inv)
  );
endmodule

RTL结构图

技术原理图

5. 总结

1. 触发器是FPGA存储数据的基本单元

2. 触发器作为时序逻辑的基本元件,官方提供了丰富的配置方式,以适应各种可能的应用场景。

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

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

相关文章

抖音视频解析,无水印解析下载抖音视频

抖音视频解析&#xff0c;你是否经常遇到这样的情况&#xff0c;看到一些非常精彩的抖音视频&#xff0c;想要保存下来&#xff0c;但因为下载速度慢或者视频带有水印而感到困扰&#xff1f;那么&#xff0c;这款&#xff08;抖音无水印解析工具&#xff09;将是你的得力助手&a…

离散域下内置式永磁同步电机复矢量电流调节器设计

导读:本期文章主要介绍离散域下内置式永磁同步电机复矢量电流调节器的设计。通过与传统的线性PI调节器仿真验证分析,离散域下设计的电流调节器削弱了d、q之间耦合的影响,大大提高了系统的控制性能。 如需要文中的仿真模型,关注微信公众号:浅谈电机控制,留言获取。 一、…

股票交易信息实时大屏(Kafka+storm+Redis+DataV)

目录 引言 需求分析&#xff1a; 思路 数据源&#xff1a; 数据传输&#xff1a; 数据处理&#xff1a; 数据统计&#xff1a; 数据可视化&#xff1a; 数据提取&#xff1a; 技术栈 技术实现 前端界面搭建 布局: ​ 组件&#xff1a; 通信&#x…

免费下载6G全国90米高程DEM

这里为大家分享全国90米高程原始数据。 全国90米高程DEM 90米高程数据的经纬度跨度有按30度进行分块和按5度进行分块两种&#xff0c;下载完成后的文件如下图所示。 30度分块与5度分块 当经纬度跨度按30度进行分块时&#xff0c;全国范围共分成6块&#xff0c;由于分块的跨度…

【网络安全】网络防护之旅 - 非对称密钥体制的解密挑战

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《网络安全之道 | 数字征程》⏰墨香寄清辞&#xff1a;千里传信如电光&#xff0c;密码奥妙似仙方。 挑战黑暗剑拔弩张&#xff0c;网络战场誓守长。 目录 &#x1f608;1. 初识网络安…

KMP算法, 什么是KMP算法 ,暴力匹配 ,KMP算法实现

文章目录 KMP算法什么是KMP算法暴力匹配KMP算法实现 KMP算法 什么是KMP算法 KMP是Knuth、Morris和Pratt首字母的缩写&#xff0c;KMP也是由这三位学者发明&#xff08;1977年联合发表论文&#xff09;。 KMP主要应用在字符串的匹配&#xff0c;是一个解决模式串在文本串是否…

基于单片机的太阳能数据采集系统(论文+源码)

1. 系统设计 在本次太阳能数据采集系统的设计中&#xff0c;以AT89C52单片机为主要核心&#xff0c;主要是由LCD液晶显示模块、存储模块、温度检测模块、串口通信模块&#xff0c;光照检测模块等组成&#xff0c;其实现了对太阳能板的温度&#xff0c;光照强度的检测和记录&…

在 App 设计工具的设计视图中布局 App

目录 自定义组件 对齐和间隔组件 组件分组 对组件重新排序 修改组件的 Tab 键焦点切换顺序 在容器中排列组件 在 App 设计工具中创建和编辑上下文菜单 创建上下文菜单 编辑上下文菜单 更改上下文菜单分配 App 设计工具中的设计视图提供了丰富的布局工具&#xff0c;用…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…

java基础-1

byte&#xff1a;8位有符号二进制补码整数&#xff0c;占用1字节。 short&#xff1a;16位有符号二进制补码整数&#xff0c;占用2字节。 int&#xff1a;32位有符号二进制补码整数&#xff0c;占用4字节。 long&#xff1a;64位有符号二进制补码整数&#xff0c;占用8字节。…

理解Socket

前言 我在去年就学习过Java中Socket的使用&#xff0c;但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍&#xff0c;看完还是不太理解到底什么是Socket&#xff0c;还是很迷。直到最近在学习计算机网络&#xff0c;我才对Socket有了一个更深地理解。之前一…

Netty—NIO万字详解

文章目录 NIO基本介绍同步、异步、阻塞、非阻塞IO的分类NIO 和 BIO 的比较NIO 三大核心原理示意图NIO的多路复用说明 核心一&#xff1a;缓存区 (Buffer)Buffer类及其子类Buffer缓冲区的分类MappedByteBuffer类说明&#xff1a; 核心二&#xff1a;通道 (Channel)Channel类及其…

在项目中,如何应对高并发流量

应对大流量的一些思路 首先&#xff0c;我们来说一下什么是大流量&#xff1f; 流量&#xff0c;我们很可能会冒出&#xff1a;TPS&#xff08;每秒事务量&#xff09;&#xff0c;QPS&#xff08;每秒请求量&#xff09;&#xff0c;1W&#xff0c;5W&#xff0c;10W&#x…

深度学习:自注意力机制(Self-Attention)

1 自注意力概述 1.1 定义 自注意力机制&#xff08;Self-Attention&#xff09;&#xff0c;有时也称为内部注意力机制&#xff0c;是一种在深度学习模型中应用的机制&#xff0c;尤其在处理序列数据时显得非常有效。它允许输入序列的每个元素都与序列中的其他元素进行比较&a…

HTTP深度解析:构建高效与安全网络的关键知识

1. HTTP基础及其组件 我首先想和大家分享的是HTTP的基础知识。HTTP&#xff0c;即超文本传输协议&#xff0c;是互联网上最常用的协议之一。它定义了浏览器和服务器之间数据交换的规则&#xff0c;使得网页内容可以从服务器传输到我们的浏览器上。想象一下&#xff0c;每当你点…

迅腾文化品牌网络推广助力企业:保持品牌稳定,发展更多消费者信任,提升品牌忠诚度

迅腾文化品牌网络推广助力企业&#xff1a;保持品牌稳定&#xff0c;发展更多消费者信任&#xff0c;提升品牌忠诚度 在当今快速发展的互联网时代&#xff0c;品牌网络推广已经成为企业发展的重要手段。迅腾文化作为专业的品牌网络推广公司&#xff0c;致力于帮助企业实现品牌…

产品Axure的元组件以及案例

前言 产品&#xff1c;Axure的安装以及组件介绍-CSDN博客经过上文我们可以知道我们Axure是一款适用于网站、移动应用和企业软件的交互式原型设计工具。它可以帮助用户创建高保真的交互式原型&#xff0c;包括线框图、流程图、模型、注释和规格等&#xff0c;以便与客户、开发人…

【Flink系列七】TableAPI和FlinkSQL初体验

Apache Flink 有两种关系型 API 来做流批统一处理&#xff1a;Table API 和 SQL Table API 是用于 Scala 和 Java 语言的查询API&#xff0c;它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。 Flink SQL 是基于 Apache Calcite 来实现的标准 SQL。无论输…

K8S(二)—介绍

K8S的整体结构图 k8s对象 在 Kubernetes 系统中&#xff0c;Kubernetes 对象是持久化的实体。 Kubernetes 使用这些实体去表示整个集群的状态。 具体而言&#xff0c;它们描述了如下信息&#xff1a; 哪些容器化应用正在运行&#xff08;以及在哪些节点上运行&#xff09;可…

10进制和16进制数据互相翻译(windos版本)

window按winR键出现运行窗口&#xff0c;输入clac回车&#xff0c;进入计算器。 点击左上角&#xff0c;点击程序员&#xff0c;计算器就会变成可以进行进制转化的模式 鼠标点击DEC代表输入10进制&#xff0c;当我输入10时HEX变成A,A就是10转化16进制的数据&#xff0c; 反之如…