打印

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

[复制链接]
2666|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwwwggggqqqq|  楼主 | 2008-3-10 13:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞FPGA已经有一段时间了,但一直有一个问题不知如何处理,现简化问题如下(使用ep1k30):
见下面代码:
这是一个乘法器,ab为输入,o为输出,clk为时钟,用于输入,输出锁存
module for21icbbs(clk,a,b,o);
input clk;
input [15:0] a;
input [15:0] b;
output [31:0] o;

reg [3:0] counter;
reg [15:0] a_buf,b_buf;
reg [31:0] o;

//因为组合逻辑生成的乘法器比较慢,clk频率比较高,
//所以采用counter构成延时,在counter为0时把
//输入信号锁存到乘法器的输入端,过7个周期后再取结果.
always@(posedge clk)
begin
    counter <= counter + 1'b1;

    if(counter == 4'b0000)
    begin            
        a_buf <= a;    
        b_buf <= b;
    end
    if(counter == 4'b0111)
        o <= o_buf;
end

reg [31:0] o_buf;
always@(a_buf,b_buf)//组合逻辑构成的乘法器
begin
    o_buf <= a_buf * b_buf;
end

endmodule

综合以后的报告得出,clk的最高频率为20.5M,显然这个结果是有问题的,它没有考虑到我已经对乘法器的输出做了延时处理,实际上clk的频率可以在80M以上.
请高手指点,这样的情况如何处理.
虽然这样系统仍然可以在较高的时钟频率下工作,但我还是想知道如何处理掉,因为系统中还有其它模块使用这个时钟.

相关帖子

沙发
风中De舞者| | 2008-3-10 16:35 | 只看该作者

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

搞了半天也没搞明白你的意思   CLK是一个输入信号  到底输入频率多少的信号应该你自己清楚啊

使用特权

评论回复
板凳
wwwwggggqqqq|  楼主 | 2008-3-10 17:20 | 只看该作者

再解释一下

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

使用特权

评论回复
地板
wwwwggggqqqq|  楼主 | 2008-3-10 17:22 | 只看该作者

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

大家帮忙啊,我认为使用过乘法器(或其它复杂组合逻辑)的人,很多人都会遇到这个问题的.

使用特权

评论回复
5
yxwsz| | 2008-3-10 23:53 | 只看该作者

时间约束

通过写时间约束文件,可以使其不报warning信息;

使用特权

评论回复
6
wwwwggggqqqq|  楼主 | 2008-3-11 09:21 | 只看该作者

还有其它办法吗?

因为我想同构报告知道其它模块可以工作的最高频率,如果只是不报warning,我还是无法知道系统可以工作的最高频率啊

使用特权

评论回复
7
zgl7903| | 2008-3-11 10:33 | 只看该作者

可以使用流水线结构的阿

Quartus中应该就有自带的乘法器,设置下参数就可以了

使用特权

评论回复
8
wwwwggggqqqq|  楼主 | 2008-3-11 11:47 | 只看该作者

ep1k30没有硬件乘法器

ep1k30只能用组合逻辑综合出乘法器,速度较慢,没办法流水线啊,并且我这里面提到的乘法器还可能是其它的复杂组合逻辑,我只是想和大家讨论一下应对这种纯组合逻辑时应该怎么办

使用特权

评论回复
9
zgl7903| | 2008-3-11 13:43 | 只看该作者

我说的是乘法器IP模块

可以结合查表法实现提高速度

使用特权

评论回复
10
wwwwggggqqqq|  楼主 | 2008-3-11 17:41 | 只看该作者

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

但我的目的不是这个,我这里只是举了乘法作为一个例子说明我遇到的问题,如果有其它的不能优化的复杂组合逻辑,我们应该怎么办呢?

使用特权

评论回复
11
wwwwggggqqqq|  楼主 | 2008-3-18 21:52 | 只看该作者

高手来呀

顶一下

使用特权

评论回复
12
zhh124| | 2008-3-19 10:21 | 只看该作者

rt

你这里说的问题就是综合中的 多周期路径(Multi Cycle Path).
不过quartus中具体怎样做的我不知道,你看看帮助文件吧.
DC 中貌似是用 set_multi_cycle_path 命令设置~~

使用特权

评论回复
13
zhh124| | 2008-3-19 10:30 | 只看该作者

rt

如果设置多周期路径的话,你的延迟那部分代码貌似不需要.综合器会自动帮你综合出来的.

使用特权

评论回复
14
wwwwggggqqqq|  楼主 | 2008-4-16 16:02 | 只看该作者

多谢zhh124

zhh124理解我的目的了,再请大家多指点

使用特权

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

本版积分规则

7

主题

55

帖子

0

粉丝