《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 其他 > 入門:Xilinx SRL16E如何實現16移位寄存器

入門:Xilinx SRL16E如何實現16移位寄存器

2022-08-30
來源:FPGA設計論壇
關鍵詞: XilinxSRL16E 寄存器

  在做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 => X“0000”)--對寄存器進行初始化

  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 => X“0000”)

  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 <= data_in;

  data_out <= q;

  end Behavioral;

  這是仿真文件:

  仿真文件中的輸入數據是一個周期的單脈沖。

  ----------------------------------------------------------------------------------

  -- Company:

  -- Engineer:

  --

  -- Create Date: 2018/12/10 1615

  -- Design Name:

  -- Module Name: tb_srl16e - 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;

  use IEEE.NUMERIC_STD.ALL;

  use IEEE.STD_LOGIC_ARITH.All;

  use IEEE.STD_LOGIC_UNSIGNED.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 tb_srl16e is

  end tb_srl16e;

  architecture Behavioral of tb_srl16e is

  component srl16e_test

  port(

  clk : in std_logic;

  data_in : in std_logic;

  data_out : out  std_logic

  );

  end component;

  signal clk ='1';

  signal in_data : std_logic:='0';

  signal out_data: std_logic:='0';

  begin

  uut: srl16e_test

  port map(

  clk => clk,

  data_in => 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個周期的延遲。

b59cd768-25b8-11ed-ba43-dac502259ad0.png



更多信息可以來這里獲取==>>電子技術應用-AET<<

mmexport1621241704608.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 四虎在线影视 | 狠狠色婷婷综合天天久久丁香 | 四虎亚洲 | 狠狠五月深爱婷婷网 | 欧美日韩国产在线播放 | 特送在线观看完整高清免费版 | 国产精品毛片在线更新 | 日本成人久久 | 欧美高清在线视频在线99精品 | 美女午夜色视频在线观看 | 久久国产精品久久 | 热99re久久精品香蕉 | 免费看涩涩视频网站入口 | 欧美com| 欧美一区二区在线播放 | 国内第一永久免费福利视频 | 爱福利视频一区二区 | 国产一区二区久久久 | 国产一级视频在线 | aa视频在线 | 国产中文字幕第一页 | 久久亚洲精品中文字幕二区 | 欧美视频色 | 久久精品免观看国产成人 | 欧美激情社区 | 久久国产精品男女热播 | 国产精品精品 | 清纯唯美亚洲综合日韩第 | 国产成人a| 久久精品国产91久久综合麻豆自制 | 五月天情网 | 日本久久精品免视看国产成人 | 色人阁综合 | 999福利视频 | 国产亚洲高清视频 | 国产高清视频在线观看 | 精品国产_亚洲人成在线高清 | 国产成人a一区二区 | 日本久久99| 丁香婷婷六月天 | 欧美1区2区3区 |