基于 HDL 的设计输入

52
该该该该该该 <<EDA 该该该 VHDL>> 该该该该该该该 一书 该该该该 , 该该该该该该该该该该 该该 该该 HDL HDL 该该该该该 该该该该该 该该 该该 2011.09 2011.09

description

基于 HDL 的设计输入. 何宾 2011.09. 基于 HDL 的设计输入 - 本章概要. 该章主要是通过一个设计实例介绍基于 HDL 的设计流 程。 通过这个设计实例,读者可以掌握基于 HDL 语言的基 本设计流程。这个设计基于 HDL 语言和 IP 核。 本章是 HDL 基本设计流程的第一部分,当设计输入完 成后,应依次完成行为仿真、设计实现(翻译、映射和布 局布线)、时序仿真、下载和配置的基本设计流程。. 基于 HDL 的设计输入 - 软件环境. 下图给出了 ISE 的主界面窗口。 ISE 主界面分为 4 个子窗口。. - PowerPoint PPT Presentation

Transcript of 基于 HDL 的设计输入

Page 1: 基于 HDL 的设计输入

该电子教案为 <<EDA 原理及 VHDL>> 一书的配套教学资源版权所有 , 不得用于其它商业用途

基于基于 HDLHDL 的设计输入的设计输入

何宾何宾2011.092011.09

Page 2: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 本章概要本章概要

该章主要是通过一个设计实例介绍基于该章主要是通过一个设计实例介绍基于 HDLHDL 的设计流的设计流程。程。 通过这个设计实例,读者可以掌握基于通过这个设计实例,读者可以掌握基于 HDLHDL 语言的基语言的基本设计流程。这个设计基于本设计流程。这个设计基于 HDLHDL 语言和语言和 IPIP 核。核。 本章是本章是 HDLHDL 基本设计流程的第一部分,当设计输入完基本设计流程的第一部分,当设计输入完成后,应依次完成行为仿真、设计实现(翻译、映射和布成后,应依次完成行为仿真、设计实现(翻译、映射和布局布线)、时序仿真、下载和配置的基本设计流程。局布线)、时序仿真、下载和配置的基本设计流程。

Page 3: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境

下图给出了下图给出了 ISEISE 的主界面窗口。的主界面窗口。 ISEISE 主界面分为主界面分为 44

个子窗口。个子窗口。

Page 4: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境 左上角的窗口是源文件窗口,设计工程所包括的文件左上角的窗口是源文件窗口,设计工程所包括的文件以分层的形式列出。以分层的形式列出。 在该子窗口的下面是处理窗口,该窗口描述的是对于在该子窗口的下面是处理窗口,该窗口描述的是对于选定的设计文件可以使用的处理流程。选定的设计文件可以使用的处理流程。 在在 ISEISE 主界面最下面是脚本窗口,在该窗口中显示了主界面最下面是脚本窗口,在该窗口中显示了消息、错误和警告的状态。同时还有消息、错误和警告的状态。同时还有 TclTcl 脚本的交互和文脚本的交互和文件中查找的功能。件中查找的功能。 在在 ISEISE 的右上角是多文档的窗口,在该窗口可以查看的右上角是多文档的窗口,在该窗口可以查看htmlhtml 的报告,的报告, ASCIIASCII 码文件、原理图和仿真波形。通过选码文件、原理图和仿真波形。通过选择择 View->Restore Default LayoutView->Restore Default Layout 可以恢复界面的原始设可以恢复界面的原始设置。置。

Page 5: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境 11 、源文件(、源文件( sourcesource )子窗口)子窗口 这个窗口有三个标签:源(这个窗口有三个标签:源( SourceSource )、)、 SnapshotsSnapshots (快(快照)、照)、 LibraryLibrary (库)。(库)。 源标签内显示工程名、指定的芯片和设计有关的文源标签内显示工程名、指定的芯片和设计有关的文档。在设计视图的每一个文件都有一个相关的图标,这个档。在设计视图的每一个文件都有一个相关的图标,这个图标显示的是文件的类型(图标显示的是文件的类型( HDLHDL 文件、原理图、文件、原理图、 IPIP 核和核和

文文本文件)。‘本文件)。‘ +’+’ 表示该设计文件包含了更低层次的设计模表示该设计文件包含了更低层次的设计模块。块。 标签内显示的是目前所打开文件快照。一个快照是在标签内显示的是目前所打开文件快照。一个快照是在该工程里所有文件的一个拷贝。通过该标签可以察看报该工程里所有文件的一个拷贝。通过该标签可以察看报告、用户文档和源文件。在该标签下所有的信息都是只读告、用户文档和源文件。在该标签下所有的信息都是只读的的 . . 库标签内显示与当前打开工程相关的库。库标签内显示与当前打开工程相关的库。

