我正在尝试将我的 FPGA 的输出连接到 DAC。我正在使用 PmodDA2 DAC。我遇到的麻烦是如何将数据从 16 位寄存器输出到每个时钟周期 1 位。
我研究了时序图,了解到CS需要在数据传输开始之前发送一个脉冲。
我已经尝试在整个设计中使用必要的重置和其他适用的功能。
我尝试实现一个计数以在 0 到 16/17 之间循环,当它在开始时它将 CS 设置为高并开始传输。但是我不相信这将是正确的方法。
architecture Behavioral of DAC is
signal count : integer range 0 to 15;
signal selected : std_logic;
signal data_storage : std_logic_vector(15 downto 0);
begin
process(D_DAC, CE_DAC, RES_DAC, RES_DAC, data_storage)
begin
if RES_DAC = '1' then
data_storage <= "0000000000000000";
end if;
if rising_edge(CLK_DAC) then
if CE_DAC = '1' then
data_storage <= D_DAC;
end if;
end if;
end if;
end process ;
CS_DAC <= CE_DAC;
SCLK_DAC <= CLK_DAC;
DATA1_DAC <= data_storage;
end Behavioral;
我让自己对此感到非常困惑。
我会很感激任何帮助。
************************编辑************************
我又尝试了实施计数器...
process(D_DAC, CE_DAC, CLK_DAC, RES_DAC, data_storage)
begin
if RES_DAC = '1' then
data_storage <= "0000000000000000";
cound <= 0;
selected <= '0';
elsif rising_edge(CLK_DAC) then
if CE_DAC = '1' then
if count = 0 then
selected <= '1';
end if;
if selected = 1 then
if count = 15 then
count <= 0;
selected <= '0';
else
count <= count + 1;
data_storage <= D_DAC;
end if;
end if;
end if;
end if;
end process ;
CS_DAC <= CE_DAC;
SCLK_DAC <= CLK_DAC;
DATA1_DAC <= data_storage;
end Behavioral;