⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tech_umc18.vhd

📁 ARM7的源代码
💻 VHD
📖 第 1 页 / 共 3 页
字号:
	 WEN   : in std_logic;	 CEN   : in std_logic;	 OEN   : in std_logic );  end component;  component R2048x32M8    port ( ADR   : in std_logic_vector(10 downto 0);	 DI    : in std_logic_vector(31 downto 0);	 DOUT    : out std_logic_vector(31 downto 0);	 CK    : in std_logic;	 WEN   : in std_logic;	 CEN   : in std_logic;	 OEN   : in std_logic );  end component;  component C3I40     port (PAD : in std_logic; DI : out std_logic);   end component;   component C3I42     port (PAD : in std_logic; DI : out std_logic);   end component;   component C3O10     port (DO : in  std_logic; PAD : out  std_logic);   end component;   component C3O20     port (DO : in  std_logic; PAD : out  std_logic);   end component;   component C3O40     port (DO : in  std_logic; PAD : out  std_logic);   end component;   component C3B10U    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component C3B20U    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component C3B40U    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component C3B10    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component C3B20    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component C3B40    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component CD3B10T    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component CD3B20T    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component CD3B40T    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component CD3O10T    port ( DO : in std_logic; PAD : out std_logic);  end component;   component CD3O20T    port ( DO : in std_logic; PAD : out std_logic);  end component;   component CD3O40T    port ( DO : in std_logic; PAD : out std_logic);  end component;   component C3B42    port ( DO, EN : in std_logic; DI : out std_logic; PAD : inout std_logic);  end component;   component INVDL port( A : in std_logic;  Z : out std_logic); end component;  component AND2DL port( A1, A2 : in std_logic;  Z : out std_logic); end component;  component OR2DL port( A1, A2 : in std_logic;  Z : out std_logic); end component;  component EXOR2DL port( A1, A2 : in std_logic;  Z : out std_logic); end component;end;-------------------------------------------------------------------- sync ram generator --------------------------------------------------------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_syncram is  generic ( abits : integer := 10; dbits : integer := 8 );  port (    address  : in std_logic_vector(abits -1 downto 0);    clk      : in std_logic;    datain   : in std_logic_vector(dbits -1 downto 0);    dataout  : out std_logic_vector(dbits -1 downto 0);    enable   : in std_logic;    write    : in std_logic  );end;architecture rtl of umc18_syncram is  signal gnd   : std_logic;  signal wr   : std_logic;  signal a    : std_logic_vector(19 downto 0);  signal d, q : std_logic_vector(37 downto 0);  constant synopsys_bug : std_logic_vector(37 downto 0) := (others => '0');begin  wr <= not write;   gnd <= '0';   a(abits -1 downto 0) <= address;   a(abits+1 downto abits) <= synopsys_bug(abits+1 downto abits);  d(dbits -1 downto 0) <= datain;   d(dbits+1 downto dbits) <= synopsys_bug(dbits+1 downto dbits);  dataout <= q(dbits -1 downto 0);  a8d24 : if (abits <= 8) and (dbits <= 24) generate    id0 : R256X24M4 	  port map ( ADR => a(7 downto 0), DI => d(23 downto 0), 	             DOUT => q(23 downto 0), CK => clk, WEN => wr,		     CEN => gnd, OEN => gnd);  end generate;  a8d25 : if (abits <= 8) and (dbits = 25) generate    id0 : R256X26M4 	  port map ( ADR => a(7 downto 0), DI => d(25 downto 0), 	             DOUT => q(25 downto 0), CK => clk, WEN => wr,		     CEN => gnd, OEN => gnd);  end generate;  a8d26 : if (abits <= 8) and (dbits = 26) generate    id0 : R256X26M4 	  port map ( ADR => a(7 downto 0), DI => d(25 downto 0), 	             DOUT => q(25 downto 0), CK => clk, WEN => wr,		     CEN => gnd, OEN => gnd);  end generate;  a10d32 : if (abits = 10) and (dbits <= 32) generate    id0 : R1024X32M4 	  port map ( ADR => a(9 downto 0), DI => d(31 downto 0), 	             DOUT => q(31 downto 0), CK => clk, WEN => wr,		     CEN => gnd, OEN => gnd);  end generate;  a11d32 : if (abits = 11) and (dbits <= 32) generate    id0 : R2048X32M8 	  port map ( ADR => a(10 downto 0), DI => d(31 downto 0), 	             DOUT => q(31 downto 0), CK => clk, WEN => wr,		     CEN => gnd, OEN => gnd);  end generate;end rtl;-------------------------------------------------------------------- regfile generator  --------------------------------------------------------------------------------------------------------------LIBRARY ieee;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use work.leon_iface.all;use work.tech_umc18_syn.all;entity umc18_regfile is  generic (     abits : integer := 8;    dbits : integer := 32;    words : integer := 128  );  port (    rst      : in std_logic;    clk      : in clk_type;    clkn     : in clk_type;    rfi      : in rf_in_type;    rfo      : out rf_out_type);end;architecture rtl of umc18_regfile issignal qq1, qq2 : std_logic_vector(dbits-1 downto 0);signal wen, ren1, ren2 : std_logic;begin  ren1 <= not rfi.ren1;  ren2 <= not rfi.ren2;  wen <= not rfi.wren;  dp136x32 : if (words = 136) and (dbits = 32) generate    u0: RF136X32M1	port map (RCK => clkn, REN => ren1, RADR => rfi.rd1addr(abits -1 downto 0),	          WCK => clk, WEN => wen, WADR => rfi.wraddr(abits -1 downto 0), 		  DI => rfi.wrdata(dbits -1 downto 0), DOUT => qq1);    u1: RF136X32M1	port map (RCK => clkn, REN => ren2, RADR => rfi.rd2addr(abits -1 downto 0),	          WCK => clk, WEN => wen, WADR => rfi.wraddr(abits -1 downto 0), 		  DI => rfi.wrdata(dbits -1 downto 0), DOUT => qq2);  end generate;  dp168x32 : if (words = 168) and (dbits = 32) generate    u0: RF168X32M1	port map (RCK => clkn, REN => ren1, RADR => rfi.rd1addr(abits -1 downto 0),	          WCK => clk, WEN => wen, WADR => rfi.wraddr(abits -1 downto 0), 		  DI => rfi.wrdata(dbits -1 downto 0), DOUT => qq1);    u1: RF168X32M1	port map (RCK => clkn, REN => ren2, RADR => rfi.rd2addr(abits -1 downto 0),	          WCK => clk, WEN => wen, WADR => rfi.wraddr(abits -1 downto 0), 		  DI => rfi.wrdata(dbits -1 downto 0), DOUT => qq2);  end generate;  rfo.data1 <= qq1(dbits-1 downto 0);  rfo.data2 <= qq2(dbits-1 downto 0);end;-------------------------------------------------------------------- mapping generic pads on tech pads ----------------------------------------------------------------------------------------------------- input padlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_inpad is port (pad : in std_logic; q : out std_logic); end; architecture syn of umc18_inpad is begin   i0 : C3I40 port map (PAD => pad, DI => q); end;-- input schmitt padlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_smpad is port (pad : in std_logic; q : out std_logic); end; architecture syn of umc18_smpad is begin   i0 : C3I42 port map (PAD => pad, DI => q); end;-- output padslibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_outpad is  generic (drive : integer := 1);  port (d : in std_logic; pad : out std_logic); end; architecture syn of umc18_outpad is begin   d1 : if drive = 1 generate    u0 : C3O10 port map (PAD => pad, DO => d);  end generate;  d2 : if drive = 2 generate    i0 : C3O20 port map (PAD => pad, DO => d);  end generate;  d3 : if drive > 2 generate    i0 : C3O40 port map (PAD => pad, DO => d);  end generate;end;-- tri-state output pads with pull-uplibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_toutpadu is   generic (drive : integer := 1);  port (d, en : in  std_logic; pad : out  std_logic);end; architecture syn of umc18_toutpadu is signal nc,p : std_logic;begin   d1 : if drive = 1 generate    i0 : C3B10U port map (PAD => p, DO => d, DI => nc, EN => en);  end generate;  d2 : if drive = 2 generate    i0 : C3B20U port map (PAD => p, DO => d, DI => nc, EN => en);  end generate;  d3 : if drive > 2 generate    i0 : C3B40U port map (PAD => p, DO => d, DI => nc, EN => en);  end generate;  pad <= p;end;-- bidirectional pad 2/4/8mA 4Xlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_iopad is  generic (drive : integer := 1);  port ( d, en : in std_logic; q : out std_logic; pad : inout std_logic);end;architecture syn of umc18_iopad is signal eni : std_logic;begin   eni <= not en;  d1 : if drive = 1 generate    i0 : C3B10 port map (PAD => pad, DO => d, EN => eni, DI => q);  end generate;  d2 : if drive = 2 generate    i0 : C3B20 port map (PAD => pad, DO => d, EN => eni, DI => q);  end generate;  d3 : if drive > 2 generate    i0 : C3B40 port map (PAD => pad, DO => d, EN => eni, DI => q);  end generate;end;-- bidirectional pad with open-drainlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_iodpad is  generic (drive : integer := 1);  port ( d : in std_logic; q : out std_logic; pad : inout std_logic);end;architecture syn of umc18_iodpad is signal vcc : std_logic;begin   vcc <= '1';  d1 : if drive = 1 generate    i0 : CD3B10T port map (PAD => pad, DO => d, EN => vcc, DI => q);  end generate;  d2 : if drive = 2 generate    i0 : CD3B20T port map (PAD => pad, DO => d, EN => vcc, DI => q);  end generate;  d3 : if drive > 2 generate    i0 : CD3B40T port map (PAD => pad, DO => d, EN => vcc, DI => q);  end generate;end;-- output pad with open-drainlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_odpad is  generic (drive : integer := 1);  port (d : in std_logic; pad : out std_logic);end;architecture syn of umc18_odpad is begin   d1 : if drive = 1 generate    i0 : CD3O10T port map (PAD => pad, DO => d);  end generate;  d2 : if drive = 2 generate    i0 : CD3O20T port map (PAD => pad, DO => d);  end generate;  d3 : if drive > 2 generate    i0 : CD3O40T port map (PAD => pad, DO => d);  end generate;end;-- bidirectional pad 8mA 4X schmitt triggerlibrary IEEE;use IEEE.std_logic_1164.all;use work.tech_umc18_syn.all;entity umc18_smiopad is  generic (drive : integer := 1);  port ( d, en : in std_logic; q : out std_logic; pad : inout std_logic);end;architecture syn of umc18_smiopad is signal eni : std_logic;begin   eni <= not en;  i0 : C3B42 port map (PAD => pad, DO => d, EN => eni, DI => q);end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -