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