打印
[Actel FPGA]

【转帖】周立功公司fusion FPGA入门笔记

[复制链接]
2207|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
6019赵文|  楼主 | 2009-11-29 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
**主要介绍本人对周立公公司Fusion StartKit的FPGA的初次使用心得,由于是初次接触和使用,文中不乏部分的个人观点和纰漏的地方,如发现错误,望读者见谅,同时期盼您的参与和支持。
阅读本文前,读者最好对Actel FPGA有一点儿认识,浅尝辄止就足够了,同时,如果是FPGA的初学者,最好就先看一下有关Libero软件的使用,至于你想用什么语言,那就各人喜好,本人就偏爱Verilog。当然,如果你以前使用过其他的FPGA和软件的话,那你使用Fusion就能更加得心应手。读者中高手如云,本人在此班门弄斧,恳请指教。作者Yicheng

第一例
SRAM和串口的应用
1.实验设备
(1) 硬件:PC机,Fusion StartKit 开发板全套
(2) 软件:Libero (Quartus II )

2.应用的器件
(1)SRAM:IS61LV25616
(2)串口

3.实验内容
通过PC机,利用串口发送数据,保存到SRAM中,然后又把数据返回PC机,整个过程主要为了实现串口通信,阐明SRAM的读写方式和操作流程,加强对实验板上各器件之间的联合应用能力。

4.器件介绍
(1)IS61LV25616
IS61LV25616是ISSI公司的一款高速静态随机存取存储器,拥有264,144字,总共4,194,304位的存储空间。该芯片采用ISSI公司高性能的CMOS技术,结合先进的电路设计工艺,具有高性能、低功耗等优点的新型器件。快速存取,兼容TTL接口,三态输出等优势都使其倍受市场的青睐,应用日益广泛。
IS61LV25616有几种不同姆庾埃 没вσ虻刂埔耍 笃渌 茫 蘼勰愕难≡袢绾危 酒 墓δ芤 藕敛焕 獾亩际牵旱刂纷芟撸?/span>A0~A17),输入输出总线(I/O0~I/O15),片选(nCE),输出使能端(nOE),输入使能端(nWE),低字节选择端(nLB),高字节选择端(nUB),电源。
IS61LV25616不但接口简单,控制也比较方便。以下特意从其技术文档中截取了几个时序图来加以说明。
下图是读时序图,从图中可以看出,器件处于读状态时,nCE和nOE为低电平,也就是片选和读操作有效,然后在地址总线有效的情况下输入数据被写入相应的存储空间,整个过程当然不能忽略各信号线的转换时延。由于这是一款16位的存储器,当然少不了高低位选择端nLB,nUB,本例一概把数据写到低8位,那么nLB一直为低电平,至于nUB就不作要求。

读写的过程大同小异,在此不再累赘,下图就是写时序图。

(3) 串口
串口这个词对于广大电子爱好者来说当然是再熟悉不过了,接触过单片机的朋友都知道串口是怎么的一回事,然而这里要介绍的却是有点不同,否则我都不会在此浪费篇幅。
单片机的串口是包含于硬件中,我们只要通过指令控制相应的寄存器,就可以通信无阻,然而FPGA就没有这样的免费午餐。但我们可以通过串口的通信原理,利用硬件语言生成一个拥有串口通信功能的模块,本人为其取名,美其名曰"串口"。
生成的串口模块一定要注意时钟问题,特别是在程序的移植过程中,系统时钟会直接影响串口的通信波特率。同时,串口的波特率也可以在允许的范围内适当修改。

