我编写了一个 VHDL 设计,将时钟频率减半并将这个“数据时钟”输出到 sclk 引脚。我还有一个名为“sda”的数据引脚,我想从中发送数据。以下代码工作正常。我看到 sclk 和 sda 的时钟信号被永久设置为高电平。启用附加到一个按钮。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
-- For Main Clock --
library machXO3l;
use machXO3l.all;
--------------------
entity top is
-- entity's pin out.
port(
enable : in std_logic;
sda : out std_logic := '0';
sclk : out std_logic := '0'
);
end entity;
architecture top_behav of top is
signal temp_sclk : std_logic := '0';
signal clk : std_logic;
signal temp_sda : std_logic := '1';
signal stdby : std_logic := '0';
component OSCH
-- Component description that is being used within the entity.
-- synthesis translate_off
generic (NOM_FREQ: string := "24.18");
-- synthesis translate_on
port(
STDBY : in std_logic;
OSC : out std_logic
);
end component;
attribute NOM_FREQ : string;
attribute NOM_FREQ of OSCinst0 : label is "24.18";
begin
OSCinst0: OSCH
-- synthesis translate_off
generic map( NOM_FREQ => "24.18" )
-- synthesis translate_on
-- mapping the OSCH component to our entity pin out.
port map(
OSC => clk,
STDBY => stdby
);
-- DATA CLOCK GENERATION
sclk_p : process(clk, enable)
begin
if (enable = '0') then
temp_sclk <= '0';
elsif (clk'event and clk = '1') then
temp_sclk <= NOT temp_sclk;
end if;
end process;
sclk <= temp_sclk;
sda <= temp_sda;
end top_behav;
问题是当我在架构中创建以下进程时,两条线都永久设置为 0。我不明白为什么。模拟工作正常。我能够综合我的代码并将其编程到 FPGA 上。但是当使用示波器监控引脚时,它们只是设置为低。
sda_p : process(clk, enable)
begin
if (enable = '0') then
temp_sda <= '0';
else
temp_sda <= '1';
end if;
end process;
以下工作也很好:
sda_p : process(clk, enable)
begin
temp_sda <= '1';
end process;
我正在使用 lattice diamond 和 machx03l evk