|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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
); |
|