内部项目调试记录!!!
地址计算部分解读
模块信息数据格式:
localparam CTRL_INDEX_STAGE_ID = 4'b0000 ; // 4'h0
localparam CTRL_INDEX_MOD_ID = 4'b0001 ; //4'h1
localparam CTRL_INDEX_RESV = 4'b0000 ; //4'h0
localparam CTRL_INDEX_RESOURCE = {4'b0,CTRL_INDEX_RESV,CTRL_INDEX_STAGE_ID,CTRL_INDEX_MOD_ID}; //16'h0001
localparam CTRL_INDEX_INDEX = 8'd1; //16'h0001
完整组装 = {CTRL_INDEX_INDEX,CTRL_INDEX_RESOURCE} // 32'h0001_0001
32’h0001_0001转换大小端后为32’h01_00_01_00
模块配置数据格式:
localparam CTRL_INDEX_TEST = 24’b00000000_00000000_00000001;
其从左到右分别代表 2B 4B 6B,每个bit代表一组数据
转换大小端后为h01_00_00
组装后数据
如下
udp_packet = UDP(dport=int("f1f2", 16)) / Raw(b'\x01\x00') / Raw(b'\x01\x00') / Raw(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') / Raw(b'\x01\x00\x00')
地址计算
// 数据基地址,以2B / 4B / 6B按顺序分隔增长排布
// 由于一共256个节点,因此2B占据 2*8*256个地址(每个地址一个字节),2代表每个数据两个字节,8代表一共8个2B数据
assign base_addr = ((bram_cnt) <= 8) ? 15'd0 : ((bram_cnt) <= 16) ? 15'd4096 : 15'd12288;
// 数据按照 Node1Bit1 N2B1 N3B1 --- N256B1 N1B2 N2B2 --- 排列
// 因此每一组含 256 * (2B/4B/6B)个地址
// bram_cnt代表1所在24'b00000000_00000000_00000001;位置。 "<< 4'b8"为"*256"操作
assign byte_addr = (((bram_cnt % 8) - 1) << 4'd8) * search_type;
// pkt_hdr_vec[31:24]为截取的ip地址(判断为256节点中的哪个)
assign node_addr = pkt_hdr_vec[31:24] * search_type;
assign store_addr = base_addr + byte_addr + node_addr + search_cnt;
调试记录
下载配置为
udp_packet = UDP(dport=int(“f1f2”, 16)) / Raw(b’\x01\x00’) / Raw(b’\x01\x00’) / Raw(b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’) / Raw(b’\x00\x01\x00’)
ip为ip_packet = IP(src = “4.168.0.1”,dst=“192.168.0.100”)
(4B组第1个,基地址4096,字节偏移为0【第一个】,节点偏移为4*4【前面有四个节点0/1/2/3】)
由于输入为64为,输出8位,因此地址4112应除8为514
寻址
查看预加载文件头为
因此514应该加3(两行开头空行+1【应从0地址开始寻址,文件从1行开始标记】)
因此寻得第517行4B数据【从最后向前寻4B】
调试数据为
数据太长可以选中建立新bus