如果没有vhdl中的同步错误,我该如何做这样的事情?
process (shift_button)
variable x : STD_LOGIC;
begin
x := '0';
if falling_edge(shift_button) then
x := '1';
end if;
shift_button_let_go <= x;
end process;
答案 0 :(得分:0)
我首先会阅读Xilinx支持文章,了解您遇到的错误: http://www.xilinx.com/support/answers/14047.html
它基本上表明XST在制作同步设计元素时需要一定的模板(注意falling_edge()
将使用VHDL&#39;事件属性)。我猜测XST并不像你在shift_button_let_go
的上升边缘如何定义shift_button
。
您提到shift_button_let_go
变低后,您希望shift_button
在一个时钟周期内变为高电平。如果是这种情况,那么你会希望在这个过程中使用你的时钟。灵敏度列表而不是shift_button
。
process (clk)
begin
if rising_edge(clk) then
shift_button_d <= shift_button;
if (shift_button_d = '1' and shift_button = '0') then -- Falling edge detect
shift_button_let_go <= '1';
else
shift_button_let_go <= '0';
end if;
end process;
注意如果shift_button
与clk
不同步且在多个clk
周期内保持稳定,则此逻辑可能会遇到元稳定性问题。