Я пытаюсь подключить выход моей FPGA к ЦАП.Я использую ЦАП PmodDA2.Проблема, с которой я сталкиваюсь, заключается в том, чтобы выяснить, как выводить данные из 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;