Page 6: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境 22 、处理(、处理( processprocess )子窗口)子窗口 在该窗口只有一个处理标签。该标签有下列功能:在该窗口只有一个处理标签。该标签有下列功能:

增加已有文件;增加已有文件; 创建新文件;创建新文件; 察看设计总结(访问符号产生工具,例化模板,察看察看设计总结(访问符号产生工具,例化模板,察看命令行历史和仿真库编辑);命令行历史和仿真库编辑); 用户约束文件(访问和编辑位置和时序约束);用户约束文件(访问和编辑位置和时序约束); 综合(检查语法、综合、察看综合(检查语法、综合、察看 RTLRTL 和综合报告);和综合报告); 设计实现(访问实现工具,设计流程报告和其它一些设计实现(访问实现工具,设计流程报告和其它一些

工具);工具); 产生可编程文件(访问配置工具和产生比特流文件)产生可编程文件(访问配置工具和产生比特流文件)

Page 7: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境 33 、脚本(、脚本( transcripttranscript )子窗口)子窗口 脚本子窗口有脚本子窗口有 55 个缺省的标签个缺省的标签 :Console:Console ,, errorerror , , warnings warnings , , Tcl shellTcl shell ,, find in filefind in file 。。 1) Console1) Console 标签显示错误、警告和信息。标签显示错误、警告和信息。 XX 表示错表示错误,!表示警告。误,!表示警告。 2) Warning2) Warning 标签只显示警告消息。标签只显示警告消息。 3) Error3) Error 标签只显示错误消息。标签只显示错误消息。 4) Tcl shell4) Tcl shell 标签是与设计人员的交互控制台。除了显标签是与设计人员的交互控制台。除了显示错误、警告和信息外,还允许设计人员输入示错误、警告和信息外,还允许设计人员输入 ISEISE 特定命特定命令。令。 5) Find in file5) Find in file 标签显示的是选择标签显示的是选择 Edit>Find in FileEdit>Find in File 操作后操作后的查询结果。的查询结果。

Page 8: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境 44 、工作区(、工作区( WorkspaceWorkspace )子窗口)子窗口 工作区子窗口提供了设计总结、文本编辑器、工作区子窗口提供了设计总结、文本编辑器、 ISEISE 仿仿真器真器 // 波形编辑器、原理图编辑器功能。波形编辑器、原理图编辑器功能。 设计总结提供了关于该设计工程的更高级信息,包括设计总结提供了关于该设计工程的更高级信息,包括信息概况、芯片资源利用报告、与布局布线相关性能数信息概况、芯片资源利用报告、与布局布线相关性能数据、约束信息和总结信息等。据、约束信息和总结信息等。 源文件和其它文本文件可以通过设计人员指定的编辑源文件和其它文本文件可以通过设计人员指定的编辑工具打开。编辑工具的选择由工具打开。编辑工具的选择由 Edit->PreferenceEdit->Preference 属性决定,属性决定,缺省的是缺省的是 ISEISE 的文本编辑器,通过该编辑器可以编辑源文的文本编辑器,通过该编辑器可以编辑源文件和用户文档,也可以访问语言模板。件和用户文档,也可以访问语言模板。

Page 9: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 软件环境软件环境

通过通过 ISEISE 仿真器和波形编辑器创建和仿真测试平台。波仿真器和波形编辑器创建和仿真测试平台。波形编辑器提供了图形化的激励源和期望响应输出,然后产形编辑器提供了图形化的激励源和期望响应输出,然后产生使用生使用 VHDL/VerilogVHDL/Verilog 语言描述的测试平台。语言描述的测试平台。 原理图编辑器集成在原理图编辑器集成在 ISEISE 中,原理图编辑器是采用图形中,原理图编辑器是采用图形的方式创建和查看逻辑设计。的方式创建和查看逻辑设计。

Page 10: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

