久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4117|回復: 0
打印 上一主題 下一主題
收起左側

FPGA EDA實驗指導書 Verilog語言

[復制鏈接]
跳轉到指定樓層
樓主
ID:314737 發表于 2018-4-23 19:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
EDA實驗指導書

目錄

  • 實驗一  LED實驗
(驗證性實驗)                           
  • 實驗二  LED點陣實驗
(綜合性實驗)                             
3.  實驗三  LCD顯示實驗
(設計性實驗)                             

實驗一:
LED
實驗
一、實驗目的
  • 熟悉ISE8.2開發環境,掌握工程的生成方法;
  • 熟悉SEED-XDTK_V4實驗環境;
二、實驗內容
  • 創建工程;
  • 添加HDL資源文件;
  • 配置一個應用程序完成設計。
三、實驗準備
  • 通過USB口下載電纜將計算機USB口及SEED-FEM025板的J9 連接好;
  • 啟動計算機,打開SEED-XDTK_V4實驗箱電源開關。觀察SEED-FEM025板上的+5VD11)的電源指示燈是否均亮。若有不亮的,請斷開電源,檢查電源。
四、實驗步驟
  • 創建工程
  • 雙擊桌面Xilinx ISE8.2快捷方式打開ISE工程管理器(Project Navigator);
  • 打開Project Navigator后,選擇File → New Project,彈出新建工程對話框;
  • 在工程路徑中單擊“…”按鈕,將工程指定到如下目錄D: \02. V4_lab,單擊確定;
  • 在工程名稱中輸入led,點擊Next按鈕,如圖1.1所示;
圖1.1
  • 彈出器件特性對話框。器件族類型(Device Family)選擇“Virtex4”,器件型號(Device)選XC4VSX25 FF668 -10,綜合工具(Synthesis Tool)選“XST (VHDL/Verilog)”,仿真器(Simulator)選“ISE Simulator”,如圖1.2
圖1.2
  • 單擊Next按鈕,彈出創建新資源(Create New Soure)對話框,可以使用這個對話框來創建新的HDL資源文件,或者也可以創建工程后,新建HDL資源文件,如圖1.3
圖1.3
  • 單擊Next按鈕,彈出添加存在資源對話框;可以使用這個對話框來添加已經存在的HDL資源文件,或者也可以創建工程后,添加HDL資源文件;在本實驗中我們采用創建工程后,添加HDL資源文件的方式,如圖1.4
圖1.4
  • 單擊Next按鈕,將彈出工程建立完成對話框,單擊finish按鈕完成工程建立流程;
  • 觀察工程資源管理窗口,將會看到工程已經建立成功如圖1.5
圖1.5
  • 添加HDL資源文件
  •      選擇Project → Add Source命令,彈出的文件添加對話框;或者右鍵單擊Sources中的led彈出的文件添加對話框,如圖1.6
圖1.6
  •      在彈出的對話框中將文件添加路徑指向D:\02.V4_lab.2\led文件夾下,選擇led.v文件,單擊Open按鈕,如圖1.7
圖1.7
  •      在彈出的對話框框中單擊OK,如圖1.8
圖1.8
  •      單擊OK按鈕。資源文件添加完成如圖1.9
圖1.9
  • 設計實現
  • 在工程的資源操作窗(Processes),雙擊Implement Design; 如圖1.10
圖1.10
  • 當設計實現(Implement Design)運行的過程中,展開設計實現命令(Implement Design),會看到實現過程中,首先是進行綜合(Synthesis),然后才依次完成實現的步驟。
  • 管腳約束實現與重新實現
  • 工程的Sources窗口,右鍵單擊Sources中的led.v文件,彈出的文件添加對話框,如圖1.11
圖1.11
  • 添加led.ucf文件,順序與上述添加HDL資源文件相類似如圖1.12-1.14
圖1.12 鼠標左鍵單擊“打開(O)”
圖1.13 鼠標左鍵單擊“OK”

圖1.14 鼠標左鍵單擊“led左側+”
  • Processes窗口,擴展User Constraints并雙擊Assign Package Pins打開PACE,如圖1.15注意在PACE能啟動之前必須先進行綜合。
圖1.15
  • PACE中瀏覽Design Object ListI/O Pins窗口,可看到所列的信號名稱和信號方向是Output還是Input。在Loc欄里每個信號對應的FPGA的管腳。信號連接如下,在FPGA的管腳分配需查看原理圖,如圖1.16
