quartusII7.1综合问题,求高手答复

[复制链接]
3913|13
 楼主| wwwwggggqqqq 发表于 2008-3-10 13:13 | 显示全部楼层 |阅读模式
搞FPGA已经有一段时间了,但一直有一个问题不知如何处理,现简化问题如下(使用ep1k30):<br />见下面代码:<br />这是一个乘法器,ab为输入,o为输出,clk为时钟,用于输入,输出锁存<br />module&nbsp;for21icbbs(clk,a,b,o);<br />input&nbsp;clk;<br />input&nbsp;[15:0]&nbsp;a;<br />input&nbsp;[15:0]&nbsp;b;<br />output&nbsp;[31:0]&nbsp;o;<br /><br />reg&nbsp;[3:0]&nbsp;counter;<br />reg&nbsp;[15:0]&nbsp;a_buf,b_buf;<br />reg&nbsp;[31:0]&nbsp;o;<br /><br />//因为组合逻辑生成的乘法器比较慢,clk频率比较高,<br />//所以采用counter构成延时,在counter为0时把<br />//输入信号锁存到乘法器的输入端,过7个周期后再取结果.<br />always@(posedge&nbsp;clk)<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;counter&nbsp;&lt=&nbsp;counter&nbsp;+&nbsp;1'b1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(counter&nbsp;==&nbsp;4'b0000)<br />&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a_buf&nbsp;&lt=&nbsp;a;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_buf&nbsp;&lt=&nbsp;b;<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;if(counter&nbsp;==&nbsp;4'b0111)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;&lt=&nbsp;o_buf;<br />end<br /><br />reg&nbsp;[31:0]&nbsp;o_buf;<br />always@(a_buf,b_buf)//组合逻辑构成的乘法器<br />begin<br />&nbsp;&nbsp;&nbsp;&nbsp;o_buf&nbsp;&lt=&nbsp;a_buf&nbsp;*&nbsp;b_buf;<br />end<br /><br />endmodule<br /><br />综合以后的报告得出,clk的最高频率为20.5M,显然这个结果是有问题的,它没有考虑到我已经对乘法器的输出做了延时处理,实际上clk的频率可以在80M以上.<br />请高手指点,这样的情况如何处理.<br />虽然这样系统仍然可以在较高的时钟频率下工作,但我还是想知道如何处理掉,因为系统中还有其它模块使用这个时钟.
风中De舞者 发表于 2008-3-10 16:35 | 显示全部楼层

我学VHDL的所以你这个程序看不大懂

搞了半天也没搞明白你的意思&nbsp;&nbsp;&nbsp;CLK是一个输入信号&nbsp;&nbsp;到底输入频率多少的信号应该你自己清楚啊
 楼主| wwwwggggqqqq 发表于 2008-3-10 17:20 | 显示全部楼层

再解释一下

因为综合出来的逻辑中,通过组合逻辑完成a*b&nbsp;运算所需要的时间约是50ns,所以quartusII告诉我说我的clk不要高于20.5M,因为他认为我要求它在一个时钟周期内计算出结果.<br />但实际上,我并不要求它在一个周期内算出结果,我给它保留了7个时钟周期,也就是说,我引入的时钟频率较高,但我通过计数器给这个复杂的组合逻辑预留除了足够的时间,然后我再读取结果.<br />这显然是允许的.<br />我使用较高频率时钟(40M)是因为我其它的模块需要更高的时钟.
 楼主| wwwwggggqqqq 发表于 2008-3-10 17:22 | 显示全部楼层

忘了,先谢谢"风中De舞者"的热心回复

大家帮忙啊,我认为使用过乘法器(或其它复杂组合逻辑)的人,很多人都会遇到这个问题的.
yxwsz 发表于 2008-3-10 23:53 | 显示全部楼层

时间约束

通过写时间约束文件,可以使其不报warning信息;<br />
 楼主| wwwwggggqqqq 发表于 2008-3-11 09:21 | 显示全部楼层

还有其它办法吗?

因为我想同构报告知道其它模块可以工作的最高频率,如果只是不报warning,我还是无法知道系统可以工作的最高频率啊
zgl7903 发表于 2008-3-11 10:33 | 显示全部楼层

可以使用流水线结构的阿

Quartus中应该就有自带的乘法器,设置下参数就可以了
 楼主| wwwwggggqqqq 发表于 2008-3-11 11:47 | 显示全部楼层

ep1k30没有硬件乘法器

ep1k30只能用组合逻辑综合出乘法器,速度较慢,没办法流水线啊,并且我这里面提到的乘法器还可能是其它的复杂组合逻辑,我只是想和大家讨论一下应对这种纯组合逻辑时应该怎么办
zgl7903 发表于 2008-3-11 13:43 | 显示全部楼层

我说的是乘法器IP模块

可以结合查表法实现提高速度
 楼主| wwwwggggqqqq 发表于 2008-3-11 17:41 | 显示全部楼层

提高速度的方法应该是可以的

但我的目的不是这个,我这里只是举了乘法作为一个例子说明我遇到的问题,如果有其它的不能优化的复杂组合逻辑,我们应该怎么办呢?
 楼主| wwwwggggqqqq 发表于 2008-3-18 21:52 | 显示全部楼层

高手来呀

顶一下
zhh124 发表于 2008-3-19 10:21 | 显示全部楼层

rt

你这里说的问题就是综合中的&nbsp;多周期路径(Multi&nbsp;Cycle&nbsp;Path).<br />不过quartus中具体怎样做的我不知道,你看看帮助文件吧.<br />DC&nbsp;中貌似是用&nbsp;set_multi_cycle_path&nbsp;命令设置~~
zhh124 发表于 2008-3-19 10:30 | 显示全部楼层

rt

如果设置多周期路径的话,你的延迟那部分代码貌似不需要.综合器会自动帮你综合出来的.
 楼主| wwwwggggqqqq 发表于 2008-4-16 16:02 | 显示全部楼层

多谢zhh124

zhh124理解我的目的了,再请大家多指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部