上图是在Q2中的使用例子,只要通过把50M的时钟改为48M的时钟环境,就可以方便地移植到Fusion上来了,当然Fusion套件的例子中也有相应的模块,但在此不敢妄自公开。
程序原码如下:
module UART(rxd,clock,out,end_flag);
input clock; //系统时钟
input rxd; //接收
output[7:0] out; //接收到的8位数据
output end_flag;
reg[7:0] out;
reg end_flag;
reg recclk;//16倍于9600的时钟
reg[8:0]divcnt;//分频系数
reg[9:0]data_buf; //接收数据缓冲
reg[3:0]cnt;
reg[3:0]bitpos; //串行数据当前位
reg[7:0]sbuf;
reg[1:0]state;
parameter st0=2'b00, //状态机定义
st1=2'b01,
st2=2'b11;
// st3=2'b10;
always@(posedge clock) //时钟分频325, 产生9600 16倍的频率
begin //时钟分频162, 产生19200 16倍的频率
if(divcnt<9'd162)
begin
divcnt=divcnt+1'b1;
recclk=1'b0;
end
else
begin
divcnt=1'b0;
recclk=1'b1;
end
end

always@(posedge recclk)//16倍于9600的时钟
begin
case(state)
st0:begin
// end_flag=1'b1;
end_flag=1'b0;
if(rxd==1'b1)
begin
cnt=4'h0;
state=st0;//进入空闲状态
end
else
begin
cnt=cnt+1'b1;
end
if(cnt==4'h2)
begin
state=st1;
cnt=4'h0;
bitpos=0;
end
end
st1:begin
if(cnt==4'hf)
begin
cnt=4'h0;
data_buf[bitpos]=rxd;
bitpos=bitpos+1'b1;
if(bitpos==4'd9)//9个数据
begin
bitpos=4'd0;
state=st2;
end
end
else
begin
cnt=cnt+1'b1;
end
end
st2:begin//进入数据传送状态
// end_flag=1'b0; //下降
end_flag=1'b01;//接收完产生一个上降沿
sbuf=data_buf[7:0];
out=sbuf;
state=st0;
end
default:state=st0;
endcase
end
endmodule
以上程序中重点部分都均以注析,究其原理比较通俗,因此蜻蜓点水,一带而过,不再深入剖析。

相关帖子

沙发
6019赵文|  楼主 | 2009-11-29 12:37 | 只看该作者
5.软件编程

首先我要从新说明一下,我用的是Fusion StartKit板,所以编译和下载都非使用其相应的软件Libero,但我介绍过程中的流程和思想并不局限于此。

当我们对器件的性能和操作都有所了解后,我们就可以结合应用方案进行程序的构思,我想再强调一下,不一定要局限于应用的平台,因此,刚开始写程序时,我会使用自己相对比较熟练的Q2。

程序的构思给了我们一个程序的骨架,接下来就是程序的编写以及因人而异的编译次数。

当我们把几个模块的程序都在Q2中编译通过后,就可以移植到Libero中,至于移植后是否会产生错误,本人暂时还没遇到,警告就会因约束条件而异,但是这种方法只是权宜之计,长远来说还是熟练掌握Libero为妙。

下面就针对Libero软件来介绍一下工程的流程。

(1) 打开Libero软件,选择器件,新建工程这些都是在所难免。这些都不想罗嗦了,但不要用中文名字。

(2) 把刚才在Q2中编好的程序导入工程中,文件会立刻出现在工程菜单下。如图中红线圈内:



(3) 接下来就可以进行综合了,如果你不到下面的界面怎么来的话,可以先按图中1位置的按键,然后眼前一亮,当然就会看到下图。然后再按2位置的图标,进入综合的界面。


(4)综合的界面也不复杂,随手按下5位置的RUN键就可以了,直到6位置变成如图就预示离成功不远了。`


(5)返回工程界面,可以看见2的位置变绿色了,同时A位置也多了一个勾,也就是可以进行下面的步骤了,点击3位置,布局和布线的界面如下:


如果是第一次进入Design,那么需要先进行一些设置,如芯片型号,封状,速度等级等,只要选择跟你板相符合的选项就可以一直按OK键了,最后就看到上图界面,按照箭头方向和数值一路点击。

点击7:进行编译

点击8;进行引脚配置(如果引脚没有更改就可以进入9)

点击9:布局布线

点击10:生成编程文件

其中7,9,10的菜单中如没有特殊要求就可以一路回车。

(6)在此特别提醒一下,生成编程文件前会有一个菜单,其中的选项要格外小心,事关你的芯片的**。同时有的朋友可能不能生成编程文件,而且还会出现如下的错误。

E1:原因是没有连接网络。

E2:本人的经验所得就是因为上一次下载后没有把下载软件关闭,编程文件还被占用导致不能更改。关闭下载软件后问题将可迎刃而解。



(7)问题解决后回到Libero软件中,可以看到前面的步骤都变绿色了,剩下来就可以下载进行硬件验证。

FlsahPro软件中有几个地方值得注意:

1. 如果P位置没有找到下载器,那么可以通过C位置的菜单来尝试寻找,同时一定要确保下载器和实验板已经正确连接。

2. 点击PROGRAM键就可以开始下载了,虽然下载的时间比较长,但期间切勿断电。


6.上电实验

经过一番折腾之后终于可以上电验证程序了,首先确保实验板的串口UART2与延长线正确连接。剩下来的就是自由发挥了。


在串口通信的时候值得注意的就是波特率和数据格式的设置。



7.实验总结

实验虽然比较简单,但经过独立的设计,不但加深了对教程上例子的理解,更重要的是能过对器件的灵活应用。

使用特权

评论回复
板凳
huzixian| | 2009-11-29 13:03 | 只看该作者
学习了,顶一下!

使用特权

评论回复
地板
linux1| | 2009-11-30 10:58 | 只看该作者
谢谢楼主的分享!给你顶下!

使用特权

评论回复
5
yoyowodeai| | 2009-11-30 12:57 | 只看该作者
顶一下!

使用特权

评论回复
6
3B1105| | 2009-12-1 23:01 | 只看该作者
好东西,学习了!

使用特权

评论回复
7
llljh| | 2009-12-2 18:54 | 只看该作者
赵文同学的资料不错啊

使用特权

评论回复
8
suoma| | 2009-12-2 22:41 | 只看该作者
好同学!

使用特权

评论回复
9
maoyanketi| | 2009-12-2 23:28 | 只看该作者
谢谢赵文同学啊!

使用特权

评论回复
10
fasionlei| | 2009-12-3 10:18 | 只看该作者
:handshake

使用特权

评论回复
11
riantsoul| | 2009-12-4 21:46 | 只看该作者
顶一下,赵文好人啊

使用特权

评论回复
12
maoyanketi| | 2009-12-6 11:38 | 只看该作者
谢了!顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

1515

帖子

1

粉丝