Vhdl DDR3米格Vivado IP
我试图使用米格7接口DDR3内存到Artix 7 FPGA。 我对使用IP非常陌生,我只知道VHDL(不是Verilog)。我已经上传了我的代码。在我的代码中,init_calib_complete永远不会变高 任何人都可以找到我的代码有什么问题或给我一个示例代码,请 -我只使用代码的最后几行,其余的只是声明 -我已将LEDV7和LEDV6连接到LEDVhdl DDR3米格Vivado IP,vhdl,fpga,ram,vivado,Vhdl,Fpga,Ram,Vivado,我试图使用米格7接口DDR3内存到Artix 7 FPGA。 我对使用IP非常陌生,我只知道VHDL(不是Verilog)。我已经上传了我的代码。在我的代码中,init_calib_complete永远不会变高 任何人都可以找到我的代码有什么问题或给我一个示例代码,请 -我只使用代码的最后几行,其余的只是声明 -我已将LEDV7和LEDV6连接到LED library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.a
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
entity Main_PRG is
Port (
-- Inouts
ddr3_dq : inout std_logic_vector(7 downto 0);
ddr3_dqs_p : inout std_logic_vector(0 downto 0);
ddr3_dqs_n : inout std_logic_vector(0 downto 0);
-- Outputs
ddr3_addr : out std_logic_vector(13 downto 0);
ddr3_ba : out std_logic_vector(2 downto 0);
ddr3_ras_n : out std_logic;
ddr3_cas_n : out std_logic;
ddr3_we_n : out std_logic;
ddr3_reset_n : out std_logic;
ddr3_ck_p : out std_logic_vector(0 downto 0);
ddr3_ck_n : out std_logic_vector(0 downto 0);
ddr3_cke : out std_logic_vector(0 downto 0);
ddr3_cs_n : out std_logic_vector(0 downto 0);
ddr3_odt : out std_logic_vector(0 downto 0);
-- Inputs
-- Differential system clocks
sys_clk_p : in std_logic;
sys_clk_n : in std_logic;
-- Single-ended iodelayctrl clk (reference clock)
clk_ref_i : in std_logic;
LEDV6 : out STD_LOGIC ;
LEDV7 : out STD_LOGIC
);
end Main_PRG;
architecture Behavioral of Main_PRG is
signal app_addr : std_logic_vector(27 downto 0);
signal app_addr : std_logic_vector(27 downto 0);
signal app_addr_i : std_logic_vector(31 downto 0);
signal app_cmd : std_logic_vector(2 downto 0);
signal app_en : std_logic;
signal app_rdy : std_logic;
signal app_rdy_i : std_logic;
signal app_rd_data : std_logic_vector(63 downto 0);
signal app_rd_data_end : std_logic;
signal app_rd_data_valid : std_logic;
signal app_rd_data_valid_i : std_logic;
signal app_wdf_data : std_logic_vector(63 downto 0);
signal app_wdf_end : std_logic;
signal app_wdf_rdy : std_logic;
signal app_wdf_rdy_i : std_logic;
signal app_sr_active : std_logic;
signal app_ref_ack : std_logic;
signal app_zq_ack : std_logic;
signal app_wdf_wren : std_logic;
signal mem_pattern_init_done : std_logic_vector(0 downto 0);
signal modify_enable_sel : std_logic;
signal data_mode_manual_sel : std_logic_vector(2 downto 0);
signal addr_mode_manual_sel : std_logic_vector(2 downto 0);
signal cmp_error : std_logic;
signal tg_wr_data_counts : std_logic_vector(47 downto 0);
signal tg_rd_data_counts : std_logic_vector(47 downto 0);
signal init_calib_complete_i : std_logic;
signal tg_compare_error_i : std_logic;
signal tg_rst : std_logic;
signal po_win_tg_rst : std_logic;
signal manual_clear_error : std_logic_vector(0 downto 0);
signal clk : std_logic;
signal rst : std_logic;
signal vio_modify_enable : std_logic_vector(0 downto 0);
signal vio_data_mode_value : std_logic_vector(3 downto 0);
signal vio_pause_traffic : std_logic_vector(0 downto 0);
signal vio_addr_mode_value : std_logic_vector(2 downto 0);
signal vio_instr_mode_value : std_logic_vector(3 downto 0);
signal vio_bl_mode_value : std_logic_vector(1 downto 0);
signal vio_fixed_instr_value : std_logic_vector(2 downto 0);
signal vio_data_mask_gen : std_logic_vector(0 downto 0);
signal dbg_clear_error : std_logic_vector(0 downto 0);
signal vio_tg_rst : std_logic_vector(0 downto 0);
signal dbg_sel_pi_incdec : std_logic_vector(0 downto 0);
signal dbg_pi_f_inc : std_logic_vector(0 downto 0);
signal dbg_pi_f_dec : std_logic_vector(0 downto 0);
signal dbg_sel_po_incdec : std_logic_vector(0 downto 0);
signal dbg_po_f_inc : std_logic_vector(0 downto 0);
signal dbg_po_f_stg23_sel : std_logic_vector(0 downto 0);
signal dbg_po_f_dec : std_logic_vector(0 downto 0);
signal vio_dbg_sel_pi_incdec : std_logic_vector(0 downto 0);
signal vio_dbg_pi_f_inc : std_logic_vector(0 downto 0);
signal vio_dbg_pi_f_dec : std_logic_vector(0 downto 0);
signal vio_dbg_sel_po_incdec : std_logic_vector(0 downto 0);
signal vio_dbg_po_f_inc : std_logic_vector(0 downto 0);
signal vio_dbg_po_f_stg23_sel : std_logic_vector(0 downto 0);
signal vio_dbg_po_f_dec : std_logic_vector(0 downto 0);
signal all_zeros1 : std_logic_vector(31 downto 0):= (others => '0');
signal all_zeros2 : std_logic_vector(38 downto 0):= (others => '0');
signal wdt_en_w : std_logic_vector(0 downto 0);
signal cmd_wdt_err_w : std_logic;
signal wr_wdt_err_w : std_logic;
signal rd_wdt_err_w : std_logic;
signal cntr2 : std_logic_vector(31 downto 0):= (others => '0');
signal cntr1 : std_logic_vector(31 downto 0):= (others => '0');
component DDR3_RAM
port(
ddr3_dq : inout std_logic_vector(7 downto 0);
ddr3_dqs_p : inout std_logic_vector(0 downto 0);
ddr3_dqs_n : inout std_logic_vector(0 downto 0);
ddr3_addr : out std_logic_vector(13 downto 0);
ddr3_ba : out std_logic_vector(2 downto 0);
ddr3_ras_n : out std_logic;
ddr3_cas_n : out std_logic;
ddr3_we_n : out std_logic;
ddr3_reset_n : out std_logic;
ddr3_ck_p : out std_logic_vector(0 downto 0);
ddr3_ck_n : out std_logic_vector(0 downto 0);
ddr3_cke : out std_logic_vector(0 downto 0);
ddr3_cs_n : out std_logic_vector(0 downto 0);
ddr3_odt : out std_logic_vector(0 downto 0);
app_addr : in std_logic_vector(27 downto 0);
app_cmd : in std_logic_vector(2 downto 0);
app_en : in std_logic;
app_wdf_data : in std_logic_vector(63 downto 0);
app_wdf_end : in std_logic;
app_wdf_wren : in std_logic;
app_rd_data : out std_logic_vector(63 downto 0);
app_rd_data_end : out std_logic;
app_rd_data_valid : out std_logic;
app_rdy : out std_logic;
app_wdf_rdy : out std_logic;
app_sr_req : in std_logic;
app_ref_req : in std_logic;
app_zq_req : in std_logic;
app_sr_active : out std_logic;
app_ref_ack : out std_logic;
app_zq_ack : out std_logic;
ui_clk : out std_logic;
ui_clk_sync_rst : out std_logic;
init_calib_complete : out std_logic;
-- System Clock Ports
sys_clk_p : in std_logic;
sys_clk_n : in std_logic;
-- Reference Clock Ports
clk_ref_i : in std_logic;
sys_rst : in std_logic
);
end component DDR3_RAM;
----------------------------------------------------------
---DDR RAM Interface signals
----------------------------------------------------------
CONSTANT READ_CMD : STD_LOGIC_VECTOR (2 downto 0) := "001";
CONSTANT WRITE_CMD : STD_LOGIC_VECTOR (2 downto 0) := "000";
signal data_1 : std_logic_vector (63 downto 0);
signal data_2 : std_logic_vector (63 downto 0);
type state_machine is (Init, Write_1, Set_Data_1, Write_2, Set_Data_2,
Read_Prep_1, Read_1, Read_Wait_1, Read_Prep_2, Read_2, Read_Wait_2,
Done);
signal state : state_machine := Init;
signal next_state : state_machine;
signal Curr_State : std_logic_vector(2 downto 0):="000";
signal Reset : std_logic := '0' ;
begin
u_DDR3_RAM : DDR3_RAM
port map (
-- Memory interface ports
ddr3_addr => ddr3_addr,
ddr3_ba => ddr3_ba,
ddr3_cas_n => ddr3_cas_n,
ddr3_ck_n => ddr3_ck_n,
ddr3_ck_p => ddr3_ck_p,
ddr3_cke => ddr3_cke,
ddr3_ras_n => ddr3_ras_n,
ddr3_reset_n => ddr3_reset_n,
ddr3_we_n => ddr3_we_n,
ddr3_dq => ddr3_dq,
ddr3_dqs_n => ddr3_dqs_n,
ddr3_dqs_p => ddr3_dqs_p,
init_calib_complete => init_calib_complete_i,
ddr3_cs_n => ddr3_cs_n,
ddr3_odt => ddr3_odt,
-- Application interface ports
app_addr => app_addr,
app_cmd => app_cmd,
app_en => app_en,
app_wdf_data => app_wdf_data,
app_wdf_end => app_wdf_end,
app_wdf_wren => app_wdf_wren,
app_rd_data => app_rd_data,
app_rd_data_end => app_rd_data_end,
app_rd_data_valid => app_rd_data_valid,
app_rdy => app_rdy,
app_wdf_rdy => app_wdf_rdy,
app_sr_req => '0',
app_ref_req => '0',
app_zq_req => '0',
app_sr_active => app_sr_active,
app_ref_ack => app_ref_ack,
app_zq_ack => app_zq_ack,
ui_clk => clk,
ui_clk_sync_rst => rst,
-- System Clock Ports
sys_clk_p => sys_clk_p,
sys_clk_n => sys_clk_n,
-- Reference Clock Ports
clk_ref_i => clk_ref_i,
sys_rst => '1'
);
-- End of User Design top instance
process(clk)
begin
if rising_edge(clk) then
if cntr1(27) = '0' then
cntr1 <= cntr1 + 1 ;
end if;
end if ;
end process ;
Reset <= cntr1(28) ;
process (clk)
begin
if rising_edge(clk) then
if init_calib_complete_i = '1' then
LEDV6 <= '1' ;
LEDV7 <= '0' ;
else
LEDV6 <= '1' ;
LEDV7 <= '1' ;
end if;
if Reset = '0' then
app_en <= '0';
app_wdf_wren <= '0';
app_wdf_end <= '0';
app_cmd <= (others => '0');
app_addr <= (others => '0');
app_wdf_data <= (others => '0');
state <= Init;
else
app_en <= '0';
app_wdf_wren <= '0';
app_wdf_end <= '0';
app_cmd <= (others => '0');
app_addr <= (others => '0');
app_wdf_data <= (others => '0');
--LEDV6 <= '1' ;
--LEDV7 <= '1' ;
case state is
when Init =>
Curr_State <= "001";
data_1 <= (others => '0');
data_2 <= (others => '0');
--LEDV6 <= '1' ;
--LEDV7 <= '0' ;
if app_rdy = '1' then
state <= Write_1;
else
state <= Init;
end if;
when Write_1 =>
--LEDV6 <= '0' ;
--LEDV7 <= '0' ;
when others =>
--LEDV6 <= '0' ;
--LEDV6 <= '0' ;
end case;
end if ;
end if;
end process;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用ieee.std_logic_unsigned.all;
实体主项目是
港口(
--伊努特
ddr3_dq:inout标准逻辑向量(7到0);
ddr3_dqs_p:inout标准逻辑向量(0到0);
ddr3\u dqs\u n:inout标准逻辑向量(0到0);
--输出
ddr3地址:输出标准逻辑向量(13向下至0);
ddr3_ba:输出标准逻辑向量(2到0);
ddr3_ras_n:输出标准逻辑;
ddr3\u cas\u n:输出标准逻辑;
ddr3\u we\u n:输出标准逻辑;
ddr3\u复位\u n:输出标准\u逻辑;
ddr3\u ck\u p:输出标准逻辑向量(0到0);
ddr3检查:输出标准逻辑向量(0到0);
ddr3:out标准逻辑向量(0到0);
ddr3\u cs\u n:输出标准逻辑向量(0到0);
ddr3_odt:输出标准逻辑向量(0到0);
--投入
--差分系统时钟
系统时钟:在标准逻辑中;
系统时钟:在标准逻辑中;
--单端iodelayctrl时钟(参考时钟)
时钟参考i:标准逻辑中;
LEDV6:输出标准逻辑;
LEDV7:输出标准逻辑
);
末端主管道;
主_PRG的架构是
信号应用地址:标准逻辑向量(27向下至0);
信号应用地址:标准逻辑向量(27向下至0);
信号应用地址i:标准逻辑向量(31向下至0);
信号应用程序指令:标准逻辑向量(2到0);
信号应用:标准逻辑;
信号应用:标准逻辑;
信号应用程序i:标准逻辑;
信号应用程序数据:标准逻辑向量(63向下至0);
信号应用程序数据端:标准逻辑;
信号应用程序数据有效:标准逻辑;
信号应用程序数据有效:标准逻辑;
信号应用程序wdf数据:标准逻辑向量(63向下至0);
信号应用程序wdf端:标准逻辑;
信号应用:标准逻辑;
信号应用程序wdf rdy i:标准逻辑;
信号应用程序sr激活:标准逻辑;
信号应用参考确认:标准逻辑;
信号应用程序确认:标准逻辑;
信号应用程序:标准逻辑;
信号内存模式初始化完成:标准逻辑向量(0到0);
信号修改\启用\选择:标准\逻辑;
信号数据模式手动选择:标准逻辑向量(2到0);
信号添加模式手动选择:标准逻辑向量(2到0);
信号cmp_错误:标准_逻辑;
信号tg_wr_数据_计数:标准逻辑_向量(47向下至0);
信号tg_rd_数据_计数:标准逻辑_向量(47向下至0);
信号初始校准完成:标准逻辑;
信号tg\u比较\u错误\u i:std\u逻辑;
信号转换:标准逻辑;
信号点温升:标准逻辑;
信号手动清除错误:标准逻辑向量(0到0);
信号时钟:标准逻辑;
信号rst:std_逻辑;
信号vio_修改_启用:标准逻辑_向量(0向下至0);
信号vio_数据_模式_值:标准逻辑_向量(3到0);
信号vio_暂停_流量:标准逻辑_矢量(0向下至0);
信号vio_addr_mode_值:标准逻辑向量(2到0);
信号vio仪表模式值:标准逻辑向量(3到0);
信号vio_bl_mode_值:标准逻辑向量(1到0);
信号vio固定仪表值:标准逻辑矢量(2到0);
信号vio数据屏蔽发生器:标准逻辑向量(0到0);
信号dbg_清除_错误:标准逻辑_向量(0到0);
信号vio_tg_rst:std_逻辑_向量(0到0);
信号dbg_sel_pi_incdec:std_logic_vector(0到0);
信号dbg_pi_f_inc:std_逻辑_向量(0到0);
信号dbg_pi_f_dec:std_逻辑_向量(0到0);
信号dbg_sel_po_incdec:std_逻辑_向量(0到0);
信号dbg_po_f_inc:std_逻辑_向量(0到0);
信号dbg_po_f_stg23_sel:std_逻辑_向量(0向下至0);
信号dbg_po_f_dec:std_逻辑_向量(0到0);
信号vio_dbg_sel_pi_incdec:std_逻辑_矢量(0到0);
信号vio_dbg_pi_f_inc:std_逻辑_向量(0到0);
信号vio_dbg_pi_f_dec:std_逻辑_向量(0到0);
信号vio_dbg_sel_po_incdec:std_逻辑_矢量(0到0);
信号vio_dbg_po_f_inc:std_逻辑_向量(0到0);
信号vio_dbg_po_f_stg23_sel:std_逻辑_向量(0到0);
信号vio_dbg_po_f_dec:std_逻辑_向量(0到0);
信号全零1:std逻辑向量(31到0):=(其他=>'0');
信号全零2:std逻辑向量(38向下至0):=(其他=>'0');
信号wdt_en_w:std_逻辑_向量(0到0);
信号指令wdt错误w:标准逻辑;
信号wr_wdt_err_w:std_逻辑;
信号rd_wdt_err_w:std_逻辑;
信号cntr2:std_逻辑_向量(31向下至0):=(其他=>'0');
信号cntr1:std_逻辑_向量(31向下至0):=(