1 / 52

基于 HDL 的设计输入

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

avidan
Download Presentation

基于 HDL 的设计输入

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. 基于HDL的设计输入 何宾 2011.09

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

  3. 基于HDL的设计输入-软件环境 • 下图给出了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、脚本(transcript)子窗口 • 脚本子窗口有5个缺省的标签:Console,error, • warnings , Tcl shell,find in file。 • 1) Console标签显示错误、警告和信息。X表示错 • 误,!表示警告。 • 2) Warning标签只显示警告消息。 • 3) Error标签只显示错误消息。 • 4) Tcl shell标签是与设计人员的交互控制台。除了显 • 示错误、警告和信息外,还允许设计人员输入ISE特定命 • 令。 • 5) Find in file标签显示的是选择Edit>Find in File操作后 • 的查询结果。

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

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

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

  11. 基于HDL的设计输入-工程建立

  12. 基于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给出了示例中的参数配置;

  13. 基于HDL的设计输入-工程建立

  14. 第6章 基于HDL的设计输入-工程建立 • 6、连续两次用鼠标点击下一步按钮,出现图6.4添加 • 源文件的界面;

  15. 基于HDL的设计输入-工程建立 • 在该界面中,点击“Add Source”按钮。添加下列文 • 件:clk_div_262k,lcd_control, statmach, stopwatch,并单击 • open按钮; • 7、单击下一步按钮,然后完成新工程的建立; • 8、在确认所有的设计文件和Synthesis/Imp+Simulation关 • 联后,单击ok;

  16. 在Adding Source Files…界面 基于HDL的设计输入-工程建立

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

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

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

  26. 在线逻辑分析仪 IP核生成向导 实现约束文件 原理图 状态图 仿真波形平台 Verilog模块 Verilog测试模块 VHDL模块 VHDL库 VHDL包 VHDL测试模块 嵌入式处理 图6.6 新建文件窗口 基于HDL的设计输入-创建基于HDL的模块

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

  28. 新建文件向导窗口 基于HDL的设计输入-创建基于HDL的模块

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

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

  31. 基于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

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

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

  34. 基于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按钮;

  35. 基于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核后,产生下面的文件, • 下面对这些文件的含义进行一些说明:

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

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

  38. 基于HDL的设计输入-timer_preset模块的生成 • 5. 在该界面中,在“Cofficients File”选项后,点击 • “Browse”按钮,在工程路径下选择definition1_timws.coe • 文件作为该存储器的系数文件,用来给存储器写初始 • 值。

  39. 图6.12 核生成器-分布式存储器生成器定制GUI界面 基于HDL的设计输入-timer_preset模块的生成

  40. 基于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仿真时的初 • 始设置。

  41. 基于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的声明部分代码复制,并通过粘贴插入到光 • 标所指的那一行下面。

  42. 基于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;

  43. 基于HDL的设计输入-timer_preset模块的例化 • 5. 将该文件的例化部分的代码复制。 • your_instance_name : timer_preset • port map ( • a => a, • spo => spo);

  44. 基于HDL的设计输入-timer_preset模块的例化 • 6、然后,粘贴到设计的顶层文件的例化部分,然 • 后通过端口映射将该模块和设计相连。 • t_preset : timer_preset • port map ( • a(5 downto 0)=> address(5 downto 0), • spo(19 downto 0)=> preset_time(19 downto 0) • ); • 通过上面的步骤,该IP核模块就添加到该设计文件 • 中了。

  45. 基于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 v11.2 i,点击next和finish按钮;

  46. 基于HDL的设计输入-DCM模块的生成

  47. 基于HDL的设计输入-DCM模块的生成 • 3、弹出Xilinx Clock Wizard-General Setup界面,在 • 该界面进行下面的设置: • 在“Input Clock Frequency”(输入时钟频率),输入50, • 选择“MHz”; • CLKIN Source(时钟输入源):External, Single • Phase Shift(相位移动):NONE • Feed back Source(反馈源):Internal • Feedback Value(反馈值):1X

  48. 基于HDL的设计输入-DCM模块的生成 • 4. 然后单击“Advanced”按钮,选择“Wait for DCM • lock before Done Signal goes high”(在Done信号变高 • 前,等待DCM锁定),点击“OK”按钮。 • 5. 点击“Next”按钮,然后再点击“Next”按钮; • 6. 选择“Use output frequency”(使用输出频率),然后 • 输入26.2144,选择“MHz”。 • 7. 点击“Next”按钮,然后点击“Finish”按钮; • 文件dcm1.xaw添加到工程源文件列表中。

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

  50. 基于HDL的设计输入-DCM模块的例化 • 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;

More Related