在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7827|回复: 20

[求助] Xlinx spartan6 DDR2 ip 硬核调用编译问题

[复制链接]
发表于 2014-3-25 16:58:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好:      我写了一个test工程,在工程中调用SPARTAN6的硬核,但是老是出现下面的语句:
Regenerate Core - DDR2: All required files are available.

Process "Regenerate Core" failed

没有办法正常编译,大家帮忙看看,谢谢了!



  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    15:32:30 03/19/2014
  7. // Design Name:
  8. // Module Name:    test
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. `define        time_bd                        10'd54                //baudrate:57600bit/s
  22. `define        half_time_bd        10'd27                //baudrate:57600bit/s
  23. `define        cmd_read                        3'b001
  24. `define        cmd_write                3'b000
  25. module test(
  26.         //globle input signal
  27.         input clk,
  28.         input rst,
  29.        
  30.         //uart interface
  31.         input rx,
  32.         output tx,
  33.        
  34.         //interface between ddr2 dram and fpga
  35.         inout [15:0]        mcb3_dram_dq,
  36.    output [12:0] mcb3_dram_a,
  37.    output [2:0] mcb3_dram_ba,
  38.    output mcb3_dram_ras_n,
  39.    output mcb3_dram_cas_n,
  40.    output mcb3_dram_we_n,
  41.    output mcb3_dram_odt,
  42.    output mcb3_dram_cke,
  43.    output mcb3_dram_dm,
  44.    inout mcb3_dram_udqs,
  45.    inout mcb3_dram_udqs_n,
  46.    inout mcb3_rzq,
  47.    inout mcb3_zio,
  48.    output mcb3_dram_udm,
  49.    output c3_calib_done,
  50.    //output c3_clk0,
  51.    //output c3_rst0,
  52.    inout mcb3_dram_dqs,
  53.    inout mcb3_dram_dqs_n,
  54.    output mcb3_dram_ck,
  55.    output mcb3_dram_ck_n
  56.    );
  57.        
  58.         //instantiation DDR2 Module
  59.         wire [15:0]        mcb3_dram_dq;
  60.    wire [12:0] mcb3_dram_a;
  61.    wire [2:0] mcb3_dram_ba;
  62.    wire mcb3_dram_ras_n;
  63.    wire mcb3_dram_cas_n;
  64.    wire mcb3_dram_we_n;
  65.    wire mcb3_dram_odt;
  66.    wire mcb3_dram_cke;
  67.    wire mcb3_dram_dm;
  68.    wire mcb3_dram_udqs;
  69.    wire mcb3_dram_udqs_n;
  70.    wire mcb3_rzq;
  71.    wire mcb3_zio;
  72.    wire mcb3_dram_udm;
  73.    wire c3_sys_clk;
  74.    wire c3_sys_rst_n;
  75.    wire c3_calib_done;
  76.    wire c3_clk0;
  77.    wire c3_rst0;
  78.    wire mcb3_dram_dqs;
  79.    wire mcb3_dram_dqs_n;
  80.    wire mcb3_dram_ck;
  81.    wire mcb3_dram_ck_n;
  82.        
  83.         assign        c3_sys_clk                =        clk;
  84.         assign        c3_sys_rst_n        =        ~rst;
  85.        
  86.         //ddr2_mcb user command interface
  87.         //reg c3_p0_cmd_clk;
  88.         wire c3_p0_cmd_en;
  89.         wire [2:0] c3_p0_cmd_instr;
  90.         wire [5:0] c3_p0_cmd_bl;
  91.         wire [29:0] c3_p0_cmd_byte_addr;
  92.         wire c3_p0_cmd_empty;
  93.         wire c3_p0_cmd_full;
  94.        
  95.         assign c3_p0_cmd_en = (cmd_user == 2'b00)? cmd_en_wr : (cmd_user == 2'b01)? cmd_en_rd : 1'b0;
  96.         assign c3_p0_cmd_instr = (cmd_user == 2'b01)? `cmd_read : `cmd_write;
  97.         assign c3_p0_cmd_bl = 6'h3f;
  98.         assign c3_p0_cmd_byte_addr = addr_user;
  99.        
  100.        
  101.         //ddr2_mcb user writing interface
  102.         reg c3_p0_wr_clk;
  103.         reg c3_p0_wr_en;
  104.         reg [15:0] c3_p0_wr_mask;
  105.         reg [127:0] c3_p0_wr_data;
  106.         wire c3_p0_wr_full;
  107.         wire c3_p0_wr_empty;
  108.         wire [6:0] c3_p0_wr_count;
  109.         wire c3_p0_wr_underrun;
  110.         wire c3_p0_wr_error;
  111.        
  112.         //ddr2_mcb user reading interface
  113.         reg c3_p0_rd_clk;
  114.         reg c3_p0_rd_en;
  115.         reg [127:0]        c3_p0_rd_data;
  116.         wire c3_p0_rd_full;
  117.         wire c3_p0_rd_empty;
  118.         wire [6:0] c3_p0_rd_count;
  119.         wire c3_p0_rd_overflow;
  120.         wire c3_p0_rd_error;
  121.        
  122.        
  123.          
  124.         DDR2 # (
  125.                 .C3_P0_MASK_SIZE(16),
  126.                 .C3_P0_DATA_PORT_SIZE(128),
  127.                 .DEBUG_EN(1),
  128.                 .C3_MEMCLK_PERIOD(3200),
  129.                 .C3_CALIB_SOFT_IP("TRUE"),
  130.                 .C3_SIMULATION("FALSE"),
  131.                 .C3_RST_ACT_LOW(0),
  132.                 .C3_INPUT_CLK_TYPE("SINGLE_ENDED"),
  133.                 .C3_MEM_ADDR_ORDER("ROW_BANK_COLUMN"),
  134.                 .C3_NUM_DQ_PINS(16),
  135.                 .C3_MEM_ADDR_WIDTH(13),
  136.                 .C3_MEM_BANKADDR_WIDTH(3)
  137.         )
  138.         MY_DDR2 (

  139.                 .c3_sys_clk           (c3_sys_clk),
  140.                 .c3_sys_rst_n           (c3_sys_rst_n),                        

  141.                 .mcb3_dram_dq           (mcb3_dram_dq),  
  142.                 .mcb3_dram_a            (mcb3_dram_a),  
  143.                 .mcb3_dram_ba           (mcb3_dram_ba),
  144.                 .mcb3_dram_ras_n        (mcb3_dram_ras_n),                        
  145.                 .mcb3_dram_cas_n        (mcb3_dram_cas_n),                        
  146.                 .mcb3_dram_we_n         (mcb3_dram_we_n),                          
  147.                 .mcb3_dram_odt          (mcb3_dram_odt),
  148.                 .mcb3_dram_cke          (mcb3_dram_cke),                          
  149.                 .mcb3_dram_ck           (mcb3_dram_ck),                          
  150.                 .mcb3_dram_ck_n         (mcb3_dram_ck_n),      
  151.                 .mcb3_dram_dqs          (mcb3_dram_dqs),                          
  152.                 .mcb3_dram_dqs_n        (mcb3_dram_dqs_n),
  153.                 .mcb3_dram_udqs         (mcb3_dram_udqs),    // for X16 parts                        
  154.                 .mcb3_dram_udqs_n       (mcb3_dram_udqs_n),  // for X16 parts
  155.                 .mcb3_dram_udm          (mcb3_dram_udm),     // for X16 parts
  156.                 .mcb3_dram_dm           (mcb3_dram_dm),
  157.                 .c3_clk0                                        (c3_clk0),
  158.                 .c3_rst0                                        (c3_rst0),


  159.                 .c3_calib_done          (c3_calib_done),
  160.                 .mcb3_rzq               (rzq3),
  161.                        
  162.                 .mcb3_zio               (zio3),
  163.                        
  164.                 .c3_p0_cmd_clk          (c3_p0_cmd_clk),
  165.                 .c3_p0_cmd_en           (c3_p0_cmd_en),
  166.                 .c3_p0_cmd_instr        (c3_p0_cmd_instr),
  167.                 .c3_p0_cmd_bl           (c3_p0_cmd_bl),
  168.                 .c3_p0_cmd_byte_addr    (c3_p0_cmd_byte_addr),
  169.                 .c3_p0_cmd_empty               (c3_p0_cmd_empty),
  170.                 .c3_p0_cmd_full         (c3_p0_cmd_full),
  171.                 .c3_p0_wr_clk           (c3_p0_wr_clk),
  172.                 .c3_p0_wr_en            (c3_p0_wr_en),
  173.                 .c3_p0_wr_mask          (c3_p0_wr_mask),
  174.                 .c3_p0_wr_data          (c3_p0_wr_data),
  175.                 .c3_p0_wr_full          (c3_p0_wr_full),
  176.                 .c3_p0_wr_empty         (c3_p0_wr_empty),
  177.                 .c3_p0_wr_count         (c3_p0_wr_count),
  178.                 .c3_p0_wr_underrun      (c3_p0_wr_underrun),
  179.                 .c3_p0_wr_error         (c3_p0_wr_error),
  180.                 .c3_p0_rd_clk           (c3_p0_rd_clk),
  181.                 .c3_p0_rd_en            (c3_p0_rd_en),
  182.                 .c3_p0_rd_data          (c3_p0_rd_data),
  183.                 .c3_p0_rd_full          (c3_p0_rd_full),
  184.                 .c3_p0_rd_empty         (c3_p0_rd_empty),
  185.                 .c3_p0_rd_count         (c3_p0_rd_count),
  186.                 .c3_p0_rd_overflow      (c3_p0_rd_overflow),
  187.                 .c3_p0_rd_error         (c3_p0_rd_error)
  188.         );
  189.        
  190.         //operation and variable defination for uart interface
  191.         reg tx_en;
  192.         reg [7:0] tx_data;
  193.        
  194.         wire rx;
  195.         wire tx;
  196.         wire tx_busy;
  197.         wire rx_req;
  198.         wire [7:0] rx_data;
  199.        
  200.         reg op_action;
  201.         reg [3:0] cnt_action;
  202.         reg [7:0] cnt_rx;
  203.         reg [71:0] instr_rx;
  204.        
  205.         //get user command from pc
  206.         always @( posedge clk )
  207.                 if(rst)
  208.                         cnt_rx <= 8'd0;
  209.                 else if(rx_req)
  210.                         cnt_rx <= cnt_rx + 1'b1;
  211.                 else
  212.                         cnt_rx <= 8'd0;
  213.        
  214.         always @( posedge clk )
  215.                 if(rst)
  216.                         instr_rx <= 72'h0;
  217.                 else if(cnt_rx == `half_time_bd)
  218.                         instr_rx <= {instr_rx[63:0],rx_data};
  219.        
  220.         //detected active fram-ahead and get command from pc
  221.         reg order_wr;
  222.         reg [1:0] cmd_user;
  223.         reg [29:0] addr_user;
  224.        
  225.         always @( posedge clk )
  226.                 if(rst)        begin
  227.                         order_wr <= 1'b0;                                                                //write ddr2 dram from min. number to max. number
  228.                         cmd_user <= 2'b0;                                                                //00: user write dram command, 01:user read dram command
  229.                         addr_user <= 30'b0;
  230.                         cnt_action <= 4'd0;
  231.                         op_action <= 1'b0;
  232.                 end
  233.                 else if((instr_rx[71:64]==8'hee)&&(instr_rx[31:24]==8'hff)&&(instr_rx[23:16]==8'hfc)&&(instr_rx[15:8]==8'hff)&&(instr_rx[7:0]==8'hff))        begin
  234.                         order_wr <= instr_rx[63];
  235.                         cmd_user <= instr_rx[59:58];
  236.                         addr_user <= {instr_rx[57:32],4'b0000};
  237.                         if(cnt_action < 4'd10)        begin
  238.                                 cnt_action <= cnt_action + 1'b1;
  239.                                 op_action <= 1'b1;
  240.                         end
  241.                         else        begin
  242.                                 op_action <= 1'b0;
  243.                         end
  244.                 end
  245.                 else        begin
  246.                         order_wr <= 1'b0;                                                                //write ddr2 dram from min. number to max. number
  247.                         cmd_user <= 2'b0;                                                                //00: user write dram command, 01:user read dram command
  248.                         addr_user <= 30'b0;
  249.                         cnt_action <= 4'd0;
  250.                         op_action <= 1'b0;
  251.                 end
  252.        
  253.         //send data of dram to pc according to user command
  254.         parameter        read_idle                        =        6'd0;
  255.         parameter        read_cmd1                        =        6'd1;
  256.         parameter        read_cmd2                        =        6'd2;
  257.         parameter        read_fifo1                        =        6'd3;
  258.         parameter        read_fifo2                        =        6'd4;
  259.         parameter        read_fifo3                        =        6'd5;
  260.         parameter        read_data00                        =        6'd6;
  261.         parameter        read_data01                        =        6'd7;
  262.         parameter        read_data10                        =        6'd8;
  263.         parameter        read_data11                        =        6'd9;
  264.         parameter        read_data20                        =        6'd10;
  265.         parameter        read_data21                        =        6'd11;
  266.         parameter        read_data30                        =        6'd12;
  267.         parameter        read_data31                        =        6'd13;
  268.         parameter        read_data40                        =        6'd14;
  269.         parameter        read_data41                        =        6'd15;
  270.         parameter        read_data50                        =        6'd16;
  271.         parameter        read_data51                        =        6'd17;
  272.         parameter        read_data60                        =        6'd18;
  273.         parameter        read_data61                        =        6'd19;
  274.         parameter        read_data70                        =        6'd20;
  275.         parameter        read_data71                        =        6'd21;
  276.         parameter        read_data80                        =        6'd22;
  277.         parameter        read_data81                        =        6'd23;
  278.         parameter        read_data90                        =        6'd24;
  279.         parameter        read_data91                        =        6'd25;
  280.         parameter        read_data100                =        6'd26;
  281.         parameter        read_data101                =        6'd27;
  282.         parameter        read_data110                =        6'd28;
  283.         parameter        read_data111                =        6'd29;
  284.         parameter        read_data120                =        6'd30;
  285.         parameter        read_data121                =        6'd31;
  286.         parameter        read_data130                =        6'd32;
  287.         parameter        read_data131                =        6'd33;
  288.         parameter        read_data140                =        6'd34;
  289.         parameter        read_data141                =        6'd35;
  290.         parameter        read_data150                =        6'd36;
  291.         parameter        read_data151                =        6'd37;
  292.         parameter        read_judge                        =        6'd38;       
  293.        
  294.         reg cmd_en_rd;
  295.         reg [5:0] state_rd;
  296.         reg [7:0] number_rd;
  297.        
  298.         always @( posedge clk )
  299.                 if(rst || (!c3_calib_done))        begin
  300.                         cmd_en_rd <= 1'b0;
  301.                         c3_p0_rd_clk <= 1'b0;
  302.                         c3_p0_rd_en <= 1'b0;
  303.                         state_rd <= read_idle;
  304.                         number_rd <= 8'd0;
  305.                 end
  306.                 else if(c3_p0_cmd_instr == `cmd_read)        begin
  307.                         case(state_rd)
  308.                                 read_idle:        begin
  309.                                                                         cmd_en_rd <= 1'b0;
  310.                                                                         c3_p0_rd_clk <= 1'b0;
  311.                                                                         c3_p0_rd_en <= 1'b0;
  312.                                                                         state_rd <= read_cmd1;
  313.                                                                         number_rd <= 8'd0;
  314.                                                                 end
  315.                                 read_cmd1:        begin
  316.                                                                         if(c3_p0_cmd_empty)        begin
  317.                                                                                 cmd_en_rd <= 1'b1;
  318.                                                                                 state_rd <= read_cmd2;
  319.                                                                         end
  320.                                                                 end
  321.                                 read_cmd2:        begin
  322.                                                                         cmd_en_rd <= 1'b0;
  323.                                                                         state_rd <= read_fifo1;
  324.                                                                 end
  325.                                 read_fifo1:        begin
  326.                                                                         c3_p0_rd_clk <= 1'b0;
  327.                                                                         c3_p0_rd_en <= 1'b1;
  328.                                                                         state_rd <= read_fifo2;
  329.                                                                 end
  330.                                 read_fifo2:        begin
  331.                                                                         c3_p0_rd_clk <= 1'b1;
  332.                                                                         state_rd <= read_fifo3;
  333.                                                                         number_rd <= number_rd + 1'b1;
  334.                                                                 end
  335.                                 read_fifo3:        begin
  336.                                                                         c3_p0_rd_clk <= 1'b0;
  337.                                                                         state_rd <= read_data00;
  338.                                                                 end
  339.                         read_data00:        begin
  340.                                                                         if(!tx_busy)        begin
  341.                                                                                 tx_en <= 1'b1;
  342.                                                                                 tx_data <= c3_p0_rd_data[7:0];
  343.                                                                                 state_rd <= read_data01;
  344.                                                                         end
  345.                                                                 end
  346.                         read_data01:        begin
  347.                                                                         if(!tx_busy)        begin
  348.                                                                                 tx_en <= 1'b0;
  349.                                                                                 state_rd <= read_data10;
  350.                                                                         end
  351.                                                                 end
  352.                         read_data00:        begin
  353.                                                                         if(!tx_busy)        begin
  354.                                                                                 tx_en <= 1'b1;
  355.                                                                                 tx_data <= c3_p0_rd_data[7:0];
  356.                                                                                 state_rd <= read_data01;
  357.                                                                         end
  358.                                                                 end
  359.                         read_data01:        begin
  360.                                                                         if(!tx_busy)        begin
  361.                                                                                 tx_en <= 1'b0;
  362.                                                                                 state_rd <= read_data10;
  363.                                                                         end
  364.                                                                 end
  365.                         read_data10:        begin
  366.                                                                         if(!tx_busy)        begin
  367.                                                                                 tx_en <= 1'b1;
  368.                                                                                 tx_data <= c3_p0_rd_data[15:8];
  369.                                                                                 state_rd <= read_data11;
  370.                                                                         end
  371.                                                                 end
  372.                         read_data11:        begin
  373.                                                                         if(!tx_busy)        begin
  374.                                                                                 tx_en <= 1'b0;
  375.                                                                                 state_rd <= read_data20;
  376.                                                                         end
  377.                                                                 end
  378.                         read_data20:        begin
  379.                                                                         if(!tx_busy)        begin
  380.                                                                                 tx_en <= 1'b1;
  381.                                                                                 tx_data <= c3_p0_rd_data[23:16];
  382.                                                                                 state_rd <= read_data21;
  383.                                                                         end
  384.                                                                 end
  385.                         read_data21:        begin
  386.                                                                         if(!tx_busy)        begin
  387.                                                                                 tx_en <= 1'b0;
  388.                                                                                 state_rd <= read_data30;
  389.                                                                         end
  390.                                                                 end
  391.                         read_data30:        begin
  392.                                                                         if(!tx_busy)        begin
  393.                                                                                 tx_en <= 1'b1;
  394.                                                                                 tx_data <= c3_p0_rd_data[31:24];
  395.                                                                                 state_rd <= read_data31;
  396.                                                                         end
  397.                                                                 end
  398.                         read_data31:        begin
  399.                                                                         if(!tx_busy)        begin
  400.                                                                                 tx_en <= 1'b0;
  401.                                                                                 state_rd <= read_data40;
  402.                                                                         end
  403.                                                                 end
  404.                         read_data40:        begin
  405.                                                                         if(!tx_busy)        begin
  406.                                                                                 tx_en <= 1'b1;
  407.                                                                                 tx_data <= c3_p0_rd_data[39:32];
  408.                                                                                 state_rd <= read_data41;
  409.                                                                         end
  410.                                                                 end
  411.                         read_data41:        begin
  412.                                                                         if(!tx_busy)        begin
  413.                                                                                 tx_en <= 1'b0;
  414.                                                                                 state_rd <= read_data50;
  415.                                                                         end
  416.                                                                 end
  417.                         read_data50:        begin
  418.                                                                         if(!tx_busy)        begin
  419.                                                                                 tx_en <= 1'b1;
  420.                                                                                 tx_data <= c3_p0_rd_data[47:40];
  421.                                                                                 state_rd <= read_data51;
  422.                                                                         end
  423.                                                                 end
  424.                         read_data51:        begin
  425.                                                                         if(!tx_busy)        begin
  426.                                                                                 tx_en <= 1'b0;
  427.                                                                                 state_rd <= read_data60;
  428.                                                                         end
  429.                                                                 end
  430.                         read_data60:        begin
  431.                                                                         if(!tx_busy)        begin
  432.                                                                                 tx_en <= 1'b1;
  433.                                                                                 tx_data <= c3_p0_rd_data[55:48];
  434.                                                                                 state_rd <= read_data61;
  435.                                                                         end
  436.                                                                 end
  437.                         read_data61:        begin
  438.                                                                         if(!tx_busy)        begin
  439.                                                                                 tx_en <= 1'b0;
  440.                                                                                 state_rd <= read_data70;
  441.                                                                         end
  442.                                                                 end
  443.                         read_data70:        begin
  444.                                                                         if(!tx_busy)        begin
  445.                                                                                 tx_en <= 1'b1;
  446.                                                                                 tx_data <= c3_p0_rd_data[63:56];
  447.                                                                                 state_rd <= read_data71;
  448.                                                                         end
  449.                                                                 end
  450.                         read_data71:        begin
  451.                                                                         if(!tx_busy)        begin
  452.                                                                                 tx_en <= 1'b0;
  453.                                                                                 state_rd <= read_data80;
  454.                                                                         end
  455.                                                                 end
  456.                         read_data80:        begin
  457.                                                                         if(!tx_busy)        begin
  458.                                                                                 tx_en <= 1'b1;
  459.                                                                                 tx_data <= c3_p0_rd_data[71:64];
  460.                                                                                 state_rd <= read_data81;
  461.                                                                         end
  462.                                                                 end
  463.                         read_data81:        begin
  464.                                                                         if(!tx_busy)        begin
  465.                                                                                 tx_en <= 1'b0;
  466.                                                                                 state_rd <= read_data90;
  467.                                                                         end
  468.                                                                 end
  469.                         read_data90:        begin
  470.                                                                         if(!tx_busy)        begin
  471.                                                                                 tx_en <= 1'b1;
  472.                                                                                 tx_data <= c3_p0_rd_data[79:72];
  473.                                                                                 state_rd <= read_data91;
  474.                                                                         end
  475.                                                                 end
  476.                         read_data91:        begin
  477.                                                                         if(!tx_busy)        begin
  478.                                                                                 tx_en <= 1'b0;
  479.                                                                                 state_rd <= read_data100;
  480.                                                                         end
  481.                                                                 end
  482.                         read_data100:        begin
  483.                                                                         if(!tx_busy)        begin
  484.                                                                                 tx_en <= 1'b1;
  485.                                                                                 tx_data <= c3_p0_rd_data[87:80];
  486.                                                                                 state_rd <= read_data101;
  487.                                                                         end
  488.                                                                 end
  489.                         read_data101:        begin
  490.                                                                         if(!tx_busy)        begin
  491.                                                                                 tx_en <= 1'b0;
  492.                                                                                 state_rd <= read_data110;
  493.                                                                         end
  494.                                                                 end
  495.                         read_data110:        begin
  496.                                                                         if(!tx_busy)        begin
  497.                                                                                 tx_en <= 1'b1;
  498.                                                                                 tx_data <= c3_p0_rd_data[95:88];
  499.                                                                                 state_rd <= read_data111;
  500.                                                                         end
  501.                                                                 end
  502.                         read_data111:        begin
  503.                                                                         if(!tx_busy)        begin
  504.                                                                                 tx_en <= 1'b0;
  505.                                                                                 state_rd <= read_data120;
  506.                                                                         end
  507.                                                                 end
  508.                         read_data120:        begin
  509.                                                                         if(!tx_busy)        begin
  510.                                                                                 tx_en <= 1'b1;
  511.                                                                                 tx_data <= c3_p0_rd_data[103:96];
  512.                                                                                 state_rd <= read_data111;
  513.                                                                         end
  514.                                                                 end
  515.                         read_data121:        begin
  516.                                                                         if(!tx_busy)        begin
  517.                                                                                 tx_en <= 1'b0;
  518.                                                                                 state_rd <= read_data130;
  519.                                                                         end
  520.                                                                 end
  521.                         read_data130:        begin
  522.                                                                         if(!tx_busy)        begin
  523.                                                                                 tx_en <= 1'b1;
  524.                                                                                 tx_data <= c3_p0_rd_data[111:104];
  525.                                                                                 state_rd <= read_data131;
  526.                                                                         end
  527.                                                                 end
  528.                         read_data131:        begin
  529.                                                                         if(!tx_busy)        begin
  530.                                                                                 tx_en <= 1'b0;
  531.                                                                                 state_rd <= read_data140;
  532.                                                                         end
  533.                                                                 end
  534.                         read_data140:        begin
  535.                                                                         if(!tx_busy)        begin
  536.                                                                                 tx_en <= 1'b1;
  537.                                                                                 tx_data <= c3_p0_rd_data[119:112];
  538.                                                                                 state_rd <= read_data141;
  539.                                                                         end
  540.                                                                 end
  541.                         read_data141:        begin
  542.                                                                         if(!tx_busy)        begin
  543.                                                                                 tx_en <= 1'b0;
  544.                                                                                 state_rd <= read_data150;
  545.                                                                         end
  546.                                                                 end
  547.                         read_data150:        begin
  548.                                                                         if(!tx_busy)        begin
  549.                                                                                 tx_en <= 1'b1;
  550.                                                                                 tx_data <= c3_p0_rd_data[127:120];
  551.                                                                                 state_rd <= read_data151;
  552.                                                                         end
  553.                                                                 end
  554.                         read_data151:        begin
  555.                                                                         if(!tx_busy)        begin
  556.                                                                                 tx_en <= 1'b0;
  557.                                                                                 state_rd <= read_judge;
  558.                                                                         end
  559.                                                                 end
  560.                         read_judge:                begin
  561.                                                                         if(number_rd == 8'd64)
  562.                                                                                 state_rd <= read_idle;
  563.                                                                         else
  564.                                                                                 state_rd <= read_fifo1;
  565.                                                                 end
  566.                         default:                        begin
  567.                                                                         cmd_en_rd <= 1'b0;
  568.                                                                         c3_p0_rd_clk <= 1'b0;
  569.                                                                         c3_p0_rd_en <= 1'b0;
  570.                                                                         state_rd <= read_cmd1;
  571.                                                                         number_rd <= 8'd0;
  572.                                                                 end
  573.                         endcase
  574.                 end
  575.        
  576.        
  577.         //write data to dram according to user command
  578.         reg cmd_en_wr;
  579.         reg [3:0] state_wr;
  580.         reg [7:0] number_wr;
  581.        
  582.         parameter        write_idle                =                4'd0;
  583.         parameter        write_data1                =                4'd1;
  584.         parameter        write_data2                =                4'd2;
  585.         parameter        write_data3                =                4'd3;
  586.         parameter        write_judge                =                4'd4;
  587.         parameter        write_cmd1                =                4'd5;
  588.         parameter        write_cmd2                =                4'd6;
  589.        
  590.         always @(posedge clk)
  591.                 if(rst || (!c3_calib_done))        begin
  592.                         cmd_en_wr <= 1'b0;
  593.                         c3_p0_wr_clk <= 1'b0;
  594.                         c3_p0_wr_en <= 1'b0;
  595.                         c3_p0_wr_mask <= 16'd0;
  596.                         c3_p0_wr_data <= 128'd0;
  597.                         state_wr <= write_idle;
  598.                         number_wr <= 8'd0;
  599.                 end
  600.                 else if(c3_p0_cmd_instr == `cmd_write)        begin
  601.                         case(state_wr)
  602.                                 write_idle:                begin
  603.                                                                                 cmd_en_wr <= 1'b0;
  604.                                                                                 c3_p0_wr_clk <= 1'b0;
  605.                                                                                 c3_p0_wr_en <= 1'b0;
  606.                                                                                 c3_p0_wr_mask <= 16'd0;
  607.                                                                                 c3_p0_wr_data <= 128'd0;
  608.                                                                                 state_wr <= write_data1;
  609.                                                                                 number_wr <= 8'd0;
  610.                                                                         end
  611.                                 write_data1:        begin
  612.                                                                                 if(c3_p0_wr_empty)        begin
  613.                                                                                         state_wr <= write_data2;
  614.                                                                                 end
  615.                                                                         end
  616.                                 write_data2:        begin
  617.                                                                                 c3_p0_wr_en <= 1'b0;
  618.                                                                                 c3_p0_wr_clk <= 1'b0;
  619.                                                                                 c3_p0_wr_data <= {number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr,number_wr};
  620.                                                                                 c3_p0_wr_mask <= 16'd0;
  621.                                                                                 state_wr <= write_data3;
  622.                                                                         end
  623.                                 write_data3:        begin
  624.                                                                                 c3_p0_wr_clk <= 1'b1;
  625.                                                                                 state_wr <= write_judge;
  626.                                                                                 number_wr <= number_wr + 1'b1;
  627.                                                                         end
  628.                                 write_judge:        begin
  629.                                                                                 c3_p0_wr_clk <= 1'b0;
  630.                                                                                 if((number_wr == 8'd64)&&c3_p0_wr_full)        begin
  631.                                                                                         state_wr <= write_cmd1;
  632.                                                                                         number_wr <= 8'd0;
  633.                                                                                 end
  634.                                                                                 else        begin
  635.                                                                                         state_wr <= write_data2;
  636.                                                                                 end                                                                                       
  637.                                                                         end
  638.                                 write_cmd1:                begin
  639.                                                                                 if(c3_p0_cmd_empty)        begin
  640.                                                                                         cmd_en_wr <= 1'b1;
  641.                                                                                         state_wr <= write_cmd2;
  642.                                                                                 end
  643.                                                                         end
  644.                                 write_cmd2:                begin
  645.                                                                                 cmd_en_wr <= 1'b0;
  646.                                                                                 state_wr <= write_idle;
  647.                                                                         end
  648.                                 default:                        begin
  649.                                                                                 cmd_en_wr <= 1'b0;
  650.                                                                                 c3_p0_wr_clk <= 1'b0;
  651.                                                                                 c3_p0_wr_en <= 1'b0;
  652.                                                                                 c3_p0_wr_mask <= 16'd0;
  653.                                                                                 c3_p0_wr_data <= 128'd0;
  654.                                                                                 state_wr <= write_data1;
  655.                                                                                 number_wr <= 8'd0;
  656.                                                                         end
  657.                         endcase
  658.                 end
  659.                
  660.         uart #
  661.         (
  662.                 .time_spec                                        (`time_bd),                        //baudrate = 57600, 50_000_000/57600/16 = 54
  663.                 .half_time_spec                        (`half_time_bd)        //time_spec/2 = 10'd27
  664.         )
  665.         my_uart(
  666.                 .clk                                                        (clk),
  667.                 .rst                                                        (rst),        
  668.                 .tx_en                                                (tx_en),
  669.                 .rx                                                        (rx),
  670.                 .tx_data                                                (tx_data),
  671.                 .tx_busy                                                (tx_busy),
  672.                 .tx                                                        (tx),
  673.                 .rx_data                                                (rx_data),
  674.                 .rx_req                                                (rx_req)
  675.         );


  676. endmodule



复制代码
tutu.jpg
发表于 2014-3-27 19:01:57 | 显示全部楼层
回复 1# ypdzq


把DDR2的IP核删掉就可以了,用文件代替
 楼主| 发表于 2014-3-28 09:11:45 | 显示全部楼层
回复 2# shiyinjita

我试过了,如果直接用rtl文件夹下面的*.v文件,编译时可以通过的,但是没有办法综合。综合的时候报一堆莫名其妙的错误,所以只能用硬核了。
 楼主| 发表于 2014-3-28 09:15:10 | 显示全部楼层
回复 1# ypdzq
关于这个问题,原因貌似找到了我用的是ISE13.1版本的,我把版本换成ISE14.6就可以正常编译和综合了,所以可能是ISE13.1固有的问题。
 楼主| 发表于 2014-3-28 09:22:45 | 显示全部楼层
换成ISE14.6后,问题是解决了,但是新的问题出现了:
用的CLK是50MHz的,CLK主要用在两个地方:1、送给MCB硬核控制模块,模块内部的PLL用了IO BUF;2、用在MCB控制部分,做posedge clk用。
问题来了,translate和map时报错,意思好像是同一个clk不能既用在IO BUF又用在posedge clk,后面没有办法,就只能用MCB PLL输出的一路C3_CLK0做系统时钟。
关于这一方面,大家有谁比较了解,给讲讲,谢谢了!
发表于 2014-3-28 21:28:35 | 显示全部楼层
回复 3# ypdzq


  我用13.3 是用的。v文件 完全没有问题的
发表于 2014-4-3 08:53:29 | 显示全部楼层
回复 5# ypdzq


    你接串口是想用串口读写ddr吗????
 楼主| 发表于 2014-4-3 15:38:37 | 显示全部楼层
回复 7# 574920045

你好,我接了串口,是打算用串口来调试。首先发送一个命令串:EE 00 00 00 00 FF FC FF FF
EE:是帧头
FF FC FF FF:是帧尾
000000:是操作命令,000000代表写命令,000001代表读命令,写或者读操作为对1k words地址连续操作,即一次命令为连续的1k words地址的操作。
00000000000000000000000000:代表操作对应的地址。
注:中间4个bytes为命令,前6bits为指令,后26bits为操作地址


我用的1port 128bit的口,即读写操作,一次性可以读出或者写入16个bytes的数据


写操作时:(指令:EE 00 00 00 00 FF FC FF FF,PC通过串口发送给FPGA)
step1:先把wr_fifo写满,BL=64,所以一次性写入64*128bits = 1024 bytes, 512 words,也就是将要向DDR2的0-512地址空间写数据;
向wr_fifo中写的数据为(共64组,1024个bytes的数据):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
.......
3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f 3f


step2:cmd接口发送wr指令,完成MCB对DDR2的写操作;


读操作时:(指令:EE 04 00 00 00 FF FC FF FF,PC通过串口发送给FPGA)
step1: cmd接口发送rd指令,完成MCB对DDR2对应地址的读操作;
step2: 从rd_fifo把数据读出来,并通过串口把1024 bytes发送给PC
发表于 2014-4-3 15:48:55 | 显示全部楼层
回复 8# ypdzq


    我先在也在调xilinx的MCB,以后多指教啊!不指导你调好了吗?是在xilinx的官方开发板子上调的吗?想问问你的串口可接处理器?难道你内部写了操作逻辑?你是在example的例子上调试的吗?多多指教啊!!!我现在不确定接mcb操作读写用什么方法!
 楼主| 发表于 2014-4-3 15:49:35 | 显示全部楼层
现在代码已经综合并生成了下载文件,下到板子里面后,发送ee 00 00 00 00 ff fc ff ff
没有任何反应,想用modelsim仿真,代码中操作要等那个c3_calib_done信号拉高后才能进行,但是我仿真时间已经跑到52ms了,c3_calib_done还是没有拉高,没有办法看仿真波形。
怎么办,大家有没有好的调试方法,分享一下,谢谢了!
我用的是SPARTRAN6 XC6SLX16
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 06:42 , Processed in 0.028622 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表