這裏是來自Xilinx Zynq示例的代碼。我無法理解這是爲了什麼?奇怪的邊緣檢測或其他?
在我pulse_d2僅在s_axi_resetn的下降沿爲1。
以這種方式檢測下降沿的原因是什麼?
爲什麼不使用事件,像「if(s_axi_resetn'event和s_axi_resetn ='0')」?
process(s_axi_clk)
begin
if (s_axi_clk'event and s_axi_clk = '1') then
if (s_axi_resetn = '0') then
pulse <= '0';
else
pulse <= '1';
end if;
end if;
end process;
process(s_axi_clk)
begin
if (s_axi_clk'event and s_axi_clk = '1') then
if (s_axi_resetn = '0') then
pulse_d1 <= '0';
else
pulse_d1 <= pulse;
end if;
end if;
end process;
pulse_d2 <= pulse and (not pulse_d1);
這是Xilinx的例子嗎?他們然後在這裏做了一些低質量的代碼。奇怪的信號命名。不使用'rising_edge'。一切都可以寫得更有效率。 – JHBonarius
是的,這段代碼來自AXI Datamover示例。您能否爲了學習的目的給出一些更高效的代碼或其他具有相同功能的變體? – eloiman