原创 做FPGA实验流程总结

2011-9-14 16:18 1875 1 2 分类: FPGA/CPLD

 

做FPGA实验流程总结  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

近日在学习做实验的过程中,发现虽然每个实验各有不同,但我总是可以找到一些通用的流程,然后按这些流程去做设计效率会提高很多,也避免了反复思考同一个点或反复犯同样的错误。现将自己在做实验时总结的一些流程整理成博文,与大家共享。学生还是初学者,希望大家多多指点。

一、 编写可综合的Verilog程序的流程

流程

举例

备注

module

module  detseq(clk, rst_n);

endmodule 

input/output

input  clk;    //25M

input  rst_n;  //reset,low active

注意有总线形式的端口声明

reg/wire

reg[2:0] state;

注意总线形式的信号类型

parameter

//-------------------parameter-------------------------

 parameter    Idle     =   3'd0,

  start     =   3'd1,

  Bit0     =   3'd2,

  Bit 1    =   3'd3,

  Bit 2    =   3'd4,

  Bit 3    =   3'd5,

  stop     =   3'd6;

程序

//----------------------------------------------------

//---------------state machine ctrl---------------

//----------------------------------------------------

always @ 

各模块之间最好有隔离标志

assign

assign sda  =   sda_r;

这个容易忘,单独强调

二、 编写testbench的流程

流程

举例

备注

module

module  tb_detseq;

endmodule

 

reg/wire

将之前的input/output转换就行了

注意有总线形式的端口声明

reg/wire

reg[2:0] state;

注意总线形式的信号类型

uut

 modelsim_hardreg                     uut

                                          (                                                                                                        .clk(clk),

                                                  .clr_n(clr_n),

                                                   .data(data),

                                                  .q(q)

                                          );

调用被测试模块

parameter

//-------------------parameter-------------------------

 parameter    Idle     =   3'd0,

                       start     =   3'd1,

                       Bit 0    =   3'd2,

                       Bit 1    =   3'd3,

                       Bit 2    =   3'd4,

                       Bit 3    =   3'd5,

                       stop     =   3'd6;

 

程序

clock模块程序

各模块之间最好有隔离标志。

rst_n模块程序

//----------------------------------------------------

//------------------------ctrl------------------------

//----------------------------------------------------

always @ …

assign

assign sda  =   sda_r; 

这个容易忘,单独强调

 

 三、 编译前地设置

①首先,将unused pins设为As input tri-stated。【由于一些未知的原因,Quartus II对于unused pins的默认设置是As output driving ground,所以我不得不每次编译前将其设为As input tri-stated(不然上电蜂鸣器就一直响)。当然,还有其它的一些地方需要设置,但现在不改动也没事,所以一直没有改过。

②然后执行“综合” 。

③然后,在assignment Editor配置管脚。

④最后,执行“编译” 。

四、 写状态机程序时的流程

俗话说的好,磨刀不误砍柴工。在我看来,做一个项目时间的分配应该是这样的:70%的时间设计(以设计报告的形式体现)、20%的时间实际操作、10%的时间总结经验。

与其写程序时边想边写,不如先进行详细的设计,然后再开始写,或许几分钟就可以写完。虽然有时候边写边想会思如泉涌,写起来如行云流水一发不可收拾。但更多的时候是脑袋里各种思路乱蹦,写到一定程度后不得不停下来理一理思路。与其这样,不如多在前期设计上下功夫。

言归正传。

我在写状态机时会按照如下的流程:

① 设计目标

② RTL级数据流

③ 对时序图的理解

④ 状态转换图

注:由于我接触的实验有限,上述流程只适合于小的程序。

在下一篇博文中,我会以一个实际的例子来展现整个流程。

文章评论1条评论)

登录后参与讨论

用户379271 2011-8-26 15:23

近日在准备全国电子设计大赛,博客无法更新。9月5日比赛结束后,会继续更新博客。呵呵...
相关推荐阅读
用户379271 2011-11-09 11:16
【S3C2440学习笔记】ADC&触摸屏
1         硬件原理图 触摸屏的电路还是比较复杂的,暂时先不考虑其具体电路,我们先总结出和CPU相连的管脚。   管脚 ...
用户379271 2011-10-31 15:34
怀念以前的EDNchina,怀念以前的气氛。
       今天好不容易将uboot-1.1.6移植到TQ2440上,本来想写篇博客总结一下,却怎么也找不到自己的博客了。登录之后,却满目狼藉。不想说什么了,不久前,就知道合并的事了,本希望它好...
用户379271 2011-10-21 08:23
Uboot在Nand Flash和SDRAM中的地址映射
1         我的困惑 (1)  .lds文件到底起什么作用 (2)  start.o中初始化和文字池的关系(汇编语言问题),以及的那几个变量的作用 注:本文是基于u-boot-1.1.6编写...
用户379271 2011-10-21 08:18
学习Uboot时的思考
其实,我在10月5日的时候就开始看Uboot了,但由于自己当时还不会ARM汇编,所以放下Uboot开始学习ARM汇编。之后又学习《ARM体系结构与编程》中的前五章的知识点,又写了一些小的验证理论的程...
用户379271 2011-10-17 00:41
指令LDR与伪指令LDR
1         指令LDR 应用举例: u       LDR R0, [R1, #4]     ;将内存单元R1+4中的字读取到R0寄存器 其中,R1为基址,#4为偏移地址,R0为目标地址。注...
用户379271 2011-10-13 07:21
ARM指令集学习笔记
目  录 1    ARM汇编指令格式... 3 2        数据处理指令... 4 3        存储器访问指令... 4 4        分支指令... 4 5        软中...
我要评论
1
1
关闭 站长推荐上一条 /2 下一条