Thông báo

Collapse
No announcement yet.

Tạo buffer trong chip FPGA,trễ qua LUT

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Tạo buffer trong chip FPGA,trễ qua LUT

    Tui gặp phải 2 vấn đề mong anh em giúp đỡ:
    - Tạo 1 chân inout.nó toàn báo lỗi buffer.Ngay cả khi nhét buffer vào cũng không đc.Nhất là khi làm trên Altium.
    - Tạo trể xung clock bằng LUT,tôi đang giao tiếp chip FPGA với DDR SDRAM (Ram ngoài).

  • #2
    mà tui là thành viên kỳ cựu,chỉ mỗi tội ít viết bài
    sao lại bảo tôi là thành viên mới nhỉ

    Comment


    • #3
      FPGA thì cũng là các linh kiện điện tử. Muốn làm IO inout đọc kỹ nguyên lý 74LS245 đã.
      Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

      Biến tần
      Máy giặt
      Lò vi sóng
      Bếp từ.
      Tủ lạnh.
      Điều hòa

      Comment


      • #4
        ai chẳng biết nguyên lý như thế.Ông anh đã tổng hợp được cái chân nào chưa

        Comment


        • #5
          ai chẳng biết nguyên lý như thế.Ông anh đã tổng hợp được cái chân nào chưa
          Biết thế rồi thì làm được rồi đấy. Nó không liên quan đến buffer gì cả.
          Bạn gửi code lên để chỉ ra chỗ sai cho bạn.
          LUT tạo delay thì không chính xác và thời gian delay tùy theo mỗi lần compiler.


          Tạo chân IO là sao? Khai báo hay config cho nó.
          khai báo:
          D0 : INOUT STD_LOGIC;
          Với 74LS245
          D0 = INPUT khi OE = 0 else HiZ.
          FPGA thì cũng vậy.
          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

          Biến tần
          Máy giặt
          Lò vi sóng
          Bếp từ.
          Tủ lạnh.
          Điều hòa

          Comment


          • #6
            ông anh thông cảm,em lại không viết bằng vhdl.em tổng hợp trên altium
            Bác có làm qua cái này chưa?nếu rồi thì tốt quá,cho anh em xin ít kinh nghiệm
            Còn nếu không tạo trễ bằng LUT thì bác bảo trễ bằng cái gì bây giờ.Trong cái core giao tiếp với Ram ngoài của thằng xilinx,nó trễ qua LUT mà.

            Comment


            • #7
              ah,bác nào đã thử đi đây trong chip lần nào chưa nhỉ,thảo luận luôn đi.

              Comment


              • #8
                1/ Nó báo lỗi gì bạn? Làm tren Altium nghĩa la schematic? Mình ko rõ Altium, nếu Altium có hỗ trợ FPGA thì chắc sẽ có IO Buffer primitives gồm 4 chân (In, Out, INOUT, Output_en).
                2/ Tạo trễ bằng LUT thì mình làm hơi thủ công chút. Ko biết có phải cách "chính thống" không.
                - Tao mot entity DUMMY_LUT(I: in, O: out)
                + O <= I
                - Compile cai entity nay sang ngc file.

                - Trong project ban cần trễ, dùng thang DUMMY_LUT như hộp đen, nếu không nó sẽ bị tối ưu mất. Xong bạn dùng Floorplan hay FPGA edittor cua Xilinx, đặt thằng DUMMY_LUT cố định ở đâu đó, rồi dùng timing analyzer coi coi trễ của bạn đã phù hợp chưa, nếu chưa thì đặt lại.

                Comment


                • #9
                  Nguyên văn bởi jefflieu Xem bài viết
                  1/ Nó báo lỗi gì bạn? Làm tren Altium nghĩa la schematic? Mình ko rõ Altium, nếu Altium có hỗ trợ FPGA thì chắc sẽ có IO Buffer primitives gồm 4 chân (In, Out, INOUT, Output_en).
                  2/ Tạo trễ bằng LUT thì mình làm hơi thủ công chút. Ko biết có phải cách "chính thống" không.
                  - Tao mot entity DUMMY_LUT(I: in, O: out)
                  + O <= I
                  - Compile cai entity nay sang ngc file.

                  - Trong project ban cần trễ, dùng thang DUMMY_LUT như hộp đen, nếu không nó sẽ bị tối ưu mất. Xong bạn dùng Floorplan hay FPGA edittor cua Xilinx, đặt thằng DUMMY_LUT cố định ở đâu đó, rồi dùng timing analyzer coi coi trễ của bạn đã phù hợp chưa, nếu chưa thì đặt lại.
                  Một lời khuyên là bạn nên dùng PlanAhead thay cho 2 cái này, nó trực quan hơn rất nhiều. Tuy nhiên nó ko nằm trong ISE mà phải cài riêng.

                  Comment


                  • #10
                    PlanAhead dùng ở mức cao hơn, còn thao tác trên 1 LUT thì mình xài đồ chùa được rồi.

                    Comment


                    • #11
                      Em có cái code SRAM, tình trạng là mô phỏng SRAM_DQ lúc nào cũng HiZ, ai bik sửa dùm em

                      Code:
                      library ieee;
                      use ieee.std_logic_1164.all;
                      use ieee.std_logic_arith.all;
                      use ieee.std_logic_unsigned.all;
                      
                      --------------------------------------------------------------
                      
                      entity SRAM is
                      port(clk : in std_logic;
                      in_address: in std_logic_vector (17 downto 0);
                      in_data: in std_logic_vector (15 downto 0);
                      R_W: in std_logic;
                      CE: in std_logic;
                      SRAM_ADDR: out std_logic_vector(17 downto 0);
                      SRAM_CE_N:out std_logic;
                      SRAM_WE_N:out std_logic;
                      SRAM_OE_N:out std_logic;
                      SRAM_UB_N:out std_logic;
                      SRAM_LB_N:out std_logic;
                      SRAM_DQ:inout std_logic_vector(15 downto 0);
                      out_data: out std_logic_vector (15 downto 0));
                      end SRAM;
                      
                      --------------------------------------------------------------
                      
                      architecture behav of SRAM is
                      begin
                      process (clk)
                      begin
                      if rising_edge (clk) then
                      if R_W='1' then
                      SRAM_DQ<=in_data;
                      else SRAM_DQ <= (others => 'Z');
                      end if;
                      out_data <= SRAM_DQ;
                      SRAM_ADDR <= in_address;
                      SRAM_WE_N <=(R_W and CE);
                      SRAM_OE_N <=not (R_W and CE);
                      SRAM_CE_N <=Not CE;
                      SRAM_UB_N <= '0';
                      SRAM_LB_N <= '0';
                      end if;
                      end process;
                      end behav;
                      Dạng sóng

                      Comment


                      • #12
                        Cái này ko biết sao giai thích. Bạn thử code 1 cach khac nhu vay xem:
                        signal: out_enable;
                        if(rising_edge(clk)) then
                        if(R_W = '1') then
                        out_enable <= '1';
                        else
                        out_enable <= '0';
                        end if;
                        end if

                        ... end process;

                        SRAM_DQ <= in_data when (out_enable = '1') else
                        (others=> 'z');

                        Nhân tiện cho hỏi bạn xài simulator gì. Tại vì VHDL chỉ là cách mô tả mạch điện thôi, còn phần mềm mô phỏng và tổng hợp có hiểu bạn mô tả như vậy ko là chuyện khác. Cái code của bạn "trông có vẻ đúng" ...

                        Comment


                        • #13
                          Hì, cái này mình dùng Vector waveform của Quartus vẽ ra, mà nghe đồn cái này hok ổn , người ta hay dùng ModelSim hơn mà Mila thì hok rành cái này . Mà nhiều khi nó đúng thiệt, mình test bằng code verilog của thằng bạn làm cái này rồi nó ra y chang, chỉ hok bik sao mô phỏng nó hok lên chân DQ thôi

                          Comment


                          • #14
                            Đã thử mô phỏng và tổng hợp bằng xilinx. Ok hết.

                            Comment

                            Về tác giả

                            Collapse

                            noname_star Tìm hiểu thêm về noname_star

                            Bài viết mới nhất

                            Collapse

                            Đang tải...
                            X