Example Image´ó·¢28

ÔÚÕâÀï¸æËßÎÒÃÇÄúµÄÐèÇó°É

ÎÒÃÇ¿ÉÒÔ¸ü¿ìµÄÏàʶÄúµÄÐèÇó
ÆóÒµÈ˲ÅÕÐÆ¸ÐèÇó·´Ïì

È˲ÅÐèÇó


ÁªÏµÈË&ÁªÏµ·½·¨


ÔÚÕâÀï¸æËßÎÒÃÇÄúµÄÐèÇó°É

ÎÒÃÇ¿ÉÒÔ¸ü¿ìµÄÏàʶÄúµÄÐèÇó
ÆóÒµÍÅÅà±íµ¥
´ó·¢28¡¤(ÖйúÓÎ)¹Ù·½ÍøÕ¾

²È¹ýÐí¶à¿Óºó £¬£¬£¬£¬£¬£¬×ܽáµÄFPGAѧϰ7ÌõÒªº¦

²È¹ýÐí¶à¿Óºó £¬£¬£¬£¬£¬£¬×ܽáµÄFPGAѧϰ7ÌõÒªº¦

ÒÔÏÂÊÇÁ¬Ïµ¹¤³Ìʵ¼ùÂÄÀú×ܽáµÄ7ÌõFPGAѧϰ½¹µãÒªÁìÂÛ £¬£¬£¬£¬£¬£¬º­¸ÇÍ·ÄÔģʽ¡¢¿ª·¢Á÷³ÌºÍ±Ü¿ÓÖ¸ÄÏ£º

Á÷Ë®Ïß²ð·Ö´úÂëʾÀý

1. Ó²¼þÍ·ÄÔÓÅÏÈÔ­Ôò

µä·¶ÎóÇø£ºÓÃÈí¼þÍ·ÄÔдӲ¼þ´úÂë
½â¾ö¼Æ»®£º

  • ²¢Ðл¯Éè¼Æ£ºÊ¼ÖÕ¹Ø×¢Ê±ÖÓÖÜÆÚÄÚµÄÂß¼­¼¶Êý
// ¹ýʧ£ºË³ÐòÖ´ÐÐÍ·ÄÔ
always @(posedge clk) begin
    a = b + c;
    d = a * e;  // ±¬·¢2¼¶×éºÏÂß¼­ÑÓ³Ù
end

// ׼ȷ£ºÁ÷Ë®Ïß²ð·Ö
always @(posedge clk) begin
    stage1 <= b + c;
end
always @(posedge clk) begin
    stage2 <= stage1 * e;
end
  • ×ÊÔ´Ô¤ÆÀ¹À£ºÔÚ±àÂëǰÓÃExcelÅÌËãÔ¤¹ÀLUT/FFÏûºÄÁ¿
  • ʱÐòÃô¸ÐÒâʶ£ºÒªº¦Â·¾¶±ê¼Ç£¨Èç(* keep = "true" *)£©

2. ·ÂÕæÑéÖ¤ÏÈÐйæÔò

ѪµÄ½Ìѵ£ºÖ±½ÓÉÕ°åµ÷ÊÔµ¼Ö¶¨Î»ÄÑÌâ
±ê×¼Á÷³Ì£º

  1. µ¥Î»·ÂÕæ£ºÓÃModelSimÑé֤ģ¿£¿£¿£¿£¿é»ù´¡¹¦Ð§
  2. ϵͳ·ÂÕæ£ºVivado XSIMÑéÖ¤¿çÄ£¿£¿£¿£¿£¿é½»»¥
  3. Ó²¼þÑéÖ¤£ºChipScope×¥È¡ÕæÊµÐźÅ
    ÑéÖ¤¼¼ÇÉ£º
  • ×Ô¶¯ÌìÉú²âÊÔÏòÁ¿£¨Python¾ç±¾£©
  • ʹÓÃ$displayʵʱÊä³ö·ÂÕæ×´Ì¬

3. Ô¼ÊøÎļþ¹æ·¶»¯

³£¼û¿Óµã£º

  • ʱÖÓÔ¼ÊøÈ±Ê§µ¼ÖÂʱÐòÎ¥Àý
  • ¿çʱÖÓÓòδÌí¼Óset_false_path
    ±ê×¼Ô¼ÊøÄ£°å£º
# Ö÷ʱÖÓ½ç˵
create_clock -period 10 [get_ports clk]

# ÌìÉúʱÖÓ
create_generated_clock -divide_by 2 -source [get_ports clk] [get_pins clk_div/Q]

# Ò첽ʱÖÓÓò¸ôÀë
set_clock_groups -asynchronous -group {clk_100m} -group {clk_50m}

ÍÆ¼ö¹¤¾ß£ºVivado Timing Constraints Wizard


4. Ä£¿£¿£¿£¿£¿é»¯Éè¼ÆÏ°¹ß

´úÂë¹ÜÀí¹æ·¶£º

