我正在尝试使用 VHDL(Xilinx ISE+ISim)中的 Spartan 3e 板生成皮秒 PWM 信号。
library ieee;
use ieee.std_logic_1164.all;
entity pwm is
port(clk : in std_logic;
pwm_out : buffer std_logic);
end entity;
architecture rtl of pwm is
begin
process (clk)
variable count : integer range 0 to 50000;
variable duty_cycle : integer range 0 to 50000;
variable flag : integer range 0 to 1;
begin
if (rising_edge(clk)) then
count := count+1;
if (count = duty_cycle) then
pwm_out <= '1';
end if;
if (count = 50000) then
pwm_out <= '0';
count := 0;
if(flag = 0) then
duty_cycle := duty_cycle+50;
else
duty_cycle := duty_cycle-50;
end if;
if(duty_cycle = 50000) then
flag := 1;
elsif(duty_cycle = 0) then
flag := 0;
end if;
end if;
end if;
end process;
end rtl;
我将嵌入式 50Mhz 用于全局时钟(C9),但模拟显示出奇怪的行为;从 0ps 到 1000000ps clk(时钟)和 pwm_out(输出)似乎总是高,并且在 ISim 下的时域中 clk 和 pwm_out 在 1000000ps 之后什么都没有。
我正在尝试做的是调查和解决这种行为,然后增加输出频率(pwm_out)。此外,我想了解生成脉冲的速度(上升/下降时间和频率)(物理限制)。
我希望有经验的用户提供一些指导。