在建立工程前,需要将示例文件从光盘上拷到创建工在建立工程前,需要将示例文件从光盘上拷到创建工程的路径下。该设计完成一个比赛用的秒表计时器(设计程的路径下。该设计完成一个比赛用的秒表计时器(设计文件通过文件通过 http://http://china.xilinx.com/support/techsup/tutorialschina.xilinx.com/support/techsup/tutorials /tutorials11.htm/tutorials11.htm资源下载)。资源下载)。 11 、在桌面上,双击、在桌面上,双击 ISE 11ISE 11 的图标或者在开始菜单的图标或者在开始菜单 ->-> 所所有程序有程序 ->Xilinx ISE11->Project Navigator->Xilinx ISE11->Project Navigator 。在。在 ISEISE 主界面中主界面中选择选择 File->New ProjectFile->New Project 。如图。如图 6.26.2 所示,桌面出现下面的界所示,桌面出现下面的界面;面;

Page 11: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

Page 12: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

22 、在、在 Project LocationProject Location域内,给出保存工程的路径;域内,给出保存工程的路径; 33 、在、在 Project nameProject name域内,给出工程名域内,给出工程名 wtut_vhdwtut_vhd ;; 44 、在、在 Top-Level Source TypeTop-Level Source Type域内,选择域内,选择 HDLHDL ,单击下,单击下一步。出现图一步。出现图 6.36.3 图形界面。图形界面。 55 、在、在 Device PropertiesDevice Properties 界面中,选择合适的产品范围界面中,选择合适的产品范围(( product categoryproduct category )、芯片的系列()、芯片的系列( FamilyFamily )、具体的芯)、具体的芯片型号(片型号( DeviceDevice )、封装类型()、封装类型( PackagePackage )、速度信息)、速度信息(( speedspeed ),此外,在该界面中还要选择综合工具),此外,在该界面中还要选择综合工具(( Synthesis ToolSynthesis Tool )、仿真工具()、仿真工具( SimulatorSimulator )和设计语言)和设计语言(( Preferred LanguagePreferred Language )。图)。图 6.36.3 给出了示例中的参数配置;给出了示例中的参数配置;

Page 13: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

Page 14: 基于 HDL 的设计输入

第第 66 章 基于章 基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

66 、连续两次用鼠标点击下一步按钮,出现图、连续两次用鼠标点击下一步按钮,出现图 6.46.4添加添加源文件的界面;源文件的界面;

Page 15: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

在该界面中,点击“在该界面中,点击“ Add Source”Add Source”按钮。添加下列文按钮。添加下列文件:件: clk_div_262k,lcd_control, statmach, stopwatchclk_div_262k,lcd_control, statmach, stopwatch ,并单击,并单击openopen按钮;按钮; 77 、单击下一步按钮,然后完成新工程的建立;、单击下一步按钮,然后完成新工程的建立; 88 、在确认所有的设计文件和、在确认所有的设计文件和 Synthesis/Imp+SimulationSynthesis/Imp+Simulation 关关联后,单击联后,单击 okok ;;

Page 16: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 工程建立工程建立

在 Adding Source Files… 界面

Page 17: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 设计描述设计描述

在该设计中,采用了层次化的、基于在该设计中,采用了层次化的、基于 VHDLVHDL 语言的设语言的设计流程。表明该设计的顶层文件是由计流程。表明该设计的顶层文件是由 VHDLVHDL 语言生成,而语言生成,而顶层文件以下的其它模块可以用顶层文件以下的其它模块可以用 VHDLVHDL 、原理图或、原理图或 IPIP 核生核生成。成。 该章将要对一个还没有设计完成的工程进行进一步的该章将要对一个还没有设计完成的工程进行进一步的处理,直到最终完成这个设计。通过这个设计流程,读者处理,直到最终完成这个设计。通过这个设计流程,读者可以完成并且产生其它模块。当设计完成后,就可以通过可以完成并且产生其它模块。当设计完成后,就可以通过仿真验证设计的正确性仿真验证设计的正确性。。

Page 18: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 设计描述设计描述

11 、该设计有下面的输入信号:、该设计有下面的输入信号: strtstopstrtstop :启动和停止秒表;:启动和停止秒表; resetreset :复位秒表:复位秒表 0000 :: 0000 :: 0000 状态,且秒表在时钟模式状态,且秒表在时钟模式

下;下; clkclk :外部输入时钟信号;:外部输入时钟信号; modemode :控制时钟和秒表模式。只有当时钟或定时器处于:控制时钟和秒表模式。只有当时钟或定时器处于 未计数状态时,该信号才起作用;未计数状态时,该信号才起作用; lap_loadlap_load :这个信号有两个功能。在时钟模式下,显示当:这个信号有两个功能。在时钟模式下,显示当 前的时钟值。在定时器模式下,当定时器没有计数时,前的时钟值。在定时器模式下,当定时器没有计数时, 从从 ROMROM 中加载预设的值并显示;中加载预设的值并显示;

Page 19: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 设计描述设计描述

22 、该设计有下面的输出信号:、该设计有下面的输出信号: lcd_elcd_e ,, lcd_rslcd_rs ,, lcd_rwlcd_rw :这些控制信号用于控:这些控制信号用于控

制制LCDLCD 的显示;的显示; sf_d[7:0]sf_d[7:0] :向:向 LCDLCD 显示提供并行数据;显示提供并行数据;

Page 20: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 设计描述设计描述

33 、该设计有以下功能模块:、该设计有以下功能模块: clk_div_262kclk_div_262k :将输入时钟进行:将输入时钟进行 262144262144 的分频,将的分频,将

26.2144MH26.2144MH 时钟转换成占空比为时钟转换成占空比为 50%50% 的的 100Hz100Hz 时钟信号。时钟信号。 DCM1DCM1 :数字时钟管理器的:数字时钟管理器的 IPIP 核,提供内部时钟反核,提供内部时钟反馈、频率的输出控制和占空比的修正。馈、频率的输出控制和占空比的修正。 CLKFX_OUTCLKFX_OUT将将50MHz50MHz 的时钟转换为的时钟转换为 26.2144MHz26.2144MHz 时钟输出。时钟输出。 DebounceDebounce :原理图模块实现秒表的:原理图模块实现秒表的 strstopstrstop ,, modemode ,,

lap_loadlap_load 信号的去抖动。信号的去抖动。 lcd_controllcd_control :对:对 LCDLCD 的初始化和的初始化和 LCDLCD 的显示进行的显示进行

控制。控制。

Page 21: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 设计描述设计描述

statmachstatmach :在状态图(:在状态图( State Digram)State Digram) 编辑器中定义和实现编辑器中定义和实现状态机模块,并控制秒表。状态机模块,并控制秒表。

timer_presettimer_preset :通过核产生器(:通过核产生器( core generatorcore generator )产)产生生 64X2064X20 的的 ROMROM ,这个,这个 ROMROM 在在 00:00:0000:00:00到到 9:59:599:59:59 的的范围内保存了范围内保存了 6464 个预设置的时间。个预设置的时间。 time_cnttime_cnt :在:在 0:00:000:00:00到到 09:59:5909:59:59 的范围内以的范围内以 up/downup/down

模式工作的计数器。这个模块有模式工作的计数器。这个模块有 55 个个 44 比特的输出,用比特的输出,用来描述当前秒表的输出数字。来描述当前秒表的输出数字。

Page 22: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --添加设计和检查添加设计和检查

在这个例子的完成过程中,将对在这个例子的完成过程中,将对 HDLHDL 文件进行检查,文件进行检查,修改语法错误,并建立一个修改语法错误,并建立一个 VHDLVHDL 模块,添加模块,添加 IPIP 核和时钟核和时钟模块,通过使用混合设计方法完成所有设计输入流程。所模块,通过使用混合设计方法完成所有设计输入流程。所有后面的设计流程都基于这个设计示例完成。有后面的设计流程都基于这个设计示例完成。 图图 6.56.5 显示的是上面的工程建立完成后,在显示的是上面的工程建立完成后,在 ISEISE 主界面主界面的的 sourcesource 子窗口的界面。从该图可以看到在设计工程中虽子窗口的界面。从该图可以看到在设计工程中虽然已经例化了然已经例化了 timer_cnttimer_cnt 模块,但没有该模块的模块,但没有该模块的 HDLHDL 的描述的描述(文件旁有“?”标识)。为了添加该文件并进行检查,按(文件旁有“?”标识)。为了添加该文件并进行检查,按照下面的步骤将完成添加该文件并进行语法检查。照下面的步骤将完成添加该文件并进行语法检查。

Page 23: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --添加设计和检查添加设计和检查

11 、选择、选择 project->Add Sourceproject->Add Source ,选择并打开,选择并打开 time_cnt.vhdtime_cnt.vhd

文件,确保该模块与文件,确保该模块与 Synthesis/Imp+SimulationSynthesis/Imp+Simulation 选项关联,选项关联,并单击并单击 okok按钮;按钮; 22 、对该设计文件进行语法检查。在、对该设计文件进行语法检查。在 sourcesource 子窗口,选子窗口,选择择 time_cnt.vhdtime_cnt.vhd 文件。在文件。在 processprocess 子窗口单击‘子窗口单击‘ +’+’ ,展开,展开Design UtilityDesign Utility ,并双击,并双击 Check SyntaxCheck Syntax ;;

Page 24: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --添加设计和检查添加设计和检查

33 、在检查语法的过程中,在、在检查语法的过程中,在 TranscriptTranscript 子窗口中出子窗口中出现现 44 个错误信息的提示。根据错误的提示信息修个错误信息的提示。根据错误的提示信息修改文件,并保存,然后再次进行检查,直到没有改文件,并保存,然后再次进行检查,直到没有语法错误为止。并保存文件。语法错误为止。并保存文件。

图 6.5 新建工程的源文件窗口

Page 25: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

本节将介绍使用本节将介绍使用 ISEISE 的文本编辑器的文本编辑器 VHDLVHDL 语言创建模快。语言创建模快。使用使用 VHDLVHDL 语言创建的模块用于该秒表的去抖动功能。语言创建的模块用于该秒表的去抖动功能。 11 、选择、选择 Project>New SourceProject>New Source ,弹出图,弹出图 6.66.6 的窗口,新文的窗口,新文件建立的导向窗口。件建立的导向窗口。

Page 26: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的模的模块块

图 6.6 新建文件窗口

IP核生成向导实现约束文件 原理图状态图 仿真波形平台

Verilog模块Verilog测试模块 VHDL模块VHDL库VHDL包VHDL测试模块

在线逻辑分析仪

嵌入式处理

Page 27: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的模的模块块

在窗口左边选择在窗口左边选择 VHDL ModuleVHDL Module ,在,在 File nameFile name 下面下面的输入框输入的输入框输入 debouncedebounce 文件名,然后点击下一步,出现文件名,然后点击下一步,出现新文件向导对话框,此时可以进行下列选择,可以通过新文件向导对话框,此时可以进行下列选择,可以通过该向导输入端口的名字和方向,选择是否总线,如果是该向导输入端口的名字和方向,选择是否总线,如果是总线,还需要指明宽度。读者也可以在总线,还需要指明宽度。读者也可以在 HDLHDL 文件中自己文件中自己输入,当使用在输入,当使用在 VHDLVHDL 中手工添加这种方式的时候,直中手工添加这种方式的时候,直接单击接单击 nextnext按钮即可;否则需要在该界面内指定端口参按钮即可;否则需要在该界面内指定端口参数。最后,单击完成(数。最后,单击完成( finishfinish )按钮生成新文件;)按钮生成新文件;

Page 28: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

新建文件向导窗口

Page 29: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

22 、如图、如图 6.86.8 所示,在所示,在 ISEISE 的工作区空间,给出使用的工作区空间,给出使用ISEISE 文件编辑器打开的文件编辑器打开的 debounce.vhddebounce.vhd 文件。可以看文件。可以看出,出, XilinxXilinx 的的 ISEISE 工具生成了工具生成了 VHDLVHDL 基本结构框架,基本结构框架,这也是这也是 ISEISE 具有强大设计功能的体现;具有强大设计功能的体现;

Page 30: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

图 6.8 ISE 的文件编辑器界面

Page 31: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

下面需要的是下面需要的是 EDAEDA 设计人员需要将结构体空缺的下设计人员需要将结构体空缺的下面面

的代码的添加到结构体中间。的代码的添加到结构体中间。 architecture debounce_arch of debounce isarchitecture debounce_arch of debounce is signal int1, int2, int3 : std_logic;signal int1, int2, int3 : std_logic; beginbegin sig_out<=sig_in or int1 or int2 or int3;sig_out<=sig_in or int1 or int2 or int3; process (clk) isprocess (clk) is beginbegin

Page 32: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -- 创建基于创建基于 HDLHDL 的的模块模块

if rising_edge(clk) thenif rising_edge(clk) then int1 <= sig_in; int1 <= sig_in; int2 <= int1;int2 <= int1; int3 <= int2;int3 <= int2; end if;end if; end process;end process; end debounce_arch;end debounce_arch;

输入完毕并保存文件,并对该设计文件按照前面的方输入完毕并保存文件,并对该设计文件按照前面的方法进行语法规则检查,直到综合完成为止,在综合过程法进行语法规则检查,直到综合完成为止,在综合过程如果出现错误,则需要对输入的设计文件进行检查。如果出现错误,则需要对输入的设计文件进行检查。

Page 33: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 - IP- IP 核产生和例化核产生和例化

IPIP 核生成器(核生成器( IP core generatorIP core generator )是一个用户图形交互界)是一个用户图形交互界面工具,通过核产生器可以产生高层次设计模块,例如:面工具,通过核产生器可以产生高层次设计模块,例如:存储器、数学函数、通讯和存储器、数学函数、通讯和 I/OI/O接口的接口的 IPIP 核。设计人员可核。设计人员可以定制和优化这些以定制和优化这些 IPIP 核,这些核,这些 IPIP 核充分利用核充分利用 XilinxXilinx 的的 FPGAFPGA

结构特征,例如:快速进位逻辑、结构特征,例如:快速进位逻辑、 SRL16sSRL16s 和分布式块和分布式块RAMRAM等。等。

Page 34: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

在本节中,通过在本节中,通过 IPIP 核产生器生成核产生器生成 timer_presettimer_preset 模块。该模模块。该模块存储了块存储了 6464 个值,这些值将来加载到定时器中。个值,这些值将来加载到定时器中。 11 、在、在 ISEISE 主界面中选择主界面中选择 Project->New SourceProject->New Source ,弹出,弹出 New New Source WizardSource Wizard 窗口,在该窗口中选择窗口,在该窗口中选择 IPIP (( Coregen & Coregen & Architecture WizardArchitecture Wizard ),在),在 File name fieldFile name field 中输入中输入timer_presettimer_preset 文件名,点击文件名,点击 nextnext按钮;按钮; 22 、在弹出的、在弹出的 New Source Wizard Select IPNew Source Wizard Select IP 窗口,选择窗口,选择Memory & Storage ElementsMemory & Storage Elements 。如图。如图 6.96.9 所示,在该界面中选所示,在该界面中选择”择” RAMs & ROMs”RAMs & ROMs” ,在展开项中选择,在展开项中选择 distributed Memory distributed Memory GeneratorGenerator ,点击,点击 nextnext 和和 finishfinish按钮;按钮;

Page 35: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

33 、弹出、弹出 6.106.10 的界面,在该界面中选择的界面,在该界面中选择 ROMROM 的的 DepthDepth ,,将其设置为将其设置为 6464 ,然后选择,然后选择 Data WidthData Width ,将其设置为,将其设置为 2020 ,然,然后将存储器的类型后将存储器的类型 Memory TypeMemory Type 设置为设置为 ROMROM ,点击下一,点击下一步;步; 44 、将、将 Input optionsInput options 和和 Output optionsOutput options 设置为设置为 Non Non RegisteredRegistered (表示输入和输出不需要通 过锁存器进行锁(表示输入和输出不需要通 过锁存器进行锁存,可以看到在该界面窗口的左面的存,可以看到在该界面窗口的左面的 a[5:0]a[5:0] 和和 spo[19:0]spo[19:0]呈呈黑色显示,其余引脚呈灰色显示(黑色表示引脚在该次设黑色显示,其余引脚呈灰色显示(黑色表示引脚在该次设计中有效,灰色表示引脚在该次设计中无效);单击计中有效,灰色表示引脚在该次设计中无效);单击finishfinish按钮。在按钮。在 IPIP 核产生器生成核产生器生成 IPIP 核后,产生下面的文件,核后,产生下面的文件,下面对这些文件的含义进行一些说明:下面对这些文件的含义进行一些说明:

Page 36: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

图 6.9 IP 选择界面

Page 37: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

图 6.10 分布式 IP 核产生器设置界面

Page 38: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

5. 5. 在该界面中,在“在该界面中,在“ Cofficients File”Cofficients File” 选项后,点击选项后,点击““Browse”Browse”按钮,在工程路径下选择按钮,在工程路径下选择 definition1_timws.coedefinition1_timws.coe

文件作为该存储器的系数文件,用来给存储器写初始文件作为该存储器的系数文件,用来给存储器写初始值。值。

Page 39: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成

图 6.12 核生成器 - 分布式存储器生成器定制 GUI 界面

Page 40: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的生模块的生成成 timer_preset.vho/timer_preset.veotimer_preset.vho/timer_preset.veo 文件,这些文件是该文件,这些文件是该 IPIP核的例化模板,通过这个例化模板就可以将核的例化模板,通过这个例化模板就可以将 IPIP 核添加到该核添加到该设计中。设计中。 timer_preset.vhd/timer_preset.vtimer_preset.vhd/timer_preset.v 文件,这些文件是文件,这些文件是 IPIP 核生核生成的包装文件只用来仿真。成的包装文件只用来仿真。 timer_preset.edntimer_preset.edn 文件,该文件是网表文件,该文件在进文件,该文件是网表文件,该文件在进行网表翻译过程中使用。行网表翻译过程中使用。 timer_preset.xcotimer_preset.xco 文件,该文件保存了该模块的配置信文件,该文件保存了该模块的配置信息,该文件作为源文件使用。息,该文件作为源文件使用。 timer_preset.miftimer_preset.mif 文件,该文件提供了为文件,该文件提供了为 ROMROM 仿真时的初仿真时的初始设置。始设置。

Page 41: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --timer_presettimer_preset 模块的例模块的例化化 当当 IPIP 核生成后,下面将在设计中调用生成的核生成后,下面将在设计中调用生成的 IPIP 核。核。 1) 1) 在工程管理窗口,双击在工程管理窗口,双击 stopwatch.vhdstopwatch.vhd 文件,将其打文件,将其打开。开。 2) 2) 将光标移动到将光标移动到 --Insert Core Generator ROM component --Insert Core Generator ROM component declaration heredeclaration here 。。 3) 3) 在在 ISEISE 中选择中选择 File->openFile->open 选项选项 ,, 选择选择 timer_preset.vhotimer_preset.vho ,,并并

