搞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以上. 请高手指点,这样的情况如何处理. 虽然这样系统仍然可以在较高的时钟频率下工作,但我还是想知道如何处理掉,因为系统中还有其它模块使用这个时钟. |