Vhdl 通过输入生成元件或驱动信号

Vhdl 通过输入生成元件或驱动信号,vhdl,Vhdl,我试图创建一个具有以下行为的体系结构: entity component1 is generic ( debounce_ticks : natural range 0 to natural'high ); port ( rst : in STD_LOGIC; clk : in STD_LOGIC; s

我试图创建一个具有以下行为的体系结构:

entity component1 is
    generic (
        debounce_ticks          : natural range 0 to natural'high
    );
    port (
        rst                     : in    STD_LOGIC;
        clk                     : in    STD_LOGIC;
        sclk                    : in    STD_LOGIC;
        [...]              
    );
end component1;
architecture Behavioral of component1 is
     signal sclk_debounced       : STD_LOGIC;
[...]
begin
debouncer:
    if debounce_ticks > 0 generate
        sclk_debouncer : entity work.static_debouncer
        generic map (
            debounce_ticks => debounce_ticks
        )
        port map (
            clk => clk,
            pulse_in => sclk,
            pulse_out => sclk_debounced
        );
    else --Or something
       sclk_debounced <= sclk
    end generate debouncer;
[..]
end Behavioral;
实体组件1是
一般的(
去盎司刻度:自然范围0至自然“高”
);
港口(
rst:标准逻辑中;
clk:标准逻辑中;
sclk:标准逻辑中;
[...]              
);
端部组件1;
组件1的架构行为是
信号sclk_去公告:标准逻辑;
[...]
开始
脱口而出者:
如果去盎司刻度>0,则生成
sclk_去Bouncer:实体工作。静态去Bouncer
通用地图(
去盎司滴答声=>去盎司滴答声
)
港口地图(
时钟=>clk,
脉冲_in=>sclk,
脉冲输出=>sclk\U去抖动
);
或者别的什么

sclk_debouncedif generate
语句不支持
else
子句,因此需要反转检查以模拟
else
。另外,如果生成另一个
,则需要另一个标签

begin
debouncer:
    if debounce_ticks > 0 generate
        sclk_debouncer : entity work.static_debouncer
        generic map (
            debounce_ticks => debounce_ticks
        )
        port map (
            clk => clk,
            pulse_in => sclk,
            pulse_out => sclk_debounced
        );
    end generate debouncer;
no_debouncer:
    if debounce_ticks <= 0 generate
       sclk_debounced <= sclk
    end generate no_debouncer;
[...]
开始
脱口而出者:
如果去盎司刻度>0,则生成
sclk_去Bouncer:实体工作。静态去Bouncer
通用地图(
去盎司滴答声=>去盎司滴答声
)
港口地图(
时钟=>clk,
脉冲_in=>sclk,
脉冲输出=>sclk\U去抖动
);
末端产生去抖器;
无需去Bouncer:
如果debounce_ticks您需要两个更改:


  • 组件
    是保留字,不能用作标识符
  • 保留字
    generate
    else
  • 重命名实体:

    entity component1 is
      generic (
        debounce_ticks          : natural range 0 to natural'high
      );
      port (
        rst                     : in    STD_LOGIC;
        clk                     : in    STD_LOGIC;
        sclk                    : in    STD_LOGIC;
        -- [...]              
      );
    end entity component1;
    
    architecture Behavioral of component1 is
      signal sclk_debounced       : STD_LOGIC;
      -- [...]
    begin
      debouncer: if debounce_ticks > 0 generate
        sclk_debouncer : entity work.static_debouncer
          generic map (
            debounce_ticks => debounce_ticks
          )
          port map (
            clk => clk,
            pulse_in => sclk,
            pulse_out => sclk_debounced
          );
      else generate --Or something
        sclk_debounced <= sclk
      end generate debouncer;
      -- [..]
    end architecture Behavioral;
    
    固定生成语句:

    entity component1 is
      generic (
        debounce_ticks          : natural range 0 to natural'high
      );
      port (
        rst                     : in    STD_LOGIC;
        clk                     : in    STD_LOGIC;
        sclk                    : in    STD_LOGIC;
        -- [...]              
      );
    end entity component1;
    
    architecture Behavioral of component1 is
      signal sclk_debounced       : STD_LOGIC;
      -- [...]
    begin
      debouncer: if debounce_ticks > 0 generate
        sclk_debouncer : entity work.static_debouncer
          generic map (
            debounce_ticks => debounce_ticks
          )
          port map (
            clk => clk,
            pulse_in => sclk,
            pulse_out => sclk_debounced
          );
      else generate --Or something
        sclk_debounced <= sclk
      end generate debouncer;
      -- [..]
    end architecture Behavioral;
    
    组件1的架构行为是
    信号sclk_去公告:标准逻辑;
    -- [...]
    开始
    消除抖动:如果消除抖动>0,则生成
    sclk_去Bouncer:实体工作。静态去Bouncer
    通用地图(
    去盎司滴答声=>去盎司滴答声
    )
    港口地图(
    时钟=>clk,
    脉冲_in=>sclk,
    脉冲输出=>sclk\U去抖动
    );
    或者别的什么
    
    sclk_debounced
    component
    在VHDL中是一个保留字,不能用作标识符(实体名称)。这是示例中的一个错误,而不是在我尝试进行的实际实现中。
    if generate语句不支持else子句
    -这是不正确的。VHDL-2008将elsif和else分支添加到if generate语句中,并添加case generate语句。关键字的正确顺序是
    else[备选标签:]生成