打开。打开。 4) 4) 将将 VHDLVHDL 的声明部分代码复制,并通过粘贴插入到光的声明部分代码复制,并通过粘贴插入到光标所指的那一行下面。标所指的那一行下面。

Page 42: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --timer_presettimer_preset 模块的例模块的例化化

component timer_presetcomponent timer_presetport (port ( a: IN std_logic_VECTOR(5 downto 0);a: IN std_logic_VECTOR(5 downto 0); spo: OUT std_logic_VECTOR(19 downto 0));spo: OUT std_logic_VECTOR(19 downto 0));

end component;end component;-- Synplicity black box declaration-- Synplicity black box declarationattribute syn_black_box : boolean;attribute syn_black_box : boolean;attribute syn_black_box of timer_preset: component is tattribute syn_black_box of timer_preset: component is t

rue;rue;

Page 43: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 --timer_presettimer_preset 模块的例模块的例化化

5. 5. 将该文件的例化部分的代码复制。将该文件的例化部分的代码复制。 your_instance_name : timer_presetyour_instance_name : timer_preset

port map (port map (

a => a,a => a,

spo => spo);spo => spo);

Page 44: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -timer_preset-timer_preset 模块的例化模块的例化

66 、然后,粘贴到设计的顶层文件的例化部分,然、然后,粘贴到设计的顶层文件的例化部分,然后通过端口映射将该模块和设计相连。后通过端口映射将该模块和设计相连。 t_preset : timer_presett_preset : timer_preset port map (port map ( a(5 downto 0)=> address(5 downto 0),a(5 downto 0)=> address(5 downto 0), spo(19 downto 0)=> preset_time(19 downto 0)spo(19 downto 0)=> preset_time(19 downto 0) );); 通过上面的步骤,该通过上面的步骤,该 IPIP 核模块就添加到该设计文核模块就添加到该设计文

