1 / 48

何宾 2008.10

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

Download Presentation

何宾 2008.10

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EDA原理及应用 何宾 2008.10

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

  3. 基于HDL的设计输入-软件环境 第六章 图6.1 ISE的主界面 图6.1给出了ISE的主界面窗口。ISE的主界面可以分为4个子窗口。

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

  5. 基于HDL的设计输入-软件环境 第六章 ●1、源文件(source)子窗口   这个窗口有三个标签:源(Source)、Snapshots(快照)、Library(库)。 源标签内显示工程名、指定的芯片和设计有关的文档。在设计视图的每一个文件都有一个相关的图标,这个图标显示的是文件的类型(HDL文件、原理图、IP核和文本文件)。‘+’表示该设计文件包含了更低层次的设计模块。 标签内显示的是目前所打开文件快照。一个快照是在该工程里所有文件的一个拷贝。通过该标签可以察看报告、用户文档和源文件。在该标签下所有的信息都是只读的。

  6. 基于HDL的设计输入-软件环境 第六章 ●2、处理(process)子窗口 •   在该窗口只有一个处理标签。该标签有下列功能: • 增加已有文件; • 创建新文件; • 察看设计总结(访问符号产生工具,例化模板,察看命令行历史和仿真库编辑); • 用户约束文件(访问和编辑位置和时序约束); • 综合(检查语法、综合、察看RTL和综合报告); • 设计实现(访问实现工具,设计流程报告和其它一些工具); • 产生可编程文件(访问配置工具和产生比特流文件)。

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

  8. 基于HDL的设计输入-软件环境 第六章 • 通过ISE仿真器和波形编辑器创建和仿真测试平台。波形编辑器提供了图形化的激励源和期望响应输出,然后产生使VHDL/Verilog语言描述的测试平台。 • 原理图编辑器集成在ISE中,原理图编辑器是采用图形的方式创建和查看逻辑设计。

  9. 基于HDL的设计输入-综合工具介绍 第六章 • EDA设计人员可以使用不同的综合工具综合设计。下面将介绍ISE支持的综合工具,并包括与综合工具相关的属性设置。 • 1、精确的综合工具 • 这种综合工具不属于ISE软件包的一部分,如需使用必须单独购买。两个通常使用的属性是优化目标和优化级别。通过选择这两种属性来控制综合结果:面积或速度,以及综合器运行时间。这种综合工具对HDL和原理图设计流程均可使用。

  10. 基于HDL的设计输入-综合工具介绍 第六章 2、Synplify/Synplify pro工具 这种综合工具不属于ISE的一部分,如需使用必须单独的购买。这种综合工具只能用于基于HDL语言的设计流程,而不能用于基于原理图的设计流程。 3、XST综合工具 这种综合工具是ISE软件包的一部分,是Xilinx公司自己的综合工具。这种综合工具对基于HDL语言和原理图的设计流程均可使用。

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

  12. 基于HDL的设计输入-工程建立 第六章 图6.2 创建新工程的界面

  13. 基于HDL的设计输入-工程建立 第六章 2、在Project Location域内,给出保存工程的路径; 3、在Project name域内,给出工程名wtut_vhd; 4、在Top-Level Source Type域内,选择HDL,单击下一步。出现图6.3图形界面。 5、在Device Properties界面中,选择合适的产品范围 (product category)、芯片的系列(Family)、具体的芯片型号(Device)、封装类型(Package)、速度信息(speed),此外,在该界面中还要选择综合工具(Synthesis Tool)、仿真工具(Simulator)和设计语言(Preferred Language)。图6.3给出了示例中的参数配置;

  14. 基于HDL的设计输入-工程建立 第六章 图6.3 芯片属性界面

  15. 基于HDL的设计输入-工程建立 第六章 图6.4 添加源的界面 6、连续两次用鼠标点击下一步按钮,出现图6.4添加源文件的界面; 在该界面中,点击“Add Source”按钮。添加下列文件: clk_div_262k,lcd_control, statmach, stopwatch,并单击open按钮;

  16. 基于HDL的设计输入-工程建立 第六章 7、单击下一步按钮,然后完成新工程的建立; 8、在确认所有的设计文件和Synthesis/Imp+Simulation关联后,单击ok;

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

  18. 基于HDL的设计输入-设计描述 第六章 1、该设计有下面的输入信号: • strtstop:启动和停止秒表; • reset:复位秒表00:00:00状态,且秒表在时钟模式下; • clk:外部输入时钟信号; • mode:控制时钟和秒表模式。只有当时钟或定时器处于未计数状态时,该信号才起作用; • lap_load:这个信号有两个功能。在时钟模式下,显示当前的时钟值。在定时器模式下,当定时器没有计数时,从ROM中加载预设的值并显示;

  19. 基于HDL的设计输入-设计描述 第六章 2、该设计有下面的输出信号: • lcd_e,lcd_rs,lcd_rw:这些控制信号用于控制LCD的显示; • sf_d[7:0]:向LCD显示提供并行数据;

  20. 基于HDL的设计输入-设计描述 第六章 3、该设计有以下功能模块: • clk_div_262k:将输入时钟进行262144的分频,将26.2144MH时钟转换成占空比为50%的100Hz时钟信号。 • DCM1:数字时钟管理器的IP核,提供内部时钟反馈、频率的输出控制和占空比的修正。CLKFX_OUT将50MHz的时钟转换为26.2144MHz时钟输出。 • Debounce:原理图模块实现秒表的strstop,mode,lap_load信号的去抖动。 • lcd_control:对LCD的初始化和LCD的显示进行控制。

  21. 基于HDL的设计输入-设计描述 第六章 3、该设计有以下功能模块: • statmach:在状态图(State Digram)编辑器中定义和实现状态机模块,并控制秒表。 • timer_preset:通过核产生器(core generator)产生64X20的ROM,这个ROM在00:00:00到9:59:59的范围内保存了64个预设置的时间。 • time_cnt:在0:00:00到09:59:59的范围内以up/down模式工作的计数器。这个模块有5个4比特的输出,用来描述当前秒表的输出数字。

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

  23. 基于HDL的设计输入-添加设计和检查 第六章 图6.5 新建工程的源文件窗口

  24. 基于HDL的设计输入-添加设计和检查 第六章 • 1、选择project->Add Source,选择并打开time_cnt.vhd文件,确保该模块与Synthesis/Imp+Simulation选项关联,并单击ok按钮; • 2、对该设计文件进行语法检查。在source子窗口,选择time_cnt.vhd文件。在process子窗口单击‘+’,展开Design Utility,并双击Check Syntax;

  25. 基于HDL的设计输入-添加设计和检查 第六章 • 3、在检查语法的过程中,在Transcript子窗口中出现4个错误信息的提示。根据错误的提示信息修改文件,并保存,然后再次进行检查,直到没有语法错误为止。并保存文件。

  26. 基于HDL的设计输入-创建基于HDL的模块 第六章 • 本节将介绍使用ISE的文本编辑器VHDL语言创建模快。使用VHDL语言创建的模块用于该秒表的去抖动功能。 • 1、选择Project>New Source,弹出图6.6的窗口,新文件建立的导向窗口。

  27. 基于HDL的设计输入-创建基于HDL的模块 第六章 图6.6 新建文件窗口

  28. 基于HDL的设计输入-创建基于HDL的模块 第六章 • 在窗口左边选择VHDL Module,其它选项分别完成调试文件建立、IP核建立、用户约束文件建立、原理图建立、状态图建立、HDL文件建立、HDL测试文件建立、HDL库建立和HDL测试波形文件建立。在File name下面的输入框输入debounce文件名,然后点击下一步,出现新文件向导对话框,此时可以进行下列选择,可以通过该向导输入端口的名字和方向,选择是否总线,如果是总线,还需要指明宽度。读者也可以在HDL文件中自己输入,当使用在VHDL中手工添加这种方式的时候,直接单击next按钮即可;否则需要在该界面内指定端口参数。最后,单击完成(finish)按钮生成新文件;

  29. 基于HDL的设计输入-创建基于HDL的模块 第六章 图6.7 新建文件向导窗口

  30. 基于HDL的设计输入-创建基于HDL的模块 第六章 • 2、如图6.8所示,在ISE的工作区空间,给出使用ISE文件编辑器打开的debounce.vhd文件。可以看出,Xilinx的ISE工具生成了VHDL基本结构框架,这也是ISE具有强大设计功能的体现;

  31. 基于HDL的设计输入-创建基于HDL的模块 第六章 图6.8 ISE的文件编辑器界面

  32. 基于HDL的设计输入-创建基于HDL的模块 第六章 • 下面需要的是EDA设计人员需要将结构体空缺的下面的代码的添加到结构体中间。 • architecture debounce_arch of debounce is • signal int1, int2, int3 : std_logic; • begin • sig_out<=sig_in or int1 or int2 or int3; • process (clk) is • begin

  33. 基于HDL的设计输入-创建基于HDL的模块 第六章 if rising_edge(clk) then • int1 <= sig_in; • int2 <= int1; • int3 <= int2; • end if; • end process; • end debounce_arch; • 输入完毕并保存文件,并对该设计文件按照前面的方法进行语法规则检查,直到综合完成为止,在综合过程如果出现错误,则需要对输入的设计文件进行检查。

  34. 基于HDL的设计输入- IP核产生和例化 第六章 • IP核生成器(IP core generator)是一个用户图形交互界面工具,通过核产生器可以产生高层次设计模块,例如:存储器、数学函数、通讯和I/O接口的IP核。设计人员可以定制和优化这些IP核,这些IP核充分利用Xilinx的FPGA结构特征,例如:快速进位逻辑、SRL16s和分布式块RAM等。

  35. 基于HDL的设计输入 - timer_preset模块的生成 第六章 • 在本节中,通过IP核产生器生成timer_preset模块。该模块存储了64个值,这些值将来加载到定时器中。 • 1、在ISE主界面中选择Project->New Source,弹出New Source Wizard窗口,在该窗口中选择IP(Coregen & Architecture Wizard),在File name field中输入timer_preset文件名,点击next按钮; • 2、在弹出的New Source Wizard Select IP窗口,选择Memory & Storage Elements。如图6.9所示,在该界面中选择“RAMs & ROMs”,在展开项中选择distributed Memory Generator,点击next和finish按钮;

  36. 基于HDL的设计输入 - timer_preset模块的生成 第六章 • 3、弹出6.10的界面,在该界面中选择ROM的Depth,将其设置为64,然后选择Data Width,将其设置为20,然后将存储器的类型Memory Type设置为ROM,点击下一步; • 4、将Input options和Output options设置为Non Registered(表示输入和输出不需要通 过锁存器进行锁存,可以看到在该界面窗口的左面的a[5:0]和spo[19:0]呈黑色显示,其余引脚呈灰色显示(黑色表示引脚在该次设计中有效,灰色表示引脚在该次设计中无效);单击finish按钮。在IP核产生器生成IP核后,产生下面的文件,下面对这些文件的含义进行一些说明:

  37. 基于HDL的设计输入 - timer_preset模块的生成 第六章 图6.9 IP选择界面

  38. 基于HDL的设计输入 - timer_preset模块的生成 第六章 图6.10 分布式IP核产生器设置界面

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

  40. 基于HDL的设计输入- DCM模块的生成 第六章 • DCM模块即数字时钟管理模块,在很多方面都有应用,下面步骤将给出DCM的IP核生成过程: • 1、在ISE主界面中选择Project->New Source,弹出New Source Wizard窗口,在该窗口中选择IP(Coregen & Architecture Wizard),在File name field中输入DCM1文件名,点击next按钮; • 2、如图6.9所示,在该界面中选择FPGA Features and Design,在展开项Spartan-3E,Spantan-3A的子项中选择Single DCM SP v9.1i,点击next和finish按钮;

  41. 基于HDL的设计输入- DCM模块的生成 第六章 • 3、弹出Xilinx Clock Wizard-General Setup界面,在该界面进行下面的设置,输入时钟为50MHz,输入时钟clkin Source选择External, 相位移动Phase Shift选择NONE,反馈源Feed back Source选择Internal。然后单击确定,生成DCM的IP核;

  42. 基于HDL的设计输入 - timer_preset模块的例化 第六章 • 当IP核生成后,下面将在设计中调用生成的IP核。 • 1、在工程管理窗口,双击stopwatch.vhd文件,将其打开。 • 2、将光标移动到--Insert Core Generator ROM component declaration here。 • 3、在ISE中选择File->open选项,选择timer_preset.vho,并打开。 • 4、将VHDL的声明部分代码复制,并通过粘贴插入到光标所指的那一行下面。

  43. 基于HDL的设计输入 - timer_preset模块的例化 第六章 component timer_preset port ( a: IN std_logic_VECTOR(5 downto 0); spo: OUT std_logic_VECTOR(19 downto 0)); end component; -- Synplicity black box declaration attribute syn_black_box : boolean; attribute syn_black_box of timer_preset: component is true;

  44. 基于HDL的设计输入 - DCM模块的例化 第六章 • 5、将该文件的例化部分的代码复制。 • your_instance_name : timer_preset • port map ( a => a, spo => spo); • 6、然后,粘贴到设计的顶层文件的例化部分,然后通过端口映射将该模块和设计相连。 • t_preset : timer_preset • port map (a(5 downto 0)=> address(5 downto 0), • spo(19 downto 0)=> preset_time(19 downto 0));

  45. 基于HDL的设计输入 - timer_preset模块的例化 第六章 • 1、在工程文件管理窗口,选择Source标签,选择Dcm1.xaw文件。然后在处理子窗口选择View HDL Instantiation Template,并单击鼠标左键。 • 2、在workspace子窗口打开dcm1.vhi文件,将下面的代码添加到设计文件stopwatch.vhd --Insert DCM1 component declaration here的下面。

  46. 基于HDL的设计输入 - timer_preset模块的例化 第六章 COMPONENT dcm1 PORT( CLKIN_IN : IN std_logic; RST_IN : IN std_logic; CLKIN_IBUFG_OUT : OUT std_logic; CLK0_OUT : OUT std_logic; LOCKED_OUT : OUT std_logic ); END COMPONENT;

  47. 基于HDL的设计输入 - timer_preset模块的例化 第六章 • 3、然后将下面的代码粘贴到stopwatch,vhd的例化部分,即---- Insert DCM1 instantiation here的下面,并和相应的端口连接。 • dcm_inst : dcm1 • port map (CLKIN_IN=>clk, • RST_IN=>reset, • CLKFX_OUT=>clk_26214k, • CLKIN_IBUFG_OUT=>open, • CLK0_OUT=>open, • LOCKED_OUT=>locked);

  48. 第6章 习 题 1、说明基于HDL语言的设计输入方法。 2、说明ISE软件平台的特点及其功能。 3、说明IP核的生成方法和例化方法。 4、完成一个基于VHDL设计输入的设计。

More Related