在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2215|回复: 2

[求助] 关于FPGA时序约束设计请教!

[复制链接]
发表于 2012-6-20 16:19:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我有如下一段程序,在写BRAM时出现时序问题,主要是我的数据要写到4块BRAM里面,共512Byte,前128Byte写到BRAM0里面,接着写BRAM1,2,3,这样导致rx_bram_din_reg 信号是1托4,而且这个信号位宽是64位的,所以编译的时候时序约束不满足,请各位帮忙看看,我应该加什么样的约束,才能使得我的设计满足要求呀?非常感谢!
   always@(posedge clk)
   begin
    if(rst)
     begin
         rx_bram_din_reg  <= 64'b0;  
     end
else
  begin
      rx_bram_din_reg <=  rx_bram_din;
  end   
   end

always@(posedge clk)
   begin
    if(rst)
     begin
         rx_bram_wr_en0  <= 1'b0;
         rx_bram_wr_en1  <= 1'b0;
         rx_bram_wr_en2  <= 1'b0;
         rx_bram_wr_en3  <= 1'b0;
     end
else begin
     case(rx_bram_addr[5:4])
          2'b00:begin
          rx_bram_wr_en0  <= rx_bram_wr_en;
      rx_bram_wr_en1  <= 1'b0;
      rx_bram_wr_en2  <= 1'b0;
      rx_bram_wr_en3  <= 1'b0;
         end
   2'b01:begin
          rx_bram_wr_en0  <= 1'b0;
      rx_bram_wr_en1  <= rx_bram_wr_en;
      rx_bram_wr_en2  <= 1'b0;
      rx_bram_wr_en3  <= 1'b0;
         end
   2'b10:begin
          rx_bram_wr_en0  <= 1'b0;
      rx_bram_wr_en1  <= 1'b0;
      rx_bram_wr_en2  <= rx_bram_wr_en;
      rx_bram_wr_en3  <= 1'b0;
         end
    2'b11:begin
          rx_bram_wr_en0  <= 1'b0;
      rx_bram_wr_en1  <= 1'b0;
      rx_bram_wr_en2  <= 1'b0;
      rx_bram_wr_en3  <= rx_bram_wr_en;
         end      
              default: begin
                        rx_bram_wr_en0  <= 1'b0;
      rx_bram_wr_en1  <= 1'b0;
      rx_bram_wr_en2  <= 1'b0;
      rx_bram_wr_en3  <= 1'b0;
                       end
            endcase
end
   end
   
   assign   rx_doutb = {rx_doutb3[1023:0],rx_doutb2[1023:0],rx_doutb1[1023:0],rx_doutb0[1023:0]};
   
   DMA_BRAM rx_bram_inst0 (
     .clka(clk), // input clka
     .wea(rx_bram_wr_en0), // input [0 : 0] wea
     .addra({1'b0,rx_bram_addr_reg}), // input [4 : 0] addra
     .dina(rx_bram_din_reg ), // input [63 : 0] dina
     .douta(), // output [63 : 0] douta
     .clkb(clk), // input clkb
     .web(1'b0), // input [0 : 0] web
     .addrb(1'b0), // input [0 : 0] addrb
     .dinb(), // input [63 : 0] dinb
     .doutb(rx_doutb0) // output [1023 : 0] doutb
   );
   
   
   DMA_BRAM rx_bram_inst1 (
     .clka(clk), // input clka
     .wea(rx_bram_wr_en1), // input [0 : 0] wea
     .addra({1'b0,rx_bram_addr_reg}), // input [4 : 0] addra
     .dina(rx_bram_din_reg ), // input [63 : 0] dina
     .douta(), // output [63 : 0] douta
     .clkb(clk), // input clkb
     .web(1'b0), // input [0 : 0] web
     .addrb(1'b0), // input [0 : 0] addrb
     .dinb(), // input [63 : 0] dinb
     .doutb(rx_doutb1) // output [1023 : 0] doutb
   );
   DMA_BRAM rx_bram_inst2 (
     .clka(clk), // input clka
     .wea(rx_bram_wr_en2), // input [0 : 0] wea
     .addra({1'b0,rx_bram_addr_reg}), // input [4 : 0] addra
     .dina(rx_bram_din_reg ), // input [63 : 0] dina
     .douta(), // output [63 : 0] douta
     .clkb(clk), // input clkb
     .web(1'b0), // input [0 : 0] web
     .addrb(1'b0), // input [0 : 0] addrb
     .dinb(), // input [63 : 0] dinb
     .doutb(rx_doutb2) // output [1023 : 0] doutb
   );
   
      DMA_BRAM rx_bram_inst3 (
     .clka(clk), // input clka
     .wea(rx_bram_wr_en3), // input [0 : 0] wea
     .addra({1'b0,rx_bram_addr_reg}), // input [4 : 0] addra
     .dina(rx_bram_din_reg ), // input [63 : 0] dina
     .douta(), // output [63 : 0] douta
     .clkb(clk), // input clkb
     .web(1'b0), // input [0 : 0] web
     .addrb(1'b0), // input [0 : 0] addrb
     .dinb(), // input [63 : 0] dinb
     .doutb(rx_doutb3) // output [1023 : 0] doutb
   );
 楼主| 发表于 2012-6-20 17:00:29 | 显示全部楼层
下面是时序报告:

SLICE_X69Y127.AQ        Tcko                  0.337   rx_dma_bram_wrapper_inst/rx_bram_din_reg<43>
                                                           rx_dma_bram_wrapper_inst/rx_bram_din_reg_40
     RAMB36_X6Y40.DIADI0     net (fanout=4)        9.339   rx_dma_bram_wrapper_inst/rx_bram_din_reg<40>
     RAMB36_X6Y40.CLKARDCLKL Trdck_DIA             0.707   rx_dma_bram_wrapper_inst/rx_bram_inst1/U0/xst_blk_mem_generator/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[20].ram.r/v6_init.ram/TRUE_DP.SIMPLE_PRIM36.ram
                                                           rx_dma_bram_wrapper_inst/rx_bram_inst1/U0/xst_blk_mem_generator/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[20].ram.r/v6_init.ram/TRUE_DP.SIMPLE_PRIM36.ram
     ----------------------------------------------------  ---------------------------
     Total                                        10.383ns (1.044ns logic, 9.339ns route)
                                                           (10.1% logic, 89.9% route)
发表于 2012-6-20 18:43:11 | 显示全部楼层
你可以手工在RTL里将rx_bram_din_reg寄存器组duplicate成四份,并用preserve注释防止综合器对其进行优化,那样一拖四就变成一拖一了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 13:36 , Processed in 0.016999 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表