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

入門:Xilinx SRL16E如何實現(xiàn)16移位寄存器

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

  在做FPGA的開發(fā)過程中經(jīng)常會使用到移位寄存器,,一般我們使用移位寄存器的目的都是為了將某個信號進行打拍,,使得時序符合我們的需求,。最常見的一種打拍方法就是在process過程語句中對信號進行移位(在verilog中是在always過程中進行移位)。但是這里我給大家介紹一下SRL6E,,這個是Xilinx提供的一個原語,,顧名思義,這是一個可以最大實現(xiàn)16位移位寄存的移位寄存器,。

  需要注意的是,,SRL16E原語在不同的器件中表現(xiàn)形式可能稍有區(qū)別,下面是在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--寄存器輸入端口

 ?。?/p>

  -- End of SRL16E_inst instanTIaTIon

  這里主要對地址進行一下說明,。地址A3A2A1A0表明要對輸入數(shù)據(jù)進行多少移位,。如果是A3A2A1A0=“0000”,說明是對D端口輸入數(shù)據(jù)進行1位移位,,也就是說對D端口輸入的數(shù)據(jù)進行一個周期的延遲,。如果是A3A2A1A0=“1111”,說明是對D端口輸入數(shù)據(jù)進行16位移位,。

  下面舉一個例子來說明:

  這是源程序,,因為A3A2A1A0=“0011”,所以主要是對輸入數(shù)據(jù)進行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

 ?。?/p>

  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;

  這是仿真文件:

  仿真文件中的輸入數(shù)據(jù)是一個周期的單脈沖。

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

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

  仿真波形:

  輸入數(shù)據(jù)是data_in,,輸出是data_out,可以看到對輸入數(shù)據(jù)進行了4個周期的延遲。

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



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

mmexport1621241704608.jpg

本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉載的所有的文章、圖片,、音/視頻文件等資料的版權歸版權所有權人所有,。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者,。如涉及作品內容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。