Thông báo

Collapse
No announcement yet.

SRAM tren board DE2

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

  • SRAM tren board DE2

    Mình làm tới phần sử dụng SRAM trên board DE2 , nhưng mình không hiểu cách sử dụng nó ra sao . Mấy cái port như SRAM_ADDR thì mình khai báo trong cái topmodule luôn hay sao , và nó là output hay input (muốn nhập địa chỉ từ các SW ) , hay là mình phải tạo 1 module khác , trong đó khai báo các port của SRAM , và nếu tạo module khác , thì trong module ngoài khai báo mấy cái port ra thì còn làm dzi nữa . . . , hỏi kiểu này hơi khó hiểu , nhưng ai hiểu được câu hỏi của mình thì giúp với

  • #2
    Bạn coi lại lab8 trong DE2 lab.
    Lưu ý:
    Port ADDR: output
    Port DATA: inout
    Và cần thực hiện bộ đệm ba trạng thái trước DATA để giao tiếp với SRAM.

    Comment


    • #3
      code mẫu của lab8:
      http://dientuvietnam.net/forums/show...t=29312&page=2

      Comment


      • #4
        bạn có thể cho mình hỏi thêm về cái bộ đệm 3 trạng thái được không . . , mình biết về lý thuyết của nó , nhưng thực hiện viết code thì chưa hiểu lắm . Thanks

        Comment


        • #5
          ah , bài của mình chỉ đơn giản là đọc và ghi dữ liệu thui , sử dụng 32x8 trên SRAM , code của mình đây :
          Trong bài của mìn thì tất cả các chân điều khiển cho bằng 0 , còn cái write_enable thì cho SW[17] điều khiển , nhưng mình thử trên board , thì giả sử cho write_enable = 0(ghi) , rùi cho address va data vào , sau đó nhấn Clock , rùi thêm 1 address khác , data khác , sau đó cho write_enable lên cao(read) , thì led 7 đoạn chỉ hiển thị cái data mình vừa nhập vào thui , còn qua cái địa chỉ trước thì không có phản ứng , bạn nào bít giúp giùm , thanks
          module SRAM_32x8(SW,KEY,LEDG,HEX7,HEX6,HEX5,HEX4,HEX1,HEX 0,SRAM_ADDR,SRAM_DQ,SRAM_CE_N,
          SRAM_OE_N,SRAM_WE_N,SRAM_UB_N,SRAM_LB_N);

          output [0:6] HEX7;
          output [0:6] HEX6;
          output [0:6] HEX5;
          output [0:6] HEX4;
          output [0:6] HEX1;
          output [0:6] HEX0;
          output [0:0] LEDG;
          output SRAM_CE_N;
          output SRAM_OE_N;
          output SRAM_WE_N;
          output SRAM_UB_N;
          output SRAM_LB_N;
          output [17:0] SRAM_ADDR;

          inout reg [15:0] SRAM_DQ;


          input [17:0] SW;
          input [0:0] KEY;

          assign SRAM_CE_N = 1'b0;
          assign SRAM_OE_N = 1'b0;
          assign SRAM_UB_N = 1'b0;
          assign SRAM_LB_N = 1'b0;

          wire [7:0] data_in;
          wire wr_enable;
          wire Clk;

          reg [7:0] data_out;
          reg [17:0] address;


          assign Clk = ~KEY[0];


          assign {data_in} = {SW[7:0]};
          assign SRAM_ADDR = address;
          assign SRAM_WE_N = wr_enable;
          assign wr_enable = SW[17];
          always@(posedge Clk)
          begin
          address[4:0] =SW [15:11];
          if(~wr_enable)
          SRAM_DQ[7:0] <= data_in;
          else
          data_out<=SRAM_DQ[7:0];
          end

          Comment


          • #6
            Sorry vì mình không có thời gian đọc code nhiều.
            Về bộ đệm ba trạng thái thì cách thức implement của nó như sau:

            RAM_DATA = WE_N ? 16'hzzzz : RAM_DATA_out;
            RAM_DATA_in = RAM_DATA;

            Mục đích của cái này để ghép một port in và một port out thành 1 port inout.
            Bạn coi lại trong LAB 8 sẽ thấy có dòng gần giống như vậy. Chạy tổng hợp rồi cố gắng phân tích.
            Xong rồi không hiểu mới hỏi tiếp nhé. Chưa tìm hiểu mà hỏi thì mình thường ít trả lời lắm.
            Thân chào

            Comment


            • #7
              àh , cái link bạn đưa chỉ có các bài lab thui ,chứ hem có code mẫu , mình cũng đang làm mấy bài lab đó , bạn có thể cho lại link hông ??? . Thanks

              Comment


              • #8
                Ủa vậy hả. Sorry. Tưởng đâu hắn post code mẫu chứ. Hihi. Sorry nhiều nhé.
                Mà hình như mình attach file không được không hiểu vì sao nữa. Để coppy vào vậy:


                module part2(SW,KEY,
                HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,
                SRAM_ADDR,
                SRAM_DQ,
                SRAM_CE_N,
                SRAM_OE_N,
                SRAM_WE_N,
                SRAM_UB_N,
                SRAM_LB_N);
                input [17:0] SW;
                input [2:0]KEY;
                output [17:0]SRAM_ADDR;
                inout [15:0]SRAM_DQ;
                output SRAM_CE_N;
                output SRAM_OE_N;
                output SRAM_WE_N;
                output SRAM_UB_N;
                output SRAM_LB_N;
                output [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;

                wire clk,reset_n;
                wire [7:0]DATA;
                wire [7:0]DATA_out;
                wire [4:0] ADDR ;

                assign clk_ = KEY[0];
                assign reset_n = KEY[1];


                regitern #(.n(1))reg1(clk, reset_n, SW[17], SRAM_CE_N); //SRAM_CE_N = SW[17];

                regitern #(.n(1))reg2 (clk, reset_n, SW[16], SRAM_WE_N); // SRAM_WE_N = SW[16];

                regitern #(.n(8))reg3 (clk, reset_n, SW[7:0], DATA [7:0]); // DATA [7:0] = SW[7:0];

                regitern #(.n(8))reg4 (clk, reset_n, SW[12:8], ADDR [4:0]); // 5 bit dia chi

                assign SRAM_DQ[7:0] = SRAM_WE_N ? 8'hzz : DATA ;
                assign SRAM_ADDR [17:5] = 13'b0;
                assign SRAM_OE_N = 1'b0;
                assign SRAM_UB_N = 1'b0;
                assign SRAM_LB_N = 1'b0;
                assign SRAM_ADDR [4:0] = ADDR [4:0];


                assign DATA_out = SRAM_DQ [7:0];

                displayhex D1(DATA_out[3:0], HEX0); // hien
                displayhex D2(DATA_out[7:4], HEX1); // thi
                displayhex D3(DATA[3:0], HEX4); // led
                displayhex D4(DATA[7:4], HEX5); //
                displayhex D5(ADDR [3:0], HEX2); //
                displayhex D6({3'b0,ADDR [4]}, HEX3); //


                endmodule
                ////////////////////gia ma led /////////////////////////////////////////
                module displayhex(hex, led);
                input [3:0] hex;
                output reg [6:0] led;
                always @(hex)
                case (hex)
                4'b0000 : led = 7'b1000000; //0
                4'b0001 : led = 7'b1111001; //1
                4'b0010 : led = 7'b0100100; //2
                4'b0011 : led = 7'b0110000; //3
                4'b0100 : led = 7'b0011001; //4
                4'b0101 : led = 7'b0010010; //5
                4'b0110 : led = 7'b0000010; //6
                4'b0111 : led = 7'b1111000; //7
                4'b1000 : led = 7'b0000000; //8
                4'b1001 : led = 7'b0010000; //9
                4'b1010 : led = 7'b0001000; //a
                4'b1011 : led = 7'b0000011; //b
                4'b1100 : led = 7'b1000110; //c
                4'b1101 : led = 7'b0100001; //d
                4'b1110 : led = 7'b0000110; //e
                4'b1111 : led = 7'b0001110; //f
                endcase
                endmodule

                //////////////////////thanh ghi/////////////////////////////
                module regitern(clk, reset_n, inreg, outreg);
                parameter n = 8;
                input clk, reset_n;
                input [n-1:0] inreg;
                output reg [n-1:0] outreg;

                always @(posedge clk or negedge reset_n)
                if (reset_n == 0)
                outreg <= 0;
                else
                outreg <= inreg;
                endmodule

                ////////////////////////////////////////////////////////////

                npkhttl về tổng hợp và coi Kết quả nhé.

                Comment


                • #9
                  Thanks so much !!!! , đang cần cái này nè , hì , có gì thì giúp đỡ thêm nha !!! , mình sẽ coi kĩ , sau đó sẽ có respond sau

                  Comment


                  • #10
                    TÌnh hình là sau khi xem qua code của bạn , mình đã chỉnh sửa lại đoạn code của mình , nhưng vẫn còn chút vướng mắc . Giả sử mình ghi vao address 0 và address 1 2 dữ liệu (0F va FF chẳng hạn). Sau đó , mình để SRAM_EN_N lên 1 ( trạng thái read) , thì led chỉ hiển thị data mà mình vừa ghi vào thui ( ghi address 0 data 0F trước , sau đó ghi address 1 data FF) , nó chỉ hiển thị FF , chuyển sang address 0 vẫn hiển thị FF .
                    Ngay tại chỗ WR_EN_N = 1 thì SRAM_DQ là tổng trở cao , thì không biết có đúng hay không , nhưng mình nghĩ nó sẽ không đưa dữ liệu ra data_out được ????

                    Comment


                    • #11
                      Bạn coi lại giao thức giao tiếp SRAM nha.
                      + Trong datasheet đó.
                      + Hay dùng Megafunction tạo RAM cũng được. Trong quá trình tạo nhớ chú ý đánh dấu vào
                      timimg.bmp. Nó sẽ cho bạn file de coi dạng sóng để giao tiếp.
                      + Hay down cái lab8 về trong đó nó cũng nói về cách đọc ghi RAM
                      Mình nói sơ qua cho bạn. Để ghi data vào ram:
                      B0: Đảm bảo WE_N == 1 (đọc RAM)
                      B1: cấp địa chỉ
                      B2: cấp data
                      B3: WE_N = 0 ghi data vào RAM
                      B4: WE_N = 1

                      Sau đó mới được thay đổi data và địa chỉ. Nếu không sẽ bị ghi sai giá trị vào RAM đó.

                      Comment


                      • #12
                        Cho em hỏi: SRAM trên DE2 là 256k x 16bits mình có cách nào để đọc dữ liệu 32bits không. Giả sử em có 1 dữ liệu 32bits, em muốn đọc nó thì mình đọc dữ liệu 16bits từng lần 1, em muốn đọc 1 lúc 32bits có được không?

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        • bqviet
                          Trả lời cho Đấu tắt điện cho máy tính bảng
                          bởi bqviet
                          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                          06-12-2025, 17:17
                        • nguyendinhvan
                          Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                          bởi nguyendinhvan
                          Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                          05-12-2025, 19:59
                        • afrendly
                          Trả lời cho Đấu tắt điện cho máy tính bảng
                          bởi afrendly
                          Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                          04-12-2025, 01:27
                        • nick22
                          Trả lời cho Máy điện châm ?
                          bởi nick22
                          Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                          01-12-2025, 13:23
                        Đang tải...
                        X