📄 mem_apa3_gen.vhd
字号:
end component; constant dlen : integer := dbits + 9; signal di1, di2, q1, q2 : std_logic_vector(dlen downto 0); signal a1, a2 : std_logic_vector(12 downto 0); signal en1, en2, we1, we2 : std_ulogic;begin di1(dbits-1 downto 0) <= datain1; di1(dlen downto dbits) <= (others => '0'); di2(dbits-1 downto 0) <= datain1; di2(dlen downto dbits) <= (others => '0'); a1(abits-1 downto 0) <= address1; a1(12 downto abits) <= (others => '0'); a2(abits-1 downto 0) <= address1; a2(12 downto abits) <= (others => '0'); dataout1 <= q1(dbits-1 downto 0); q1(dlen downto dbits) <= (others => '0'); dataout2 <= q2(dbits-1 downto 0); q2(dlen downto dbits) <= (others => '0'); en1 <= not enable1; en2 <= not enable2; we1 <= not write1; we2 <= not write2; a9 : if (abits <= 9) generate x : for i in 0 to (dbits-1)/9 generate u0 : proasic3_ram4k9 generic map (9, 9) port map ( a1(8 downto 0), a2(8 downto 0), clk1, clk2, di1(i*9+8 downto i*9), di2(i*9+8 downto i*9), q1(i*9+8 downto i*9), q2(i*9+8 downto i*9), en1, en2, we1, we2); end generate; end generate; a10 : if (abits = 10) generate x : for i in 0 to (dbits-1)/4 generate u0 : proasic3_ram4k9 generic map (10, 4) port map ( a1(9 downto 0), a2(9 downto 0), clk1, clk2, di1(i*4+3 downto i*4), di2(i*4+3 downto i*4), q1(i*4+3 downto i*4), q2(i*4+3 downto i*4), en1, en2, we1, we2); end generate; end generate; a11 : if (abits = 11) generate x : for i in 0 to (dbits-1)/2 generate u0 : proasic3_ram4k9 generic map (11, 2) port map ( a1(10 downto 0), a2(10 downto 0), clk1, clk2, di1(i*2+1 downto i*2), di2(i*2+1 downto i*2), q1(i*2+1 downto i*2), q2(i*2+1 downto i*2), en1, en2, we1, we2); end generate; end generate; a12 : if (abits = 12) generate x : for i in 0 to (dbits-1) generate u0 : proasic3_ram4k9 generic map (12, 1) port map ( a1(11 downto 0), a2(11 downto 0), clk1, clk2, di1(i*1 downto i*1), di2(i*1 downto i*1), q1(i*1 downto i*1), q2(i*1 downto i*1), en1, en2, we1, we2); end generate; end generate;-- pragma translate_off unsup : if abits > 12 generate x : process begin assert false report "Address depth larger than 12 not supported for ProAsic3 rams" severity failure; wait; end process; end generate;-- pragma translate_onend;library ieee;use ieee.std_logic_1164.all;entity proasic3_syncram_2p is generic ( abits : integer := 8; dbits : integer := 32); port ( rclk : in std_ulogic; rena : in std_ulogic; raddr : in std_logic_vector (abits -1 downto 0); dout : out std_logic_vector (dbits -1 downto 0); wclk : in std_ulogic; waddr : in std_logic_vector (abits -1 downto 0); din : in std_logic_vector (dbits -1 downto 0); write : in std_ulogic);end;architecture rtl of proasic3_syncram_2p is component proasic3_ram4k9 generic (abits : integer range 9 to 12 := 9; dbits : integer := 9); port ( addra, addrb : in std_logic_vector(abits -1 downto 0); clka, clkb : in std_ulogic; dia, dib : in std_logic_vector(dbits -1 downto 0); doa, dob : out std_logic_vector(dbits -1 downto 0); ena, enb : in std_ulogic; wea, web : in std_ulogic); end component; component proasic3_ram512x18 port ( addra, addrb : in std_logic_vector(8 downto 0); clka, clkb : in std_ulogic; di : in std_logic_vector(17 downto 0); do : out std_logic_vector(17 downto 0); ena, enb : in std_ulogic; wea : in std_ulogic); end component; constant dlen : integer := dbits + 18; signal di1, q2, gnd : std_logic_vector(dlen downto 0); signal a1, a2 : std_logic_vector(12 downto 0); signal en1, en2, we1, vcc : std_ulogic;begin vcc <= '1'; gnd <= (others => '0'); di1(dbits-1 downto 0) <= din; di1(dlen downto dbits) <= (others => '0'); a1(abits-1 downto 0) <= waddr; a1(12 downto abits) <= (others => '0'); a2(abits-1 downto 0) <= raddr; a2(12 downto abits) <= (others => '0'); dout <= q2(dbits-1 downto 0); q2(dlen downto dbits) <= (others => '0'); en1 <= not write; en2 <= not rena; we1 <= not write; a8 : if (abits <= 8) generate x : for i in 0 to (dbits-1)/18 generate u0 : proasic3_ram512x18 port map ( a1(8 downto 0), a2(8 downto 0), wclk, rclk, di1(i*18+17 downto i*18), q2(i*18+17 downto i*18), en1, en2, we1); end generate; end generate; a9 : if (abits = 9) generate x : for i in 0 to (dbits-1)/9 generate u0 : proasic3_ram4k9 generic map (9, 9) port map ( a1(8 downto 0), a2(8 downto 0), wclk, rclk, di1(i*9+8 downto i*9), gnd(8 downto 0), open, q2(i*9+8 downto i*9), en1, en2, we1, vcc); end generate; end generate; a10 : if (abits = 10) generate x : for i in 0 to (dbits-1)/4 generate u0 : proasic3_ram4k9 generic map (10, 4) port map ( a1(9 downto 0), a2(9 downto 0), wclk, rclk, di1(i*4+3 downto i*4), gnd(3 downto 0), open, q2(i*4+3 downto i*4), en1, en2, we1, vcc); end generate; end generate; a11 : if (abits = 11) generate x : for i in 0 to (dbits-1)/2 generate u0 : proasic3_ram4k9 generic map (11, 2) port map ( a1(10 downto 0), a2(10 downto 0), wclk, rclk, di1(i*2+1 downto i*2), gnd(1 downto 0), open, q2(i*2+1 downto i*2), en1, en2, we1, vcc); end generate; end generate; a12 : if (abits = 12) generate x : for i in 0 to (dbits-1) generate u0 : proasic3_ram4k9 generic map (12, 1) port map ( a1(11 downto 0), a2(11 downto 0), wclk, rclk, di1(i*1 downto i*1), gnd(0 downto 0), open, q2(i*1 downto i*1), en1, en2, we1, vcc); end generate; end generate;-- pragma translate_off unsup : if abits > 12 generate x : process begin assert false report "Address depth larger than 12 not supported for ProAsic3 rams" severity failure; wait; end process; end generate;-- pragma translate_onend;library ieee;use ieee.std_logic_1164.all;library techmap;use techmap.allmem.all;entity proasic3_syncram is generic ( abits : integer := 10; dbits : integer := 8 ); port ( clk : in std_ulogic; address : in std_logic_vector((abits -1) downto 0); datain : in std_logic_vector((dbits -1) downto 0); dataout : out std_logic_vector((dbits -1) downto 0); enable : in std_ulogic; write : in std_ulogic ); end;architecture rtl of proasic3_syncram issignal gnd : std_logic_vector(abits+dbits downto 0);begin gnd <= (others => '0'); r2p : if abits <= 8 generate u0 : proasic3_syncram_2p generic map (abits, dbits) port map (clk, enable, address, dataout, clk, address, datain, write); end generate; rdp : if abits > 8 generate u0 : proasic3_syncram_dp generic map (abits, dbits) port map (clk, address, datain, dataout, enable, write, clk, gnd(abits-1 downto 0), gnd(dbits-1 downto 0), open, gnd(0), gnd(0)); end generate;end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -