fpga设计心得体会

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

fpga设计心得体会
篇一:fpga设计的几个实例
Verilog HDL设计练习一.简单的组合逻辑设计
练习一.简单的组合逻辑设计
目的: 掌握基本组合逻辑电路的实现方法。

这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。

在Verilog HDL中,描述组合逻辑时常使用assign结构。

注意equal=?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。

模块源代码:
//--------------- -----------------
module xxpare;
input a,b;
output equal;
assign equal=?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。

endmodule
测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。

测试模块源代码:
`timescale 1ns/1ns//定义时间单位。

`include "./" //包含模块文件。

在有的仿真调试环境中并不需要此语句。

//而需要从调试环境的菜单中键入有关模块文件的路径和名称 module xxparetest;
reg a,b;//在测试文件中需要进行赋值的变量要定义成ren型,一般为inputwire equal;//在测试文件中只要进行连接定义成wire型,一般为output
initial //initial常用于仿真时信号的给出。

begin //initial语句就是给出在什么时间给定什么样的值
a=0;
b=0;
#100 a=0; b=1;
#100 a=1; b=1;
#100 a=1; b=0;
#100 $stop;//系统任务,暂停仿真以便观察仿真波形。

end
xxpare//模块名// xxpare1,.a,.b); //调用模块。

//括号内的为测试文件的信号,而.a等为模块要连接的信号endmodule
仿真波形(部分):
练习:
设计一个字节(8位)比较器。

要求:比较两个字节的大小,如a[7:0]大于 b[7:0]输出高电平,否则输出低电平,改写测试模型,使其能进行比较全面的测试。

练习二. 简单时序逻辑电路的设计
目的:掌握基本时序逻辑电路的实现。

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。

在可综合的Verilog HDL模型,我们通常使用always块和 @或 @的结构来表述时序逻辑。

下面是一个1/2分频器的可综合模型。

// half_:
module half_clk;
input clk_in,reset;
output clk_out;
reg clk_out;
always @
begin
if clk_out=0;
elseclk_out=~clk_out;
end
endmodule
在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的。

对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。

为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。

测试模块的源代码:
//------------------- clk_ -----------------------------
`timescale 1ns/100ps
`define clk_cycle 50
module clk_
reg clk,reset;
wire clk_out;
always #`clk_cycle clk = ~clk;
initial
begin
clk = 0;
reset = 1;
#100 reset = 0;
#100 reset = 1;
#10000 $stop;
end
half_clk half_clk,.clk_in,.clk_out);
endmodule
仿真波形:
练习:依然作clk_in的二分频clk_out,要求输出与上例的输出正好反相。

编写测试模块,给出仿真波形篇二:fpga设计流程
1. FPGA开发流程:电路设计与设计输入仿真验证:利用Xilinx集成的仿真工具足矣逻辑综合:利用XST工具布局布线:利用Xilinx的Implementation Tool工具 FPGA配置下载:利用iMPACT工具
2. 时序标注文件是指SDF(Standard Delay Format Timing Annotation)文件,在Xilinx公司的FPGA/CPLD设计中使用“.sdf”作为时序标注文件的扩展名,而在 Altera 公司的FPGA设计中使用“.sdo”作为时序标注文件的扩展名。

它在仿真过程的主要作用就是在SDF标注文件中对每一个底层逻辑门提供了 3 种不同的延时值,分别是典型延时值、最小延时值和最大延时值,用于进行静态时序分析(STA)仿真验证。

3. 综合在FPGA/CPLD设计中的作用是是将寄存器传输层的的结构描述转化为逻辑层的结构描述,以及将逻辑层的结构描述转化为电路的结构描述。

综合步骤的输入是HDL源
代码,输出是逻辑网表。

4. ModelSim仿真器是基于事件驱动的,它可以用来仿真Verilog语言,也可以用来仿真 VHDL语言,同时也支持两种语言的混合仿真。

