Thông báo

Collapse
No announcement yet.

Help - Tạo tập thanh ghi với verilog!

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

  • Help - Tạo tập thanh ghi với verilog!

    các anh chị cho em hỏi làm sao để tạo được 1 tập 32 thanh ghi 32bits (register files) trong verilog ?và cả bộ cách tạo bộ nhớ (data memory) nữa.ai biết xin chỉ giúp em với.
    sơ đồ đây ạh
    [IMG][/IMG]

  • #2
    Nguyên văn bởi hoangdao2699 Xem bài viết
    các anh chị cho em hỏi làm sao để tạo được 1 tập 32 thanh ghi 32bits (register files) trong verilog ?và cả bộ cách tạo bộ nhớ (data memory) nữa.ai biết xin chỉ giúp em với.
    sơ đồ đây ạh
    [IMG][/IMG]
    Về tạo register file, có thể dùng 1 trong 2 cách sau
    - Bạn có thể chỉ dùng code VHDL/Verilog
    - Nếu viết để chạy trên FPGA, bạn có thể dùng Dual-port RAM (Ram có 2 cổng)

    Cách 1 dùng HDL để viết:
    Sau khi khai báo các cổng input/output, để khai báo một dãy các thanh ghi:

    - Verilog:
    reg [31:00] register_file [0:REG_FILE_SIZE-1];
    - VHDL :
    type REG_FILE is array (0 to REG_FILE_SIZE-1) of std_logic_vector(31 downto 0);
    signal register_file : REG_FILE;

    Cách 2 dùng dual-port RAM (cách này không nên dùng trừ phi rất thiếu Flipflop. Nếu như REG_FILE_SIZE = 32 thì sơ sơ mất hết 1000 (32x32bit) Flipflop rồi. Dùng dual-port RAM thì sẽ gặp khó khăn về timing cũng như khi port từ FPGA này sang FPGA khác.

    - Về tạo memory: Xilinx và Altera đều có code mẫu (Xilinx: click icon hình bóng đèn, Altera: chuột phải, insert template)

    Comment


    • #3
      Đây là sơ đồ của 1 CPU đơn giản nhất, rất hữu ích trong việc làm quen với HDL và FPGA!

      Comment


      • #4
        Thank anh nhìu.e đang làm đề tài trên FPGA.đó là sơ đồ của con CPU MIPS đơn chu kỳ.

        Comment


        • #5
          Cho em hỏi làm thế nào để tạo xung clock đồng bộ trong mô phỏng đc ah? trước giờ trên trường em chỉ sử dụng Quartus II thôi chứ chưa tìm hiểu các phần mềm khác.thầy nói không cần xét xung clock nhg nếu vậy lỡ lệnh trước chưa thực hiện xong thì PC đã đc cập nhật, lệnh kế tiếp lại nhảy vào thì làm sao ah?

          Comment


          • #6
            Nọi cại chi mà ko hiệu :-s

            Comment


            • #7
              hi,thanks a đã reply.em muốn hỏi là khi mô phỏng thì mình đưa xung clock vào như thế nào?Em nghĩ nếu ko có clock để đồng bộ thì lệnh sau sẽ chèn lên lệnh trước (do PC cập nhật nhanh).

              Comment


              • #8
                Mạch này chắc chắn phải có clock.
                Trường hợp 1: không sử dụng pipeline (tạm dịch là đường ống), sau khi khi PC load giá trị PC0 thì sẽ mất một khoảng thời gian để thực hiện lệnh, khoảng thời gian này gọi là trễ. Trong khoảng thời gian này PC ko được thay đổi giá trị. Trong hệ thống đồng bộ, trễ của các mạch tổ hợp giữa 2 flip-flop phải nhỏ hơn chu kì clock.
                Trường hợp 2: sử dụng pipeline, để chạy hiệu quả hơn, giữa các stage (Sau Instruction memory, Register File, ALU), người ta dùng register. Với các register này, trễ sẽ nhỏ hơn và mạch chạy nhanh hơn. Trong thiết kế này, tương tự như dây chuyền sản xuất, mỗi lệnh sẽ được thực hiện trong nhiều stage, mỗi stage sẽ thực hiện 1 phần của 1 lênh trong 1 chu kì.
                http://en.wikipedia.org/wiki/Classic_RISC_pipeline

                Khi mô phỏng, tạo clock:
                always@(*)
                #5 clk <= ~ clk;

                Comment


                • #9
                  cám ơn anh. cho em hỏi tại sao là #5 ah? nó có ý nghĩa gì? có phải là 5 ns ko? và em có thể thay đổi ko?

                  Comment


                  • #10
                    13+5 = 18
                    Bạn tìm ra được 5 là 5 gì chưa?

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X