【FPGA/IC】RAM-Based Shift Register Xilinx IP核的使用

news2024/10/6 10:27:07

前言

一般来讲,如果要实现移位寄存器的话,通常都是写RTL用reg来构造,比如1bit变量移位一个时钟周期就用1个reg,也就是一个寄存器FF资源,而移位16个时钟周期就需要16个FF,这种方法无疑非常浪费资源。

Xilinx FPGA的SLICEM中的一个查找表LUT可以配置为最多移位32个时钟周期的移位寄存器,这比直接用FF来搭省了31个FF资源。

这种方法可以通过调用原语SRL16E(最多16个周期)和SRLC32E(最多32个周期)来实现。

   SRL16E #(
      .INIT(16'h0000),        // Initial contents of shift register
      .IS_CLK_INVERTED(1'b0)  // Optional inversion for CLK
   )
   SRL16E_inst (
      .Q(Q),     // 1-bit output: SRL Data
      .CE(CE),   // 1-bit input: Clock enable
      .CLK(CLK), // 1-bit input: Clock
      .D(D),     // 1-bit input: SRL Data
      // Depth Selection inputs: A0-A3 select SRL depth
      .A0(A0),
      .A1(A1),
      .A2(A2),
      .A3(A3) 
   );

   // End of SRL16E_inst instantiation
					
					
// SRLC32E: 32-bit variable length cascadable shift register LUT (Mapped to a SliceM LUT6)
// with clock enable
 
SRLC32E #(
.INIT(32'h00000000) // Initial Value of Shift Register
) SRLC32E_inst (
    .Q(Q), 			// SRL data output
	.Q31(Q31), 		// SRL cascade output pin
	.A(A), 			// 5-bit shift depth select input
	.CE(CE), 		// Clock enable input
	.CLK(CLK), 		// Clock input
	.D(D) 			// SRL data input
);
 
// End of SRLC32E_inst instantiation

如果需要实现更多时钟周期的移位寄存器,则可以使用多个SRLC32E或者SRL16E来级联实现。

IP核的定制

除了用原语实现外,还可以调用 RAM-Based Shift Register 这个IP核来实现。IP核实现方法使用不如原语方便,但是其对实现方式做了一些优化,具有比原语更好的时序性能。

第一页内容

在这里插入图片描述

  1. Shift Register Type:fixed length为固定长度;variable length lossless为可变长度
  2. optimization:只有选择可变长度时才可选,可以选择优化面积还是优化时序。如果优化时序,则可能会多几个延迟latency。
  3. clocking options:Register last bit只有选择可变长度时才可选,会把输出寄存一拍以改善时序,同时增加一个时钟的延迟。clock enable(CE)时钟使能功能。
  4. dimensions:width移位寄存器宽度,depth移位寄存器深度。
  5. latency information:延迟信息,根据各个选项的不同,输出延迟可能会增加1~3个时钟周期。

第二页内容

在这里插入图片描述

  1. initialization options:初始化选项,选择初始化的进制radix和默认值default data。
  2. COE file:初始化的值还可以选择从COE文件来载入。

第三页

在这里插入图片描述

  1. power-on reset settings:上电复位设置选项,选择上电复位的进制radix和初始值init data。
  2. synchronous settings:同步设置,可以设置同步复位SCLR和同步置位SSET,二者的优先级可选,默认复位优先级高于置位,如果选择置位优先级更高,则会消耗多余的资源。复位/置位与初始化SINT二者之间互斥。这三个选项一般都没必要用。
  3. synchronous controls(sync) and clock enable(CE) priority:选择同步控制信号和CE信号的优先级。默认同步控制信号的优先级高于CE,反之则会消耗多余的资源。

IP核的仿真使用

定制一个深度为64,位宽为16的IP核,然后编写RTL代码:

//固定的深度64个时钟周期,位宽16的移位寄存器IP核设计
module shift_w16_d64(
	input			clk,	//时钟信号
	input	[15:0]	in,		//移位前的输入数据,位宽为16
	input			ce,		//时钟使能信号
	output	[15:0]	out		//移位后的输出,位宽为16
);

//移位寄存器IP;固定移位64个时钟周期,位宽16
c_shift_ram_1 your_instance_name (
  .D	(in),	//移位前的输入数据,位宽为16
  .CLK	(clk),	//时钟信号
  .CE	(ce),	//时钟使能信号
  .Q	(out)	//移位后的输出,位宽为16
);

endmodule

综合后的资源使用情况:32个LUT + 32个FF。

在这里插入图片描述

看下综合后的电路图:

在这里插入图片描述

因为1个SRLC32E可以实现32个周期的移位,所以16×64的移位操作实际上只需要32个SRLC32E就可以实现了,为了改善时序性能,IP核在输入端口和输出端口一共用了2×16 = 32个FF来打拍寄存。

接下来编写TB:时钟使能信号一直拉高,输入数据从1开始累加。

`timescale 1ns/1ns
module tb_shift_w16_d64();

//信号声明
reg			clk;
reg			rst;
reg	[15:0]	in;	
reg			ce;	
wire[15:0]	out;

//被测模块实例化
shift_w16_d64	inst_shift_w16_d64(
	.clk	(clk),
	.in		(in),
	.ce		(ce),
	.out	(out)
);	

//生成时钟信号
initial begin
    clk	= 1'b0;
	forever #5 clk = ~clk;
end

//生成复位信号
initial begin
		rst = 1'b1;	//复位
    #45 rst = 1'b0; //取消复位
end 

//生成输入数据与时钟使能信号
always @(posedge clk or posedge rst)begin
	if(rst)begin
		in <= 16'd0;
		ce <= 1'b0;
	end
	else begin 
		in <= in + 1'b1;	//输入数据累加1
		ce <= 1'b1;			//时钟使能信号一直拉高
	end
end

//仿真过程
initial begin
	#1000 $stop;	//关闭仿真	
end

endmodule

仿真结果如下:
在这里插入图片描述
在这里插入图片描述


  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐

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

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

相关文章

Goose:Golang中的数据库迁移工具

Goose&#xff1a;Golang中的数据库迁移工具 在Golang开发中&#xff0c;数据库迁移是一个常见的任务&#xff0c;用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具&#xff0c;专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

C++基础知识(八:STL标准库(Vectors和list))

C STL (Standard Template Library标准模板库) 是通用类模板和算法的集合&#xff0c;它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发&#xff0c;同时我们应该也需要知道他们的底层…

Vue——携带参数跳转路由

Vue学习之——跳转路由 前情回顾 当我们进行点击修改时&#xff0c;会进行跳转到修改页面&#xff0c;为了完成回显数据&#xff08;根据对应id查找&#xff09;&#xff0c;我们需要携带对应选择中的id跳转到修改页面&#xff0c;让其进行查找回显 学习useRoute和useRoute…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(6.详解Set和ZSet数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第6篇&#xff5e;前5篇可移步(&#xffe3;∇&#xffe3;)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现&#xff08;1.结构与源码概述&#xff09;-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

CCDP.01.寄主机SSH连接虚拟机的QA

V0.0 初始版本-2024.2.29 检查VM的网卡配置 如上图&#xff0c;如果enp0s3网卡没有出现形如10.0.0.??/24的ip配置&#xff0c;说明该网卡配置存在错误&#xff0c;或者没有“使能”该网卡。在RockyLinux8.X中可检查“ifcfg-enp0s&#xff1f;” vi /etc/sysconfig/network-…

51-n皇后(回溯算法)

题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一…

C# Post数据或文件到指定的服务器进行接收

目录 应用场景 实现原理 实现代码 PostAnyWhere类 ashx文件部署 小结 应用场景 不同的接口服务器处理不同的应用&#xff0c;我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。 比如我们想要处理一个OFFICE文件&#xff0c;由用户上传到A服务器…

【CesiumJS-3】加载倾斜模型数据(3DTilest)以及修改位置

引入倾斜模型数据 // 加载3DTiles数据let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 倾斜模型添加到场景中viewer.value.zoomTo(tileset); // 视角定位到倾…

外汇天眼:2月客诉TOP10榜单公布,快来看看你用的平台有没有上榜!

作为外汇投资者了解每个月登上客诉榜单的交易平台很重要&#xff0c;只有这样才能有效的预防自己遭遇外汇黑平台&#xff0c;也能警觉的提前发现平台的异常&#xff0c;对于自己的外汇交易道路只有利无弊&#xff01; 快来看看有哪些平台上榜&#xff0c;你所使用的平台是否在…

3 局域网基础(1)

1.局域网 早期的局域网主要是令牌环网。20世纪80年代&#xff0c;局域网领域出现 Ethernet与Token Bus、Token Ring三足鼎立的局面&#xff0c;并且各自都形成了相应的国际标准。21 世纪&#xff0c;Ethernet 已成为局域网领域的主流技术。介质访问控制&#xff08;MAC&#xf…

破局数据分析滞后难题,赋能企业高速增长的指标管理解决方案

指标是什么&#xff1f; 业务发展过程中&#xff0c;企业内外部都会产生很多的业务数据&#xff0c;对这些数据进行采集、计算、落库、分析后&#xff0c;形成的统计结果称为指标。简单来说&#xff0c;指标是业务被拆解、量化后形成的数量特征&#xff0c;企业利用数据指标对…

如何使用Portainer创建Nginx容器并搭建web网站发布至公网可访问【内网穿透】

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

【PyTorch][chapter 18][李宏毅深度学习]【无监督学习][ VAE]

前言: VAE——Variational Auto-Encoder&#xff0c;变分自编码器&#xff0c;是由 Kingma 等人于 2014 年提出的基于变分贝叶斯&#xff08;Variational Bayes&#xff0c;VB&#xff09;推断的生成式网络结构。与传统的自编码器通过数值的方式描述潜在空间不同&#xff0c;它…

用JavaScript动态提取视频中的文字

现阶段整个社会短视频&#xff0c;中视频为王&#xff0c;文字传播虽然被弱化&#xff0c;但在业务中还是有一定的传播价值&#xff0c;今天就来讲一讲如何使用js动态提取视频中的字幕。 先来看看效果&#xff1a; 屏幕录制2024-02-29 15.40.18 一&#xff0c;tesseract.js介…

springcloud alibaba组件简介

一、Nacos 服务注册中心/统一配置中心 1、介绍 Nacos是一个配置中心&#xff0c;也是一个服务注册与发现中心。 1.1、配置中心的好处&#xff1a; &#xff08;1&#xff09;配置数据脱敏 &#xff08;2&#xff09;防止出错&#xff0c;方便管理 &#xff08;3&#xff…

Web漏扫工具OWASP ZAP安装与使用(非常详细)从零基础入门到精通,看完这一篇就够了。

本文仅用于安全学习使用&#xff01;切勿非法用途。 一、OWASP ZAP简介 开放式Web应用程序安全项目&#xff08;OWASP&#xff0c;Open Web Application Security Project&#xff09;是一个组织&#xff0c;它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。…

javascript作用域编译浅析

作用域思维导图 1&#xff1a;编译原理 分词/词法分析 如果词法单元生成器在判断a是一个独立的词法单元还是其他词法单元的一部分时&#xff0c;调用的是有状态的解析规则&#xff0c;那么这个过程就被称为词法分析。 解析/语法分析 由词法单元流转换成一个由元素逐级嵌套所组…

java: 错误: 不支持发行版本 5

目录 一、问题描述 二、解决办法 方法一&#xff1a;修改idea设置中的jdk版本 方法二&#xff1a;配置pom.xml文件 方法三&#xff1a;配置maven的xml文件&#xff08;推荐&#xff09; 三、结果 一、问题描述 问题描述&#xff1a;今天创建了一个maven项目&#xff0c;…

第六课:NIO简介

一、传统BIO的缺点 BIO属于同步阻塞行IO,在服务器的实现模型为&#xff0c;每一个连接都要对应一个线程。当客户端有连接请求的时候&#xff0c;服务器端需要启动一个新的线程与之对应处理&#xff0c;这个模型有很多缺陷。当客户端不做出进一步IO请求的时候&#xff0c;服务器…