5. 根据设计阶段不同,仿真可以分为RTL行为级仿真、综合后门级功能仿真和时序仿真等三大类型。

6. ModelSim提供的调试手段与工具有以下几种:在源文件窗口中设置断点或者单步执行。

观察波形测量时间。

在数据流窗口中浏览设计的物理连接。

查看或者初始化存储器。

分析仿真效率。

测试代码覆盖率。

波形比较。

7. HDL Bencher的Xilinx版本可以支持VHDL语言输入、Verilog HDL语言输入和Xilinx 原理图输入等3种输入方法。

8. 实现是将设计的逻辑网表信息转换成所选器件的底层模块与硬件原语,将设计映射到器件结构上,进行布局布线,达到在选定器件上实现设计的目的。

9. 实现主要分为3个步骤:转换逻辑网表:将多个设计文件合并为一个网表映射到器件单元:将网表中的逻辑符号(门)组装到物理元件(CLB和IOB)中布局布线:将元件放置到器件中,并将其连接起来,同时提取出时序数据,并生成各种报告
10. 实现前应该设计实现约束条件: 约束条件一般包
括管脚锁定、时钟约束、全局时钟、第二全局时钟、分组约束和物理特性约束等信息。

ISE中可以使用约束xx器生成约束文件。

11. FPGA的设计指导原则:面积和速度的平衡与互换原则、硬件原则、系统原则、同步设计原则
12. ISE中的HDL Editor工具包括的Verilog和 VHDL 三大语言模板大致可以分为下列 4 个项目:器件实例化、语法模板、综合模板、用户自定模板
13. XST(Xilinx Synthesis Technology)是Xilinx ISE 内嵌的综合工具。

XST的输入文件一般是HDL源文件,并且XST已经支持Verilog和VHDL混合语言源代码输入;XST的输出文件是NGC网表,XST的报告文件是Log文件。

14. XST的综合约束文件是XCF(XST Constraint File),而布局布线阶段最重要约束文件是用户约束文件UCF(User Constraint File)。

15. XST综合主要分为以下3个步骤: HDL源代码分析、HDL代码综合、底层优化
16. Xilinx全局时钟资源必须满足的重要原则是:“使用IBUFG或IBUFGDS的充分
必要条件是信号从专用全局时钟管脚输入”。

即,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或
IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。

17. BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。

18. 全局时钟资源的例化方法大概可分为两种:在程序中直接例化全局时钟资源、通过综合阶段约束或者实现阶段约束完成对全局时钟资源的使用
19. 简述全局时钟资源与第二全局时钟资源的概念与基本使用方法。

同步时序电路基于时钟触发沿设计,对时钟的周期、占空比、延时、抖动提出了更高的要求。

为了满足同步时序设计的要求,一般在FPGA/CPLD设计中采用全局时钟资源驱动设计的主时钟,以达到最低的时钟抖动和延迟。

第二全局时钟资源,也叫长线资源。

它是分布在芯片的行、列的栅栏(Bank)上,一般采用铜、铝工艺,其长度和驱动能力仅次于全局时钟资源。

与全局时钟相似,第二全局时钟资源直接同IOB、CLB、Block Select RAM等逻辑单元连接,第二全局时钟信号的驱动能力和时钟抖动延迟等指标仅次于全局时钟信号。

Xilinx全局时钟资源的使用方法有以下5种:IBUFG + BUFG的使用方法、 IBUFGDS + BUFG的使用方法、.BUFG + DCM+BUFG的使用方法、Logic+BUFG的使用方法、Logic + DCM+BUFG的使用方法第二全局时钟资源的使用方法一般是在Xilinx的约束xx器(Constraints Editor)
的专用约束(Misc)选项卡中指定所选信号使用低抖动延迟资源“Low Skew”。

也可以直接在指导Xilinx实现步骤的用户约束文件(UCF)中添加“USELOWSKEWLINES”约束命令。

