Thông báo

Collapse
No announcement yet.

Thiết kế Flip-Flop 2 tác động sườn ????

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

  • Thiết kế Flip-Flop 2 tác động sườn ????

    trong quá trình thiết kế 1 số mạch số, mình thấy có vấn đề này , muốn thảo luận với anh em trên Diễn đàn , đó là : khi thiết kế 1 component mà trong đó có dùng 2 tín hiệu điều khiển tác động bằng sườn, thi khi đó chương trình không tổng hợp dc .
    vấn đề này mình chưa tìm dc giải pháp thiết kế.
    ở đây mình thử viết tạo 1 Flip Flop D có các tín hiệu :
    EN : tích cực 1
    Clock : suờn lên
    cần tạo Reset cũng tác động bằng sườn lên nữa ! nhưng không dc !
    anh em cho ý kiến !
    Attached Files

  • #2
    Nguyên văn bởi mta_nd Xem bài viết
    trong quá trình thiết kế 1 số mạch số, mình thấy có vấn đề này , muốn thảo luận với anh em trên Diễn đàn , đó là : khi thiết kế 1 component mà trong đó có dùng 2 tín hiệu điều khiển tác động bằng sườn, thi khi đó chương trình không tổng hợp dc .
    vấn đề này mình chưa tìm dc giải pháp thiết kế.
    ở đây mình thử viết tạo 1 Flip Flop D có các tín hiệu :
    EN : tích cực 1
    Clock : suờn lên
    cần tạo Reset cũng tác động bằng sườn lên nữa ! nhưng không dc !
    anh em cho ý kiến !
    Hi,
    Câu hỏi này rất có ích cho các bạn khác khi mới học RTL. Các bạn cần hiểu là các chương trình tổng hợp sẽ dựa vào một template có sẵn để suy ra bạn muốn tạo thành phần nào.
    Ví dụ D flip-flop:
    process(clk)
    begin
    if(rising_edge(clk)) then Q <= D; end if;
    end process


    D flip flop với reset đồng bộ
    process(clk)
    begin
    if(rising_edge(clk)) then
    if(rst) then Q <= '0'; else Q <= D;
    end if;
    end

    D ff với reset không đồng bộ
    process(clk, rst)
    begin
    if(rst='1') then Q <= '0'; elsif(rising_edge(clk)) then Q <= D; end if;
    end process

    DFF với Enable
    process(clk)
    begin
    if(rising_edge(clk)) then
    if(En='1') then Q <= D;
    end if;
    end process
    .... v.v

    Tương tự bạn tự suy ra cách viết DFF của bạn vừa có reset vửa có enable. Code của bạn viết về mặt ngôn ngữ thì không có gì sai, có lẽ bạn sẽ simulate được nhưng không tổng hợp được vì không đúng template.

    Về Flop có sử dụng cả 2 sườn thì bạn phải gọi primitive của FPGA. Primitive là các thành phần cơ bản nhất của FPGA, bạn sử dụng trực tiếp thay vì viết code đề mô tả. Tùy Xilinx hay altera, tên của DDR flop sẽ khác nhau, nhưng cơ bản là chương trình tổng hợp sẽ trực tiếp sử dụng một DDR trên khi bạn khởi tạo (instantiate) thành phần này.

    Comment


    • #3
      "....Về Flop có sử dụng cả 2 sườn thì bạn phải gọi primitive của FPGA. Primitive là các thành phần cơ bản nhất của FPGA, bạn sử dụng trực tiếp thay vì viết code đề mô tả. Tùy Xilinx hay altera, tên của DDR flop sẽ khác nhau, nhưng cơ bản là chương trình tổng hợp sẽ trực tiếp sử dụng một DDR trên khi bạn khởi tạo (instantiate) thành phần này......"

      jefflieu có thể làm rõ hơn 1 chút ở chỗ này dc không ? thanks !
      best regard !

      Comment


      • #4
        Nguyên văn bởi mta_nd Xem bài viết
        "....Về Flop có sử dụng cả 2 sườn thì bạn phải gọi primitive của FPGA. Primitive là các thành phần cơ bản nhất của FPGA, bạn sử dụng trực tiếp thay vì viết code đề mô tả. Tùy Xilinx hay altera, tên của DDR flop sẽ khác nhau, nhưng cơ bản là chương trình tổng hợp sẽ trực tiếp sử dụng một DDR trên khi bạn khởi tạo (instantiate) thành phần này......"

        jefflieu có thể làm rõ hơn 1 chút ở chỗ này dc không ? thanks !
        best regard !
        Trên FPGA có các thành phần cơ bản ví dụ như tristate buffer, Double data rate Flip flop tại các khối IO ... Có 2 cách sử dụng các thành phần này:
        1) viết code, để phần tự suy ra, ví dụ :
        khi gặp câu lệnh O <= I when E='1' else 'z', phần mểm tổng hợp sẽ tự biết và dùng tristate output.
        2) dùng trực tiếp bằng cách khởi tạo primitive:
        OBUF (i=>I, o=>O, en=>E); OBUF là 1 primitive của Xilinx, bạn không cần viết code mô tả thành phần này, chỉ cần instantiate. Để biết thêm bạn có thể click icon hình bóng đèn và tìm các primitive có sẵn. Altera thì bạn right-click --> insert template ...

        Ngoài các buffer, còn có các primitie khác như DDR flip flop, LUT, FF, PLL ...

        Comment


        • #5
          Thanks jefflieu rất nhiều ! những thông tin này rất bổ ích với mình . chúc bạn luôn vui vẻ nhé

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X