《EDA 实验指导书.doc》由会员分享,可在线阅读,更多相关《EDA 实验指导书.doc(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、EDA 实验指导书2011年9月30日目 录1. 实验一 LED实验 (验证性实验) 2. 实验二 LED点阵实验(综合性实验) 3. 实验三 LCD显示实验(设计性实验) 实验一:LED实验一、实验目的 1. 熟悉ISE8.2开发环境,掌握工程的生成方法;2. 熟悉SEED-XDTK_V4实验环境; 二、实验内容 1. 创建工程; 2. 添加HDL资源文件; 3. 配置一个应用程序完成设计。 三、实验准备 1. 通过USB口下载电缆将计算机的USB口及SEED-FEM025板的J9 连接好; 2. 启动计算机,打开SEED-XDTK_V4实验箱电源开关。观察SEED-FEM025板上的5V(
2、D11)的电源指示灯是否均亮。若有不亮的,请断开电源,检查电源。 四、实验步骤 1. 创建工程 1) 双击桌面Xilinx ISE8.2快捷方式打开ISE工程管理器(Project Navigator); 2) 打开Project Navigator后,选择File New Project,弹出新建工程对话框; 3) 在工程路径中单击“”按钮,将工程指定到如下目录D: 02. V4_lab,单击确定; 4) 在工程名称中输入led,点击Next按钮,如图1.1所示;图1.15) 弹出器件特性对话框。器件族类型(Device Family)选择“Virtex4”,器件型号(Device)选“XC
3、4VSX25 FF668 -10”,综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”,如图1.2; 图1.26) 单击Next按钮,弹出创建新资源(Create New Soure)对话框,可以使用这个对话框来创建新的HDL资源文件,或者也可以创建工程后,新建HDL资源文件,如图1.3; 图1.37) 单击Next按钮,弹出添加存在资源对话框;可以使用这个对话框来添加已经存在的HDL资源文件,或者也可以创建工程后,添加HDL资源文件;在本实验中我们采用创建工程后,添加HDL资源文件的方式,如图1.4
4、;图1.48) 单击Next按钮,将弹出工程建立完成对话框,单击finish按钮完成工程建立流程; 9) 观察工程资源管理窗口,将会看到工程已经建立成功,如图1.5。图1.52. 添加HDL资源文件1) 选择Project Add Source命令,弹出的文件添加对话框;或者右键单击Sources中的led弹出的文件添加对话框,如图1.6;图1.62) 在弹出的对话框中将文件添加路径指向D:02.V4_lab.2led文件夹下,选择led.v文件,单击Open按钮,如图1.7; 图1.73) 在弹出的对话框框中单击OK,如图1.8; 图1.84) 单击OK按钮。资源文件添加完成如图1.9。 图
5、1.93. 设计实现1) 在工程的资源操作窗(Processes),双击Implement Design; 如图1.10图1.102) 当设计实现(Implement Design)运行的过程中,展开设计实现命令(Implement Design),会看到实现过程中,首先是进行综合(Synthesis),然后才依次完成实现的步骤。4. 管脚约束实现与重新实现1) 工程的Sources窗口,右键单击Sources中的led.v文件,弹出的文件添加对话框,如图1.11;图1.112) 添加led.ucf文件,顺序与上述添加HDL资源文件相类似如图1.12-1.14; 图1.12 鼠标左键单击“打开
6、(O)”图1.13 鼠标左键单击“OK”图1.14 鼠标左键单击“led左侧”3) 在Processes窗口,扩展User Constraints并双击Assign Package Pins打开PACE,如图1.15;注意在PACE能启动之前必须先进行综合。 图1.154) 在PACE中浏览Design Object ListI/O Pins窗口,可看到所列的信号名称和信号方向是Output还是Input。在Loc栏里每个信号对应的FPGA的管脚。信号连接如下,在FPGA的管脚分配需查看原理图,如图1.16;CLK_IN: 管脚编号为AF12 LED_DATA0: 管脚编号为AD20 其余管脚
7、在此就不一一列出了。 图1.165) 在所有信号链接完成后,然后选择保存文件,如图1.17箭头所示位置; 图1.176) 在Device Architecture窗口放大直到可以看清每个管脚;如图1.18;注意:图中粉红色彩条说明管脚在同一个bank中。单击每个蓝色I/O管脚,则对应着Design Object ListI/O Pins窗口相应的管脚。 图1.187) 单击菜单栏中的File Exit,退出PACE; 8) 单击工程中Sources窗口中的led.ucf文件,然后双击Prosesses窗口中User Constraints目录下的Edit Constraints (Text),
8、就可以看到由PACE生成的led.ucf管脚约束文件;当然我们也可以使用该命令,直接在文本中编写led.ucf文件; 图1.199) 在工程的资源操作窗(Processes),双击Implement Design;对设计重新实现; 10) 本例程中led.ucf文件早已存在,我们可以使用上文介绍过的文件添加方式将led.ucf文件直接添加到工程文件中。 5. 下载配置FPGA 1) 在工程的Sources窗口单击顶层文件LED.v文件,展开Processes窗口中的Generate Programming File,双击Configure Device (iMPACT),如图1.20;图1.2
9、02) 弹出Welcome iMPACT对话框后,选择“Configure devices using Boundary-Scan(JTAG)”,单击Finish按钮,如图1.21; 图1.213) 在弹出的器件添加对话中,第一个器件选择bypass按钮,如图1.22;第二个器件也选择bypass按钮,如图1.23;图1.22图1.234) 最后一个器件单击所要下载的led.bit文件(此文件所在目录不可有中文),单击Open按钮,如图1.24;会弹出如图1.25的“Add Virtex-/II Pro/Virtex04.”对话框,单击OK按钮后弹出一个警告信息,单击OK按钮; 图1.24图1
10、.255) 单击xc4vsx25这个device,变成绿色,且 iMPACT Processes Operations窗口出现可执行的操作; 如图1.26和1.27图1.26图1.276) 在图1.27中,双击iMPACT Processes Operations窗口中的Program,或者在图1.26中,直接右键单击xc4vsx25这个device,选择Program。会弹出Programming Properties对话框,如图1.28所示,单击OK按钮; 图1.28程序开始下载,如果下载程序成功则出现Program Succeeded,否则如果失败则出现Program Failed,需要
11、重新查找问题(尝试重新下载或者断电后重新下载程序);7) 程序下载成功后,可观察到SEED-XDTK_MBOARD板卡上LED灯依次点亮。 五、实验程序led.vtimescale 1ns / 1ps/ Company: / Engineer: / Create Date:/ Design Name: / Module Name: led / Project Name: / Target Devices: / Tool versions: / Description: / Dependencies: / Revision: / Revision 0.01 - File Created/ Add
12、itional Comments: /define DIV_FACTOR 14h3f98module led(CLK_IN, nRST, CPLD_E,LED_DATA,AD_nCS,DA_nCS,USB_nCS,LCD_nCS ); input CLK_IN; input nRST; output 1:0 CPLD_E; output 7:0 LED_DATA;output USB_nCS;output AD_nCS;output DA_nCS;output LCD_nCS; reg CLK_OUT = 1b1;reg 7:0 LED_DATA =8h00;reg 13:0 DIV_coun
13、ter = 14h000;reg 11:0 clk_counter = 12h000; /CPLD功能切换assign CPLD_E = 2b10;/其他芯片功能禁止 assign USB_nCS = 1b1;assign AD_nCS = 1b1;assign DA_nCS = 1b1; assign LCD_nCS = 1b1;always(posedge CLK_IN) beginif(!nRST) beginCLK_OUT = 1b1;DIV_counter = 10h000; endelse beginif(DIV_counter = DIV_FACTOR ) beginDIV_co
14、unter = DIV_counter + 1; endelse beginDIV_counter = 12h000;CLK_OUT = !CLK_OUT; end end end always (posedge CLK_OUT) begin clk_counter = clk_counter+1; case(clk_counter) 12h001: LED_DATA=8h01; 12h17D: LED_DATA=8h02; 12h2fa : LED_DATA=8h04; 12h477: LED_DATA=8h08; 12h5f4: LED_DATA=8h10; 12h771: LED_DAT
15、A=8h20; 12h96e: LED_DATA=8h40; 12hb6b: LED_DATA=8h80; 12hce8: clk_counter = 10h000; default: clk_counter = clk_counter; endcase endendmodule六、思考题:1 FPGA的中英文全称各是什么?2 实验箱所用FPGA型号是什么?共有多少个引脚?引脚可以分为哪几类?3 概述对FPGA进行编程下载的流程。4 实验程序中,输入输出引脚各有几个?两个always块语句各自的作用是什么?实验二:LED点阵实验一、实验目的1. 熟悉ISE8.2开发环境,掌握工程的生成方法;
16、2. 熟悉SEED-XDTK_V4实验环境; 3. 了解HDL语言在FPGA中的使用; 4. 了解定时器的HDL实现。 二、实验内容1. 定时时钟设计; 2. LED点阵点亮。 三、实验说明 本实验的功能是将SEED-XDTK_MBOARD板上LED点阵点亮(合众达图标)。根据硬件原理,通过对FPGA的输入时钟进行分频,实现一个定时器,该定时器主要用于定时扫描控制SEED-XDTK_MBOARD板卡上的LED点阵。 SEED-XDTK_MBOARD板上LED点阵共有16*16点,既有16根控制线与16根数据线。 控制线用来选中一组LED灯,16根数据线用来点亮相应的LED灯。四、实验准备 1.
17、 通过USB 口下载电缆将计算机的USB 口及SEED-FEM025 板的J9 连接好;2. 启动计算机,打开SEED-XDTK_V4 实验箱电源开关。观察SEED-FEM025 板上的5V(D11)的电源指示灯是否均亮。若有不亮的,请断开电源,检查电源。五、实验步骤1、 打开ISE8.2,装载dot.ise工程文件; 注意:选择器件(Device)为“XC4VSX25 FF668 -10”其他步骤同实验一,请参考。2、 双击Configure Device (iMPACT)命令,打开iMPACT窗口; 3、 弹出Welcome iMPACT对话框后,选择“Configure devices
18、using Boundary-Scan(JTAG)”,单击Finish按钮; 4、 在弹出的器件添加对话中,第一个器件选择bypass按钮;第二个器件也选择bypass按钮;最后一个器件单击所要下载的dot.bit文件(此文件所在目录不可有中文),单击Open按钮,弹出“Add Virtex-/II Pro/Virtex04.”对话框,单击OK按钮后弹出一个警告信息,单击OK按钮; 5、 单击xc4vsx25这个device,变成绿色,且 iMPACT Processes Operations窗口出现可执行的操作; 6、 双击iMPACT Processes Operations窗口中的Pro
19、gram,或者直接右键单击xc4vsx25这个device,选择Program。弹出Programming Properties对话框,单击OK按钮; 7、 程序开始下载,如果下载程序成功则出现Program Succeeded,否则如果失败则出现Program Failed,需要重新查找问题(尝试重新下载或者断电后重新下载程序); 8、 程序下载成功后,观察LED点阵点亮(合众达图标)。 六、实验程序 dot.v/dot.v:程序顶层文件,对输入时钟进行分频,依次点亮相应的LED; /dot.ucf:FPGA用户约束文件。 timescale 1ns / 1ps/ Company: / En
20、gineer: / / 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 CL
21、K_IN;input nRST;output 1:0 CPLD_E;output 15:0 DOT_DATA;output 15:0DOT_CON;output USB_nCS;output AD_nCS;output DA_nCS;output LCD_nCS;reg CLK_OUT = 1b1;reg 15:0DOT_CON =16h0000;reg 15:0DOT_DATA =16h0000;reg 13:0 DIV_counter = 14h000;reg 3:0 cnt= 4h0; parameter DIV_FACTOR = 14h3f98;/CPLD功能切换assign CPLD
22、_E = 2b11;/其他芯片功能禁止 assign USB_nCS = 1b1;assign AD_nCS = 1b1;assign DA_nCS = 1b1; assign LCD_nCS = 1b1; /时钟分频always(posedge CLK_IN)beginif(!nRST)beginCLK_OUT = 1b1;DIV_counter = 10h000;endelsebeginif(DIV_counter = DIV_FACTOR )beginDIV_counter = DIV_counter + 1;endelsebeginDIV_counter = 12h000;CLK_OU
23、T = !CLK_OUT;endendend/点亮点阵 always(posedge CLK_OUT)begincnt = cnt+1;if(cnt = 4h0)beginDOT_CON = 16h8000;DOT_DATA = 16hd800;endelse if(cnt = 4h1) begin DOT_CON = 16h4000;DOT_DATA = 16h6c00;end else if(cnt = 4h2) beginDOT_CON = 16h2000;DOT_DATA = 16hb600; end else if(cnt = 4h3) begin DOT_CON = 16h1000
24、;DOT_DATA = 16hdb00;end else if(cnt = 4h4) begin DOT_CON = 16h0800;DOT_DATA = 16h6d80; end else if(cnt = 4h5) begin DOT_CON = 16h0400;DOT_DATA = 16h2480; end else if(cnt = 4h6) begin DOT_CON = 16h0200;DOT_DATA = 16h1240; end else if(cnt = 4h7) begin DOT_CON = 16h0100;DOT_DATA = 16h0920; end else if(
25、cnt = 4h8) begin DOT_CON = 16h0080;DOT_DATA = 16h0490;end else if(cnt = 4h9) begin DOT_CON = 16h0040;DOT_DATA = 16h0248;end else if(cnt = 4ha) begin DOT_CON = 16h0020;DOT_DATA = 16h0124; end else if(cnt = 4hb) begin DOT_CON = 16h0010;DOT_DATA = 16h0092;end else if(cnt = 4hc) beginDOT_CON = 16h0008;D
26、OT_DATA = 16h0000; endelse if(cnt = 4hd) beginDOT_CON = 16h0004;DOT_DATA = 16h0000;end else if(cnt = 4he) beginDOT_CON = 16h0002;DOT_DATA = 16h0000; end else if(cnt = 4hf) beginDOT_CON = 16h0001;DOT_DATA = 16h0000; end end endmodule七、思考题1、CLK_OUT是CLK_IN的几分频?2、.UCF文件是做什么用的?3、实验中的点阵LED是规格是什么?程序中用哪些引脚来
27、控制LED?实验三:LCD显示实验(一)一、实验目的1. 熟悉ISE8.2开发环境,掌握工程的生成方法; 2. 熟悉SEED-XDTK_V4实验环境; 3. 了解LCD的HDL实现; 4. 了解Memory模块的使用。 二、实验内容 1. FPGA的memory模块的生成及例化; 2. 系统时钟设计; 3. LCD点亮。 三、实验例程1、LCD芯片介绍LCD模块采用是LCM122326图形点阵模快,该模块是由2块NJU6450芯片构成,不带字库。其工作时序图如下图所示: LCD模块行列分配:LCD初始化如下所示 2 例程包含文件1) main.v:程序顶层文件,实现LCD的初始化以及液晶显示;
28、 2) v4_dcm.xaw:DCM的IP核,将外部输入时钟(50M)进行10分频; 3) CLK_DIV.v:系统运行时钟分频文件,将系统运行时间进行分频,提供100K的模块处理时钟; 4) LCD_DISPLAY.v:LCD初始化,以及数据显示文件; 5) LCD_WRITE.v:LCD写操作函数文件; 6) v2_lcd_ziku.xco:汉字字库存储文件; 7) main.ucf:FPGA用户约束文件。 /main.vtimescale 1ns / 1psmodule main(CLK, nPROCESSOR_RESET_Z, D, LCD_E, LCD_A0, LCD_R_nW, L
29、CD_LED, LCD_nCS, CPLD_E, AD_nCS, DA_nCS, USB_nCS,); input CLK;/100M aj15 input nPROCESSOR_RESET_Z;/ah5 inout 7:0 D; output 1:0 LCD_E; output LCD_A0; output LCD_R_nW; output LCD_LED; output LCD_nCS; output 1:0 CPLD_E; output AD_nCS; output DA_nCS; output USB_nCS;wire CLK_LOCKED;wire 7:0 DATA_OUT;wire
30、 CLK_100K;parameter DIV_FACTOR = 100;/LCD功能始能assign LCD_nCS = 1b0;/CPLD功能切换 assign CPLD_E = 2b11;/其他芯片功能禁止 assign AD_nCS = 1b1;assign DA_nCS = 1b1;assign USB_nCS = 1b1;/系统时间分频/输入 50M 输出10Mv4_dcm CLK_DIV_10M ( .CLKIN_IN(CLK), .RST_IN(!nPROCESSOR_RESET_Z), .CLKDV_OUT(CLK_10M), .CLKIN_IBUFG_OUT(), .CLK
31、0_OUT(), .LOCKED_OUT(CLK_LOCKED) );/模块时间分频/输入 10M 输出100KCLK_DIV CLK_DIV_100K ( .CLK_IN(CLK_10M), .nRST(CLK_LOCKED), .CLK_OUT(CLK_100K) );defparam CLK_DIV_100K.DIV_FACTOR = DIV_FACTOR;/ LCD TEST/reg r_nw = 1b1;reg 6:0 zimo_num = 7h00;reg 6:0 mem_addr = 7h00;reg lcd_en = 1b0;reg 6:0 col_addr = 121;reg
32、 1:0 page_addr = 2b11;reg 4:0 disp_addr = 5h00;wire 7:0 lcd_data;wire lcd_done;reg 16:0 tLCD_counter = 17h00000;LCD_DISPLAY LCD (/输入参数 .CLK(CLK_100K), .R_nW(r_nw), .DISP_ADDR(disp_addr), .PAGE(page_addr), .COL_ADDR(col_addr), .DISP_DATA(lcd_data), /输出参数 .LCD_E(LCD_E), .LCD_A0(LCD_A0), .LCD_R_nW(LCD_
33、R_nW), /输入、出参数 .LCD_DB(D), /输出参数 .LCD_LED(LCD_LED), .DATA_OUT(), .DONE(lcd_done) );v4_lcd_ziku ZIMO(.addr(mem_addr),.clk(CLK_100K),.dout(lcd_data),.en(lcd_en);always(posedge CLK_100K) beginif(tLCD_counter = 17h0c350)/0.5s begindisp_addr = disp_addr - 1; /显示地址tLCD_counter = 17h00000; endelse begintLC
34、D_counter = tLCD_counter + 1; end if(!lcd_done) beginr_nw = 1b0;lcd_en = 1b0; endelse begin r_nw = 1b1;if(!r_nw) beginlcd_en = 1b1;mem_addr = zimo_num;if(zimo_num = 95)zimo_num = 0;elsezimo_num = zimo_num + 1;case(zimo_num)0: begincol_addr = 23;page_addr = 2b00; end16: begincol_addr = 23;page_addr =
35、 2b01; end32: begincol_addr = 68;page_addr = 2b00; end48: begincol_addr = 68;page_addr = 2b01; end64: begincol_addr = 113;page_addr = 2b00; end80: begincol_addr = 113;page_addr = 2b01; enddefault:col_addr = col_addr - 1;endcase endelse beginlcd_en = 1b0; end end endendmodule3 模块划分图 4 Memory 模块的建立及其例
36、化1、 双击Processes窗口中的Creat New Source,弹出新资源向导窗口; 2、 在弹出新资源向导窗口,选择IP (CoreGen & Architecture Wizard),在File name 栏里输入v4_lcd_ziku; 3、 单击Next按钮,弹出Select IP窗口,依次展开Memories & Storage Element和RAMs & ROMs目录,选择Sigle Port Block Memory V6.2; 4、 单击Next按钮,显示新建资源信息,单击Finish按钮; 5、 弹出Sigle Port Block Memory窗口,在Port C
37、onfiguration选项卡中选中Read Only;Memory Size选项卡中Width 填写8。Depth填写96;Write Mode 选项卡中选中Read After Write;单击Next命令; 6、 单击Next按钮,Primitive Selection选项卡中选中 Optimize For Area,Design Options选项卡中选中 Enable Pin,Output Register Options 选项卡中 Additional Output Pins Stages 填写 0,单击next命令;7、 单击Next按钮,不选中Implementation Op
38、tion选项卡;管脚极性选项卡中选择上升沿有效或者高电平有效;8、 单击Next按钮,Simulation Mode Options选项卡中选中Disable Waring Messages;Initial Contents选项卡中 Global init Value 填写 0,选中 Load Init File添加hezhongda.coe(路径为D:02.V4_lab lcdcoe); 9、 单击 Generate 命令,生成v4_lcd_ziku.xco文件;10、Memory模块的例化与DCM模块例化方法一致,请参考键盘实验中关于该部分的内容。下图中,黑色部分为Memory模块的例化语
39、句。 四、实验准备1. 将光盘下03. Examples of Program02. V4_lab文件夹拷贝到D:盘根目录下; 2. 通过USB口下载电缆将计算机USB口及SEED-FEM025板的J9 连接好; 3. 启动计算机,打开SEED-XDTK_V4实验箱电源开关。观察SEED-FEM025板上的5V(D11)的电源指示灯是否均亮。若有不亮的,请断开电源,检查电源。 五、实验步骤 1. 打开ISE8.2,装载lcd.ise工程文件; 2. 双击Configure Device (iMPACT)命令。弹出Welcome iMPACT对话框后,选择“Configure devices using Boundary-Scan(JTAG)”,单击Finish按钮; 3. 在弹出的器件添加对话中,第一个器件选择bypass按钮。最后一个器件单击所要下载的载main.bit文件; 4. 单击xc4vsx25这个device,变成绿色,且 iMPACT Processes 窗口出现可执行的操作; 5. 双击iMPACT Processes 窗口中的Program,或者直接右键单击xc4vsx25这个device,选择Pr
限制150内