篇三:基于FPGA的设计题目
1. 花样彩灯控制器的设计
设计要求:
假设输入脉冲为3MHz,控制16只LED发光二极管每隔1s或2s显示一种花样。

要求显示的花样如下:闪烁2次从LED(0)移位点亮到LED(15)一次全部点亮一次从LED(15)开始逐个熄灭至LED(0)1次闪烁2次。

如果按下清零键时,16只LED均熄灭一次,然后再重新按规律显示。

如果没有按下快/慢选择控制键时,16只LED发光二极管是以每隔1s进行花样显示,否则按下快/慢键选择控制键时,16只LED发光二极管是以每隔2s进行花样显示。

2. 利用FPGA实现一个简单的DDS正弦波发生器
(DDS:数字显示示波器)
可分解为三个部分来设计:时钟产生模块;地址产生模块;ROM查找表模块。

实现思路:
①首先,由外部晶振引入40MHz的时钟到FPGA内部,进入时钟产生模块,对时钟进行处理并3倍频程后,得到一个稳定精确的120MHz的系统时钟;
②然后,地址产生模块在系统时钟的激励下,将频率
控制字与累加寄存器输出的数据进行累加,然后把累加的结果作为地址输出给ROM查找表地址;
③最后,ROM查找表模块在每个系统时钟的上升沿,按照地址来读取ROM查找表中的相应的波形采样点数据并输出,该数就是最终的DDS信号。

3. 多功能信号发生器的设计
设计要求:
设计一个多功能信号发生器,能够以稳定的频率产生锯齿波、增减锯齿波、三角波、阶梯波、正弦波和方波等六种信号。

系统有3个波形选择开关和一个复位开关,通过波形选择开关可以选择以上各种不同种类的输出波形;按下复位开关时,系统将复位。

设计实现:
由于FPGA只能直接输出数字信号,而多功能信号发生器输出的各种波形
均为模拟信号,因此设计信号发生器时,需将FPGA输出的信号通过D/A转换电路将数字信号转换成模拟信号。

多功能信号发生器可由信号产生电路、波形选择电路和D/A转换电路构成。

如下图所示:
波形输出
4. 数字跑表的设计
设计要求:
设计一个数字跑表,该跑表具有复位、暂停、秒表计时等功能。

该跑表有三个输入端,分别为时钟输入(CLK)、复位(CLR)和启动/暂停(PAUSE)
复位信号高电平有效,可对整个系统异步清0,当启动/暂停(PAUSE)键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的基础上再计数。

为了便于显示,可分秒、秒和分钟信号皆采用BCD码计数方式,并直接输出到6个数码管显示。

5. 8位数字频率计的设计
设计一个8位频率计,可以测量从1Hz到99 999 999Hz 的信号频率,并将被测信号的频率在8个数码管上显示出来。

采用一个标准的基准时钟,在单位时间(如1s)里对被测信号的脉冲数进行计数,即为信号的频率。

整个系统分为三个模块:控制模块,计数测量模块和锁存器模块。

6. 基于FPGA的简单运算器的设计
①设计要求:
该运算器能完成-7到+7的简单的加、减、与、异或四种运算功能,并且
可以对溢出的结果进行修正。

硬件实验板由一个八按键
电路和一个32位LCD显示器组成,通过相应的按键输入把运算结果显示在LCD显示器上。

②设计原理:
该运算电路由按键输入、控制、修正、显示和运算五大模块组成,来实现加、减、与、异或四种运算功能,首先按键模块用于输入两个数的运算符,通过控制模块传送到运算器模块进行运算,再连接到修正模块,通过修正模块对“溢出”的数值进行修正,最后显示模块功能实现把运算过程反应到LCD显示器上。

7. 基于FPGA的脉冲信号型乐曲播放器的设计
设计要求:
利用FPGA设计一个控制器,让不同频率的脉冲信号有序的输出并驱动扬声器发声,最终完成一首乐曲的演奏。

