当前位置:文档之家› 《FPGA学习步骤》word版

《FPGA学习步骤》word版

《FPGA学习步骤》word版
《FPGA学习步骤》word版

FPGA学习步骤,我的体会

FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片逻辑到复杂的ASIC原型验证,从小家电到航天器,都可以看到FPGA应用,它的优点在这里无庸赘述。从个人实用角度看,对于学生,掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用fgpa可以让设计变得非常有灵活性。掌握了fpga的设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但fpga的入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。fpga的设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很容易就过去。

我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对fpga的学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨论和指正。

1、工欲善其事,必先利其器。

计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。

硬件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习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;

parameter RST_MUL_TIME = 5;

parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;

...

rst_n = 1'b0;

# RST_TIME rst_n = 1'b1;

...

# CLK_PERIOD/2 clk <= ~clk;

如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。

b.信号命名要规范化。

1) 信号名一律小写,参数用大写。

2) 对于低电平有效的信号结尾要用_n标记,如rst_n。

3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。如:

module a(

//input

clk,

rst_n, //globle signal

wren,

rden,

avalon_din, //related to avalon bus

sdi, //related to serial port input

//output

data_ready,

avalon_dout, //related to avalon bus

...

);

4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个en

tity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔

离。这样做可以让综合器综合出更优的结果。

5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止

出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。

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 (posedge rs232_1xclk or negedge rst_n)

begin

...

end

而要这样做:

always (posedge clk_25m or negedge rst_n)

begin

...

else if ( rs232_1xclk == 1'b1 )

...

end

11)状态机要写成3段式的(这是最标准的写法),即

...

always @(posedge clk or negedge rst_n)

...

current_state <= next_state;

...

always @ (current_state ...)

...

case(current_state)

...

s1:

if ...

next_state = s2;

...

...

always @(posedge clk or negedge rst_n)

...

else

a <= 1'b0;

c <= 1'b0;

c <= 1'b0; //赋默认值

case(current_state)

s1:

a <= 1'b0; //由于上面赋了默认值,这里就不用再对b

、c赋值了(b、c在该状态为0,不会产生锁存器,下同)

s2:

b <= 1'b1;

s3:

c <= 1'b1;

default:

...

...

3.ALTERA

参考设计准则

1) Ensure Clock, Preset, and Clear configurations are free of glitch

es.

2) Never use Clocks consisting of more than one level of combinatori

al logic.

3) Carefully calculate setup times and hold times for multi-Clock sy stems.

4) Synchronize signals between flipflops in multi-Clock systems when

the setup and hold time requirements cannot be met.

5) Ensure that Preset and Clear signals do not contain race conditio

ns.

6) Ensure that no other internal race conditions exist.

7) Register all glitch-sensitive outputs.

Synchronize all asynchronous inputs.

9) Never rely on delay chains for pin-to-pin or internal delays.

10)Do not rely on Power-On Reset. Use a master Reset pin to clear al

l flipflops.

11)Remove any stuck states from state machines or synchronous logic.

其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。

==================================================================================== 时序是设计出来的

我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑

的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中

,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来

的。

在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工

作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细

设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作

所占的时间要远大于编码的时间。

总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求

把接口信号的时序波形描述出来)以及将来如何测试设计。在这一级方案中,要保证在

(完整word版)小学一年级汉语拼音字母表(详细)

声母表(23个) b p m f d t n l g k h j q x zh ch sh r z c s y w 韵母表(24个) ɑo e i u üɑi ei ui ɑo ou iu ie üe er ɑn en in un ün ɑng eng ing ong 整体认读音节(16个) zi ci si zhi chi shi ri yi wu yu yin ying yun ye yue yuan j、q、x、y加ü时,要摘帽。(ju、qu、xu、yu) 韵母表 单韵母:ɑo e i u ü 复韵母:ɑi ei ui ɑo ou iu ie üe 特殊韵母:er 前鼻韵母:ɑn[安] en[恩] in[因] un[温]ün[云]后鼻韵母:ɑng[昂] eng[摁] ing[英] ong[雍] 双唇音: b p m 唇齿音: f 舌尖音: d t z c s n l

翘舌音:zh ch sh r 平舌音:j q x 舌根音:g k h 音节分两拼音节(声母和韵母)和三拼音节(声母、介母、韵母) 三拼音节(9个):iɑ uɑ uo uɑi iɑo iɑn iɑng uɑng iong 三拼音节是指由声母+介母+韵母拼成的音节 er既不是三拼音节又不是整体认读,而是零声母音节 声介合母(介母): bi pi mi di ti ni li ji qi xi du tu nu lu g u ku hu zhu chu shu ru zu cu su lü nü ju qu xu 音节中,声母和韵母中间的i和u称为介母 i、u、ü还可做三拼音节中的介母,介于声母、韵母之间,和声母、韵母一起组成音节,如“选xuǎn管guǎn家jiā”音节中的ü、u、i是介母。 这样的介韵组合一共有11个,教学中可引导学生发现以下规律: 介母是i的: iɑ、iɑn、iɑng、iɑo、ion g。 介母是u的:uɑ、uɑi、uɑn、uɑn g、uo。 介母是ü的:üɑn。 老大ɑ开头的韵母前面可以有介母的一共有9个,而老二o开头的韵母前面可以有介母的只有2个(ion g和uo),其他四兄弟e、i、u、ü都不和介母一起组成音节。

小学汉语拼音字母表卡片-word打印版2

1

2

一、汉语拼音音节表 b ba bo bai bei bao ban ben bang beng bi bie biao bian bin bing p pa po pai pao pou pan pen pang peng pi pie piao pian pin ping m ma mo me mai mao mou man men mang meng mi mie miao miu mian min ming f fa fo fei fou fan fen fang feng d da d e dai dei dao dou dan dang deng di die diao diu dian ding t t a t e t ai t ao t ou t an t ang t eng t i t ie t iao t ian t ing n na nai nei nao no nen nang neng ni nie niao niu ni an nin niang ning l la le lai lei lao lou lan lang leng li lia lie liao liu lian lin liang ling g ga ge gai gei gao gou gan gen gang geng k ka ke kai kou kan ken kang keng h ha he hai hei hao hou hen hang heng j ji jia jie jiao jiu jian jin jiang jing q qi qia qie qiao qiu qian qin qiang qing x xi xia xie xiao xiu xian xin xiang xing xiong zh zha zhe zhi zhai zhao zhou zhan zhen zhang zheng (za zi ze zai) ch cha che chi chai chou chan chen chang cheng (ca ce ci cai cao can) sh sha she shi shai shao shou shan shen shang sheng (sa se si sai…) r re ri rao rou ran ren rang reng (16个整体认读音节) y ya yo yi yu ye yue yao yan you yang yong yuan yin yun ying w wa wai wan wu wang 3

相关主题
文本预览
相关文档 最新文档