CLK_IN: 管腳編號為AF12
LED_DATA[0]: 管腳編號為AD20
其余管腳在此就不一一列出了。
圖1.16
  • 在所有信號鏈接完成后,然后選擇保存文件,如圖1.17箭頭所示位置;
圖1.17
  • Device Architecture窗口放大直到可以看清每個管腳;如圖1.18
注意:圖中粉紅色彩條說明管腳在同一個bank中。單擊每個藍色I/O管腳,則對應著Design Object List-I/O Pins窗口相應的管腳。
圖1.18
  • 單擊菜單欄中的File → Exit,退出PACE
  • 單擊工程中Sources窗口中的led.ucf文件,然后雙擊Prosesses窗口中User Constraints目錄下的Edit Constraints (Text),就可以看到由PACE生成的led.ucf管腳約束文件;當然我們也可以使用該命令,直接在文本中編寫led.ucf文件;
圖1.19
  • 在工程的資源操作窗(Processes),雙擊Implement Design;對設計重新實現;
  • 本例程中led.ucf文件早已存在,我們可以使用上文介紹過的文件添加方式將led.ucf文件直接添加到工程文件中。

  • 下載配置FPGA
  • 在工程的Sources窗口單擊頂層文件LED.v文件,展開Processes窗口中的Generate Programming File,雙擊Configure Device (iMPACT),如圖1.20
圖1.20
  • 彈出Welcome iMPACT對話框后,選擇“Configure devices using Boundary-Scan(JTAG)”,單擊Finish按鈕,如圖1.21
圖1.21
  • 在彈出的器件添加對話中,第一個器件選擇bypass按鈕,如圖1.22;第二個器件也選擇bypass按鈕,如圖1.23
圖1.22
圖1.23
  • 最后一個器件單擊所要下載的led.bit文件(此文件所在目錄不可有中文),單擊Open按鈕,如圖1.24;會彈出如圖1.25“Add Virtex-/II Pro/Virtex04...”對話框,單擊OK按鈕后彈出一個警告信息,單擊OK按鈕;
圖1.24
圖1.25
  • 單擊xc4vsx25這個device,變成綠色,且 iMPACT Processes Operations窗口出現可執行的操作; 如圖1.261.27
圖1.26
圖1.27
  • 在圖1.27中,雙擊iMPACT Processes Operations窗口中的Program,或者在圖1.26中,直接右鍵單擊xc4vsx25這個device,選擇Program。會彈出Programming Properties對話框,如圖1.28所示,單擊OK按鈕;
圖1.28
程序開始下載,如果下載程序成功則出現Program Succeeded,否則如果失敗則出現Program Failed,需要重新查找問題(嘗試重新下載或者斷電后重新下載程序);
  • 程序下載成功后,可觀察到SEED-XDTK_MBOARD板卡上LED燈依次點亮。
