"); //-->
实验内容简介
以下将介绍如何建立向导和同步实验
实验目的
完成这个实验后,你将具备以下能力:
1. 使用建立的向导来配置DCM组件
2. 将配置的DCM组件应用于设计中
3. 使用同步来分配管脚位置
4. 完成设计,确认管脚的使用
5. 下载设计到硬件中
实验步骤
这个例子包括四个主要步骤:
1. 你需要用向导配置DCM,将DCM应用于VHDL/Verilog。
2. 使用PACE完成管脚的分配
3. 完成下载设计
4. 最后在硬件上进行测试
对于每个指令集,以下例子都将有相应的过程你将会有相应的一步一步的说明指导和相关的插图提供更详细的资料。如果你已经熟悉相应的步骤,可以跳过去。
设计总结
这个实验利用UART时钟设计。详细的说明可以参考UART_real_time_clock.pdf,这部分高度概括了设计的主要特征。
设计完成了一个实时时钟的设计,有时分秒的显示和闹钟提醒功能。不同之处是使用了串口通讯。这个设计要了解一些简单的ASCII命令,在编辑的时候使用backspace键进行修改。回车键按下的时候一个命令完成。当“KCPSM3>”命令出现的时候,设计准备接收一个命令。
“uclock”程序提供了一种区分方式,顶层和底层的区别就是,在进行分析之前,命令的转化在顶层。不正确的命令将会产生一条“syntax error”信息,进行提示。错误的时间值将提示出‘无效时间‘信息。如果指令太多,设计不能同时处理的话,将会提示“overflow error”,溢出错误。
设计需要提供一个55 MHz时钟。因为Spartan-3E开发板有50 MHz的晶振频率,你可以建立向导产生一个DCM输出55 MHz时钟用于本次设计。
建立向导配置一个DCM
步骤1
打开一个工程
1. 如果你关闭了ISE™工程,选择路径Start ® Programs ® Xilinx ISE 8.2i ® Project Navigator
2. 选择File ® Open Project
3. 根据以下路径选择arwz_pace.ise
Vhdl 使用: c:\xu p\fpgaflow\labs\vhdl\lab2\arwz_pace
Verilog使用: c:\xu p\fpgaflow\labs\veriloglab2\arwz_pace
4. 点击打开
设计的阐述中没有DCM组件。使用建立向导来配置一个DCM组件使之输出一个55 MHz.的时钟。
1. 在源文件进程中,双击Create New Source
如果没有找到源文件,确保有一个HDL源文件在源文件工程窗口中。
2. 在源文件窗口,选择IP (CoreGen & Architecture Wizard),输入文件名my_dcm
3. 点击 Next
4. 在选择类型窗口中,FPGA Features and Design gClocking g Spartan-3E, Spartan-3A ,然后选择Single DCM SP v8.2i (Figure 2-2)
Figure 2-2. 建立向导选择包
5. 点击Next,Finish
6. 在 Xilinx 时钟向导的建立窗口中,设置如下选项。
CLK0, CLKFX and LOCKED:选中
RST :不选
Input Clock Frequency:50 MHz
Figure 2-3. Xilinx Clocking Wizard – General Setup窗口
7. 点击<Next>
8. 在Xilinx Clocking Wizard – Clock Buffers窗口,保持默认设置,点击<Next>
Figure 2-4. Xilinx Clocking Wizard – Clock Buffers 窗口
9. 在Xilinx Clocking Wizard – Clocking Frequency Synthesizer对话框中,输入55MHZ,作为输出频率,点击<Next>, <Finish>。
Figure 2-5. 指定 DCM 的输出频率
注意到一个新的文件(my_dcm.xaw )产生了,如图所示。这个源文件只有在HDL源文件的设计模块建立后才有。
Figure 2-6. DCM 各级列表显示
将DCM加入一个Verilog的设计例程中 步骤2a
VHDL用户可以跳过下个单元。。。。步骤 2b
现在工程已经有了必要的文件,你可以将DCM部分加入你的设计中。复制粘贴实例模板到uart_clock.v,连接信号。
1. 在选择了my_dcm.xaw后,进入Processes for Source窗口,双击View HDL Source,检验向导是否产生了源代码。
|
|
在View HDL Source中包含了几个部分:an IBUFG, a DCM, and two. BUFGs
输入时钟CLKIN_IN驱动与DCM相连的IBUFG,两个输出时钟用来驱动两个BUFG。
所有的DCM属性都已通过了Verilog协议。
2. 在Sources in Project窗口,双击uart_clock.v,打开文本中的源代码。
3. 在Sources in Project窗口中选择my_dcm.xaw。
4. 在Processes for Source窗口,双击View HDL Instantiation Template,打开文本中的例程。
|
5. 例程模块中my_dcm.tfi,复制instantiation module,将其粘贴到uart_clock.v。插入DCM component。
6. 定义端口程序:
my_dcm inst_my_dcm (
.CLKIN_IN(clk),
.CLKFX_OUT(clk55MHz),
.CLKIN_IBUFG_OUT(),
.CLK0_OUT(),
.LOCKED_OUT(lock)
);
注意:.CLKIN_IBUFG_OUT()端口支持RocketIO™接收器,因为目标板不是Virtex-II Pro™,这个端口将连接到一个虚拟信号。
7. 为55 MHz输出加入信号申明。
Signals for DCM
wire clk55MHz;
8. 加入一个锁定顶层模块的输出管脚
module uart_clock
( tx,
rx,
alarm,
clk,
lock);
output tx;
input rx;
output alarm;
input clk;
output lock;
注意:这个输出端将驱动Spartan-3板上的led1,它由DCM上的锁存信号驱动。这可以向用户说明DCM已经成功地将晶振频率锁定到50 MHz。
9. 点击File ® Save保存文件。
源文件my_dcm.xaw已经成功的插入到设计中的正确位置。
将DCM单元加入设计例程 步骤2b
接下来就是将DCM单元加入例程。复制粘贴相应的模块到uart_clock.vhd,连接信号。
1. my_dcm.xaw选择后,到Processes for Source窗口,双击View HDL Source,确认向导产生的源代码。
|
这个文件包含了以下内容:一个 IBUFG, 一个 DCM, 和两个BUFG。
输入时钟CLKIN_IN驱动与DCM相连的IBUFG,两个输出时钟用来驱动两个BUFG。
所有的DCM属性都已通过了Verilog协议。
2. 在Sources in Project窗口,双击uart_clock.vhd,打开文本中的源代码。
3. 在Sources in Project窗口中选择my_dcm.xaw。
4. 在Processes for Source窗口,双击View HDL Instantiation Template,打开文本中的例程。
|
5.例程模块中my_dcm.tfi,复制component declaration (begin at COMPONENT my_dcm,在END COMPONENT结束后,将其粘贴到uart_clock.vhd。插入DCM component。
6. 在Templatemy_dcm.vhi里,复制component instantiation (begin at Inst_my_dcm: my_dcm until the end of the file),粘贴到uart_clock.vhd,插入DCM模块。
7. 完成端口连接设置,如下:
Inst_my_dcm: my_dcm PORT MAP(
CLKIN_IN => clk,
CLKFX_OUT=> clk55MHz,
CLKIN_IBUFG_OUT => open,
CLK0_OUT=> open,
LOCKED_OUT=> lock
);
注意:.CLKIN_IBUFG_OUT()端口支持RocketIO™接收器,因为目标板不是Virtex-II Pro™,这个端口将连接到一个虚拟信号。
8. 为55 MHz输出加入信号申明。
Signals for DCM
wire clk55MHz;
9. 加入一个锁定顶层模块的输出管脚
entity uart_clock is
Port (
tx : out std_logic;
rx : in std_logic;
alarm : out std_logic;
clk : in std_logic;
lock : out std_logic
);
end uart_clock;
注意:这个输出端将驱动Spartan-3板上的led1,它由DCM上的锁存信号驱动。这可以向用户说明DCM已经成功地将晶振频率锁定到50 MHz。
10. 点击File ® Save保存文件。
源文件my_dcm.xaw已经成功的插入到设计中的正确位置。
用 PACE 分配管脚 步骤3
你已经完成了添加DCM入设计的部分。
许多的FPGA设计者在设计完成之前需要对输出管脚进行分配。PACE做到了这一点。使输出的管脚符合I/O标准。
在这个步骤中,你将学会使用PACE来对管脚进行分配。
1. 在Sources in Project窗口,选择顶层设计文件uart_clock.vhd/.v。
2. 在Processes窗口,展开User Constraints,双击Assign Package Pins打开PACE.
当要求是否增加一个UCF文件到工程时,点击“yes”。在PACE打开之前设计必须综合了。
3. 浏览Design Object List窗口,重新查看列出的信号。注意哪些是输入信号,哪些是输出信号。
4. 在信号旁边的Loc栏,输入管脚的连接信号,如下所示,保存设计。
o clk : connected to 50 MHz oscillator
o lock : connected to led0
o alarm : connected to led1
o rx : connected to pin that receives serial data from Maxim MAX3232
o tx : connected to pin that transmits serial data to Maxim MAX3232
注意:参考Digilent Spartan-3E管脚用户指南。
5. 在对话框中,选择XST Default: <>作为I/O总线分割符,点击OK
联系内部逻辑看管脚分配
1. 在Device Architecture窗口,如果看不清每个管脚,放大。(Figure 2-8)
在I/O管脚附近的颜色棒,表明这几个管脚是属于同一个I/O库。你可以很方便地看到哪些管脚属于同一个I/O库。
Figure 2-8. Device Architecture 窗口
2. 点击each colored I/O pin.相应的管脚将在Design Object List窗口中列出。
3. 在Design Object List窗口,确认管脚分配已经变化。
4. 点击File ® Save,保存管脚的位置。
5. 点击File ® Exit,关闭PACE.
6. 在Processes窗口,展开User Constraints,双击Edit Constraints (Text),在文件uart_clock.ucf中查看一些约束条件。查看UCF文件确认这些约束条件是否已经写入文件中。
检验PAD报告,开始终端 步骤4
完成设计,查看PAD报告确认管脚的分配是否符合规定。开始终端。
1. 确认顶层文件uart_clock.vhd/.v已在Sources in Project窗口中选择。
2. 在Processes for Source窗口中,展开Implement Design进程,展开Place & Route。
3. 双击Pad Report
工程会自动决定哪些进程可以运行,在Place & Route进程完成后它将会打开一个报告。
4. 确定管脚的I/O信号与任务匹配。
5. 打开终端Start à All Programs àAccessories à Communications à HyperTerminal
6. 命名。点击<OK>,指定COM1为连接口。
7. 点击配置按钮,按如下要求设置相应的选项,完成后点击<OK>。
· Baud rate of 38400
· 8 data bits
· No parity bits
· 1 stop bit
· No flow control
Figure 2-9. 串行端口的设置
8. 点击设置栏,点击ASCII设置制表,将出现一个选项栏,选择Append line feeds to incoming line ends选项,点击 <OK>,再点击<OK>关闭对话框。
Figure 2-10. 串行端口的ASCII 设置
下载设计 步骤5
产生位流下载到FPGA
1. 打开uart_clock.vhd,双击Generate Programming File产生位流,下载到FPGA.
2. 当一个进程完成后,展开Generate Programming File,双击配置装置(iMPACT).
3. 选择后,点击<finish>.
注意:在扫描边界链等内容的对话框出现后,点击<finish>.
4. 当Assign New Configuration File对话框出现后,选择uart_clock.bit文件,点击<open>.
注意:如果启动时钟变化到一个JTAG时钟将会出现一个警告信息,点击<OK>。
5. 对于其他设置点击Bypass
Figure 2-11. 含相关的配置文件的JTAG链
6. 连接JTAG下载串口通信网路到Spartan-3E目标板,上电。
7. 点击iMPACT窗口中的xc3s500,选择Program,在Programming Options对话框中点击<OK>。
注意:你可以立即在hyperterminal窗口中看见KCPSM3>
Figure 2-12. 带PicoBlaze的串口通信
运行UART实时时钟 步骤6
按照UART_real_time_clock.pdf文件里指定的,你需要执行一些命令来管理UART 实时时钟。
1. 输入命令“time”,即时显示当前的时间,以hh:mm:ss的形式。
2. 输入命令“alarm”,显示当前的闹铃时间,以hh:mm:ss的形式。
注意:闹钟是不变的
Figure 2-14. 闹钟时间的显示
3. 输入命令“alarm on”,闹钟开始运行。
4. 输入命令“alarm 00:00:30”,将闹钟设置到30s
5. 输入命令“time 00:00:00”,开始时间的设置。
注意:闹钟一旦停止,在Digilent Spartan-3E board板上的led1将会立即点亮。
6. 输入命令“alarm off”,关闭闹钟。
注意:你将看到led0已灭,提示闹钟已经不再运行了。
结论
在这个例程中,你使用建立向导配置了一个DCM组件,并将这个组件加入设计中,你使用了PACE来进行管脚分配,最后,完成设计,并对硬件进行了测试。
说明:完整的文档存在与E:\Xilinx\Xilinx_document\use_DCM中的名为"dcm实验_verygood.doc"的文档
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。