即,R二极管应取值为150Ω~700Ω之间,一般来说建议使用470Ω。
在YD-FPGA实验仪中发光二极管电路电路是由FPGA发出的信号通过74HC573锁存器然后驱动发光二极管LED工作。
当74HC573输出端(如:
1Q、2Q、3Q…)为低电平时使得发光二极管两端正向电压大于发光二极管的导通电压,发光二极管发光。
图2.5发光二极管LED显示电路
2.5按键电路
YD-FPGA实验仪为用户提供了8个独立按键,用户可以通过按键向FPGA芯片输入二进制数据。
电路图中的R26是上拉排阻。
图2.6按键电路
2.6LCD液晶显示接口
YD-FPGA实验仪上有一标准的LCD液晶显示器接口J6,该接口共有16个引脚,其中P15,P16为背光源输入,其引脚及功能如表2.2所示,接口原理图如图2.7所示。
由图可以看出,该接口的7—14引脚经过上拉电阻直接与FPGA的I/O口相连,由FPGA直接控制读写信号及其他控制信号。
图2.7液晶显示接口电路
表2.2液晶功能引脚表
引脚
符号
输入输出
功能说明
1
Vss
电源地:
0V
2
Vdd
电源:
5V
3
V1~V5
LCD驱动电压:
0V-5V
4
RS
输入
寄存器选择:
“o”指令寄存器;“1”数据寄存器
5
R/W
输入
“1”读操作:
“0”写操作
6
E
输入
使能信号:
R/W=“0”,E下降沿有效:
R/W=“0”,E高电子有效
7~10
D0-D3
输入/输出
数据总线的低4位,与4位MCU连接时不用
11~14
D4-D7
输入/输出
数据总线的高4位
15
LIGHT+
输入
背光源的输入端口
16
LIGHT-
输入
背光源的输入端口
2.7数码管显示电路
YD-FPGA实验仪为用户准备了一个四位一体的共阳LED数码管JP2显示器,其电路原理图如图2.8所示。
图中KBIT1~KBIT4是数码管的位选控制信号(简称位选信号)。
当控制数码管显示时,KBIT1~KBIT4控制四个数码管的位码,KBIT1~KBIT4为低电平时,三极管Q1~Q4导通,数码管点亮,显示段码的数据。
从FPGA芯片输出的显示数据经过锁存器74HC573之后再驱动数码管显示。
锁存器在此的作用是提高驱动功率。
需注意的是:
发光二极管和数码管显示共用数据输出总线,为了区分各设计一片选信号,共用数据输出总线简化了电路板线路的设计。
图2.8数码管显示电路
2.8D/A转换电路
D/A转换电路如图2.9所示,数字信号是从FPGA芯片输入的,经8位串行D/A转换器U16(DAC0832)转换后,由于此时信号比较弱,因此在D/A转换器后接入一个集成放大器U1(LM324),对U16输出的模拟信号进行放大处理。
电路中J16是+12V/-12V电压输入端口,J17是模拟电压输出端口,J49是选择模拟电压输出范围的一个跳帽,可以选择J17的输出模拟电压的范围是0V~+5V,也可以选择输出模拟电压的范围是-12V~+12V。
例如:
当一个八位的二进制数输入芯片U16,经过芯片的转换将输出同样大小的模拟电压,在模拟电压之后接一个放大器起到隔离缓冲的作用;接下来当J9选择接通1和2时,输出将在0V~+5V之间变化,当J9选择接通3和2时,输出将在-12V~+12V之间变化(该处放大器的放大倍数参考模拟电子技术)。
图2.9D/A转换电路
2.9A/D转换电路
YD-FPGA实验仪为用户提供了一个8位串行的A/D转换,TLC549均有片内系统时钟,该时钟与I/OCLOCK是独立工作的,无须特殊的速度或相位匹配。
如图2.10所示,TLC549共有8个引脚,其中4、8脚为电源输入和接地,2脚为采样电压输入,1、3脚为参考电压输入,5脚为片选信号,在实验仪中直接接到地,保持一直处于工作状态。
7脚为时钟信号的输入,6脚为转换后的串行数据输出。
图2.10A/D转换电路
2.10E2PROM
E2PROM存储器电路图如图2.11所示,它使用串行I2C总线,用户只需要使用串行数据线SDA和串行时钟线SCL即可完成对串行E2PROM芯片CAT24WC02的读写操作。
通过学习、实验可以体会I2C总线的强大功能和独特优点,了解并掌握12C通信协议。
关于I2C总线协议将在以后章节会介绍。
图2.11E2PROM存储器电路图
2.11时钟芯片电路
YD-FPGA实验仪采用了外挂时钟计数器的设计模式。
PCF8563是Philips公司推出的一款带I2C总线具有极低功耗的多功能时钟/日历芯片,具有四种报警功能和定时功能;内部时钟电路、内部振荡电路、内部低电压检测以两线制I2C总线通信方式,不但使用外围电路简洁,而且增加了芯片的可靠性。
PCF8563的SCL为时钟输入端,数据随时钟信号同步输入器件或从器件输出;SDA为双向引脚,用于串行数据的输入输出;INT是中断信号输出端,可通过设置报警寄存器按指定时间在该脚产生报警信号,低电平有效;SDA、SCL、INT均为漏极开路,必须上拉电阻(此处上拉电阻的原理图接在FPGA芯片上);OSC1、OSC2分别为反相放大器的输入、输出端;可在OSC1、OSC2两端接入32.768kHz的石英晶振Y1,配置成片内振荡器。
本系统PCF8563与FPGA芯片接口采用图2.12所示接口电路。
图2.12中,在OSC1、OSC2端接入32.768kHz的石英晶振,将时钟源配置为片内振荡器。
VCC直接接在电源VCC上,但VCC与地之间接入了电容供电维持时钟芯片,锂电池(3.6V)同时开始工作,给时钟芯片供电,使时钟芯片工作不受影响。
PCF8563与FPGA芯片接口采用4根信号线,FPGA芯片通过这四根信号线读取PCF8563的基准时间。
图2.12时钟芯片电路
2.12蜂鸣器
由于蜂鸣器具有控制简单、声响悦耳动听,在工程项目中常用作人机接口的重要输出设备,用以发出语音提示信息。
YD-FPGA实验仪采用交流蜂鸣器,输入的声音信号的频率和音长是用户可控的,因此输出的声响将更逼真、更悦耳。
由于一般I/O口的驱动能力有限,在此采用了三极管Q2来驱动蜂鸣器,其硬件原理图如图2.13所示。
Buzzer与FPGA的I/O口相连,此处用的蜂鸣器是交流蜂鸣器,所以当BUZZER输出一直为高电平或低电平时蜂鸣器不响,而当BUZZER输出一定频率变化的波形时蜂鸣器发出响声。
我们只要控制BUZZER输出高低电平的时间和变化频率,就可以让蜂鸣器发出悦耳的音乐。
2.13蜂鸣器
第三章软件的使用
YD-FPGA实验仪的开发环境为Xinlix公司的ISE5.2,使用的调试仿真工具是与之相配套的ModelsimXE.用户可以自己编程并在YD-FPGA实验仪上实现各功能。
YD-FPGA实验仪不但帮助广大用户学会了FPGA芯片的开发的过程、步骤和方法,而且还把教学中的理论和实践有机的结合起来了。
本章主要介绍如何安装ISE5.2和ModelsimXE仿真软件,Modelsim仿真工具的使用和FPGA设计全过程的基本流程。
一.软件的安装
3.1ISE5.2的安装
安装ISE5.2时只需根据所选的版本是在PC或工作站上,然后根据软件的提示安装即
可,这里不再赘述;对于ModelsimXE的安装可根据ModelsimXE光盘中的提示(readme)进行安装,但需要注意安装后ModelsimXE的链接。
Modelsim的链接:
启动ISE,选中Edit\preference…左击打开,弹出如图3.1.1所示的Preference窗口,再在ParterTools中设定ModelsimXE中的Win32xoem文件夹中的Modelsim文件(即指定modelsim的路径)。
图3.1.1modelsim的路径设定
二.Modelsim仿真工具使用
仿真有两种不同级别的仿真,分别是功能仿真(FunctionSimulation)和时序仿真(TimingSimulation)。
1.功能仿真
功能仿真是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求的过程,仿真过程不涉及任何具体器件的硬件特性。
不经历ImplementDesign阶段,在设计项目编辑编译后即可进入门级仿真器进行模拟测试。
直接进行功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求。
对于规模比较大的设计项目,ImplementDesign在计算机上的耗时是十分可观的,如果每一次修改后的模拟都必须进行时序仿真,显然会极大地降低开发效率。
因此,通常的做法是,首先进行功能仿真,待确认设计文件所表达的功能满足设计者原有意图时,即逻辑功能满足要求后,再进行ImplementDesign和时序仿真,以便把握设计项目在硬件条件下的运行情况。
2.时序仿真
时序仿真就是接近真实器件运行特性的仿真,仿真文件中己包含了器件硬件特性参数,因而,仿真精度高。
但时序仿真的仿真文件必须来自针对具体器件的综合器与适配器。
综合后所得的EDIF等网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件中包含了精确的硬件延迟信息。
以上是功能仿真和时序仿真区别与联系。
ModelSim主要有SE、EE、XE等版本类型。
ModelSimXE是针对Xilinx公司系列器件的专用仿真工具,因此在对Xilinx公司系列器件进行仿真时,不需要预先编辑Xilinx本地库。
甚至无需激活ModelSimXE仿真窗口。
下面介绍如何使用ModelSimXE软件对我们所编写的VHDL程序进行仿真。
这里主要介绍它的使用步骤和某些参数的设定及中间信号的仿真。
1.功能仿真(FunctionSimulation)
下面这个程序是对一个七段数码显示译码器的VHDL语言描述。
我们以这个简单的例子来对功能仿真步骤进行简述。
【例1】
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitydecoder_yesis
Port(in1:
instd_logic_vector(3downto0);
out1:
outstd_logic_vector(6downto0));
enddecoder_yes;
architectureBehavioralofdecoder_yesis
begin
within1select
out1<="1000000"when"0000";--0
"1111001"when"0001";--1
"0100100"when"0010";--2
"0110000"when"0011";--3
"0011001"when"0100";--4
"0010010"when"0101";--5
"0000010"when"0110";--6
"1111000"when"0111";--7
"0000000"when"1000;,--8
"0010000"when"1001";--9
"1111111"whenothers;--Nosignal;
endBehavioral;
第一步:
对所要仿真的模块进行综合,综合通过之后右击该模块,然后选择“NewSource”,如图2.2.1所示.
图2.2.1建立NewSource
第二步:
右击NewSource,弹出对话框New,然后选择对话框中的TestBenchWaveform选项,并在文件名File中任意填写一个文件名,但不能和模块的名称相同,如图2.2.2所示。
这里我们写的是decodert,然后点击“下一步”。
图2.2.2New窗口
第三步:
如图2.2.3所示,当弹出选择对话框Select时,选中你所仿真的模块,然后点击下一步。
在这里由于只有一个模块,而且在一开始进入NewSource时已经选中了所需仿真的模块,因此直接点击“下一步”即可。
Select对话框的含意是联合所要仿真的源程序。
图2.2.3Select窗口
第四步:
第三步之后还会出现两个对话框,直接点击“完成”和“ok”就可以进入如图2.2.4所示的仿真参数设置对话框。
设置好参数之后,存储并关闭进入工程主页。
。
图2.2.4功能仿真窗口
第五步:
如图2.2.5所示,选中仿真模块“decodert.tbw”,对话框如下图所示。
在Processesforcurrentsource中出现ModelsimSimulator,双击第一个子菜单(SimulateBehavioralVHDLModel)或双击第二个子菜单(GenerateExpectedSimulationResults)均可看到仿真结果。
这里以双击第一个子菜单(SimulateBehavioralVHDLModel)出现的结果为例进行说明。
因为采用SimulateBehavioralVHDLModel进行仿真的话,可以对仿真参数进行改变,在分析仿真波形的时候还可以调出中间变量进行分析。
图2.2.5选择仿真形式
第六步:
双击第一个子菜单(SimulateBehavioralVHDLModel)之后将弹出九个窗口,其中有一个是波形仿真窗口:
wave–default,如图2.2.6所示。
该窗口主要是验证功能仿真的结果是否正确。
从图中可以看到七段数码管显示器译码器的功能仿真结果是正确的。
图2.2.6Wave窗口
到此为止,功能仿真的基本步骤内容已经介绍完毕。
对于时序仿真以及仿真中的一些信号的调出和设置等,用户可以查阅相关资料。
三.FPGA设计全过程
本书介绍的FPGA是spartan2E系列的xc2s100e-6pq208的现场可编程器件,FPGA设计的第一步是设计输入(DesignEntry),设计输入完成对一个功能的描述。
Xilinx公司的ISE5.x为FPGA设计者提供了原理图(schematic)输入、VHDL/Verilog语言描述、状态图输入、IP核复用等输入方法VHDL/Verilog语言输入是FPGA设计输入的主要手段,本书主要介绍以VHDL语言输入形式进行现场可编程器件的编程。
VHDL语言设计编程的主要结构:
VHDL语言库的调用,实体(ENTITY)的设计,结构体(ARCHITECTURE)的设计。
进行系统设计时,我们需要设计VHDL顶层文件,把各功能模块联接起来。
以一个简单的D触发器为例来对VHDL语言输入和下载过程进行学习。
第一步:
设计输入
1.新建一个VHDL语言输入的工程
在ISE5.2启动后,选择FileNewProject,跳出NewProject对话框,在对话框中输入工程名vhdl,在DesignFlow(设计流程)栏的下拉菜单中选择XSTVHDL(XilinxSynthesizeToolVHDL),如图3.3.1所示。
如果选择XSTVerilog,设计输入将是Verilog语言。
这里以VHDL输入为例进行介绍,Verilog输入与VHDL输入十分相似,读者自行尝试。
图3.3.1新建VHDL设计工程
2.新建工程设计文件
单击OK选择ProjectNewsource,或者在SourcesinProject窗口中单击鼠标右键,选择Newsource,跳出“新建工程设计文件”对话框。
如图3.3.2所示选择VHDLModule,然后在File中键入D_FF,设计一个D触发器。
图3.3.2“新建工程设计文件”对话框
3.定义端口
单击下一步。
如图3.3.3所示。
在图3.3.3中可以看到EntityName(实体名)缺省为D_FF,Architecture(结构体)缺省为Behavioral,这些