|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
数字IC设计萌新,之前一直用FPGA开发,现在在做IC设计,遇到了关于数字IC中的SRAM和fifo的综合问题。问题如下:
(1)sram的verilog实现
module cbuf_mem
(
input clk,
input rst_n,
//Wr Port
input wr_en,
input [5:0]wr_addr,
input [16*16-1:0]wr_dat,
//Rd Port
input rd_en,
input [5:0]rd_addr,
output reg rd_dat_vld,
output [16*16-1:0]rd_dat
);
reg [16*16-1:0]rd_dat_r;
(* ram_style = "block" *) reg [16*16-1:0]mem[5:0];
always @(posedge clk or negedge rst_n)
if(~rst_n)
rd_dat_r<='d0;
else
if(rd_en)
rd_dat_r<=mem[rd_addr];
always @(posedge clk or negedge rst_n)
if(~rst_n)
rd_dat_vld<=1'b0;
else
rd_dat_vld<=rd_en;
always @(posedge clk)
if(wr_en)
mem[wr_addr]<=wr_dat;
assign rd_dat=rd_dat_r;
endmodule
(2)fifo的verilog实现
module hs_pipe #
(
parameter DATA_WIDTH=256,
parameter PIPE_DEPTH=8
)
(
input clk,
input rst_n,
input data_in_vld,
input [DATA_WIDTH-1:0]data_in,
output data_in_rdy,
output data_out_vld,
output [DATA_WIDTH-1:0]data_out,
input data_out_rdy
);
function integer clogb2 (input integer bit_depth);
begin
for(clogb2=0;bit_depth>0;clogb2=clogb2+1)
bit_depth=bit_depth>>1;
end
endfunction
localparam clog2_PIPE_DEPTH=clogb2(PIPE_DEPTH-1);
reg [DATA_WIDTH-1:0]mem[PIPE_DEPTH-1:0];
reg [clog2_PIPE_DEPTH-1:0]w_pointer;
reg w_phase;
reg [clog2_PIPE_DEPTH-1:0]r_pointer;
reg r_phase;
wire wr_en=data_in_vld&data_in_rdy;
wire rd_en=data_out_vld&data_out_rdy;
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
begin
w_phase<=1'b0;
w_pointer<=0;
end
else
begin
if(wr_en)
begin
if(w_pointer==PIPE_DEPTH-1)
begin
w_pointer<='d0;
w_phase<=~w_phase;
end
else
w_pointer<=w_pointer+1'b1;
end
end
end
always@(posedge clk)
begin
if(wr_en)
mem[w_pointer]<=data_in;
end
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
begin
r_pointer<=0;
r_phase<=1'b0;
end
else
begin
if(rd_en)
begin
if(r_pointer==PIPE_DEPTH-1)
begin
r_pointer<='d0;
r_phase<=~r_phase;
end
else
r_pointer<=r_pointer+1'b1;
end
end
end
assign data_out=mem[r_pointer];
wire empty=(w_pointer==r_pointer)&&(w_phase^~r_phase);
wire full=(w_pointer==r_pointer)&&(w_phase^r_phase);
assign data_out_vld=~empty;
assign data_in_rdy=~full;
endmodule
因为之前做FPGA设计,对于片上SRAM缓存,我会用如(1)所示的代码实现,然后把寄存器类型设置为bram,在综合时便会用bram来综合而不是触发器组成sram。同样的fifo也是。但是换成使用DC综合时,数字IC里面对于SRAM和fifo如果像这样设计,则会用触发器去综合组成sram和fifo。我想请问下,在数字IC中如何将sram和fifo加入到电路设计中,而不是综合器用触发器来组成。需要添加什么库?有什么介绍资料吗?求解答!!!!
|
|