存储单元定义
parameter ADDRESSWIDTH = 14;
parameter AW = (ADDRESSWIDTH - 1);
parameter AWT = ((1<<(AW-1))-1);
reg [7:0] BRAM0 [0:AWT];
reg [7:0] BRAM1 [0:AWT];
reg [7:0] BRAM2 [0:AWT];
reg [7:0] BRAM3 [0:AWT];
这里假设地址长度为14,然后用地址的低二位的四种情况00, 01, 10, 11指示一个字的4个字节, 则可用的字地址范围为[0 : 2^12-1];然后分别用4个reg类型的存储块存储一个字的四个字节.
如果是使用字节地址,则字节地址的范围响应的是[0: 2^14-1]
写入到ahb ram
// HTRAN[1] = 1对应NONSEQ和SEQ
assign trn_valid = HSELBRAM & HREADY & HTRANS[1];
assign wr_en_actv = (trn_valid & HWRITE) | (|reg_wr_en);
// 这里分析地址和要传输的数据长度,获知需要对字的哪几个字节做写入
assign nxt_wr_en[0] = (((HADDR[1:0]==2'b00) && (HSIZE[1:0]==2'b00)) ||
((HADDR[1]==1'b0) && (HSIZE[1:0]==2'b01)) ||
((HSIZE[1:0]==2'b10)