Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VHDL生成通用延迟包_Vhdl - Fatal编程技术网

用VHDL生成通用延迟包

用VHDL生成通用延迟包,vhdl,Vhdl,我正在寻找正确的语法来使用泛型和流程中的循环构建泛型行延迟包。我知道当与generate一起使用时,for循环用于并发语句,但肯定有一种方法可以构建它 例如: entity Delay_Line is Generic ( CLK_DELAYS : integer := 10); Port ( CLK : in STD_LOGIC; i_Din : in STD_LOGIC; o_Q : out

我正在寻找正确的语法来使用泛型和流程中的循环构建泛型行延迟包。我知道当与generate一起使用时,for循环用于并发语句,但肯定有一种方法可以构建它

例如:

entity Delay_Line is
    Generic (
        CLK_DELAYS : integer := 10);
    Port ( 
        CLK    : in  STD_LOGIC;
        i_Din  : in  STD_LOGIC;
        o_Q    : out  STD_LOGIC;
        o_Qnot : out  STD_LOGIC);
    end Delay_Line;

architecture Delay_Line_arch of Delay_Line is

    signal din_dly : std_logic_vector(CLK_DELAYS-1 downto 0);
begin
    din_dly(0) <= i_Din;

    process(CLK)
    begin
        if rising_edge(CLK) then
            for index in 0 to CLK_DELAYS-1 generate
            begin
                din_dly(index+1) <= din_dly(index);
            end;
        end if;
    end process;
    o_Q        <= din_dly(CLK_DELAYS);
    o_Qnot     <= NOT (din_dly(CLK_DELAYS));

end Delay_Line_arch;
实体延迟线为
一般的(
时钟延迟:整数:=10);
港口(
CLK:标准逻辑中;
i_Din:标准逻辑;
输出标准逻辑;
o_Qnot:输出标准逻辑);
终端延迟线;
延迟线的架构延迟线是
信号延迟:标准逻辑向量(时钟延迟-1至0);
开始

din_dly(0)实际上没有必要使用如此复杂的方法来实现移位寄存器。您可以使用数组连接和切片直接在一行中实现它们

恒定延迟\u级:正:=10;--或者使用泛型参数
信号延迟线:标准逻辑向量(1至延迟级);
...
过程(clk)是
开始
如果上升沿(clk),则

延迟线有点晚,但这是我的通用延迟组件:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY generic_delay is
  generic (
    bus_size    : natural;
    delay       : natural
    );
  port (
    i_Clock : IN  STD_LOGIC;
    i_reset : IN  STD_LOGIC;
    i_bus1  : in std_logic_vector(bus_size - 1 downto 0);
    i_bus2  : in std_logic_vector(bus_size - 1 downto 0);
    o_bus1  : out std_logic_vector(bus_size - 1 downto 0);
    o_bus2  : out std_logic_vector(bus_size - 1 downto 0)
    );
end generic_delay;


architecture a of generic_delay is

----------------------------
-- SIGNALS DECLARATION
----------------------------
  signal temp_bus1 : std_logic_vector(delay*bus_size - 1 downto 0);
  signal temp_bus2 : std_logic_vector(delay*bus_size - 1 downto 0);

BEGIN

-----------------------------------------
-- SYNCHRONOUS PROCESS
-----------------------------------------
  process(i_Clock, i_reset)

  begin

    if i_reset = '1' then
      temp_bus1 <= (others => '0');
      temp_bus2 <= (others => '0');

    elsif falling_edge(i_Clock) then
      if delay > 1 then
        temp_bus1 <= i_bus1 & temp_bus1(delay*bus_size - 1 downto (delay-1)*bus_size);
        temp_bus2 <= i_bus2 & temp_bus2(delay*bus_size - 1 downto (delay-1)*bus_size);
      else
        temp_bus1 <= i_bus1;
        temp_bus2 <= i_bus2;
      end if; 
    elsif (RISING_EDGE(i_Clock)) then

      o_bus1 <= temp_bus1(bus_size - 1 downto 0);
      o_bus2 <= temp_bus2(bus_size - 1 downto 0);      

    end if; -- reset + rising_edge(clk)

  end process logic;


-------------------------------------------------------

end a;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
使用IEEE.STD_LOGIC_ARITH.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
实体通用_延迟为
一般的(
巴士大小:自然;
延迟:自然
);
港口(
i_时钟:标准逻辑;
i_重置:在标准_逻辑中;
i_bus1:in标准逻辑向量(总线大小-1到0);
i_总线2:标准逻辑向量中(总线大小-1到0);
o_总线1:输出标准逻辑向量(总线大小-1到0);
o_总线2:输出标准逻辑向量(总线大小-1到0)
);
结束一般延迟;
通用延迟的架构是
----------------------------
--信号声明
----------------------------
信号温度总线1:标准逻辑向量(延迟*总线大小-1降为0);
信号温度总线2:标准逻辑向量(延迟*总线大小-1降到0);
开始
-----------------------------------------
--同步过程
-----------------------------------------
进程(i_时钟、i_重置)
开始
如果i_reset='1',则
温度总线1“0”);
温度总线2'0');
如果下降沿(i时钟)那么
如果延迟>1,则

temp_bus1嗯,我还没有50个rep,但要让Pablo R的方法处理大型总线和延迟
总线大小:=16
延迟:=256
。我必须改变:

temp_bus2 <= i_bus2 & temp_bus2(delay*bus_size - 1 downto (delay-1)*bus_size);

temp_bus2不清楚您想要什么,这与您发布的内容不同。这就是说,您当前的代码有1或2个错误(编译器会告诉您)串联!我当然应该想到这一点!非常感谢@Kevin Thibedou
temp_bus2 <= i_bus2 & temp_bus2(delay*bus_size - 1 downto (delay-1)*bus_size);
temp_bus2 <= i_bus2 & temp_bus2(delay*bus_size - 1 downto (bus_size);