件件中了。中了。

Page 45: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的生模块的生成成

DCMDCM 模块即数字时钟管理模块,在很多方面都有应模块即数字时钟管理模块,在很多方面都有应用,下面步骤将给出用,下面步骤将给出 DCMDCM 的的 IPIP 核生成过程:核生成过程: 11 、在、在 ISEISE 主界面中选择主界面中选择 Project->New SourceProject->New Source ,弹出,弹出 New New Source WizardSource Wizard 窗口,在该窗口中选择窗口,在该窗口中选择 IPIP (( Coregen & Coregen & Architecture WizardArchitecture Wizard ),在),在 File name fieldFile name field 中输入中输入 DCM1DCM1 文件文件名,点击名,点击 nextnext按钮;按钮; 22 、如图、如图 6.96.9 所示,在该界面中选择所示,在该界面中选择 FPGA Features and FPGA Features and DesignDesign ,在展开项,在展开项 Spartan-3E,Spantan-3ASpartan-3E,Spantan-3A 的子项中选择的子项中选择Single DCM SP v11.2 iSingle DCM SP v11.2 i ,点击,点击 nextnext 和和 finishfinish按钮;按钮;

Page 46: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的生成模块的生成

Page 47: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的生模块的生成成

33 、弹出、弹出 Xilinx Clock Wizard-General SetupXilinx Clock Wizard-General Setup 界面,在界面,在该界面进行下面的设置:该界面进行下面的设置: 在“在“ Input Clock Frequency”(Input Clock Frequency”( 输入时钟频率输入时钟频率 )) ,输入,输入 5050 ,, 选择“选择“ MHz”;MHz”; CLKIN Source(CLKIN Source( 时钟输入源时钟输入源 )) :: External, SingleExternal, Single Phase ShiftPhase Shift (相位移动):(相位移动): NONENONE Feed back SourceFeed back Source (反馈源):(反馈源): InternalInternal Feedback Value(Feedback Value( 反馈值反馈值 )) :: 1X1X

