我需要有关 VHDL 代码综合的帮助,它可以综合吗?

问题描述 投票:0回答:1

我写了一个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。如果您认为这行不通,那么还有其他方法吗?

vhdl fpga lattice
1个回答
0
投票

问题是,逻辑正在正常合成。没有报告有关删除的问题。 然而,问题是,当你乘以一个信号或将它除以一个不是 2 的幂的数字(例如 2、4、8、16 等)时,合成器虽然会合成逻辑,但它会插入一些疯狂的计时,最终将导致杀死真正的逻辑。 我所做的只是将 1000 替换为 1024。问题解决了。

© www.soinside.com 2019 - 2024. All rights reserved.