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# 16039

5.2i XST - rom_style 属性を使用する方法

説明

キーワード : VHDL, Verilog, block, RAM, ROM, directive, ブロック, 属性, 指示子

重要度 : 標準

概要 :
rom_style 属性がうまく機能しません。 XST でこの属性を使用する方法を教えてください。

メモ :
- ブロック ROM の推論については、(Xilinx Answer 15639) を参照してください。
- ブロック ROM 推論の既知の問題については、(Xilinx Answer 16026) を参照してください。

ソリューション

1

この属性は、推論した ROM の組み合わせロジックを表す信号に設定します。

VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity top is
port (clk,en : in std_logic ;
addr : in std_logic_vector (7 downto 0);
dout : out std_logic_vector (3 downto 0));
end;

architecture rtl of top is

type rom is array (0 to 255) of std_logic_vector (3 downto 0);
constant ROM1 : rom := (
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",

:
:
:
signal temp_data : std_logic_vector( 3 downto 0);

attribute rom_style : string;
attribute rom_style of temp_data : signal is "Distributed";

begin

temp_data <= rom1(conv_integer(addr));

process (clk)
begin
if (rising_edge (clk)) then
if (en = '1') then
dout <= temp_data;
end if;
end if;
end process;

end rtl ;

この問題は、最新版の 5.2i サービス パックで修正されています。サービス パックは、次のサイトからダウンロードできます。
http://www.xilinx.com/xlnx/xil_sw_updates_home.jsp
この修正は、5.2i サービス パック 1 に含まれます。

2

この属性は、推論した ROM の組み合わせロジックを表す信号に設定します。

Verilog

module top (clk,en,addr,dout);

input clk,en;
input [3:0] addr;
output [4:0] dout;

reg [4:0] temp_data, dout;

always @ (posedge clk)
if (en) dout <= temp_data;

always @ (addr)
begin

case (addr)
4'b0000 : temp_data = 5'b00000;
4'b0001 : temp_data = 5'b00001;
4'b0010 : temp_data = 5'b00010;
4'b0011 : temp_data = 5'b00011;
4'b0100 : temp_data = 5'b00100;
4'b0101 : temp_data = 5'b00101;
4'b0110 : temp_data = 5'b00110;
4'b0111 : temp_data = 5'b00111;
4'b1000 : temp_data = 5'b01000;
4'b1001 : temp_data = 5'b01001;
4'b1010 : temp_data = 5'b01010;
4'b1011 : temp_data = 5'b01011;
4'b1100 : temp_data = 5'b01100;
4'b1101 : temp_data = 5'b01101;
4'b1110 : temp_data = 5'b01110;
4'b1111 : temp_data = 5'b01111;
endcase

end
// synthesis attribute rom_style of temp_data is "distributed"

endmodule
AR# 16039
日付 10/20/2005
ステータス アーカイブ
種類 一般
このページをブックマークに追加