Co špatného s mým SPI sdělení?

L

Leblanc

Guest
Já jen chci sdělit Svatodušní DAC nad SPI, ale nechodíme jako očekávaný.může někdo pomoci mne důvody.

díky
Knihovna IEEE;
použití IEEE.STD_LOGIC_1164.ALL;
použití IEEE.STD_LOGIC_ARITH.ALL;
použití IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Odkomentujte následující knihovny prohlášení, pokud instantiating
---- Jakékoli Xilinx primitiv v tomto kódu.
- Knihovna UNISIM;
- Použití UNISIM.VComponents.all;

subjektu sinus je

Port (ČLK: v STD_LOGIC;
clk2_p: mimo std_logic;
SPI_MOSI: mimo std_logic;
SPI_SS_B: mimo std_logic;
AMP_CS: mimo std_logic;
AD_CONV: mimo std_logic;
SF_CEO: mimo std_logic;
FPGA_INIT_B: mimo std_logic;
- Imput_word_t: z std_logic;
DAC_CS: mimo std_logic;
SPI_SCK: mimo std_logic;
SPI_MISO: v std_logic;
zatížení: z STD_LOGIC
);

konce sinus;

Behaviorální architektura z sinus_574mhz je

signál shift_reg: std_logic_vector (11 downto 0): = (ostatní => '0 ');
signál shift_reg1: std_logic: = '0 ';
signál zl: std_logic_vector (5 downto 0): = (ostatní => '0 ');

signál sine: std_logic_vector (11 downto 0): = (ostatní => '0 ');
signál stop: std_logic: = '0 ';
signál teplota: std_logic_vector (23 downto 0): = (ostatní => '0 ');
konstantní ZERO: std_logic_vector (23 downto 0): = "000000000000000000000000";
signál CLK2: std_logic: = '0 ';
signál CLK3: std_logic: = '0 ';
signál serial_data: std_logic: = '0 ';složka sinus
port (
ČLK: IN std_logic;
SINE: OUT std_logic_VECTOR (11 downto 0));
konce složky;

začít
- Imput_word_t <= clk2;

- Adress <= "1111";
- Příkaz <= "0011";
- SPI_SCK <= clk3;
SPI_SS_B <= '1 ';
AMP_CS <= '1 ';
AD_CONV <= '0 ';
SF_CEO <= '1 ';
FPGA_INIT_B <= '1 ';
- Imput_word <= Command & adresa & sine & "XXXX";
clk2_p <= clk2;

bloc_1: sinus
port map (
CLK => CLK,
SINE => SINE);

proces (clk2)
začít
if (clk2'event a clk2 = '0 '), pak
SPI_SCK <= clk3;
pokud stop = '1 'pak
SPI_SCK <= '0 ';
end if;
end if;
ukončení procesu;

-------------------------------------------------- ---------------------------

proces (clk3, clk2)
začít
pokud clk2'event a clk2 = '1 'pak
pokud clk3 = '0 ', pak
zl <= zl 1, - příkaz (4)
end if;
end if;
ukončení procesu;

proces (clk3, clk2)
začít
pokud clk2'event a clk2 = '1 'pak
pokud clk3 = '0 ', pak
případ Zl je
když "000000" =>
DAC_CS <= '0 ';
stop <= '0 ';
SPI_MOSI <= '0 '; - data (23);
když "000001" =>
SPI_MOSI <= '0 '; - data (23);
když "000010" =>
SPI_MOSI <= '1 '; - data (23);
když "000011" =>
SPI_MOSI <= '1 '; - data (23);
když "000100" =>
SPI_MOSI <= '1 '; - data (23);
když "000101" =>
SPI_MOSI <= '1 '; - data (23);
když "000110" =>
SPI_MOSI <= '1 '; - data (23);
když "000111" =>
SPI_MOSI <= '1 '; - data (23);
když "001000" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001001" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001010" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001011" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001100" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001101" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001110" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "001111" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "010000" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "010001" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "010010" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "010011" =>
SPI_MOSI <= shift_reg (11) - data (23);
když "010100" =>
SPI_MOSI <= 'X'; - data (23);
když "010101" =>
SPI_MOSI <= 'X'; - data (23);
když "010110" =>
SPI_MOSI <= 'X'; - data (23);
když "010111" =>
SPI_MOSI <= 'X'; - data (23);

když ostatní => - DAC_CS <= '1 '; - command_o <=' X ';
konec případu;

pokud zl = "011000", pak
DAC_CS <= '1 ';
stop <= '1 ';

end if;
end if;
end if;
ukončení procesu;

proces (clk2)
začít
pokud rising_edge (clk2), pak
temp <= temp (22 downto 0) & SPI_MISO;
shift_reg1 <= temp (23);
end if;
ukončení procesu;

-------------------------------------------------- ------------------------------------------

procesu (CLK) je
variabilní var_zustand_vektor: std_logic_vector (1 downto 0): = "00";
variabilní var_zaehler_vektor: integer rozsahu 0 až 249: = 0;

začítif (CLK'event AND CLK = '1 '), pak

CASE var_zustand_vektor je
když "00" =>
pokud var_zaehler_vektor = 124 pak
var_zustand_vektor: = "01";
jiný
var_zaehler_vektor: = var_zaehler_vektor 1;
CLK2 <= '1 ';
end if;
když "01" =>
pokud var_zaehler_vektor = 249 pak
var_zustand_vektor: = "00";
var_zaehler_vektor: = 0;
jiný
var_zaehler_vektor: = var_zaehler_vektor 1;
CLK2 <= '0 ';
end if;
když ostatní =>
var_zustand_vektor: = "00";
Konec případu;

end if;
Ukončit proces;

proces (CLK2) je
začít
if (CLK2'event AND CLK2 = '1 '), pak
if (clk3 = '0 '), pak
clk3 <= '1 ';
jiný
clk3 <= '0 ';
end if;
end if;
Ukončit proces;-------------------------------------------------- -------------------------proces (clk2)
začít
pokud rising_edge (clk2), pak
- Zatížení <= shift_reg (11);
shift_reg <= sine;
zatížení <= shift_reg (11);
shift_reg (11 downto 1) <= shift_reg (10 downto 0);
end if;
ukončení procesu;Behaviorální konce;

 

Welcome to EDABoard.com

Sponsor

Back
Top