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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

three.js模拟太阳系

地球的旋转轨迹目前设置为了圆形&#xff0c;效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div c…

Windows10安装Node.js环境

Windows10安装Node.js环境 文章目录 1.下载安装包2.安装配置2.1安装2.2 配置全局的安装路径和缓存路径2.3配置环境变量2.4配置镜像源2.5包管理工具 3.查看版本4.编译跑项目5.总结 1.下载安装包 官方下载网址如下&#xff1a; https://nodejs.org/enInstaller表示是安装程序&a…

最新50万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我&#xff0c;有什么方法能够快速提升自己&#xff0c;通过阿里、腾讯、字节跳动、京东等互联网大厂的面试&#xff0c;我觉得短时间提升自己最快的手段就是背面试题&#xff1b;花了3个月的时间将市面上所有的面试题整理总结成了一份50万字的300道Java高频面…

Java集合(六)Hashtable、ConcurrentHashMap

文章目录 Hashtable一、Hashtable介绍1.1 Hashtable是什么1.2 Hashtable特点1.3 Hashtable常见方法 二、Hashtable源码分析2.1 节点2.2 构造方法2.3 获取元素2.4 存入元素2.5 判断是否包含某个key/value2.6 替换元素2.7 删除元素2.8 获取value集合2.9 哈希2.10 扩容 Concurrent…

如何确保PDF转Word的排版清晰:实用技巧分享

PDF主要分为二种&#xff1a;一种是主要由文本形成的&#xff0c;另一种是主要由图片形成的。二种类型的PDF转换WORD的方法会有所差异。 一、 文本类PDF 对于文本类的PDF&#xff0c;我们只需直接转换格式就可以了&#xff0c;这样转换出来的效果最好&#xff0c;几乎跟原来的…

安装统信UOS服务器操作系统1060

原文链接&#xff1a;安装统信UOS服务器操作系统1060 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是如何安装统信UOS服务器操作系统1060。统信UOS是一款基于Linux内核&#xff0c;专为中国市场定制开发的操作系统。它不仅提供了良好的用户体验&#xff0c;还在…

新手HTML和CSS的常见知识点

​​​​ 目录 1.HTML标题标签&#xff08;到&#xff09;用于定义网页中的标题&#xff0c;并按照重要性递减排列。例如&#xff1a; 2.HTML段落标签&#xff08;&#xff09;用于定义网页中的段落。例如&#xff1a; 3.HTML链接标签&#xff08;&#xff09;用于创建链接…

NFTScan | 12.04~12.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.12.04~ 2023.12.10 NFT Hot News 01/ NFTScan 与 MintCore 联合推出适用于 NFT 的 Layer2 网络 Mint 12 月 5 日&#xff0c;根据官方消息&#xff0c;NFT 基础设施服务商 NFTScan …

IO流学习

IO流:存储和读取数据的解决方案 import java.io.FileOutputStream; import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象//写出 输入流 OutputStream//本地文件fileFileOutputStream fos new FileOutputS…

Python | 高斯分布拟合示例

什么是正态分布或高斯分布&#xff1f; 当我们绘制一个数据集&#xff08;如直方图&#xff09;时&#xff0c;图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线&#xff0c;也称为高斯分布或正态分布。 它以德国数学家卡尔弗里德里希高斯的名字命名。遵循高斯分布…

使用subplot_mosaic创建复杂的子图布局

在本文中&#xff0c;我将介绍matplotlib一个非常有价值的用于管理子图的函数——subplot_mosaic()。如果你想处理多个图的&#xff0c;那么subplot_mosaic()将成为最佳解决方案。我们将用四个不同的图实现不同的布局。 首先使用Import matplotlib行导入必要的库。 import matp…

【node】使用 sdk 完成短信发送

实现效果 过程 流程比较复杂&#xff0c;加上需要实名认证&#xff0c;建议开发的时候先提前去认证号账号&#xff0c;然后申请模版也需要等认证。 源码 我看了新版的sdk用的代码有点长&#xff0c;感觉没必要&#xff0c;这边使用最简单的旧版的sdk。 https://github.com/…