¹¦Ð§½âñµ¥¸öÄ£¿£¿£¿£¿£¿é²»Áè¼Ý300ÐдúÂë

²ÎÊý»¯Éè¼Æ£º

    module fifo #(
        parameter DATA_WIDTH = 32,
        parameter DEPTH      = 1024
    )(
        input  wire clk,
        output wire [DATA_WIDTH-1:0] dout
    );

    3¡¢°æ±¾¿ØÖÆ£ºGit¹ÜÀí²î±ð¹¤³Ì°æ±¾£¨.xprÎļþÐè¹ýÂË£©


      5. µ÷ÊÔ¼¼ÇÉϵͳ»¯

      Èý¼¶µ÷ÊÔ·¨£º

      ¾²Ì¬¼ì²é£º

      • Lint¹¤¾ß£¨SpyGlass£©¼ì²é´úÂë¹æ·¶
      • ×ۺϺóÍø±íÉó²é£¨show_schematic£©

      ¶¯Ì¬ÆÊÎö£º

      • Òªº¦ÐźŴòÅıê¼Ç£¨debug_ǰ׺£©

        (* mark_debug = "true" *) reg [7:0] debug_counter;

        Ó²¼þʵ²â£º

        • ·Ö¶Î¸ôÀë·¨£ºÓÃPLLÌìÉú²î±ðʱÖÓÓò²âÊÔÐźÅ

          6. ÎĵµÇý¶¯¿ª·¢

          ÐëÒªÎĵµÇåµ¥£º

          ## Ä£¿£¿£¿£¿£¿éÉè¼ÆÎĵµ
          ### ¹¦Ð§¹æ¸ñ
          - Ö§³ÖЭÒ飺IEEE 802.3
          - ÍÌÍÂÁ¿£º¡Ý900Mbps
          
          ### ½Ó¿Ú½ç˵
          | ÐźÅÃû | Æ«Ïò | ÐÎò         |
          |--------|------|--------------|
          | clk    | I    | 125MHzÖ÷ʱÖÓ |
          | data   | O    | 32λÊä³öÊý¾Ý |
          
          ### ²âÊÔÓÃÀý
          - Case1£ºÒ»Á¬·¢ËÍ1500×Ö½ÚÖ¡  
          - Case2£º¹ýʧ֡¹ýÂ˲âÊÔ

          ¹¤¾ßÍÆ¼ö£ºDoxygen×Ô¶¯ÌìÉúÎĵµ


          7. Ò»Á¬ÖªÊ¶¸üÐÂ

          ¼¼Êõ×·×ÙÇåµ¥£º

          • ЭÒé¸üУºPCIe 6.0/CXL 2.0ÐÂÌØÕ÷
          • ¹¤¾ßÉý¼¶£ºVivado 2023.1ÐÂÔö¹¦Ð§
          • ¹ú²úÌæ»»£º¸ßÔÆFPGAÐÂÐͺÅÌØÕ÷ÆÊÎö
            ѧϰÇþµÀ£º
          1. Xilinx/Altera¹Ù·½Webinar
          2. GitHubÈÈÃÅÏîÄ¿£¨ÈçVexRiscv£©
          3. FPGA-Specific Subreddit¼¼ÊõÌÖÂÛ

          ʵս±Ü¿Ó°¸Àý¿â

          ÎÊÌâÀàÐ͵䷶ÌåÏÖ½â¾ö¼Æ»®
          ʱÐòÊÕÁ²Ê§°Ü½¨Éèʱ¼äÎ¥Àý > 0.5ns²åÈë¼Ä´æÆ÷ + ½µÆµ²âÊÔ
          ÑÇÎÈÌ¬Ëæ»úÐÔϵͳÍß½âË«¼Ä´æÆ÷ͬ²½ + ¸ñÀ×Âë±àÂë
          ×ÊÔ´³¬Ï޽ṹ²¼Ïßʧ°Ü¸´ÓÃÂß¼­ + BRAMÌæ»»ÂþÑÜʽRAM
          ¹¦ºÄ³¬±êоƬ·¢ÌÌ > 85¡æÊ±ÖÓÃÅ¿Ø + ¶¯Ì¬ÆµÂʵ÷Àí

          ÕÆÎÕÕâ7´óÔ­Ôò¿ÉïÔÌ­70%µÄÖØ¸´²È¿Ó £¬£¬£¬£¬£¬£¬ÈçÐèÏêϸ°¸ÀýµÄ´úÂëʵÏּƻ®£¨ÈçÑÇÎÈ̬´¦Öóͷ£»òʱÐòÔ¼ÊøÄ£°å£© £¬£¬£¬£¬£¬£¬¿É¼û¸æÏêϸ³¡¾°½øÒ»²½Õö¿ª£¡ ?

          ʱÐòÔ¼ÊøÄ£°åʾÀý
          ´ó·¢28¡¤(ÖйúÓÎ)¹Ù·½ÍøÕ¾
          ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