Page 48: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的生模块的生成成

4. 4. 然后单击“然后单击“ Advanced”Advanced”按钮,选择“按钮,选择“Wait for DCM Wait for DCM lock before Done Signal goes high”lock before Done Signal goes high” (在(在 DoneDone 信号变高信号变高前,等待前,等待 DCMDCM锁定),点击“锁定),点击“ OK”OK”按钮。按钮。 5. 5. 点击“点击“ Next”Next”按钮,然后再点击“按钮,然后再点击“ Next”Next”按钮;按钮; 6. 6. 选择“选择“ Use output frequency”(Use output frequency”( 使用输出频率使用输出频率 )) ,然,然

后后输入输入 26.214426.2144 ,选择“,选择“ MHz”MHz” 。。 7. 7. 点击“点击“ Next”Next”按钮,然后点击“按钮,然后点击“ Finish”Finish”按钮;按钮;

文件文件 dcm1.xawdcm1.xaw添加到工程源文件列表中。添加到工程源文件列表中。

Page 49: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的例模块的例化化

11 、在工程文件管理窗口,选择、在工程文件管理窗口,选择 SourceSource 标签,选择标签,选择Dcm1.xawDcm1.xaw 文件。然后在处理子窗口选择文件。然后在处理子窗口选择 View HDL View HDL Instantiation TemplateInstantiation Template ,并单击鼠标左键。,并单击鼠标左键。 22 、在、在 workspaceworkspace 子窗口打开子窗口打开 dcm1.vhidcm1.vhi 文件,将下面的文件,将下面的代代

