Xilinx SRL16E如何实现16移位寄存器

在做fpga的开发过程中经常会使用到移位寄存器,一般我们使用移位寄存器的目的都是为了将某个信号进行打拍,使得时序符合我们的需求。最常见的一种打拍方法就是在process过程语句中对信号进行移位(在verilog中是在always过程中进行移位)。但是这里我给大家介绍一下srl6e,这个是xilinx提供的一个原语,顾名思义,这是一个可以最大实现16位移位寄存的移位寄存器。
      需要注意的是,srl16e原语在不同的器件中表现形式可能稍有区别,下面是在kintex-7系列器件中的srl16e原语:
--使用原语时,需要加上这两句
library unisim;  
use unisim.vcomponents.all;
   -- srl16e: 16-bit shift register lut with clock enable operating on posedge of clock (mapped to slicem lut6)
   --        kintex-7
   -- xilinx hdl language template, version 2017.4
--以下时=是srl16e原语
   srl16e_inst : srl16e
   generic map (
      init => x0000)--对寄存器进行初始化
   port map (
      q => q,       -- srl data output--寄存器输出端口
      a0 => a0,     -- select[0] input--四个地址输入端口
      a1 => a1,     -- select[1] input
      a2 => a2,     -- select[2] input
      a3 => a3,     -- select[3] input
      ce => ce,     -- clock enable input--寄存器使能端口
      clk => clk,   -- clock input   --时钟端口
      d => d        -- srl data input--寄存器输入端口
   );
   -- end of srl16e_inst instantiation
这里主要对地址进行一下说明。地址a3a2a1a0表明要对输入数据进行多少移位。如果是a3a2a1a0=“0000”,说明是对d端口输入数据进行1位移位,也就是说对d端口输入的数据进行一个周期的延迟。如果是a3a2a1a0=“1111”,说明是对d端口输入数据进行16位移位。
下面举一个例子来说明:
这是源程序,因为a3a2a1a0=“0011”,所以主要是对输入数据进行4个周期的延迟。
----------------------------------------------------------------------------------
-- company: 
-- engineer: 
-- 
-- create date: 2018/12/10 1605
-- design name: 
-- module name: srl16e_test - behavioral
-- project name: 
-- target devices: 
-- tool versions: 
-- description: 
-- 
-- dependencies: 
-- 
-- revision:
-- revision 0.01 - file created
-- additional comments:
-- 
----------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
library unisim;
use unisim.vcomponents.all;
-- uncomment the following library declaration if using
-- arithmetic functions with signed or unsigned values
--use ieee.numeric_std.all;
-- uncomment the following library declaration if instantiating
-- any xilinx leaf cells in this code.
--library unisim;
--use unisim.vcomponents.all;
entity srl16e_test is
  port (
        clk     : in    std_logic;
        data_in : in    std_logic;
        data_out: out   std_logic
         );
end srl16e_test;
architecture behavioral of srl16e_test is
signal  q  : std_logic:='0';
signal  d  : std_logic:='0';
begin
   srl16e_inst : srl16e
generic map (
   init => x0000)
port map (
   q => q,       -- srl data output
   a0 => '1',     -- select[0] input
   a1 => '1',     -- select[1] input
   a2 => '0',     -- select[2] input
   a3 => '0',     -- select[3] input
   ce => '1',     -- clock enable input
   clk => clk,   -- clock input
   d => d        -- srl data input
);
d in_data,
    data_out => out_data
    );
 process
 begin
    wait for 10 ns;
    clk <=  '0';
    wait for 10 ns;
    clk <=  '1';
 end process;
process
begin
in_data <= '0';
wait for 20 ns;
in_data <= '1';
wait for 20 ns;
in_data <= '0';
wait;
end process;
end behavioral;
仿真波形:
输入数据是data_in,输出是data_out,可以看到对输入数据进行了4个周期的延迟。


总结全桥反激五大经典结构的特点和区别(带图详解)
区块链技术将重塑人们对货币和财富的思考方式
LED显示屏如何选择?盘点LED显示屏五大品牌
阿里巴巴推进医疗AI 智慧城市稳步发展
液晶屏已经成低端代名词 8K OLED才是未来高端市场新星
Xilinx SRL16E如何实现16移位寄存器
站在趋势看未来,智伴创造商业先机
bvv电线的结构/规格/特性/应用
最近关晓彤大火,高颜值华为nova 2 系列重出江湖开启吸粉模式
山东泰州姜堰大道安装302根智慧灯杆:会“说话”能监控!
锂电池生产车间要求
程序员为什么这么忙
探讨设计降压转换器功耗参数
二级缓存和三级缓存的区别
NVIDIA初创加速计划中国会员企业突破 2,000 家,2023 NVIDIA 初创企业展示蓄势待发
LSTM之父最新长文:现代AI和深度学习发展史
如何使用Maxim传感器信号调节脉宽调制(PWM)比例输出
森思泰克将携安防雷达新产品STS1-10亮相英国安防展
科士达防漏液安全专利蓄电池进驻三峡总公司中心机房
LG发布了首款5G手机LG V50 ThinQ采用了骁龙855处理器及X50基带