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_debouncedcomponent
在VHDL中是一个保留字,不能用作标识符(实体名称)。这是示例中的一个错误,而不是在我尝试进行的实际实现中。if generate语句不支持else子句
-这是不正确的。VHDL-2008将elsif和else分支添加到if generate语句中,并添加case generate语句。关键字的正确顺序是else[备选标签:]生成
。