五、實驗程序led.v
  1. //dot.v:程序頂層文件,對輸入時鐘進行分頻,依次點亮相應的LED;
  2. //dot.ucf:FPGA用戶約束文件。
  3. `timescale 1ns / 1ps
  4. // Company:
  5. // Engineer:
  6. //
  7. // Create Date:
  8. // Design Name:
  9. // Module Name:    dot
  10. // Project Name:
  11. // Target Devices:
  12. // Tool versions:
  13. // Description:
  14. //
  15. // Dependencies:
  16. //
  17. // Revision:
  18. // Revision 0.01 - File Created
  19. // Additional Comments:
  20. module dot(CLK_IN, nRST, CPLD_E,DOT_DATA , DOT_CON ,AD_nCS , DA_nCS ,USB_nCS,LCD_nCS );

  21. input CLK_IN;
  22. input nRST;
  23. output [1:0] CPLD_E;
  24. output [15:0] DOT_DATA;
  25. output [15:0]DOT_CON;
  26. output USB_nCS;
  27. output AD_nCS;
  28. output DA_nCS;
  29. output LCD_nCS;

  30. reg CLK_OUT = 1'b1;
  31. reg [15:0]DOT_CON =16'h0000;
  32. reg [15:0]DOT_DATA =16'h0000;            
  33.             
  34. reg [13:0] DIV_counter = 14'h000;
  35. reg [3:0] cnt= 4'h0;
  36.             
  37. parameter DIV_FACTOR = 14'h3f98;
  38.             
  39. //CPLD功能切換
  40. assign CPLD_E = 2'b11;
  41. //其他芯片功能禁止
  42. assign USB_nCS = 1'b1;
  43. assign AD_nCS = 1'b1;
  44. assign DA_nCS = 1'b1;
  45. assign LCD_nCS = 1'b1;
  46.             
  47. //時鐘分頻            
  48. always@(posedge CLK_IN)
  49. begin
  50.               if(!nRST)
  51.               begin
  52.                             CLK_OUT <= 1'b1;
  53.                             DIV_counter <= 10'h000;
  54.               end
  55.               else
  56.               begin
  57.                             if(DIV_counter <= DIV_FACTOR )
  58.                             begin
  59.                                           DIV_counter <= DIV_counter + 1;
  60.                             end
  61.               else
  62.                             begin
  63.                                           DIV_counter <= 12'h000;
  64.                                           CLK_OUT <= !CLK_OUT;
  65.                             end
  66.               end
  67. end
  68. //點亮點陣            
  69. always@(posedge CLK_OUT)
  70. begin
  71.               cnt = cnt+1;
  72.               if(cnt == 4'h0)
  73.               begin                           
  74.                             DOT_CON  <= 16'h8000;
  75.                                           DOT_DATA <= 16'hd800;
  76.               end
  77.               else if(cnt == 4'h1)   
  78.     begin                                         
  79.         DOT_CON   <= 16'h4000;
  80.                             DOT_DATA  <= 16'h6c00;
  81.               end
  82.     else if(cnt == 4'h2)   
  83.     begin                                         
  84.                             DOT_CON  <= 16'h2000;
  85.                             DOT_DATA <= 16'hb600;
  86.               end
  87.     else if(cnt == 4'h3)   
  88.     begin                                         
  89.         DOT_CON   <= 16'h1000;
  90.                             DOT_DATA  <= 16'hdb00;
  91.               end
  92.     else if(cnt == 4'h4)
  93.     begin                                         
  94.         DOT_CON  <= 16'h0800;
  95.                             DOT_DATA <= 16'h6d80;
  96.     end           
  97.     else if(cnt == 4'h5)  
  98.     begin                                         
  99.         DOT_CON  <= 16'h0400;
  100.                             DOT_DATA <= 16'h2480;
  101.               end
  102.     else if(cnt == 4'h6)   
  103.     begin                                         
  104.         DOT_CON  <= 16'h0200;
  105.                             DOT_DATA <= 16'h1240;
  106.               end
  107.     else if(cnt == 4'h7)
  108.     begin                                         
  109.         DOT_CON  <= 16'h0100;
  110.                             DOT_DATA <= 16'h0920;
  111.               end
  112.     else if(cnt == 4'h8)
  113.     begin                                         
  114.         DOT_CON  <= 16'h0080;
  115.                             DOT_DATA <= 16'h0490;
  116.               end
  117.     else if(cnt == 4'h9)  
  118.     begin                                         
  119.         DOT_CON  <= 16'h0040;
  120.                             DOT_DATA <= 16'h0248;
  121.               end
  122.     else if(cnt == 4'ha)
  123.     begin                                         
  124.         DOT_CON  <= 16'h0020;
  125.                             DOT_DATA <= 16'h0124;
  126.               end
  127.     else if(cnt == 4'hb)
  128.     begin                                         
  129.         DOT_CON  <= 16'h0010;
  130.                             DOT_DATA <= 16'h0092;
  131.               end
  132.     else if(cnt == 4'hc)
  133.               begin                                         
  134.                             DOT_CON  <= 16'h0008;
  135.                             DOT_DATA <= 16'h0000;   
  136.               end                                                      
  137.               else if(cnt == 4'hd)
  138.               begin                                         
  139.                             DOT_CON  <= 16'h0004;
  140.                             DOT_DATA <= 16'h0000;
  141.               end
  142.     else if(cnt == 4'he)
  143.               begin                                         
  144.                             DOT_CON  <= 16'h0002;
  145.                             DOT_DATA <= 16'h0000;
  146.               end
  147.     else if(cnt == 4'hf)  
  148.     begin                                         
  149.                             DOT_CON  <= 16'h0001;
  150.                             DOT_DATA <= 16'h0000;
  151.               end                    
  152. end                           
  153. endmodule
復制代碼



六、思考題:
  • FPGA的中英文全稱各是什么?
  • 實驗箱所用FPGA型號是什么?共有多少個引腳?引腳可以分為哪幾類?
  • 概述對FPGA進行編程下載的流程。
  • 實驗程序中,輸入輸出引腳各有幾個?兩個always塊語句各自的作用是什么?












實驗二:LED點陣實驗一、實驗目的
  •     熟悉ISE8.2開發環境,掌握工程的生成方法;
  •     熟悉SEED-XDTK_V4實驗環境;
  •     了解HDL語言在FPGA中的使用;
  •     了解定時器的HDL實現。
二、實驗內容
  •     定時時鐘設計;
  •     LED點陣點亮。
三、實驗說明
本實驗的功能是將SEED-XDTK_MBOARD板上LED點陣點亮(合眾達圖標)。根據硬件原理,通過對FPGA的輸入時鐘進行分頻,實現一個定時器,該定時器主要用于定時掃描控制SEED-XDTK_MBOARD板卡上的LED點陣。
SEED-XDTK_MBOARD板上LED點陣共有16*16點,既有16根控制線與16根數據線。 控制線用來選中一組LED燈,16根數據線用來點亮相應的LED燈。
四、實驗準備
1. 通過USB 口下載電纜將計算機的USB 口及SEED-FEM025 板的J9 連接好;
2. 啟動計算機,打開SEED-XDTK_V4 實驗箱電源開關。觀察SEED-FEM025 板上的+5V(D11)的電源指示燈是否均亮。若有不亮的,請斷開電源,檢查電源。
五、實驗步驟
  • 打開ISE8.2,裝載dot.ise工程文件;
注意:選擇器件(Device)為“XC4VSX25 FF668 -10”
其他步驟同實驗一,請參考。
  • 雙擊Configure Device (iMPACT)命令,打開iMPACT窗口;
  • 彈出Welcome iMPACT對話框后,選擇Configure devices using Boundary-Scan(JTAG)單擊Finish按鈕;
  • 在彈出的器件添加對話中,第一個器件選擇bypass按鈕;第二個器件也選擇bypass按鈕
最后一個器件單擊所要下載的dot.bit文件(此文件所在目錄不可有中文),單擊Open按鈕,彈出“Add Virtex-/II Pro/Virtex04...”對話框,單擊OK按鈕后彈出一個警告信息,單擊OK按鈕;
  • 單擊xc4vsx25這個device,變成綠色,且 iMPACT Processes Operations窗口出現可執行的操作;
  • 雙擊iMPACT Processes Operations窗口中的Program,或者直接右鍵單擊xc4vsx25device,選擇Program。彈出Programming Properties對話框,單擊OK按鈕;
  • 程序開始下載,如果下載程序成功則出現Program Succeeded,否則如果失敗則出現Program Failed,需要重新查找問題(嘗試重新下載或者斷電后重新下載程序);
  • 程序下載成功后,觀察LED點陣點亮(合眾達圖標)。

六、實驗程序 dot.v
//dot.v:程序頂層文件,對輸入時鐘進行分頻,依次點亮相應的LED;
//dot.ucf:FPGA用戶約束文件。
`timescale 1ns / 1ps
// Company:
// Engineer:
//
// Create Date:
// Design Name:
// Module Name:    dot
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
module dot(CLK_IN, nRST, CPLD_E,DOT_DATA , DOT_CON ,AD_nCS , DA_nCS ,USB_nCS,LCD_nCS );