码添加到设计文件码添加到设计文件 stopwatch.vhdstopwatch.vhd --Insert DCM1 component declaration here--Insert DCM1 component declaration here 的下面。的下面。

Page 50: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的例模块的例化化

COMPONENT dcm1COMPONENT dcm1 PORT(PORT( CLKIN_IN : IN std_logic;CLKIN_IN : IN std_logic; RST_IN : IN std_logic; RST_IN : IN std_logic; CLKIN_IBUFG_OUT : OUT std_logic;CLKIN_IBUFG_OUT : OUT std_logic; CLK0_OUT : OUT std_logic;CLK0_OUT : OUT std_logic; LOCKED_OUT : OUT std_logicLOCKED_OUT : OUT std_logic );); END COMPONENT;END COMPONENT;

Page 51: 基于 HDL 的设计输入

基于基于 HDLHDL 的设计输入的设计输入 -DCM-DCM 模块的例模块的例化化

33 、然后将下面的代码粘贴到、然后将下面的代码粘贴到 stopwatch,vhdstopwatch,vhd 的例化的例化部部

分,即分,即 ---- Insert DCM1 instantiation here---- Insert DCM1 instantiation here 的下面,并和的下面,并和相应的端口连接。相应的端口连接。 dcm_inst : dcm1dcm_inst : dcm1 port map (CLKIN_IN=>clk,port map (CLKIN_IN=>clk, RST_IN=>reset,RST_IN=>reset, CLKFX_OUT=>clk_26214k,CLKFX_OUT=>clk_26214k, CLKIN_IBUFG_OUT=>open,CLKIN_IBUFG_OUT=>open, CLK0_OUT=>open,CLK0_OUT=>open, LOCKED_OUT=>locked);LOCKED_OUT=>locked);

Page 52: 基于 HDL 的设计输入

习题习题

11 、说明基于、说明基于 HDLHDL 语言的设计输入方法。语言的设计输入方法。 22 、说明、说明 ISEISE 软件平台的特点及其功能。软件平台的特点及其功能。 33 、说明、说明 IPIP 核的生成方法和例化方法。核的生成方法和例化方法。 44 、完成一个基于、完成一个基于 VHDLVHDL 设计输入的设计。设计输入的设计。