📄 tech_umc18.vhd
字号:
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 + -