input CLK_IN;
input nRST;
output [1:0] CPLD_E;
output [15:0] DOT_DATA;
output [15:0]DOT_CON;
output USB_nCS;
output AD_nCS;
output DA_nCS;
output LCD_nCS;

reg CLK_OUT = 1'b1;
reg [15:0]DOT_CON =16'h0000;
reg [15:0]DOT_DATA =16'h0000;            

reg [13:0] DIV_counter = 14'h000;
reg [3:0] cnt= 4'h0;

parameter DIV_FACTOR = 14'h3f98;

//CPLD功能切換
assign CPLD_E = 2'b11;
//其他芯片功能禁止
assign USB_nCS = 1'b1;
assign AD_nCS = 1'b1;
assign DA_nCS = 1'b1;
assign LCD_nCS = 1'b1;

//時鐘分頻            
always@(posedge CLK_IN)
begin
              if(!nRST)
              begin
                            CLK_OUT <= 1'b1;
                            DIV_counter <= 10'h000;
              end
              else
              begin
                            if(DIV_counter <= DIV_FACTOR )
                            begin
                                          DIV_counter <= DIV_counter + 1;
                            end
              else
                            begin
                                          DIV_counter <= 12'h000;
                                          CLK_OUT <= !CLK_OUT;
                            end
              end
