FPGA学习步骤30页Word格式.docx
- 文档编号:13282245
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:17
- 大小:29.13KB
FPGA学习步骤30页Word格式.docx
《FPGA学习步骤30页Word格式.docx》由会员分享,可在线阅读,更多相关《FPGA学习步骤30页Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
这是必备的软件环境。
硬件环境还需要下载器、目标板。
虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。
这就像谈女朋友,总是嘴上说说,通个电话,连个手都没牵,能说人家是你朋友?
虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。
这点花费算什么?
2、熟悉verilog语言或者vhdl语言,熟练使用quartusII或者ISE软件。
VHDL和verilog各有优点,选择一个,建议选择verilog。
熟练使用设计软件,知道怎样编译、仿真、下载等过程。
起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。
入门阶段可以在利用网络资源完成。
3、设计一个小代码,下载到目标板看看结果
此时可以设计一个最简答的程序,譬如点灯。
如果灯在闪烁了,表示基本入门了。
如果此时能够下载到fpga外挂的flash,fpga程序能够从flash启动,表明fpga的最简单设计你已经成功,可以到下一步。
4、设计稍微复杂的代码,下载到目标板看看结果。
可以设计一个UART程序,网上有参考,你要懂RS232协议和fpga内置的逻辑分析仪。
网上下载一个串口调试助手,调试一番,如果通信成功了,
恭喜,水平有提高。
进入下一步。
5、设计复杂的代码,下载到目标板看看结果。
譬如sdram的程序,网上也有参考,这个设计难度有点大。
可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉fpga的设计饿了
6、设计高速接口,譬如ddr2或者高速串行接口
这要对fpga的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对fpga的物理接口掌握很深,你就是设计高手了
7、设计一个复杂的协议
譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。
完成这些,你就是一个一流的高手、
8、学习再学习
学习什么,我也不知道,我只知道“学无止境,山外有山”。
上述只是一些简单的学习步骤,希望能对大家有所帮助!
Verilog经验谈
规范很重要
工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件
还是硬件),不按照规范走几乎是不可实现的。
逻辑设计也是这样:
如果不按规范做的
话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,
更不要说检错了;
如果一个项目做了一半一个人走了,接班的估计得从头开始设计;
如
果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用
性。
在逻辑方面,我觉得比较重要的规范有这些:
1.设计必须文档化。
要将设计思路,详细实现等写入文档,然后经过严格评审通过
后才能进行下一步的工作。
这样做乍看起来很花时间,但是从整个项目过程来看,绝对
要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
2.代码规范。
a.设计要参数化。
比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我
们可以这么写:
parameter
CLK_PERIOD=30;
RST_MUL_TIME=5;
RST_TIME=RST_MUL_TIME*CLK_PERIOD;
...
rst_n=1'
b0;
#RST_TIMErst_n=1'
b1;
#CLK_PERIOD/2clk<
=~clk;
如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重
新例化就行了,从而使得代码更加易于重用。
b.信号命名要规范化。
1)信号名一律小写,参数用大写。
2)对于低电平有效的信号结尾要用_n标记,如rst_n。
3)端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪
个模块去的关系排列,这样在后期仿真验证找错时后
方便很多。
如:
modulea(
//input
clk,
rst_n,
//globlesignal
wren,
rden,
avalon_din,
//relatedtoavalonbus
sdi,
//relatedtoserialportinput
//output
data_ready,
avalon_dout,//relatedtoavalonbus
);
4)一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个en
tity。
在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔
离。
这样做可以让综合器综合出更优的结果。
5)尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止
出现任何胶连逻辑(gluelogic),哪怕仅仅是对某个信号取反。
理由同上。
6)在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的
,比如配置寄存器就是这种类型。
7)一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。
所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也
是极有好处的。
9)除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要
用到门控时钟的地方,也要将门控信号用时钟的下降沿打一拍再输出与时钟相与。
clk_gate_en
--------
----
-----------------|D
Q|------------------|
\gate_clk
_out
|
|
---------|
)--------
-
------o|>
/
clk
--------
------------------------------------
10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式
,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的
复杂性。
如FPGA的输入时钟是25M的,现在系统内部要通过RS232与PC通信,要以rs232_
1xclk的速率发送数据。
不要这样做:
always(posedgers232_1xclkornegedgerst_n)
begin
end
而要这样做:
always(posedgeclk_25mornegedgerst_n)
elseif(rs232_1xclk==1'
b1)
11)状态机要写成3段式的(这是最标准的写法),即
always@(posedgeclkornegedgerst_n)
current_state<
=next_state;
always@(current_state...)
case(current_state)
s1:
if...
next_state=s2;
else
a<
=1'
c<
//赋默认值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 学习 步骤 30