vhdl延迟线实现属性
vhdl delay line implementation attribute
一个关于vhdl属性的新手问题。在这个LUT RAM上实现的128深8位延迟线,属性部分看不懂
entity srl_128_lutram is
generic (
LENGTH : integer := 128;
ADDRWIDTH : integer := 7;
WIDTH : integer := 8);
port (
CLK : in std_logic;
SHIFT_IN : in std_logic_vector(WIDTH-1 downto 0);
SHIFT_OUT : out std_logic_vector(WIDTH-1 downto 0));
end srl_128_lutram;
architecture behavioral of srl_128_lutram is
signal CNTR : std_logic_vector(ADDRWIDTH-1 downto 0);
type ram_type is array (0 to LENGTH-2) of std_logic_vector(WIDTH-1 downto 0);
signal RAM : ram_type := (others => (others => ’0’));
attribute ram_style : string;
attribute ram_style of RAM : signal is "distributed";
begin
counter : process (CLK)
begin
if CLK’event and CLK = ’1’ then
if CNTR = conv_std_logic_vector(LENGTH-2, ADDRWIDTH) then
CNTR <= (others => ’0’);
else
CNTR <= CNTR + ’1’;
end if;
end if;
end process counter;
memory : process (CLK)
begin
if CLK’event and CLK = ’1’ then
RAM(conv_integer(CNTR)) <= SHIFT_IN;
SHIFT_OUT <= RAM(conv_integer(CNTR));
end if;
end process memory;
end behavioral;
我的问题是属性在这里的目的是什么?如果没有这两行会怎样?
编辑:
属性用于给合成器一些指令。
属性语法有点混乱,但你的行的含义如下:对于我的信号 RAM 使用属性 ram_style 与价值分布。该属性在后面的代码中永远不会用到,它已经给出了他的信息。
注意:属性因合成器而异。
旧:
属性 RAM_STYLE 为合成器提供了用于实现 RAM 的物理单元类型。
在您的情况下,它将选择 LUT ram。因此,它会消耗 FPGA 中总 LUT ram 资源的一些 LUT ram。您也可以使用块 RAM。
如果您不使用该属性,合成器将在这两个单元格之间自行选择(可能是出于资源和性能方面的考虑)。
来源:https://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_3/ug901-vivado-synthesis.pdf(第 36 页)
一个关于vhdl属性的新手问题。在这个LUT RAM上实现的128深8位延迟线,属性部分看不懂
entity srl_128_lutram is
generic (
LENGTH : integer := 128;
ADDRWIDTH : integer := 7;
WIDTH : integer := 8);
port (
CLK : in std_logic;
SHIFT_IN : in std_logic_vector(WIDTH-1 downto 0);
SHIFT_OUT : out std_logic_vector(WIDTH-1 downto 0));
end srl_128_lutram;
architecture behavioral of srl_128_lutram is
signal CNTR : std_logic_vector(ADDRWIDTH-1 downto 0);
type ram_type is array (0 to LENGTH-2) of std_logic_vector(WIDTH-1 downto 0);
signal RAM : ram_type := (others => (others => ’0’));
attribute ram_style : string;
attribute ram_style of RAM : signal is "distributed";
begin
counter : process (CLK)
begin
if CLK’event and CLK = ’1’ then
if CNTR = conv_std_logic_vector(LENGTH-2, ADDRWIDTH) then
CNTR <= (others => ’0’);
else
CNTR <= CNTR + ’1’;
end if;
end if;
end process counter;
memory : process (CLK)
begin
if CLK’event and CLK = ’1’ then
RAM(conv_integer(CNTR)) <= SHIFT_IN;
SHIFT_OUT <= RAM(conv_integer(CNTR));
end if;
end process memory;
end behavioral;
我的问题是属性在这里的目的是什么?如果没有这两行会怎样?
编辑:
属性用于给合成器一些指令。
属性语法有点混乱,但你的行的含义如下:对于我的信号 RAM 使用属性 ram_style 与价值分布。该属性在后面的代码中永远不会用到,它已经给出了他的信息。
注意:属性因合成器而异。
旧:
属性 RAM_STYLE 为合成器提供了用于实现 RAM 的物理单元类型。
在您的情况下,它将选择 LUT ram。因此,它会消耗 FPGA 中总 LUT ram 资源的一些 LUT ram。您也可以使用块 RAM。
如果您不使用该属性,合成器将在这两个单元格之间自行选择(可能是出于资源和性能方面的考虑)。
来源:https://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_3/ug901-vivado-synthesis.pdf(第 36 页)