[Modified] fix axi, pass func & pref test, but down to 85MHz

This commit is contained in:
2023-08-01 14:30:11 +08:00
parent 9f40b5f1bb
commit df11c3a4ab
4 changed files with 78 additions and 63 deletions

View File

@@ -41,49 +41,49 @@ module axi_ctrl_v5
output reg [31 :0] uncache_rdata,
output reg uncache_refresh,
//总线侧接口
//读地址通道信号
output reg [3 :0] arid, //读地址ID用来标志一组写信号
output reg [31:0] araddr, //读地址给出一次写突发传输的读地址
//æ»çº¿ä¾§æŽ¥å<EFBFBD>?
//读地å<EFBFBD>?éšé<EFBFBD>ä¿¡å<EFBFBD>·
output reg [3 :0] arid, //读地å<EFBFBD>?IDï¼Œç¨æ<EFBFBD>¥æ å¿ä¸ç»åä¿¡å<EFBFBD>·
output reg [31:0] araddr, //读地å<EFBFBD>?,ç»åºä¸æ¬¡åçª<EFBFBD>å<EFBFBD>ä¼ è¾çšè¯»åœ°å<EFBFBD>
output reg [3 :0] arlen, //çª<EFBFBD>å<EFBFBD>é¿åº¦ï¼Œç»åºçª<EFBFBD>å<EFBFBD>ä¼ è¾ç𿬡æ°
output reg [2 :0] arsize, //突发大小给出每次突发传输的字节数
output reg [2 :0] arsize, //çª<EFBFBD>å<EFBFBD>大å°<EFBFBD>,ç»åºæ¯<EFBFBD>次çª<EFBFBD>å<EFBFBD>ä¼ è¾çšå­èŠæ?
output reg [1 :0] arburst, //çª<EFBFBD>å<EFBFBD>ç±»åž
output reg [1 :0] arlock, //总线锁信号可提供操作的原子性
output reg [3 :0] arcache, //内存类型表明一次传输是怎样通过系统的
output reg [1 :0] arlock, //æ»çº¿é<EFBFBD>ä¿¡å<EFBFBD>·ï¼Œå<EFBFBD>¯æ<EFBFBD><EFBFBD>便<EFBFBD>作çšåŽŸå­<EFBFBD>æ?
output reg [3 :0] arcache, //å存类åžï¼Œè¡¨æ˜Žä¸æ¬¡ä¼ è¾æ˜¯æŽæ ·éšè¿ç³»ç»Ÿçš?
output reg [2 :0] arprot, //ä¿<EFBFBD>护类åžï¼Œè¡¨æ˜Žä¸æ¬¡ä¼ è¾çšç¹æ<EFBFBD>ƒçº§å<EFBFBD>Šå®å¨ç­çº§
output reg arvalid, //有效信号表明此通道的地址控制信号有效
input arready, //表明""可以接收地址和对应的控制信号
//读数据通道信号
output reg arvalid, //æœæˆä¿¡å<EFBFBD>·ï¼Œè¡¨æ˜Žæ­¤éšé<EFBFBD>çšåœ°å<EFBFBD>?控åˆä¿¡å<EFBFBD>·æœæˆ
input arready, //表明"ä»?"å<EFBFBD>¯ä»¥æŽ¥æåœ°å<EFBFBD>åŒå¯¹åºçšæŽ§åˆä¿¡å<EFBFBD>·
//è¯»æ°æ<EFBFBD>®é?šé<EFBFBD>ä¿¡å<EFBFBD>·
input [3 :0] rid, //读ID tag
input [31:0] rdata, //读数据
input [1 :0] rresp, //读响应表明读传输的状态
input rlast, //表明读突发的最后一次传输
input rvalid, //表明此通道信号有效
input [31:0] rdata, //è¯»æ°æ<EFBFBD>?
input [1 :0] rresp, //读å<EFBFBD>åºï¼Œè¡¨æ˜Žè¯»ä¼ è¾çšçŠæ??
input rlast, //表明读çª<EFBFBD>å<EFBFBD>çšæœ?å<EFBFBD>Žä¸æ¬¡ä¼ è¾?
input rvalid, //表明此é?šé<EFBFBD>ä¿¡å<EFBFBD>·æœæˆ
output reg rready, //表明主机能够接æè¯»æ°æ<EFBFBD>®åŒå<EFBFBD>åºä¿¡æ<EFBFBD>¯
//写地址通道信号
output reg [3 :0] awid, //写地址ID用来标志一组写信号
output reg [31:0] awaddr, //写地址给出一次写突发传输的写地址
//å地å<EFBFBD>?éšé<EFBFBD>ä¿¡å<EFBFBD>·
output reg [3 :0] awid, //å地å<EFBFBD>?IDï¼Œç¨æ<EFBFBD>¥æ å¿ä¸ç»åä¿¡å<EFBFBD>·
output reg [31:0] awaddr, //å地å<EFBFBD>?,ç»åºä¸æ¬¡åçª<EFBFBD>å<EFBFBD>ä¼ è¾çšå地å<EFBFBD>
output reg [3 :0] awlen, //çª<EFBFBD>å<EFBFBD>é¿åº¦ï¼Œç»åºçª<EFBFBD>å<EFBFBD>ä¼ è¾ç𿬡æ°
output reg [2 :0] awsize, //突发大小给出每次突发传输的字节数
output reg [2 :0] awsize, //çª<EFBFBD>å<EFBFBD>大å°<EFBFBD>,ç»åºæ¯<EFBFBD>次çª<EFBFBD>å<EFBFBD>ä¼ è¾çšå­èŠæ?
output reg [1 :0] awburst, //çª<EFBFBD>å<EFBFBD>ç±»åž
output reg [1 :0] awlock, //总线锁信号可提供操作的原子性
output reg [3 :0] awcache, //内存类型表明一次传输是怎样通过系统的
output reg [1 :0] awlock, //æ»çº¿é<EFBFBD>ä¿¡å<EFBFBD>·ï¼Œå<EFBFBD>¯æ<EFBFBD><EFBFBD>便<EFBFBD>作çšåŽŸå­<EFBFBD>æ?
output reg [3 :0] awcache, //å存类åžï¼Œè¡¨æ˜Žä¸æ¬¡ä¼ è¾æ˜¯æŽæ ·éšè¿ç³»ç»Ÿçš?
output reg [2 :0] awprot, //ä¿<EFBFBD>护类åžï¼Œè¡¨æ˜Žä¸æ¬¡ä¼ è¾çšç¹æ<EFBFBD>ƒçº§å<EFBFBD>Šå®å¨ç­çº§
output reg awvalid, //有效信号表明此通道的地址控制信号有效
input awready, //表明""可以接收地址和对应的控制信号
//写数据通道信号
output reg [3 :0] wid, //一次写传输的ID tag
output reg [31:0] wdata, //写数据
output reg [3 :0] wstrb, //写数据有效的字节线用来表明哪8bits数据是有效的
output reg wlast, //表明此次传输是最后一个突发传输
output reg wvalid, //写有效表明此次写有效
input wready, //表明从机可以接收写数据
//写响应通道信号
output reg awvalid, //æœæˆä¿¡å<EFBFBD>·ï¼Œè¡¨æ˜Žæ­¤éšé<EFBFBD>çšåœ°å<EFBFBD>?控åˆä¿¡å<EFBFBD>·æœæˆ
input awready, //表明"ä»?"å<EFBFBD>¯ä»¥æŽ¥æåœ°å<EFBFBD>åŒå¯¹åºçšæŽ§åˆä¿¡å<EFBFBD>·
//åæ°æ<EFBFBD>®é?šé<EFBFBD>ä¿¡å<EFBFBD>·
output reg [3 :0] wid, //ä¸?次åä¼ è¾çšID tag
output reg [31:0] wdata, //åæ°æ<EFBFBD>?
output reg [3 :0] wstrb, //åæ°æ<EFBFBD>®æœæˆçšå­èŠçº¿ï¼Œç¨æ<EFBFBD>¥è¡¨æ˜Žå?8bitsæ°æ<EFBFBD>®æ˜¯æœæˆçš
output reg wlast, //è¡¨æ˜Žæ­¤æ¬¡ä¼ è¾æ˜¯æœå<EFBFBD>Žä¸ä¸ªçª<EFBFBD>å<EFBFBD>ä¼ è¾?
output reg wvalid, //åæœæˆï¼Œè¡¨æ˜Žæ­¤æ¬¡åæœæ?
input wready, //表明从机å<EFBFBD>¯ä»¥æŽ¥æåæ°æ<EFBFBD>?
//åå<EFBFBD>åºé?šé<EFBFBD>ä¿¡å<EFBFBD>·
input [3 :0] bid, //åå<EFBFBD>åºID tag
input [1 :0] bresp, //写响应表明写传输的状态 00为正常当然可以不理会
input bvalid, //写响应有效
output reg bready //表明主机能够接收写响应
input [1 :0] bresp, //åå<EFBFBD>åºï¼Œè¡¨æ˜Žåä¼ è¾çšçŠæ?? 00为正常,å½çå<EFBFBD>¯ä»¥ä¸<EFBFBD>ç<EFBFBD>ä¼?
input bvalid, //åå<EFBFBD>åºæœæ?
output reg bready //表明主机能够接æåå<EFBFBD>åº?
);
reg [CACHELINE_WD -1:0] icache_rdata_buffer;
@@ -374,6 +374,15 @@ module axi_ctrl_v5
stage_w <= stage_w << 1;
end
end
else if (wready) begin
wdata <= dcache_wdata_buffer[dcache_offset_w*32+:32];
wvalid <= 1'b1;
wlast <= dcache_offset_w == 4'b1111 ? 1'b1 : 1'b0;
dcache_offset_w <= dcache_offset_w + 1'b1;
if (dcache_offset_w == 4'b1111) begin
stage_w <= stage_w << 1;
end
end
end
stage_w[2]:begin
if (wready) begin