原创 感谢ripple的回复和建议

2007-2-5 22:39 4203 9 16 分类: FPGA/CPLD

感谢ripple的回复和建议!终于看到有人回复了,心里特别的高兴,我以为我写的东西都是垃圾。另外ripple的建议确实很好,尤其是半满半空,读写指针时序关系等。当时写这个的初衷主要是为了描述一个同步FIFO的模型,所以考虑的还不是特别的全面,尤其对于半空半满这个当时根本就没有考虑。关于“正逻辑”,尤其复位信号,因为DFF一般都提供一步复位接口,所以我喜欢低电平的复位信号,至于内部接口用正逻辑,尤其是读写控制信号,当时也只是根据自己的习惯就用了“负逻辑”。Ripple的这些建议如果以后有机会再增加和更改。


       我主要使用Quartus II 6.0对代码进行了综合和布局布线,使用Modelsim6.0进行功能和时序仿真,布局布线选用的器件是Cyclone II 系列的EP<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2C5T144C8,没有添加任何约束。下面给出有关综合布局布线以及时序分析的RTL和报告。


点击看大图


 


                 图1 RTL顶层图


1 RTL顶层图,可以对照我刚开始画的原理框图(见<同步FIFOVHDL描述1>


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


点击看大图


 


                    2 Fitter报告概要


从图2Fitter报告概要中可以看出,所用FIFO所用RAMFPGA内部的RAM资源


 


 


点击看大图


 


              图3 时序分析概要报告


       布局布线时没有进行任何时序约束,从图3可以看出,这种同步FIFOVHDL描述可以在EP2C5T144C8运行在150MHz(不知道这样看对不对)


       最后再次感谢ripple!


       欢迎大家访问skycanny的笔记(副站)




 


 


 


 


 


 

文章评论7条评论)

登录后参与讨论

用户1268090 2007-2-12 11:20

很高兴能及时看到你的回复.通过你的讲解,对FIFO的认识加深了.

下面再向你请教一个问题啊

众所周知,同步FIFO较异步FIFO更为简单,那么,我的问题是:异步FIFO的主要作用是不是就是跨越时钟域的同步问题,也就是说,在以同步FIFO模块为核心,我只要解决了写模块和读模块的时钟同步问题,就容易写出异步的FIFO模块,

打个比方把,将写请求同步到读时钟域,然后用读时钟来控制同步FIFO......

用户60452 2007-2-9 19:14

BTW

关于同时对FIFO的读写可参加《同步FIFO之VHDL描述5(大结局) 》的图5

用户60452 2007-2-9 19:11

tingwhere ,你好,很高兴来我的副站!

试着回答一下你的几个问题:

1.dualram是简单的双口RAM,在同一时刻可以进行读写操作而互相不影响,因此将来在异步FIFO中直接可以调用。用两个的原因就是双口RAM有写端口和读端口,分别对应两个时钟,是为了双口RAM可以应用在异步的地方。

2.不管是异步FIFO还是同步FIFO,在FIFO非空或非满的情况下读写地址是不相同的,因此需要两个地址,对应到双口RAM也就是addra和addrb。读写同时操作的时候没有优先级,互相不影响,只要FIFO非空,就可以读出来数据,只要FIFO非慢就可以写入数据。

3.关于半满的问题,你的想法是对的,不过要考虑读写指针的循环和先后关系。

用户1268090 2007-2-9 16:45

从主站追看到副站来,拜读了skycanny同步FIFO的RTL框图.有两个问题要问一下,因为我是用verilog的,可能问的问题有些已经在程序上反映出来了,还麻烦您指点迷津.

1.dualram有两个clk,clka和clkb,是不是意味着在未来异步的FIFO中,直接用这个dualram就可以用了.然后,既然FIFO是同步的,何必要设两个clk?只用一个即可啊

2.同样的问题,addra和addrb其实就是读写地址吧,而对于同步FIFO而言读写针对的应该是同一地址而言,如addr,而且要考虑的是读写同时操作的时候是读优先还是写优先的问题.

3,也和riple的问题有关,如果您用了读写地址,那么半满的判决就应该是写地址-读地址>=深度/2,就您的程序而言,就是addra-addrb,不知道我考虑的是否正确?

 

用户60452 2007-2-8 21:50

做除法?困怕有点空难,尤其用CPLD,用FPGA至少应该还能完成,但是速度恐怕比较慢,耗费资源也很多

ash_riple_768180695 2007-2-6 09:15

能不能跑到150MHz,你可以用Quartus的仿真工具试一下。如果你仿真用的clk高于150M,可能仿真结果就不对了。

ash_riple_768180695 2007-2-6 09:11

不谢,不谢。如此大张旗鼓地感谢我,真是受宠若惊。

无人喝彩着实令人失望,可能原创是需要耐得住寂寞的。

大家互相支持一下吧,读你的日志确实有收获。

相关推荐阅读
用户60452 2008-11-14 20:53
原创java连载--泛型(7)
类型擦除(Type Erasure)       当我们实例化一个泛型的时候,编译器使用一种叫做类型擦除(type erasure)的技术。在类型擦除的过程中,编译器会去除掉 类与接口中所有和类型参数...
用户60452 2008-11-13 22:08
原创java连载--泛型(6)
通配符       在泛型中,我们可以用一个通配符”?”来代替一个未知的类型。例如,使用下面的代码为某种animal指定一个cage:Cage<? extends Animal> some...
用户60452 2008-11-12 20:59
原创java连载--泛型(5)
泛型的子类型       只要两种类型能够相符,我们可以把一种类型的对象赋给另外一种类型的对象。例如,可以把一个Integer赋给一个Object,因为Object是Integer的父类之一。    ...
用户60452 2008-11-10 22:20
原创java连载--泛型(4)
受限的类型参数(Bounded Type Parameters)       有时候,我们要限制传递给类型参数的具体参数。例如,对数进行操作的方法就只能接受Number或者其子类的对象作为改方法的参数...
用户60452 2008-11-09 21:49
原创java连载--泛型(3)
泛型方法和构造器       如果在申明方法或者构造器的时候使用类型参数的话,就可以定义泛型方法和泛型构造器。这和定义一个普通的泛型基本上无二样,除了类型参数的作用范围只是在定义它的方法或者构造器之中...
用户60452 2008-11-08 19:13
原创java连载--泛型(2)
我们可以通过将"public class Box" 修改为 "public class Box<T>"而定义一个泛型,在这个定义中,使用了一个类型变量(type variable) T,而...
我要评论
7
9
关闭 站长推荐上一条 /2 下一条