410 likes | 534 Views
基于原理图的设计输入. 何宾 2011.09. 基于原理图的设计输入 - 本章概要. VHDL 语言的出现使得许多 PLD 设计都是基于 VHDL 的 设计流程,但是基于原理图的设计也有着重要应用。例 如,对于一个简单数字系统设计而言,顶层文件使用原理 图设计,这样做设计比较直观,容易理解,要比使用 HDL 例化语句描述简单。该章还是通过秒表的设计示例介绍基 于原理图的设计流程。 在这里需要说明的是,一个有经验的 EDA 设计人员, 会使用基于 HDL 语言、原理图和 IP 核的混合设计方法完成
E N D
基于原理图的设计输入 何宾 2011.09
基于原理图的设计输入-本章概要 • VHDL语言的出现使得许多PLD设计都是基于VHDL的 • 设计流程,但是基于原理图的设计也有着重要应用。例 • 如,对于一个简单数字系统设计而言,顶层文件使用原理 • 图设计,这样做设计比较直观,容易理解,要比使用HDL • 例化语句描述简单。该章还是通过秒表的设计示例介绍基 • 于原理图的设计流程。 • 在这里需要说明的是,一个有经验的EDA设计人员, • 会使用基于HDL语言、原理图和IP核的混合设计方法完成 • 设计,这些设计方法可能使用在设计的各个模块中,而不 • 会只局限在顶层模块中。
基于原理图的设计输入-工程建立 • 在建立工程前,需要将示例文件从光盘上拷到创建工程 • 的路径下。该设计完成一个比赛用的秒表计时器。(设计 • 文件通过http://china.xilinx.com/support /techsup /tutoria • ls/tutorials11.htm资源下载)。下面给出基于原理图设计 • 流程的工程建立步骤: • 1、在桌面上双击ISE 11图标,或者在开始菜单->所 • 有程序->XilinxISE11->Project Navigator。在ISE主界面 • 中选择File->New Project。如图7.1所示,桌面出现下面 • 的界面;
图7.1 创建新工程的界面 基于原理图的设计输入-工程建立
基于原理图的设计输入-工程建立 • 2、在Project Location域内,由设计人员给出保存工程 • 的路径; • 3、在Project name域内,由设计人员给出工程名 • wtut_sc; • 4、在Top-Level Source Type域内,选择原理图 • Schematic,单击下一步; • 如图7.2所示,桌面出现下面的界面;
基于原理图的设计输入-工程建立 • 5、在Device Properties界面中,选择合适的产品范围 • (Product Category)、芯片的系列(Family)、具体的芯 • 片型号(Device)、封装类型(Package)、速度信息 • (Speed),此外,在该界面中还要选择综合工具 • (Synthesis Tool)、仿真工具(Simulator)和设计语言 • (Preferred Language)。图7.2给出了示例中的参数配置; • 6、连续两次用鼠标点击下一步按钮,然后在界面 • “New Project Wizard-Add Existing Source Windows”中点击 • “Add Source”(添加源文件)按钮
基于原理图的设计输入-工程建立 • 7. 在该界面中,点击“Add Source”按钮。将路径定位 • 到c:\xilinx\11.1\ISE\ISExamples\ wtut_sc;选择并添加下 • 列文件: • cd4rled.sch • ch4rled.sch • clk_div_262k.vhd • lcd_control.vhd • stopwatch.sch • statmach.vhd
基于原理图的设计输入-工程建立 • 8. 点击“Next”按钮,然后单击“Finish按钮,这样 • 完成新工程的建立; • 9、如下图所示,确认所有设计文件的 • Association选项为“ALL”,Library选项为“work”。
基于原理图的设计输入-设计描述 • 在该设计中,采用了层次化的、基于原理图的设计方 • 法。该设计的顶层文件是由原理图生成,而顶层文件下面 • 的其它模块可以用VHDL语言、原理图或IP核生成。该设 • 计就是完成一个还未完成的工程。通过这个设计流程,读 • 者可以完成和产生其它的模块。当设计完成后,可以通过 • 仿真验证设计的正确性。图7.4给出了该设计完整的顶层 • 原理图描述。该例子的输入、输出信号和功能模块与前一 • 章的例子完全一样。
图7.4 完整的顶层原理图的界面 基于原理图的设计输入-设计描述
基于原理图的设计输入-设计描述 • 在这个基于分层的设计中,读者可以建立各种类型的 • 模块,其中包括基于原理图输入模块、基于HDL输入模 • 块、基于状态图输入模块和基于IP核输入模块。通过该示 • 例,EDA设计人员可以详细学习建立每一种模块的方法, • 并且学习如何将这些模块连接在一起构成一个完整的设 • 计。
基于原理图的设计输入-原理图编辑器操作 • 原理图模块由模块符号和符号的连接组成。下面的步骤 • 将通过ISE的原理图编辑器(Schematic Editor)介绍建立 • 基于原理图设计time_cnt模块的过程: • 1、在ISE主界面下,选择Project->New Source,出现图 • 7.5的New Source对话框界面。在该界面左边选择 • Schematic选项,在File Name中输入time_cnt,单击next按 • 钮,然后单击Finish按钮,建立新原理图模块; • 2、在ISE工作区子窗口,出现原理图编辑窗口,点击鼠 • 标右键,然后选择Object Properties,将图纸尺寸(Size) • 改成D=34x22。点击ok按钮; • 通过上面步骤,建立一个time_cnt原理图输入界面;
基于原理图的设计输入-添加I/O符号 • I/O符号用来确定模块的输入/输出端口,通过下面的步 • 骤可以创建模块的I/O符号: • 1、在原理图编辑器界面内,选择Tools>Create I/O • markers.,显示创建I/O marker对话框; • 2、如图7.5所示,在Inputs下输入q(19:0),load, up,ce, clk, • clr,在output下输入hundredths(3:0),tenths(3:0), sec_lsb(3:0), • sec_msb(3:0),minutes(3:0),点击OK;
图7.5 I/O marker建立界面 基于原理图的设计输入-添加I/O符号
基于原理图的设计输入-添加原理图元件 • 通过符号浏览器(Symbol Brower)可以看到对于当前 • 设计所用芯片可以使用的元件名字和符号(这些符号按字 • 母顺序排列)。这些元件符号可以用鼠标直接拖到原理图 • 编辑器中。下面给出添加原理图元件的步骤: • 1、在原理图编辑器的界面内,选择Add->Symbol或者 • 在工具栏中点击Add Symbol图标。如图7.6所示,在原理 • 图编辑器窗口左边,打开符号浏览器(Symbol Brower)。 • 在设计路径下,选择cd4rled,该元件是4比特双向可加载 • 的BCD计数器;
基于原理图的设计输入-添加原理图元件 • 2、选择cd4rled元件,用鼠标将其拖入编辑器窗口内。 • 如图7.7所示,再添加3个这样 • 的元件到编辑界面中,同时添加 • AND2b1,ch4rled和AND5元件到 • 编辑器窗口内;
基于原理图的设计输入-添加连线 • 1、在元件编辑器界面内,选择Add>wire或者在工具栏 • 中点击Add wire图标; • 2、点击AND2B1的输出,拖动连线到cd4rled元件的CE • 引脚。此时在两个引脚之间建立连线; • 3、点击AND5元件输出,拖动连线到AND2b1反向输入 • 引脚。此时在两个引脚之间建立连线;
图7.7 元件编辑窗口界面 基于原理图的设计输入-添加连线
基于原理图的设计输入-添加连线 • 4、分别将load,up,clk和clr输入和五个计数器模块的 • L,UP,C,R引脚连接,将前一个计数器CE0和下一个计数器 • CE连接; • 通过以上4个步骤就可以完成元件之间的线连接,下面 • 将介绍通过总线连接元件的方法。
基于原理图的设计输入-添加总线符号 • 添加总线包括添加总线符号和与总线连接的比特位的连 • 接。下面给出建立总线hundredths(3:0), tenths(3:0), • sec_lsb(3:0), sec_msb(3:0)和minutes(3:0)连接的步骤: • 1、分别选择上面的总线输出符号; • 2、选择Add>wire或者在工具栏中点击Add wire图标,从 • 这些端口拖出总线连接线,按图7.8所示,引出这些总线 • 的连接线;
图7.8 完整的总线连接界面 基于原理图的设计输入-添加总线符号
基于原理图的设计输入-添加总线符号 • 3、当添加操作结束时,按ESC键放弃总线连接操作; • 4、下面将要把比特端口和总线连接,选择Add>Bus Tap • 或者在工具栏中点击Add BusTap图标。 • 5、从原理图编辑器左边的Option标签中选择--<Right选 • 项,这样做是为了将元件和总线很好的连接。 • 6、单击hundreths(3:0),将bus Tap标记放在总线上,下 • 面要进行selected bus name和Net name 的操作。将五个计 • 数器对应的Bus Tap标记分别放在总线相应的位置上。如 • 图7.8所示,需要在5条总线上放4个Bus Tap标记。 • 7、选择Add>wire或者在工具栏中点击Add wire图标, • 分别从5个计数器的Q0~Q3分别引出四个连接线,注意不 • 要和Bus Tap连接。
基于原理图的设计输入-添加总线符号 • 8、在工具条中,选择Add Net Name图标,在原理图编 • 辑器的Option标签内,选择Name the branch’s net选项,并 • 输入需要连接的比特端口名字,形式为:总线名字(索引 • 号),然后将光标移动到相对应比特端口的连接线上,此 • 时名字就添加在连线上。 • 9、完成上述总线命名后,将这些比特端口连接线和Bus • Tap标记连接。经过上面的步骤后完成比特端口和总线的 • 连接。 • 10、按照上面几节的描述步骤,完成所有输入和输出端 • 口和元件的连接,最后选择tools->Check Schematic,对设 • 计的原理图进行检查,修改错误,当没有错误后,将该原 • 理图保存。
创建模块及相关模块原理图--创建time_cnt模块原理图创建模块及相关模块原理图--创建time_cnt模块原理图 • 当设计完成后,下面创建该原理图的RTL符号描述。这 • 个RTL符号是该原理图的例化描述。当创建完RTL原理图 • 后,就可以将该符号添加到顶层的原理图设计文件中。下 • 面给出创建time_cnt.sch原理图的步骤: • 1)在工程管理窗口(Source window),选择 • time_cnt.sch文件; • 2)在处理窗口(Process window),选择+ Design Utilties • 并将其展开,下面工具将以分层列表的方式显示。 • 3)双击Create Schematic Symbol选项。
创建模块及相关模块原理图--创建核生成器模块及原理图创建模块及相关模块原理图--创建核生成器模块及原理图 • 按照第6章使用核生成器(Core Generator)生成 • timer_preset模块的步骤生成该模块。按照第6章使用核生 • 成器(Core Generator)生成dcm1模块的步骤生成该模 • 块。下面给出生成dcm1模块原理图的步骤: • 1)在工程管理窗口的Source标签下,选择dcm1.xaw ; • 2)在process(处理)窗口下,双击“Create Schematic • Symbl ”按钮来生成dcm1的原理图。
创建模块及相关模块原理图--创建基于HDL模块及原理图创建模块及相关模块原理图--创建基于HDL模块及原理图 • 按照第六章的步骤创建debounce.vhd模块。下面 • 给出创建该模块原理符号的步骤: • 1)在工程管理窗口(Source window),选择 • debounce.vhd文件; • 2)在处理窗口(Process window),选择+ Design • Utilties并将其展开,下面工具将以分层列表的方式 • 显示。 • 3)双击Create Schematic Symbol选项。 • 重复上面的过程生成statemach.vhd模块的原理图;
顶层模块原理图的设计-放置模块到原理图 • 现在将statmath,timer_preset,dcm1和debounce符 • 号放到stopwatch.sch原理图界面中,双击stopwatch.sch • 打开原理图编辑器界面,下面给出放置这些符号到原 • 理图界面的步骤: • 1)选择Add->Symbol或者从工具栏中点击“Add • Symbol”图标。这将打开原理图编辑器的符号浏览器 • (Symbol Browser),该浏览器显示了库和这些库中的 • 相关的元件; • 2)在符号浏览器中,查看可使用的库元件; • 3)在Categories窗口,通过选择工程目录来找到具 • 体工程中的宏符号;
顶层模块原理图的设计-放置模块到原理图 • 4)如图7.9所 • 示,选择合适的原理 • 图,添加到stopwatch • 原理图中合适的位 • 置。 • 5)保存原理图。
顶层模块原理图的设计-修改例化名字 • 当在原理图中放置符号后,每个符号有一个唯一的 • 名字,名字以“XLXI_”开始。为了使这些模块在源文件 • 中更好理解,使用下面的步骤修改符号的例化名字: • 1、右击dcm1符号,然后从出现的菜单中选择 • “Object Properties”; • 2、修改InstName域的值为dcm_inst,点击“OK”;
顶层模块原理图的设计-修改例化名字 • 重复步骤1和2修改下面的符号例化名字: • statmach模块例化名字timer_state • 上面debounce模块例化名字lap_load_debounce • 中间debounce模块例化名字mode_debounce • 下面debounce模块例化名字strtstop_debouce • timer_preset模块例化名字t_preset • time_cnt模块例化名字timer_cnt
顶层模块原理图的设计-层次展开/退出 • 执行层次“Push down”(展开),可以使设计者看到 • 原理图层次的更底层文件,下面给出从顶层stopwatch.sch • 原理图展开time_cnt的步骤: • 1、在原理图界面中点击time_cnt符号,如图7.10选择 • Hierarchy Push图标。也可以点击右键,选择Symbol>Push • into Symbol。可以看到该模块的内部结构; • 2、当查看完内部结构后,通过选择View>Pop to • Calling Schematic,或者选择Hierarchy Pop图标,返回上一 • 级的模块原理符号,该操作为“Pop”(退出)操作。
图7.10 添加I/O符号到所标记的网络 顶层模块原理图的设计-层次展开/退出
顶层模块原理图的设计-分配引脚位置 • Xilinx推荐使用自动的布局布线(PAR)程序定义 • 设计的引出引脚。预分配引脚的位置有时可能降低 • PAR工具的性能。然而,在一些时候必须锁定设计的 • 引出引脚,这样可以能够集成到印刷电路板PCB上。 • 下面给出stopwatch原理图上输出网络的LOC参数的 • 步骤: • 1. 右击clk网络,从弹出的菜单选择“Object • Properties”; • 2. 在图7.11的界面中,点击“New”按钮,添加新的 • 属性;
图7.11 分配引脚位置 顶层模块原理图的设计-分配引脚位置
顶层模块原理图的设计-分配引脚位置 • 3. 输入LOC作为属性名字,然后输入E12作为 • “Value”的值; • 4. 点击“OK”返回到“Object Properties”对话框; • 5. 为了看到LOC属性,选择LOC属性旁边的 • “Add”按钮。 • 6. 在“Net Attribute Visibility”(网络属性可见) • 窗口中,在接近显示中心的位置点击一下,然后点击 • “OK”按钮。将要在原理图上显示LOC属性。 • 7. 点击“OK”按钮,关闭“Object Properties”窗 • 口。按照图7.8完成原理图剩余的设计。
习题 • 1、说明基于原理图的设计输入方法。 • 2、举例说明状态图的设计方法。 • 3、建立一个基于原理图的设计工程。