|
发表于 2025-4-11 12:03:58
|
显示全部楼层
写太花FPGA综合工具会认不出来。要写得尽量简单,把与RAM无关的逻辑挪到外面才可以。
或者按厂家给的Template写也是可以的。
- module bram #(
- parameter AWADDR = 12,
- parameter DWI = 128,
- parameter ARADDR = 12,
- parameter DRO = 128
- )
- (
- input clk,
- input [AWADDR-1 : 0] awaddr,
- input [15 : 0] w_en,
- input [DWI-1 : 0] wdata,
- input [ARADDR-1 : 0] araddr,
- input r_en,
- output reg [DRO-1 : 0] rdata
- );
- (* ram_style = "block" *) reg [7:0] mem0 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem1 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem2 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem3 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem4 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem5 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem6 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem7 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem8 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem9 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem10 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem11 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem12 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem13 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem14 [(1<<AWADDR)-1 : 0];
- (* ram_style = "block" *) reg [7:0] mem15 [(1<<AWADDR)-1 : 0];
- always @(posedge clk) begin
- if(w_en[0]) mem0[awaddr] <= wdata[8*0 +:8];
- if(w_en[1]) mem1[awaddr] <= wdata[8*1 +:8];
- if(w_en[2]) mem2[awaddr] <= wdata[8*2 +:8];
- if(w_en[3]) mem3[awaddr] <= wdata[8*3 +:8];
- if(w_en[4]) mem4[awaddr] <= wdata[8*4 +:8];
- if(w_en[5]) mem5[awaddr] <= wdata[8*5 +:8];
- if(w_en[6]) mem6[awaddr] <= wdata[8*6 +:8];
- if(w_en[7]) mem7[awaddr] <= wdata[8*7 +:8];
- if(w_en[8]) mem8[awaddr] <= wdata[8*8 +:8];
- if(w_en[9]) mem9[awaddr] <= wdata[8*9 +:8];
- if(w_en[10]) mem10[awaddr] <= wdata[8*10 +:8];
- if(w_en[11]) mem11[awaddr] <= wdata[8*11 +:8];
- if(w_en[12]) mem12[awaddr] <= wdata[8*12 +:8];
- if(w_en[13]) mem13[awaddr] <= wdata[8*13 +:8];
- if(w_en[14]) mem14[awaddr] <= wdata[8*14 +:8];
- if(w_en[15]) mem15[awaddr] <= wdata[8*15 +:8];
- end
- always @(posedge clk) begin
- if(r_en) begin
- rdata[8*0 +: 8] <= mem0[araddr];
- rdata[8*1 +: 8] <= mem1[araddr];
- rdata[8*2 +: 8] <= mem2[araddr];
- rdata[8*3 +: 8] <= mem3[araddr];
- rdata[8*4 +: 8] <= mem4[araddr];
- rdata[8*5 +: 8] <= mem5[araddr];
- rdata[8*6 +: 8] <= mem6[araddr];
- rdata[8*7 +: 8] <= mem7[araddr];
- rdata[8*8 +: 8] <= mem8[araddr];
- rdata[8*9 +: 8] <= mem9[araddr];
- rdata[8*10 +: 8] <= mem10[araddr];
- rdata[8*11 +: 8] <= mem11[araddr];
- rdata[8*12 +: 8] <= mem12[araddr];
- rdata[8*13 +: 8] <= mem13[araddr];
- rdata[8*14 +: 8] <= mem14[araddr];
- rdata[8*15 +: 8] <= mem15[araddr];
- end
- end
- endmodule
复制代码
|
|