设计步骤:
①预置乐曲,作预置时,需将乐曲音符转换成相应代码,通过计算逐一将音符换成代码,通过相应软件平台进行乐曲定制;
②为提供乐曲发音所需的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符的相应频率;
③为了给分频提供预置数,需计算分频预置数;
④对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真。

8. 闹钟系统的设计
设计一个带闹钟功能的24小时计时器,包括以下几个组成部分:
①显示屏,由四个七段数码管组成;
②数字键‘0’到‘9’,输入时间;
③ TIME(时间)键,用于确定新的时间设置;
④ ALARM(闹钟)键,用于确定新的闹钟时间设置;
⑤扬声器
该设计要求完成如下功能:
计时功能;闹钟功能;设置新的计时器时间;设置新的闹钟时间;显示所设置的闹钟时间;
根据以上的设计要求,整个系统大致包括如下几个组成部分:用于键盘输入的缓冲器;用于时钟计数的计数器;用于保存闹钟时间的寄存器;用于显示七段数码显示电路以及控制以上各部分协同工作的控制器。

9. 数字钟的设计
①设计要求:
假设外部输入脉冲为1Hz,要求使用该频率设计一个时间可调,并通过LED七段共阴极数码管显示时、分、秒的数字钟。

②设计原理:
进行设计数字钟的设计时,首先对1s的时钟进行计数,
当计数达到60次时,输出1个分钟(min)脉冲;当1min 的时钟计数到达60次时,输出1个小时(h)脉冲;若1h 的时钟计数达到23次时,并且1min的计数到59次、1s的计数也达到59次,再来1个1s的脉冲,数字钟就自己复位,重新从零开始计时。

由此,可知数字钟由三个计数模块(二十四进制计数器、十进制计数器和六进制计数器)、7段LED驱动显示模块和顶层模块组成。

10. 四组抢答器的设计
设计要求:
设计一个四组竞争抢答器系统,每组有1个对应的按钮,编号分别为A、B、
C、D在主持人的主持下,参赛者通过抢先按下抢答按钮获得答题资格。

当某一组按下按钮并获得答题资格后,LED 显示出该组编号,并有抢答成功显示同时锁定其他组的抢答器,使其他组抢答无效。

如果主持人在为按下开始按钮前,已有人按下抢答按钮,属于违规,并显示违规组的编号,同时蜂鸣器发音提示,其他组无效。

获得回答资格后,若该组回答的问题正确,则加1分,否则减1分。

抢答器设有复位开关,由主持人主持。

设计实现:
根据设计要求,可以使用多个不同的单元模块,并通过有机的组合来得到抢答器系统。

这些单元模块主要包括抢答判断模块、计分模块和7段LED显示驱动模块。

信号发生器结构图:
波形输出
11. 数字电压表的设计
设计要求:
使用FPGA控制ADC0809,设计一个量程为5V的数字电压表。

要求采用3位数码管显示电压值,可以显示小数点的后两位。

设计实现;
使用FPGA控制ADC0809设计一个量程为5V的数字电压表时,首先通过FPGA的相关端口控制ADC09809将外部输入转换成8位数字表,再将8为数字表返回到FPGA中进行相关处理,最后将处理好的数据通过LED数码管显示相应的电压值即可。

由于在此系统中只需要对一路模拟电压进行测量,因此可将ADD C 、 ADD
B、 ADD A这3根地址选择线进行接地。

12. 基于FPGA的可逆加减计数器的实现
设计要求:
可预置16位可逆加减计数器。

要求计数器有16位计数输出同时有进位和借位输出,预置输入采用同步方式。

用FPGA开发板上的按键作为加减计数控制输入,数码管(或LED)作为计数值输出。

13.
设计要求:
用一个10×8的双口RAM完成10个8位计数器,计数器的初值分别为1~10,时钟频率为1MHz,计数器技术频率为1Hz.。

相关文档
最新文档