Thảo luận Thắc mắc về giao tiếp LCD với FPGA Spartan 3A

Thảo luận trong 'THẢO LUẬN - HỎI ĐÁP' bắt đầu bởi Skyfall_133, 26 Tháng tám 2017.

Chia sẻ trang này

Lượt xem: 221

  1. Skyfall_133

    By:Skyfall_133in: 26 Tháng tám 2017
    New Member

    Tham gia ngày:
    26 Tháng tám 2017
    Bài viết:
    6
    Đã được thích:
    5
    Mình mới học về FPGA và thực hành trên kit Elbert V2 Spartan 3a về phần LCD. Vấn đề nạp code mà LCD không hiển thị. Đây là code của mình. Mong mọi người chỉ giáo.
    Mã:
    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Company:
    // Engineer:
    //
    // Create Date:    10:47:04 08/25/2017
    // Design Name:
    // Module Name:    lcd_code
    // Project Name:
    // Target Devices:
    // Tool versions:
    // Description:
    //
    // Dependencies:
    //
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    //
    //////////////////////////////////////////////////////////////////////////////////
    module lcd_code(
        input clk,
        output reg rw, en, rs,
        output reg [3:0]    LCD_out
        );
        parameter     K = 18        ,
                        DSVR    = 33    ;
    //                    DSVR_ = 1 ;
        integer     pointer = 0,k=0 ;
        wire  [9:0] memory[0:K-1];
        reg [DSVR-1:0]    count = 0 ;
    //    reg [DSVR_-1:0] count_ = 0 ;
        reg counter = 0;   // ho tro gui 4 bit
      
        //creat LCD memory
        // int lcd
        assign memory[0]    = {2'b00,8'hFF};    // do not thing
        assign memory[1]    = {2'b00,8'h30};
        assign memory[2]    = {2'b00,8'h28}; // mode 4 bit
        assign memory[3]    = {2'b00,8'h0C}; // display on cursor off
        assign memory[4]    = {2'b00,8'h06};    // entry mode set
        assign memory[5]    = {2'b00,8'h01};    // clr
        // write character
        assign memory[6]    = {2'b10," "};
        assign memory[7]    = {2'b00,8'h1C};
        assign memory[8]    = {2'b10,8'b01010111};
        assign memory[9]    = {2'b10,8'b01000101};
        assign memory[10]    = {2'b10,8'b01001100};
        assign memory[11]    = {2'b10,"C"};
        assign memory[12]    = {2'b10,"O"};
        assign memory[13]    = {2'b10,"M"};
        assign memory[14]    = {2'b10,"E"};
        assign memory[15]    = {2'b10," "};
        assign memory[16]    = {2'b10,"T"};
        assign memory[17]    = {2'b10,"O"};
      
    /*    assign memory[17]    = {2'b00,8'h40};    // xuong dong
        assign memory[18]    = {2'b10,8'h1C};
      
        assign memory[19]    = {2'b10,"M"};
        assign memory[20]    = {2'b10,"A"};
        assign memory[21]    = {2'b10,"N"};
        assign memory[22]    = {2'b10,"&"};
        assign memory[23]    = {2'b10,"D"};
        assign memory[24]    = {2'b10,"E"};
        assign memory[25]    = {2'b10,"V"};
        assign memory[26]    = {2'b10,"I"};
        assign memory[27]    = {2'b10,"C"};
        assign memory[28]    = {2'b10,"E"};
        assign memory[29]    = {2'b10," "};
        assign memory[30]    = {2'b10,"L"};
        assign memory[31]    = {2'b10,"A"};
        assign memory[32]    = {2'b10,"B"};*/
    
    always @(posedge clk )
        begin
            count = count +1 ; 
            if (pointer ==  K+1)
                en= 1'b0;
            else
                en = count[17]  ; // tre 20ms
            rw = 1'b0;
            rs = memory[pointer][9]    ;
        end
    
    always @(negedge en  )
            begin
                if (counter == 0 )
                    begin
                        LCD_out = memory[pointer][7:4] ;
                        counter = counter +1 ;
                    end
                else
                    begin
                        LCD_out = memory[pointer][3:0];
                        counter = counter +1;
                        if ((pointer ==1 ) &&(k<3 ))
                            begin
                                k = k+1;  // gui 3 lan data : 0x30 ;
                            end
                        else
                            pointer = pointer +1;
                    end
            end
    endmodule
    
     

    Bài viết cùng chủ đề:

    Last edited: 28 Tháng tám 2017
  2. Lu ROm

    By:Lu ROmin: 26 Tháng tám 2017
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    462
    Đã được thích:
    101
    bạn đọc bài này thử xem, mình chưa dùng spartan 3 nên chưa biết kết nối nó như thế nào.
    vì có 2 phần một là code, 2 là kết nối ucf của kit..nên chưa biết thế nào,
    còn đây là cơ bản về lcd trên fpga
    http://vimach.net/threads/lcd-tren-fpga-dung-verilog.144/
     
  3. Skyfall_133

    By:Skyfall_133in: 26 Tháng tám 2017
    New Member

    Tham gia ngày:
    26 Tháng tám 2017
    Bài viết:
    6
    Đã được thích:
    5
    Thank you ad, à cái này ad up lại code giúp m vs. Link died rùi.
    . UCF của mình như thế này.
    Mã:
    # PlanAhead Generated physical constraints
    NET "clk" LOC = P129;
    NET "en" LOC = P28;
    NET "rs" LOC = P32;
    NET "rw" LOC = P31;
    
    # PlanAhead Generated IO constraints
    NET "clk" IOSTANDARD = LVCMOS33;
    NET "en" IOSTANDARD = LVCMOS33;
    NET "rs" IOSTANDARD = LVCMOS33;
    NET "rw" IOSTANDARD = LVCMOS33;
    NET "rs" SLEW = FAST;
    NET "rw" SLEW = FAST;
    NET "en" SLEW = FAST;
    
    # PlanAhead Generated physical constraints
    NET "LCD_out[3]" LOC = P30;
    NET "LCD_out[2]" LOC = P27;
    NET "LCD_out[1]" LOC = P29;
    NET "LCD_out[0]" LOC = P24;
    
    # PlanAhead Generated IO constraints
    NET "LCD_out[3]" IOSTANDARD = LVCMOS33;
    NET "LCD_out[2]" IOSTANDARD = LVCMOS33;
    NET "LCD_out[1]" IOSTANDARD = LVCMOS33;
    NET "LCD_out[0]" IOSTANDARD = LVCMOS33;
    NET "LCD_out[3]" DRIVE = 8;
    NET "LCD_out[2]" DRIVE = 8;
    NET "LCD_out[1]" DRIVE = 8;
    NET "LCD_out[0]" DRIVE = 8;
    NET "en" DRIVE = 8;
    NET "rs" DRIVE = 8;
    NET "rw" DRIVE = 8;
    NET "LCD_out[3]" SLEW = FAST;
    NET "LCD_out[2]" SLEW = FAST;
    NET "LCD_out[1]" SLEW = FAST;
    NET "LCD_out[0]" SLEW = FAST;
    
    
    
     
  4. Lu ROm

    By:Lu ROmin: 27 Tháng tám 2017
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    462
    Đã được thích:
    101
    MÌNH CHƯA dùng spartan 3 nên không biết đúng không nữa...code bạn có lỗi gì không
     
  5. Skyfall_133

    By:Skyfall_133in: 28 Tháng tám 2017
    New Member

    Tham gia ngày:
    26 Tháng tám 2017
    Bài viết:
    6
    Đã được thích:
    5
    Thế để m kết bạn để hỏi vs. Tại m cũng ms bắt đâu. FB m : https://www.facebook.com/phan.quang.330. Tks b.
     
    Lu ROm thích bài này.
  6. Lu ROm

    By:Lu ROmin: 28 Tháng tám 2017
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    462
    Đã được thích:
    101