我写了一个VHDL代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-----------------------------------------------------------------------------------------------------
-- ENTITY DEFINITION --
----------------------------------------------------------------------------------------------------
entity controller_1 is
port(
clk : in std_logic;
rst : in std_logic;
ls_charge_o : out std_logic;
laser_trg_0_o : out std_logic;
laser_trg_1_o : out std_logic;
laser_en : out std_logic;
pwm_duration_1 : in std_logic_vector(15 downto 0);
pwm_duration_2 : in std_logic_vector(15 downto 0);
pwm_duration_3 : in std_logic_vector(15 downto 0);
pwm_duration_4 : in std_logic_vector(15 downto 0);
pwm_pattern : in std_logic_vector(15 downto 0)
);
end controller_1 ;
architecture rtl of controller_1 is
--- The registers conversion
signal CYCLES_PWM_DURATION_1 : integer := 0;
signal CYCLES_PWM_DURATION_2 : integer := 0;
signal CYCLES_PWM_DURATION_3 : integer := 0;
signal CYCLES_PWM_DURATION_4 : integer := 0;
signal wait_b4_nxt_shot : integer := 0;
type t_State is (state_1, state_2, state_3, state_4, state_5, state_6, state_7, state_8, state_9, state_10, state_11, state_12);
signal state : t_State;
begin
CYCLES_PWM_DURATION_1 <= FREQUENCY_WO_EXP * (to_integer(unsigned(pwm_duration_1)))/1000 ;
CYCLES_PWM_DURATION_2 <= FREQUENCY_WO_EXP * (to_integer(unsigned(pwm_duration_2)))/1000 ;
CYCLES_PWM_DURATION_3 <= FREQUENCY_WO_EXP * (to_integer(unsigned(pwm_duration_3)))/1000 ;
CYCLES_PWM_DURATION_4 <= FREQUENCY_WO_EXP * (to_integer(unsigned(pwm_duration_4)))/1000 ;
WAIT_B4_NXT_SHOT <= (250 *4) - (CYCLES_PWM_DURATION_1 + CYCLES_PWM_DURATION_2 + CYCLES_PWM_DURATION_3 + CYCLES_PWM_DURATION_4);
问题是,信号 CYCLES_PWM_DURATION_1、CYCLES_PWM_DURATION_2、CYCLES_PWM_DURATION_3、CYCLES_PWM_DURATION_4 和 WAIT_B4_NXT_SHOT 是否会被合成?到目前为止,这种方法似乎不起作用。
它可以在模拟中工作,但不能在硬件上工作。不过,合成进展顺利,并且生成了位文件。我正在使用莱迪思 FPGA。如果您认为这行不通,那么还有其他方法吗?
问题是,逻辑正在正常合成。没有报告有关删除的问题。 然而,问题是,当你乘以一个信号或将它除以一个不是 2 的幂的数字(例如 2、4、8、16 等)时,合成器虽然会合成逻辑,但它会插入一些疯狂的计时,最终将导致杀死真正的逻辑。 我所做的只是将 1000 替换为 1024。问题解决了。