UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 18437

6.1i XST - XST のユーザーガイドで、各ポートにイネーブル ピンのあるデュアル ポート RAM の推論に関する記述に誤りがある

説明

キーワード : software, manual, RAM, dual, port, enable, 6.1, ISE, XST, ソフトウェア, マニュアル, デュアル, ポート, イネーブル

重要度 : 標準

概要 : バージョン 6.1 のソフトウェア マニュアルで、各ポートにイネーブル ピンを持つデュアル ポート RAM の推論に関する記述に誤りがあります。 次のページに記載されている VHDL/VERILOG コードが適切ではありません。
http://toolbox.xilinx.com/docsan/xilinx6/books/data/docs/xst/xst0026_5.html.

ソリューション

1


XST を使用し、各ポートにイネーブル ピンを持つデュアル ポート RAM を推論する場合は、次の VHDL コードを合成してください。
VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity raminfr is
port (
clk : in std_logic;
ena, enb : in std_logic;
wea : in std_logic;
addra : in std_logic_vector(4 downto 0);
addrb : in std_logic_vector(4 downto 0);
dia : in std_logic_vector(3 downto 0);
doa : out std_logic_vector(3 downto 0);
dob : out std_logic_vector(3 downto 0)
);
end raminfr;

architecture syn of raminfr is

type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0);
signal RAM : ram_type;
signal read_addra : std_logic_vector(4 downto 0);
signal read_addrb : std_logic_vector(4 downto 0);

begin

process (clk) begin
if (clk'event and clk = '1') then
if (ena = '1') then
if (wea = '1') then
RAM(conv_integer(addra)) <= dia;
end if;

read_addra <= addra;
end if;
end if;
end process;

process (clk) begin
if (clk'event and clk = '1') then
if (enb = '1') then
read_addrb <= addrb;
end if;
end if;
end process;

doa <= RAM(conv_integer(read_addra));
dob <= RAM(conv_integer(read_addrb));

end syn;

2


XST を使用し、各ポートにイネーブル ピンを持つデュアル ポート RAM を推論する場合は、次の Verilog コードを合成してください。

Verilog
module raminfr (clk, ena, enb, wea, addra, addrb, dia, doa, dob);

input clk, ena, enb, wea;
input [4:0] addra, addrb;
input [3:0] dia;
output [3:0] doa, dob;

reg [3:0] ram [31:0];
reg [4:0] read_addra, read_addrb;

always @(posedge clk) begin
if (ena) begin
if (wea) begin
ram[addra] <= dia;
end
read_addra <= addra;
end
end


always @(posedge clk) begin
if (enb) begin
read_addrb <= addrb;
end
end

assign doa = ram[read_addra];
assign dob = ram[read_addrb];

endmodule
AR# 18437
日付 03/07/2006
ステータス アーカイブ
種類 一般
このページをブックマークに追加