在做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基带