基于Xilinx RAM-based Shift Register IP核实现双抽头移位寄存器(shift_register_2taps)

一、IP核配置步骤
1、打开Vivado IP Catalog
在Vivado工程中,右键点击IP Catalog,搜索"Shift Register"。

2、选择RAM-based Shift Register
双击打开配置界面。

3、关键参数设置

Component Name: shift_register_2taps

Shift Register Type: RAM-based

Data Width: 数据位宽(如8位)

Depth: 移位寄存器总深度(需大于最大抽头延迟)

Clock Enable (CE): 按需启用

Synchronous Reset (SCLR): 按需启用

4、添加抽头(Taps)

Tap 1: 设置第一个抽头延迟(如D1=5)

Tap 2: 设置第二个抽头延迟(如D2=10)

5、生成IP核
确认配置后生成IP核,并添加到工程中。
二、Verilog 例化代码

点击查看代码
module shift_register_2taps_example (
  input  wire       clk,    // 时钟
  input  wire       ce,     // 时钟使能(如果启用)
  input  wire       sclr,   // 同步复位(如果启用)
  input  wire [7:0] din,    // 输入数据
  output wire [7:0] dout1,  // 抽头1输出(延迟D1)
  output wire [7:0] dout2   // 抽头2输出(延迟D2)
);

// 例化RAM-based Shift Register IP核
shift_register_2taps your_instance_name (
  .CLK(clk),      // 时钟输入
  .CE(ce),        // 时钟使能(可选)
  .SCLR(sclr),    // 同步复位(可选)
  .D(din),        // 输入数据
  .Q({dout2, dout1}) // 抽头输出,顺序与IP配置一致
);

endmodule
三、关键说明 1、抽头顺序 输出端口Q的位宽为 数据宽度 * 抽头数量。例如,若数据宽度为8位,2个抽头则Q为[15:0],其中:

Q[7:0] 对应第一个抽头(D1=5)

Q[15:8] 对应第二个抽头(D2=10)

2、资源类型选择

小延迟(<32): 使用分布式RAM(LUTRAM)

大延迟(≥32): 使用块RAM(BRAM)以提高资源效率

3、时序注意事项

输入数据在时钟上升沿被捕获。

抽头输出延迟计算:
dout1 在 D1 个时钟周期后输出,dout2 在 D2 个周期后输出。
四、仿真测试示意

点击查看代码
initial begin
  // 初始化信号
  clk = 0;
  ce = 1;
  sclr = 0;
  din = 8'h01;

  // 复位测试
  #10 sclr = 1;
  #20 sclr = 0;

  // 观察输出延迟
  // din=0x01 应在D1=5周期后出现在dout1
  // 并在D2=10周期后出现在dout2
end

always #5 clk = ~clk; // 100MHz时钟
posted @   JixiangYin  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示