end
//點亮點陣            
always@(posedge CLK_OUT)
begin
              cnt = cnt+1;
              if(cnt == 4'h0)
              begin                           
                            DOT_CON  <= 16'h8000;
                                          DOT_DATA <= 16'hd800;
              end
              else if(cnt == 4'h1)   
    begin                                         
        DOT_CON   <= 16'h4000;
                            DOT_DATA  <= 16'h6c00;
              end
    else if(cnt == 4'h2)   
    begin                                         
                            DOT_CON  <= 16'h2000;
                            DOT_DATA <= 16'hb600;
              end
    else if(cnt == 4'h3)   
    begin                                         
        DOT_CON   <= 16'h1000;
                            DOT_DATA  <= 16'hdb00;
              end
    else if(cnt == 4'h4)
    begin                                         
        DOT_CON  <= 16'h0800;
                            DOT_DATA <= 16'h6d80;
    end           
    else if(cnt == 4'h5)  
    begin                                         
        DOT_CON  <= 16'h0400;
                            DOT_DATA <= 16'h2480;
              end
    else if(cnt == 4'h6)   
    begin                                         
        DOT_CON  <= 16'h0200;
                            DOT_DATA <= 16'h1240;
              end
    else if(cnt == 4'h7)
    begin                                         
        DOT_CON  <= 16'h0100;
                            DOT_DATA <= 16'h0920;
              end
    else if(cnt == 4'h8)
    begin                                         
        DOT_CON  <= 16'h0080;
                            DOT_DATA <= 16'h0490;
              end
    else if(cnt == 4'h9)  
    begin                                         
        DOT_CON  <= 16'h0040;
                            DOT_DATA <= 16'h0248;
              end
    else if(cnt == 4'ha)
    begin                                         
        DOT_CON  <= 16'h0020;
                            DOT_DATA <= 16'h0124;
              end
    else if(cnt == 4'hb)
    begin                                         
        DOT_CON  <= 16'h0010;
                            DOT_DATA <= 16'h0092;
              end
    else if(cnt == 4'hc)
              begin                                         
                            DOT_CON  <= 16'h0008;
                            DOT_DATA <= 16'h0000;   
              end                                                      
              else if(cnt == 4'hd)
              begin                                         
                            DOT_CON  <= 16'h0004;
                            DOT_DATA <= 16'h0000;
              end
    else if(cnt == 4'he)
              begin                                         
                            DOT_CON  <= 16'h0002;
                            DOT_DATA <= 16'h0000;
              end
    else if(cnt == 4'hf)  
    begin                                         
                            DOT_CON  <= 16'h0001;
                            DOT_DATA <= 16'h0000;
              end                    
end                           
endmodule
七、思考題
1、CLK_OUT是CLK_IN的幾分頻?
2、.UCF文件是做什么用的?
3、實驗中的點陣LED是規格是什么?程序中用哪些引腳來控制LED?


實驗三:LCD顯示實驗(一)一、實驗目的
  • 熟悉ISE8.2開發環境,掌握工程的生成方法;
  • 熟悉SEED-XDTK_V4實驗環境;
  • 了解LCDHDL實現;
  • 了解Memory模塊的使用。
二、實驗內容
  • FPGAmemory模塊的生成及例化;
  • 系統時鐘設計;
  • LCD點亮。
三、實驗例程
1LCD芯片介紹
LCD模塊采用是LCM122326圖形點陣模快,該模塊是由2塊NJU6450芯片構成,不帶字庫。其工作時序圖如下圖所示:
LCD模塊行列分配:





LCD初始化如下所示
2 例程包含文件
  • main.v:程序頂層文件,實現LCD的初始化以及液晶顯示;
  • v4_dcm.xawDCMIP核,將外部輸入時鐘(50M)進行10分頻;
  • CLK_DIV.v:系統運行時鐘分頻文件,將系統運行時間進行分頻,提供100K的模塊處理時鐘;
  • LCD_DISPLAY.vLCD初始化,以及數據顯示文件;
  • LCD_WRITE.vLCD寫操作函數文件;
  • v2_lcd_ziku.xco:漢字字庫存儲文件;
  • main.ucfFPGA用戶約束文件。
  1. //main.v
  2. `timescale 1ns / 1ps
  3. module main(CLK, nPROCESSOR_RESET_Z, D, LCD_E, LCD_A0, LCD_R_nW, LCD_LED, LCD_nCS, CPLD_E, AD_nCS, DA_nCS, USB_nCS,);
  4.               input CLK;//100M aj15
  5.               input nPROCESSOR_RESET_Z;//ah5
  6.               inout [7:0] D;
  7.             
  8.               output [1:0] LCD_E;
  9.               output LCD_A0;
  10.               output LCD_R_nW;
  11.               output LCD_LED;
  12.               output LCD_nCS;
  13.               output [1:0] CPLD_E;
  14.               output AD_nCS;
  15.               output DA_nCS;
  16.               output USB_nCS;

  17.               wire CLK_LOCKED;
  18.               wire [7:0] DATA_OUT;
  19.               wire CLK_100K;
  20.               parameter DIV_FACTOR = 100;
  21.             
  22. //LCD功能始能
  23.               assign LCD_nCS = 1'b0;
  24. //CPLD功能切換
  25.    assign CPLD_E = 2'b11;
  26. //其他芯片功能禁止
  27.               assign AD_nCS = 1'b1;
  28.               assign DA_nCS = 1'b1;
  29.               assign USB_nCS = 1'b1;
  30.                            
  31. //系統時間分頻
  32. //輸入 50M  輸出10M                           
  33.               v4_dcm CLK_DIV_10M (
  34.     .CLKIN_IN(CLK),
  35.     .RST_IN(!nPROCESSOR_RESET_Z),
  36.     .CLKDV_OUT(CLK_10M),
  37.     .CLKIN_IBUFG_OUT(),
  38.     .CLK0_OUT(),
  39.     .LOCKED_OUT(CLK_LOCKED)
  40.     );
  41. //模塊時間分頻
  42. //輸入 10M  輸出100K                           
  43.               CLK_DIV CLK_DIV_100K (
  44.     .CLK_IN(CLK_10M),
  45.     .nRST(CLK_LOCKED),
  46.     .CLK_OUT(CLK_100K)
  47.     );
  48.               defparam CLK_DIV_100K.DIV_FACTOR = DIV_FACTOR;

  49. /////////// LCD TEST              ///////////////
  50.               reg r_nw = 1'b1;
  51.               reg [6:0] zimo_num = 7'h00;
  52.               reg [6:0] mem_addr = 7'h00;
  53.               reg lcd_en = 1'b0;
  54.               reg [6:0] col_addr = 121;
  55.               reg [1:0] page_addr = 2'b11;
  56.               reg [4:0] disp_addr = 5'h00;
  57.             
  58.               wire [7:0] lcd_data;
  59.               wire lcd_done;
  60.               reg [16:0] tLCD_counter = 17'h00000;

  61.               LCD_DISPLAY LCD (
  62.               //輸入參數
  63.     .CLK(CLK_100K),
  64.     .R_nW(r_nw),
  65.     .DISP_ADDR(disp_addr),
  66.     .PAGE(page_addr),
  67.     .COL_ADDR(col_addr),
  68.     .DISP_DATA(lcd_data),
  69.               //輸出參數
  70.     .LCD_E(LCD_E),
  71.     .LCD_A0(LCD_A0),
  72.     .LCD_R_nW(LCD_R_nW),
  73.               //輸入、出參數
  74.     .LCD_DB(D),
  75.               //輸出參數
  76.     .LCD_LED(LCD_LED),
  77.     .DATA_OUT(),
  78.               .DONE(lcd_done)
  79.     );
  80.             
  81.               v4_lcd_ziku ZIMO(
  82.               .addr(mem_addr),
  83.               .clk(CLK_100K),
  84.               .dout(lcd_data),
  85.               .en(lcd_en));
  86.             
  87.               always@(posedge CLK_100K)
  88.               begin
  89.                             if(tLCD_counter == 17'h0c350)//0.5s
  90.                             begin
  91.                                           disp_addr <= disp_addr - 1; //顯示地址
  92.                                           tLCD_counter <= 17'h00000;
  93.                             end
  94.                             else
  95.                             begin
  96.                                           tLCD_counter <= tLCD_counter + 1;
  97.                             end
  98.                            
  99.                             if(!lcd_done)
  100.                             begin
  101.                                           r_nw <= 1'b0;
  102.                                           lcd_en <= 1'b0;
  103.                             end
  104.                             else
  105.                             begin

  106.                                           r_nw <= 1'b1;
  107.                                           if(!r_nw)
  108.                                           begin
  109.                                                         lcd_en <= 1'b1;
  110.                                                         mem_addr <= zimo_num;
  111.                                                         if(zimo_num == 95)
  112.                                                                       zimo_num <= 0;
  113.                                                         else
  114.                                                                       zimo_num <= zimo_num + 1;                                                                     
  115.                                                       
  116.                                                         case(zimo_num)
  117.                                                                       0:
  118.                                                                       begin
  119.                                                                                     col_addr <= 23;
  120.                                                                                     page_addr <= 2'b00;
  121.                                                                       end
  122.                                                                       16:
  123.                                                                       begin
  124.                                                                                     col_addr <= 23;
  125.                                                                                     page_addr <= 2'b01;
  126.                                                                       end
  127.                                                                       32:
  128.                                                                       begin
  129.                                                                                     col_addr <= 68;
  130.                                                                                     page_addr <= 2'b00;
  131.                                                                       end
  132.                                                                       48:
  133.                                                                       begin
  134.                                                                                     col_addr <= 68;
  135.                                                                                     page_addr <= 2'b01;
  136.                                                                       end
  137.                                                                       64:                           
  138.                                                                       begin
  139.                                                                                     col_addr <= 113;
  140.                                                                                     page_addr <= 2'b00;
  141.                                                                       end
  142.                                                                       80:                           
  143.                                                                       begin
  144.                                                                                     col_addr <= 113;
  145.                                                                                     page_addr <= 2'b01;
  146.                                                                       end
  147.                                                                       default:              col_addr <= col_addr - 1;
  148.                                                         endcase
  149.                                           end
  150.                                           else
  151.                                           begin
  152.                                                         lcd_en <= 1'b0;
  153.                                           end
  154.                             end
  155.               end
  156. endmodule
復制代碼


3 模塊劃分圖
4 Memory 模塊的建立及其例化
  • 雙擊Processes窗口中的Creat New Source,彈出新資源向導窗口;
  • 在彈出新資源向導窗口,選擇IP (CoreGen & Architecture Wizard),在File name 欄里輸入v4_lcd_ziku
  • 單擊Next按鈕,彈出Select IP窗口,依次展開Memories & Storage ElementRAMs & ROMs目錄,選擇Sigle Port Block Memory V6.2
  • 單擊Next按鈕,顯示新建資源信息,單擊Finish按鈕;
  • 彈出Sigle Port Block Memory窗口,在Port Configuration選項卡中選中Read OnlyMemory Size選項卡中Width 填寫8Depth填寫96Write Mode 選項卡中選中Read After Write;單擊Next命令;
  • 單擊Next按鈕,Primitive Selection選項卡中選中 Optimize For AreaDesign Options選項卡中選中 Enable PinOutput Register Options 選項卡中Additional Output Pins Stages 填寫 0,單擊next命令;
  • 單擊Next按鈕,不選中Implementation Option選項卡;管腳極性選項卡中選擇上升沿有效或者高電平有效;

  • 單擊Next按鈕,Simulation Mode Options選項卡中選中Disable Waring MessagesInitial Contents選項卡中 Global init Value 填寫 0,選中 Load Init File添加hezhongda.coe(路徑為D:\02.V4_lab\ lcd\coe);
  • 單擊 Generate 命令,生成v4_lcd_ziku.xco文件;
10、Memory模塊的例化與DCM模塊例化方法一致,請參考鍵盤實驗中關于該部分的內容。下圖中,黑色部分為Memory模塊的例化語句。
四、實驗準備
  • 將光盤下03. Examples of Program\02. V4_lab文件夾拷貝到D:盤根目錄下;
  • 通過USB口下載電纜將計算機USB口及SEED-FEM025板的J9 連接好;
  • 啟動計算機,打開SEED-XDTK_V4實驗箱電源開關。觀察SEED-FEM025板上的+5VD11)的電源指示燈是否均亮。若有不亮的,請斷開電源,檢查電源。
五、實驗步驟
  • 打開ISE8.2,裝載lcd.ise工程文件;
  • 雙擊Configure Device (iMPACT)命令。彈出Welcome iMPACT對話框后,選擇Configure devices using Boundary-Scan(JTAG),單擊Finish按鈕;
  • 在彈出的器件添加對話中,第一個器件選擇bypass按鈕。最后一個器件單擊所要下載的載main.bit文件;
  • 單擊xc4vsx25這個device,變成綠色,且 iMPACT Processes 窗口出現可執行的操作;
  • 雙擊iMPACT Processes 窗口中的Program,或者直接右鍵單擊xc4vsx25這個device,選擇Program。彈出Programming Properties對話框,單擊OK按鈕;
  • 程序開始下載,如果下載程序成功則出現Program Succeeded,否則如果失敗則出現Program Failed,需要重新查找問題(嘗試重新下載或者斷電后重新下載程序);
  • 文件下載成功后,觀察lcd顯示(合眾達刷屏顯示)。
六、思考題
1、頂層文件main.v的功能是什么?輸入輸出信號各有幾個?
2、頂層文件main.v調用了幾個元件例化?各自的功能是什么?
3、頂層文件main.v還使用了哪些語句?其功能是什么?
實驗三:LCD顯示實驗(二)一、實驗目的
  • 熟悉ISE8.2開發環境,掌握工程的生成方法;
  • 熟悉SEED-XDTK_V4實驗環境;
  • 了解LCD漢字字模的設計方法;
  • 掌握Memory模塊的使用。
二、實驗內容
  • FPGAmemory模塊的生成及例化;
  • 點亮LCD,定點顯示學生姓名(最少2個漢字,最多14個漢字)
三、實驗步驟
  • 打開ISE8.2,新建lcd.ise工程文件;
  • 輸入所需的.v文件,生成對應的漢字字模CORE文件。設計實現整個工程。
  • 雙擊Configure Device (iMPACT)命令。彈出Welcome iMPACT對話框后,選擇Configure devices using Boundary-Scan(JTAG),單擊Finish按鈕;
  • 在彈出的器件添加對話中,第一個器件選擇bypass按鈕。最后一個器件單擊所要下載的載main.bit文件;
  • 單擊xc4vsx25這個device,變成綠色,且 iMPACT Processes 窗口出現可執行的操作;
  • 雙擊iMPACT Processes 窗口中的Program,或者直接右鍵單擊xc4vsx25這個device,選擇Program。彈出Programming Properties對話框,單擊OK按鈕;
  • 程序開始下載,如果下載程序成功則出現Program Succeeded,否則如果失敗則出現Program Failed,需要重新查找問題(嘗試重新下載或者斷電后重新下載程序);
  • 文件下載成功后,觀察lcd顯示(分組學生姓名定位顯示);
  • 記錄實驗現象,下課交報告。

完整的Word格式文檔51黑下載地址:
EDA實驗指導書.doc (1.18 MB, 下載次數: 23)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品网站 | 国产一级免费视频 | 亚洲午夜视频在线观看 | 999国产精品视频 | 国产激情网站 | 亚洲日本视频 | 国产精品久久久久久久久免费高清 | 四虎影院在线观看免费视频 | 国产精品国产三级国产播12软件 | 国产美女精品 | 久久青| 久久久久久久久久久久91 | 国产在线精品一区二区三区 | 久久久久国产一区二区三区 | 亚洲一区二区三区免费在线观看 | 成人av高清 | 久久久久久亚洲 | 亚洲精品乱码久久久久久按摩观 | 91网站在线观看视频 | 亚洲91精品 | 欧美一区二区三区在线观看 | 日韩精品久久久 | 欧美国产精品一区二区三区 | 久草视频在线播放 | 中文字幕综合 | 国产精品久久久亚洲 | 蜜桃久久 | 欧美精品一区二区免费 | 韩日有码| av毛片在线免费观看 | 亚洲综合日韩精品欧美综合区 | 亚洲一区久久 | 中文字幕成人 | 精品国产乱码久久久久久牛牛 | 免费成人毛片 | 久久久久久一区 | 欧美一级免费看 | 国产成人99久久亚洲综合精品 | 欧美日批 | 欧美日韩中文国产一区发布 | 欧美中文字幕在线观看 |