做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级数据流
③ 对时序图的理解
④ 状态转换图
注:由于我接触的实验有限,上述流程只适合于小的程序。
在下一篇博文中,我会以一个实际的例子来展现整个流程。
用户379271 2011-8-26 15:23