Compare commits

...

18 Commits

Author SHA1 Message Date
b2a7bbf7fa sync 2023-01-05 17:17:36 +08:00
Qiu Jiahao
f4eacbf039 bugfix
Co-authored-by: cxy004 <cxy004@qq.com>
2022-08-18 18:42:51 +08:00
Qiu Jiahao
a61cb591ce LRU bugfix 2022-08-14 22:03:11 +08:00
cxy004
0cc3419d39 CpU fix 2022-08-12 21:33:04 +08:00
cxy004
5ab3445482 cop1x fix 2022-08-12 18:14:39 +08:00
cxy004
2cdcbfadab 2alu ES ET fix 2022-08-11 23:55:00 +08:00
cxy004
0ecb075c42 1. 2alu overflow
2. TLB_ENABLE
2022-08-05 13:11:05 +08:00
cxy004
400767053c 2alu linux fix (pmon?) 2022-08-04 14:42:50 +08:00
cxy004
95a7ee6c2a 2alu tryfix 2022-08-04 12:43:45 +08:00
cxy004
828190a98e 2alu fix 2022-08-03 18:45:44 +08:00
cxy004
d9f08727d0 test 2alu-bugfix 2022-08-03 15:47:41 +08:00
Qiu Jiahao
5d61df40a6 Linux2.6.32
Co-authored-by: cxy004 <cxy004@qq.com>
Co-authored-by: Paul <panyuxuan@hotmail.com>
2022-08-01 22:45:06 +08:00
Qiu Jiahao
1e1725f436 Co-authored-by: cxy004 <cxy004@qq.com>
Co-authored-by: Paul <panyuxuan@hotmail.com>
2022-07-31 19:42:38 +08:00
Qiu Jiahao
013104d616 TEN 2022-07-29 17:15:36 +08:00
Qiu Jiahao
7835d63b0e CU0
Co-authored-by: cxy004 <cxy004@qq.com>
2022-07-29 16:48:29 +08:00
Qiu Jiahao
4e54a0a26b add hazards 2022-07-27 13:35:40 +08:00
Qiu Jiahao
0cc0fa321b mul_unsigned 2022-07-27 12:36:05 +08:00
Qiu Jiahao
5de9158326 bugfix
Co-authored-by: Paul <panyuxuan@hotmail.com>
2022-07-18 08:57:50 +08:00
33 changed files with 1914 additions and 784 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ vivado.jou
.library_mapping.xml
.project
.settings
.vscode

View File

@ -0,0 +1,81 @@
#set_property SEVERITY {Warning} [get_drc_checks RTSTAT-2]
#时钟信号连接
#create_clock -period 10.000 [get_ports clk]
set_property PACKAGE_PIN AC19 [get_ports clk]
set_property CLOCK_DEDICATED_ROUTE BACKBONE [get_nets clk]
create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
#reset
set_property PACKAGE_PIN Y3 [get_ports resetn_rtl_0]
#SPI flash
set_property PACKAGE_PIN P20 [get_ports spi_rtl_0_sck_io]
set_property PACKAGE_PIN R20 [get_ports {spi_rtl_0_ss_io[0]}]
set_property PACKAGE_PIN P19 [get_ports spi_rtl_0_io1_io]
set_property PACKAGE_PIN N18 [get_ports spi_rtl_0_io0_io]
#mac phy connect
set_property PACKAGE_PIN AB21 [get_ports mii_rtl_0_tx_clk]
set_property PACKAGE_PIN AA19 [get_ports mii_rtl_0_rx_clk]
set_property PACKAGE_PIN AA15 [get_ports mii_rtl_0_tx_en]
set_property PACKAGE_PIN AF18 [get_ports {mii_rtl_0_txd[0]}]
set_property PACKAGE_PIN AE18 [get_ports {mii_rtl_0_txd[1]}]
set_property PACKAGE_PIN W15 [get_ports {mii_rtl_0_txd[2]}]
set_property PACKAGE_PIN W14 [get_ports {mii_rtl_0_txd[3]}]
set_property PACKAGE_PIN AE22 [get_ports mii_rtl_0_rx_dv]
set_property PACKAGE_PIN V1 [get_ports {mii_rtl_0_rxd[0]}]
set_property PACKAGE_PIN V4 [get_ports {mii_rtl_0_rxd[1]}]
set_property PACKAGE_PIN V2 [get_ports {mii_rtl_0_rxd[2]}]
set_property PACKAGE_PIN V3 [get_ports {mii_rtl_0_rxd[3]}]
set_property PACKAGE_PIN W16 [get_ports mii_rtl_0_rx_er]
set_property PACKAGE_PIN Y15 [get_ports mii_rtl_0_col]
set_property PACKAGE_PIN AF20 [get_ports mii_rtl_0_crs]
set_property PACKAGE_PIN W3 [get_ports mdio_rtl_0_mdc]
set_property PACKAGE_PIN W1 [get_ports mdio_rtl_0_mdio_io]
set_property PACKAGE_PIN AE26 [get_ports mii_rtl_0_rst_n]
#uart
set_property PACKAGE_PIN F23 [get_ports uart_rtl_0_rxd]
set_property PACKAGE_PIN H19 [get_ports uart_rtl_0_txd]
set_property PACKAGE_PIN E23 [get_ports uart_rtl_0_cts]
set_property PACKAGE_PIN G20 [get_ports uart_rtl_0_dcd]
set_property PACKAGE_PIN K6 [get_ports uart_rtl_0_dsr]
set_property PACKAGE_PIN F25 [get_ports uart_rtl_0_dtr]
set_property PACKAGE_PIN K7 [get_ports uart_rtl_0_ri]
set_property PACKAGE_PIN F24 [get_ports uart_rtl_0_rts]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports resetn_rtl_0]
set_property IOSTANDARD LVCMOS33 [get_ports spi_rtl_0_io0_io]
set_property IOSTANDARD LVCMOS33 [get_ports spi_rtl_0_io1_io]
set_property IOSTANDARD LVCMOS33 [get_ports {spi_rtl_0_ss_io[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports spi_rtl_0_sck_io]
set_property IOSTANDARD LVCMOS33 [get_ports {mii_rtl_0_rxd[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mii_rtl_0_txd[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_tx_en]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_tx_clk]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_rx_er]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_col]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_crs]
set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdc]
set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdio_io]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_rx_clk]
set_property IOSTANDARD LVCMOS33 [get_ports mii_rtl_0_rx_dv]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_rxd]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_txd]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_cts]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_dcd]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_dsr]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_dtr]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_ri]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rtl_0_rts]
create_clock -period 40.000 -name mii_rtl_0_rx_clk -waveform {0.000 20.000} [get_ports mii_rtl_0_rx_clk]
create_clock -period 40.000 -name mii_rtl_0_tx_clk -waveform {0.000 20.000} [get_ports mii_rtl_0_tx_clk]

View File

@ -0,0 +1,91 @@
module mycpu_top_verilog (
input wire [5:0] ext_int, //high active
input wire aclk,
input wire aresetn, //low active
output wire [ 3:0] arid,
output wire [31:0] araddr,
output wire [ 3:0] arlen,
output wire [ 2:0] arsize,
output wire [ 1:0] arburst,
output wire [ 1:0] arlock,
output wire [ 3:0] arcache,
output wire [ 2:0] arprot,
output wire arvalid,
input wire arready,
input wire [ 3:0] rid,
input wire [31:0] rdata,
input wire [ 1:0] rresp,
input wire rlast,
input wire rvalid,
output wire rready,
output wire [ 3:0] awid,
output wire [31:0] awaddr,
output wire [ 3:0] awlen,
output wire [ 2:0] awsize,
output wire [ 1:0] awburst,
output wire [ 1:0] awlock,
output wire [ 3:0] awcache,
output wire [ 2:0] awprot,
output wire awvalid,
input wire awready,
output wire [ 3:0] wid,
output wire [31:0] wdata,
output wire [ 3:0] wstrb,
output wire wlast,
output wire wvalid,
input wire wready,
input wire [3:0] bid,
input wire [1:0] bresp,
input wire bvalid,
output wire bready
);
mycpu_top cpu(
.ext_int(ext_int),
.aclk (aclk),
.aresetn(aresetn),
.arid (arid),
.araddr (araddr),
.arlen (arlen),
.arsize (arsize),
.arburst(arburst),
.arlock (arlock),
.arcache(arcache),
.arprot (arprot),
.arvalid(arvalid),
.arready(arready),
.rid (rid),
.rdata (rdata),
.rresp (rresp),
.rlast (rlast),
.rvalid (rvalid),
.rready (rready),
.awid (awid),
.awaddr (awaddr),
.awlen (awlen),
.awsize (awsize),
.awburst(awburst),
.awlock (awlock),
.awcache(awcache),
.awprot (awprot),
.awvalid(awvalid),
.awready(awready),
.wid (wid),
.wdata (wdata),
.wstrb (wstrb),
.wlast (wlast),
.wvalid (wvalid),
.wready (wready),
.bid (bid),
.bresp (bresp),
.bvalid (bvalid),
.bready (bready)
);
endmodule

View File

@ -13,8 +13,11 @@ module CP0 (
// exception
input EXCEPTION_t exception,
output word_t EPC,
output logic EXL,
output logic Bev,
output logic [19:0] EBase,
output logic [3:0] CU,
output logic in_kernel,
// int
input logic [5:0] ext_int,
@ -24,7 +27,6 @@ module CP0 (
input logic tlbr,
input logic tlbp,
output logic [2:0] K0,
output logic in_kernel,
output Random_t Random,
output Index_t Index,
output EntryHi_t EntryHi,
@ -38,6 +40,14 @@ module CP0 (
CP0_REGS_t rf_cp0;
logic count_lo;
word_t ila_cp0_count;
word_t ila_cp0_compare;
word_t ila_cp0_cause;
word_t ila_cp0_status;
assign ila_cp0_count = rf_cp0.Count;
assign ila_cp0_compare = rf_cp0.Compare;
assign ila_cp0_cause = rf_cp0.Cause;
assign ila_cp0_status = rf_cp0.Status;
// int comb logic
assign interrupt = (rf_cp0.Status.EXL == 1'b0)
@ -56,12 +66,14 @@ module CP0 (
assign rf_cp0.Cause.IP[7:2] = {rf_cp0.Cause.TI | ext_int[5], ext_int[4:0]};
assign rf_cp0.Cause.zero2 = 1'b0;
assign rf_cp0.Cause.zero3 = 2'b00;
assign rf_cp0.Status.zero1 = 9'b0;
assign rf_cp0.Status.CU[3:1] = 3'b0;
assign rf_cp0.Status.zero1 = 5'b0;
assign rf_cp0.Status.zero2 = 6'b0;
assign rf_cp0.Status.zero3 = 3'b0;
assign rf_cp0.Status.zero4 = 2'b0;
assign rf_cp0.EntryHi.zero = 5'b0;
assign rf_cp0.Wired.zero = 29'b0;
assign rf_cp0.Context.zero = 4'b0;
assign rf_cp0.EntryLo1.zero = 6'b0;
assign rf_cp0.EntryLo0.zero = 6'b0;
assign rf_cp0.Random.zero = 29'b0;
@ -85,25 +97,53 @@ module CP0 (
assign rf_cp0.EBase.CPUNum = 10'b0;
assign rf_cp0.PRId = 32'h00004220;
`ifndef TLB_ENABLE
assign rf_cp0.EntryHi.VPN2 = 19'b0;
assign rf_cp0.EntryHi.ASID = 8'b0;
assign rf_cp0.Wired.Wired = 3'b0;
assign rf_cp0.Context.PTEBase = 9'b0;
assign rf_cp0.Context.BadVPN2 = 19'b0;
assign rf_cp0.EntryLo1.PFN = 20'b0;
assign rf_cp0.EntryLo1.C = 3'b0;
assign rf_cp0.EntryLo1.D = 1'b0;
assign rf_cp0.EntryLo1.V = 1'b0;
assign rf_cp0.EntryLo1.G = 1'b0;
assign rf_cp0.EntryLo0.PFN = 20'b0;
assign rf_cp0.EntryLo0.C = 3'b0;
assign rf_cp0.EntryLo0.D = 1'b0;
assign rf_cp0.EntryLo0.V = 1'b0;
assign rf_cp0.EntryLo0.G = 1'b0;
assign rf_cp0.Index.P = 1'b0;
assign rf_cp0.Index.Index = 3'b0;
assign rf_cp0.Random.Random = 3'b111;
`endif
always_ff @(posedge clk)
if (rst) begin
rf_cp0.Config.K0 = 3'b011;
rf_cp0.EPC = 32'h0;
rf_cp0.Cause.BD = 1'b0;
rf_cp0.Cause.TI = 1'b0;
rf_cp0.Cause.CE = 2'b0;
rf_cp0.Cause.IP[1:0] = 2'b0;
rf_cp0.Cause.ExcCode = 5'b0;
rf_cp0.Status.CU[0] = 1'b1;
rf_cp0.Status.Bev = 1'b1;
rf_cp0.Status.IM = 8'b0;
rf_cp0.Status.UM = 1'b0;
rf_cp0.Status.EXL = 1'b0;
rf_cp0.Status.IE = 1'b0;
rf_cp0.Compare = 32'hFFFF_FFFF;
rf_cp0.Compare = 32'h0;
`ifdef TLB_ENABLE
rf_cp0.EntryHi.VPN2 = 19'b0;
rf_cp0.EntryHi.ASID = 8'b0;
`endif
rf_cp0.Count = 32'h0;
rf_cp0.BadVAddr = 32'h0;
`ifdef TLB_ENABLE
rf_cp0.Wired.Wired = 3'b0;
rf_cp0.Context.PTEBase = 9'b0;
rf_cp0.Context.BadVPN2 = 19'b0;
rf_cp0.EntryLo1.PFN = 20'b0;
rf_cp0.EntryLo1.C = 3'b0;
rf_cp0.EntryLo1.D = 1'b0;
@ -117,6 +157,7 @@ module CP0 (
rf_cp0.Index.P = 1'b0;
rf_cp0.Index.Index = 3'b0;
rf_cp0.Random.Random = 3'b111;
`endif
rf_cp0.EBase.EBase = 18'b0;
@ -125,7 +166,8 @@ module CP0 (
// count
count_lo = ~count_lo;
if (count_lo == 1) rf_cp0.Count = rf_cp0.Count + 1;
rf_cp0.Random.Random = &rf_cp0.Random.Random ? rf_cp0.Wired.Wired
: rf_cp0.Random.Random + 1'b1;
if (en) begin
case (addr)
// 31: rf_cp0.DESAVE = wdata;
@ -149,6 +191,7 @@ module CP0 (
14: rf_cp0.EPC = wdata;
13: rf_cp0.Cause.IP[1:0] = wdata[9:8];
12: begin
rf_cp0.Status.CU[0] = wdata[28];
rf_cp0.Status.Bev = wdata[22];
rf_cp0.Status.IM = wdata[15:8];
rf_cp0.Status.UM = wdata[4];
@ -160,38 +203,56 @@ module CP0 (
rf_cp0.Compare = wdata;
end
10: begin
`ifdef TLB_ENABLE
rf_cp0.EntryHi.VPN2 = wdata[31:13];
rf_cp0.EntryHi.ASID = wdata[7:0];
`endif
end
9: rf_cp0.Count = wdata;
8: rf_cp0.BadVAddr = wdata;
// 7: rf_cp0.HWREna = wdata;
6: rf_cp0.Wired.Wired = wdata[2:0];
6: begin
`ifdef TLB_ENABLE
rf_cp0.Wired.Wired = wdata[2:0];
rf_cp0.Random.Random = 3'b111;
`endif
end
// 5: rf_cp0.PageMask.Mask = wdata[24:13];
// 4: rf_cp0.Context = wdata;
4: begin
`ifdef TLB_ENABLE
rf_cp0.Context.PTEBase = wdata[31:23];
`endif
end
3: begin
`ifdef TLB_ENABLE
rf_cp0.EntryLo1.PFN = wdata[25:6];
rf_cp0.EntryLo1.C = wdata[5:3];
rf_cp0.EntryLo1.D = wdata[2];
rf_cp0.EntryLo1.V = wdata[1];
rf_cp0.EntryLo1.G = wdata[0];
`endif
end
2: begin
`ifdef TLB_ENABLE
rf_cp0.EntryLo0.PFN = wdata[25:6];
rf_cp0.EntryLo0.C = wdata[5:3];
rf_cp0.EntryLo0.D = wdata[2];
rf_cp0.EntryLo0.V = wdata[1];
rf_cp0.EntryLo0.G = wdata[0];
`endif
end
// 1: rf_cp0.Random = wdata;
0: begin
`ifdef TLB_ENABLE
rf_cp0.Index.Index = wdata[2:0];
`endif
end
default: begin
end
endcase
end
`ifdef TLB_ENABLE
if (tlbr) begin
rf_cp0.EntryHi.VPN2 = tlb_EntryHi.VPN2;
rf_cp0.EntryHi.ASID = tlb_EntryHi.ASID;
@ -212,19 +273,20 @@ module CP0 (
rf_cp0.Index.P = tlb_Index.P;
rf_cp0.Index.Index = tlb_Index.Index;
end
rf_cp0.Random.Random = &rf_cp0.Random.Random ? rf_cp0.Wired.Wired
: rf_cp0.Random.Random + 1'b1;
`endif
if (rf_cp0.Count == rf_cp0.Compare) rf_cp0.Cause.TI = 1;
if (exception.ERET) rf_cp0.Status.EXL = 1'b0;
else begin
if (exception.ExcValid && rf_cp0.Status.EXL == 1'b0) begin
if (exception.ExcValid) begin
if (rf_cp0.Status.EXL == 1'b0) begin
rf_cp0.EPC = exception.Delay ? exception.EPC - 4 : exception.EPC;
rf_cp0.Cause.BD = exception.Delay;
rf_cp0.Cause.ExcCode = exception.ExcCode;
rf_cp0.Status.EXL = 1'b1;
end
rf_cp0.Cause.CE = exception.CE;
rf_cp0.Cause.ExcCode = exception.ExcCode;
if ( exception.ExcCode == `EXCCODE_MOD
| exception.ExcCode == `EXCCODE_TLBL
@ -234,11 +296,14 @@ module CP0 (
rf_cp0.BadVAddr = exception.BadVAddr;
end
`ifdef TLB_ENABLE
if ( exception.ExcCode == `EXCCODE_MOD
| exception.ExcCode == `EXCCODE_TLBL
| exception.ExcCode == `EXCCODE_TLBS) begin
rf_cp0.Context.BadVPN2 = exception.BadVAddr[31:13];
rf_cp0.EntryHi.VPN2 = exception.BadVAddr[31:13];
end
`endif
end
end
@ -275,7 +340,7 @@ module CP0 (
6: rdata = rf_cp0.Wired;
// 5: rdata = rf_cp0.PageMask;
5: rdata = 32'h0;
// 4: rdata = rf_cp0.Context;
4: rdata = rf_cp0.Context;
3: rdata = rf_cp0.EntryLo1;
2: rdata = rf_cp0.EntryLo0;
1: rdata = rf_cp0.Random;
@ -284,6 +349,7 @@ module CP0 (
endcase
assign EPC = rf_cp0.EPC;
assign CU = rf_cp0.Status.CU;
assign Bev = rf_cp0.Status.Bev;
assign EBase = rf_cp0.EBase[31:12];
@ -296,5 +362,6 @@ module CP0 (
assign EntryLo0 = rf_cp0.EntryLo0;
assign in_kernel = ~rf_cp0.Status.UM | rf_cp0.Status.EXL; // currently no ERL
assign EXL = rf_cp0.Status.EXL;
endmodule

View File

@ -214,8 +214,8 @@ module DCache (
end else begin
if (port.req) begin
if (state != IDLE)
LRU[index1] <= nextLRU;
nowLRU <= LRU[port.index];
LRU[index1] = nextLRU;
nowLRU = LRU[port.index];
end
end
end
@ -267,60 +267,15 @@ module DCache (
wdata2[i] = port.rdata;
if (port.wvalid) begin
case (port.sel1)
2'b11: begin
if (port.wstrb[3]) wdata1[i][127:120] = port.wdata[31:24];
if (port.wstrb[2]) wdata1[i][119:112] = port.wdata[23:16];
if (port.wstrb[1]) wdata1[i][111:104] = port.wdata[15: 8];
if (port.wstrb[0]) wdata1[i][103: 96] = port.wdata[ 7: 0];
end
2'b10: begin
if (port.wstrb[3]) wdata1[i][95:88] = port.wdata[31:24];
if (port.wstrb[2]) wdata1[i][87:80] = port.wdata[23:16];
if (port.wstrb[1]) wdata1[i][79:72] = port.wdata[15: 8];
if (port.wstrb[0]) wdata1[i][71:64] = port.wdata[ 7: 0];
end
2'b01: begin
if (port.wstrb[3]) wdata1[i][63:56] = port.wdata[31:24];
if (port.wstrb[2]) wdata1[i][55:48] = port.wdata[23:16];
if (port.wstrb[1]) wdata1[i][47:40] = port.wdata[15: 8];
if (port.wstrb[0]) wdata1[i][39:32] = port.wdata[ 7: 0];
end
2'b00: begin
if (port.wstrb[3]) wdata1[i][31:24] = port.wdata[31:24];
if (port.wstrb[2]) wdata1[i][23:16] = port.wdata[23:16];
if (port.wstrb[1]) wdata1[i][15: 8] = port.wdata[15: 8];
if (port.wstrb[0]) wdata1[i][ 7: 0] = port.wdata[ 7: 0];
end
default: begin end
endcase
case (port.sel1)
2'b11: begin
if (port.wstrb[3]) wdata2[i][127:120] = port.wdata[31:24];
if (port.wstrb[2]) wdata2[i][119:112] = port.wdata[23:16];
if (port.wstrb[1]) wdata2[i][111:104] = port.wdata[15: 8];
if (port.wstrb[0]) wdata2[i][103: 96] = port.wdata[ 7: 0];
end
2'b10: begin
if (port.wstrb[3]) wdata2[i][95:88] = port.wdata[31:24];
if (port.wstrb[2]) wdata2[i][87:80] = port.wdata[23:16];
if (port.wstrb[1]) wdata2[i][79:72] = port.wdata[15: 8];
if (port.wstrb[0]) wdata2[i][71:64] = port.wdata[ 7: 0];
end
2'b01: begin
if (port.wstrb[3]) wdata2[i][63:56] = port.wdata[31:24];
if (port.wstrb[2]) wdata2[i][55:48] = port.wdata[23:16];
if (port.wstrb[1]) wdata2[i][47:40] = port.wdata[15: 8];
if (port.wstrb[0]) wdata2[i][39:32] = port.wdata[ 7: 0];
end
2'b00: begin
if (port.wstrb[3]) wdata2[i][31:24] = port.wdata[31:24];
if (port.wstrb[2]) wdata2[i][23:16] = port.wdata[23:16];
if (port.wstrb[1]) wdata2[i][15: 8] = port.wdata[15: 8];
if (port.wstrb[0]) wdata2[i][ 7: 0] = port.wdata[ 7: 0];
end
default: begin end
endcase
if (port.wstrb[3]) wdata1[i][{port.sel1, 5'd24}+:8] = port.wdata[24+:8];
if (port.wstrb[2]) wdata1[i][{port.sel1, 5'd16}+:8] = port.wdata[16+:8];
if (port.wstrb[1]) wdata1[i][{port.sel1, 5'd08}+:8] = port.wdata[08+:8];
if (port.wstrb[0]) wdata1[i][{port.sel1, 5'd00}+:8] = port.wdata[00+:8];
if (port.wstrb[3]) wdata2[i][{port.sel1, 5'd24}+:8] = port.wdata[24+:8];
if (port.wstrb[2]) wdata2[i][{port.sel1, 5'd16}+:8] = port.wdata[16+:8];
if (port.wstrb[1]) wdata2[i][{port.sel1, 5'd08}+:8] = port.wdata[08+:8];
if (port.wstrb[0]) wdata2[i][{port.sel1, 5'd00}+:8] = port.wdata[00+:8];
end
end
end

View File

@ -149,8 +149,8 @@ module ICache (
always_ff @(posedge clk) begin
if (port.req) begin
if (state != IDLE)
LRU[index1] <= nextLRU;
nowLRU <= LRU[port.index];
LRU[index1] = nextLRU;
nowLRU = LRU[port.index];
end
end

View File

@ -2,34 +2,39 @@
module ALU(
input word_t a, b,
input aluctrl_t aluctrl,
input ALUCtrl_t aluctrl,
output word_t aluout,
output logic overflow);
output logic valid,
output logic overflow
);
wire logic alt = aluctrl.alt;
logic alt;
logic [4:0] sa;
logic ex;
word_t sl, sr;
word_t b2;
word_t sum;
logic lt, ltu;
wire logic [4:0] sa = a[4:0];
wire logic ex = alt & b[31];
wire word_t sl = b << sa;
/* verilator lint_off WIDTH */
wire word_t sr = {{31{ex}}, b} >> sa;
/* verilator lint_on WIDTH */
assign alt = aluctrl.alt;
wire word_t b2 = alt ? ~b : b;
wire word_t sum;
wire logic lt, ltu;
assign sa = a[4:0];
assign ex = alt & b[31];
assign sl = b << sa;
assign sr = {{31{ex}}, b} >> sa;
/* verilator lint_off WIDTH */
assign b2 = alt ? ~b : b;
assign {lt, ltu, sum} = {a[31], 1'b0, a} + {b2[31], 1'b1, b2} + alt; // alt for cin(CARRY4) at synthesis
/* verilator lint_on WIDTH */
assign aluout = (aluctrl.f_sl ? sl : 32'b0)
| (aluctrl.f_sr ? sr : 32'b0)
| (aluctrl.f_add ? sum : 32'b0)
| (aluctrl.f_and ? a & b : 32'b0)
| (aluctrl.f_or ? alt ? ~(a | b) : a | b : 32'b0)
| (aluctrl.f_xor ? a ^ b : 32'b0)
| (aluctrl.f_slt ? {31'b0, lt } : 32'b0)
| (aluctrl.f_sltu ? {31'b0, ltu} : 32'b0)
| (aluctrl.f_mova ? a : 32'b0);
assign valid = ~aluctrl.f_mov | b == 32'h0 ^ alt;
assign aluout = (aluctrl.f_sl ? sl : 32'h0)
| (aluctrl.f_sr ? sr : 32'h0)
| (aluctrl.f_add ? sum : 32'h0)
| (aluctrl.f_and ? a & b : 32'h0)
| (aluctrl.f_or ? alt ? ~(a | b) : a | b : 32'h0)
| (aluctrl.f_xor ? a ^ b : 32'h0)
| (aluctrl.f_slt ? {31'b0, lt } : 32'h0)
| (aluctrl.f_sltu ? {31'b0, ltu} : 32'h0)
| (aluctrl.f_mov ? a : 32'h0);
assign overflow = lt ^ sum[31];
endmodule

View File

@ -36,16 +36,17 @@ module Controller (
// Take Care of BGO
assign ctrl.BGO = ~inst[26] & (eq | inst[27] & ltz) | inst[26] & (~inst[27] & (~inst[28] & (inst[16] & ~ltz | ~inst[16] & ltz) | inst[28] & ~eq) | inst[27] & ~eq & ~ltz);
assign ctrl.PRV = ~inst[31] & inst[30] & ~inst[29];
assign ctrl.SYSCALL = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[0];
assign ctrl.BREAK = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[1] & inst[0];
assign ctrl.ERET = ~inst[31] & inst[30] & inst[4];
assign ctrl.OFA = ~inst[26] & ~inst[30] & (~inst[29] & ~inst[31] & ~inst[28] & ~inst[27] & inst[5] & ~inst[0] & ~inst[4] & ~inst[2] & ~inst[3] | inst[29] & ~inst[27] & ~inst[31] & ~inst[28]);
assign ctrl.ES = ~inst[30] & (~inst[28] & ~inst[27] & (~inst[26] & (~inst[3] & inst[2] | inst[3] & (inst[1] | inst[4]) | inst[5]) | inst[26] & inst[19]) | inst[31]) | inst[29];
assign ctrl.ET = ~inst[26] & ~inst[27] & ~inst[31] & (~inst[30] & ~inst[29] & ~inst[28] & (~inst[3] & ~inst[4] | inst[3] & inst[4] | inst[5]) | inst[30] & inst[29]);
assign ctrl.DS = ~inst[26] & (~inst[28] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[29] & ~inst[31]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] & ~inst[19] | inst[28]);
assign ctrl.DT = ~inst[28] & ~inst[26] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & inst[1] & ~inst[5] & ~inst[4] | inst[28] & ~inst[29] & ~inst[31] & ~inst[27];
assign ctrl.ES = ~inst[31] & ~inst[27] & (~inst[30] & ~inst[29] & ~inst[28] & (~inst[26] & (~inst[4] & ~inst[2] & (~inst[5] & inst[3] & inst[1] | inst[5] & ~inst[3] & ~inst[0]) | inst[4] & (inst[5] | inst[3])) | inst[26] & inst[19]) | inst[29] & (inst[30] | ~inst[28] & ~inst[26])) | inst[31] & ~inst[30];
assign ctrl.ET = ~inst[27] & ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & (~inst[4] & ~inst[2] & (~inst[5] & inst[3] & inst[1] | inst[5] & ~inst[3] & ~inst[0]) | inst[4] & (inst[5] | inst[3])) | inst[30] & inst[29]);
assign ctrl.ES2 = ~inst[30] & ~inst[28] & ~inst[27] & ~inst[26] & (inst[5] | ~inst[3] & inst[2]) | inst[29];
assign ctrl.ET2 = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & (inst[5] | ~inst[4] & ~inst[3]);
assign ctrl.DS = ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1] | ~inst[31] & ~inst[29] & inst[28]) | ~inst[31] & ~inst[29] & inst[26] & (inst[28] | ~inst[27] & ~inst[19]);
assign ctrl.DT = ~inst[31] & ~inst[29] & inst[28] & ~inst[27];
assign ctrl.DP0 = ~inst[31] & (~inst[30] & (~inst[26] & (~inst[4] | ~inst[5] | inst[27] | inst[28]) | inst[26] & (~inst[19] | inst[27] | inst[28])) | inst[30] & (~inst[25] | inst[4]) | inst[29]) | inst[31] & inst[30];
assign ctrl.DP1 = ~inst[30] & (~inst[4] | inst[5] | inst[28] | inst[29] | inst[31] | inst[27] | inst[26]) | inst[30] & ~inst[29] & (inst[25] | inst[31]);
@ -58,11 +59,11 @@ module Controller (
assign ctrl.ECtrl.OP.f_xor = ~inst[31] & (~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & inst[5] & ~inst[0] & inst[2] & ~inst[4] & inst[1] | inst[28] & inst[27]);
assign ctrl.ECtrl.OP.f_slt = ~inst[31] & ~inst[28] & (~inst[26] & (~inst[29] & inst[5] & ~inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[27]) | inst[26] & ~inst[29] & ~inst[27] & ~inst[16] & ~inst[18] & ~inst[20]);
assign ctrl.ECtrl.OP.f_sltu = ~inst[31] & ~inst[28] & (~inst[26] & ~inst[27] & ~inst[29] & inst[5] & inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[26] & (~inst[29] & ~inst[27] & inst[16] & ~inst[20] | inst[29] & inst[27]));
assign ctrl.ECtrl.OP.f_mova = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[3] & inst[1];
assign ctrl.ECtrl.OP.alt = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & (~inst[26] & (inst[1] & (inst[0] | inst[5]) | inst[4]) | inst[26] & ~inst[20]) | inst[29] & inst[27]);
assign ctrl.ECtrl.OP.f_mov = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[3] & inst[1];
assign ctrl.ECtrl.OP.alt = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & (~inst[26] & (inst[4] | inst[1] & (inst[5] | inst[0])) | inst[26] & ~inst[20]) | inst[29] & inst[27]);
assign ctrl.ECtrl.SA = SA_t'({(~inst[27] & (~inst[26] & ((inst[3] & inst[1] | inst[2]) | inst[5]) | inst[26] & ~inst[20]) | inst[31]) | inst[29], (~inst[28] & (inst[2] | inst[3] | inst[5] | inst[29] | inst[26]) | inst[28] & (~inst[27] | ~inst[26])) | inst[31]});
assign ctrl.ECtrl.SB = SB_t'({(inst[26] & ~inst[27] & ~inst[20] | inst[31]) | inst[29], inst[3] & ~inst[5] | inst[26]});
assign ctrl.ECtrl.SB = SB_t'({inst[31] | inst[29] | ~inst[27] & inst[26] & ~inst[20], inst[26] | inst[3] & ~inst[1]});
assign ctrl.MCtrl0.HW = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & ~inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1];
assign ctrl.MCtrl0.LW = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1];
@ -73,24 +74,29 @@ module Controller (
assign ctrl.MCtrl0.SEL = inst[2:0];
assign ctrl.MCtrl0.RS0 = RS0_t'({~inst[30] & (~inst[4] | inst[5] | inst[29] | inst[26]), inst[30], ~inst[29] & (~inst[1] | inst[30])});
assign ctrl.MCtrl1.MR = inst[31] & ~inst[30];
assign ctrl.MCtrl1.MR = inst[31] & (~inst[26] | inst[26] & (~inst[27] | inst[27] & ~inst[28] & ~inst[30]));
assign ctrl.MCtrl1.MWR = inst[29];
assign ctrl.MCtrl1.MX = ~inst[28];
assign ctrl.MCtrl1.ALR = ALR_t'({inst[28] & inst[27] & ~inst[26], ~inst[28] & inst[27] & ~inst[26]});
assign ctrl.MCtrl1.SZ = inst[27:26];
`ifdef TLB_ENABLE
assign ctrl.MCtrl1.TLBR = ~inst[31] & inst[30] & ~inst[29] & inst[25] & ~inst[3] & ~inst[1];
assign ctrl.MCtrl1.TLBWI = ~inst[31] & inst[30] & ~inst[29] & inst[25] & ~inst[3] & inst[1];
assign ctrl.MCtrl1.TLBWR = ~inst[31] & inst[30] & ~inst[29] & inst[25] & ~inst[3] & (inst[2] | ~inst[1]);
assign ctrl.MCtrl1.TLBP = ~inst[31] & inst[30] & ~inst[4] & inst[3];
`else
assign ctrl.MCtrl1.TLBR = 1'b0;
assign ctrl.MCtrl1.TLBWI = 1'b0;
assign ctrl.MCtrl1.TLBWR = 1'b0;
assign ctrl.MCtrl1.TLBP = 1'b0;
`endif
assign ctrl.MCtrl1.CACHE_OP = CacheOp_t'({inst[29] & inst[28] & inst[26] & inst[16], inst[29] & inst[28] & inst[26] & ~inst[20], inst[29] & inst[28] & inst[26] & ~inst[18] & (inst[20] | inst[19] | ~inst[16])});
assign ctrl.Trap.TEN = ~inst[30] & ~inst[27] & (~inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[5] | inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[19]) | inst[30] & ~inst[29] & ~inst[31];
assign ctrl.Trap.TEN = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & (~inst[30] & ~inst[26] & inst[5] & inst[4] | inst[26] & inst[19]);
assign ctrl.Trap.TP = TrapOp_t'({~inst[26] & inst[2] | inst[26] & inst[18], ~inst[26] & inst[1] | inst[26] & inst[17]});
logic mov, rw, eqz;
assign mov = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] & inst[1];
assign rw = ~inst[30] & (~inst[26] & (~inst[27] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[0] | inst[1])) | inst[4] & ~inst[5] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[27] & (~inst[31] & inst[29] | inst[31] & ~inst[29])) | inst[26] & (~inst[29] & (~inst[27] & ~inst[28] & inst[20] | inst[27] & ~inst[28] | inst[31]) | inst[29] & ~inst[31])) | inst[30] & ~inst[31] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1]);
assign eqz = rt == 32'h0;
assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~mov | ~inst[0] & eqz | inst[0] & ~eqz) & rw;
assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~inst[30] & (~inst[26] & (~inst[27] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[0] | inst[1])) | inst[4] & ~inst[5] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[27] & (~inst[31] & inst[29] | inst[31] & ~inst[29])) | inst[26] & (~inst[29] & (~inst[27] & ~inst[28] & inst[20] | inst[27] & ~inst[28] | inst[31]) | inst[29] & ~inst[31])) | inst[30] & ~inst[31] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1]));
endmodule

View File

@ -33,8 +33,10 @@ module Datapath (
output word_t C0_wdata,
output EXCEPTION_t C0_exception,
input word_t C0_ERETPC,
input logic C0_EXL,
input logic C0_Bev,
input logic [19:0] C0_EBase,
input logic [3:0] C0_CU,
input logic C0_kernel,
//debug interface
@ -124,8 +126,10 @@ module Datapath (
logic D_IA_valid;
logic D_IB_valid;
logic D_IA_iv;
logic D_IB_iv;
logic D_IA_ri;
logic D_IB_ri;
logic D_IA_cpu;
logic D_IB_cpu;
logic D_IA_TLBRefill;
logic D_IA_TLBInvalid;
@ -134,6 +138,8 @@ module Datapath (
logic D_IB_TLBInvalid;
logic D_IB_AddressError;
logic D_IA_HazardALU2;
logic D_IB_HazardALU2;
logic D_IA_Hazard;
logic D_IB_Hazard;
@ -146,7 +152,9 @@ module Datapath (
word_t E_I0_A;
word_t E_I0_B;
logic E_I0_ALUvalid;
logic E_I0_Overflow;
WCtrl_t E_I0_NowWCtrl;
logic E_I0_NowExcValid;
logic E_I0_NowExcValidWithoutOF;
logic E_I0_PrevExcValid;
@ -158,7 +166,9 @@ module Datapath (
word_t E_I1_A;
word_t E_I1_B;
word_t E_I1_ADDR;
logic E_I1_ALUvalid;
logic E_I1_Overflow;
WCtrl_t E_I1_NowWCtrl;
logic E_I1_STRBERROR;
logic E_I1_NowExcValid;
logic E_I1_NowExcValidWithoutOF;
@ -214,6 +224,11 @@ module Datapath (
word_t M_I1_MDataUR;
word_t M_I1_MData;
word_t M_I0_A;
word_t M_I0_B;
logic M_I0_ALUvalid;
logic M_I0_Overflow;
logic M_I0_DIV_valid;
word_t M_I0_DIVH;
word_t M_I0_DIVL;
@ -228,7 +243,7 @@ module Datapath (
word_t M_I0_DIVUHB;
word_t M_I0_DIVULB;
logic [5:0] M_I0_MULT_CNTR;
logic M_I0_MULT_CNTR;
word_t M_I0_MULTH;
word_t M_I0_MULTL;
@ -280,6 +295,7 @@ module Datapath (
word_t HI;
word_t LO;
//---------------------------------------------------------------------------//
// Pre Fetch //
//---------------------------------------------------------------------------//
@ -297,7 +313,7 @@ module Datapath (
{C0_Bev ? 23'h5fe001 : {C0_EBase, 3'h0}, `Off_GExc},
{C0_Bev ? 23'h5fe001 : {C0_EBase, 3'h0}, `Off_TRef},
C0_ERETPC,
{M_exception.ERET, M_exception_REFILL, M_exception.ExcValid, ~D_IB_valid | ~D.IA.BJRJ | D.IA.B & ~D.IA.BGO},
{M_exception.ERET, M_exception_REFILL & ~C0_EXL, M_exception.ExcValid, ~D_IB_valid | ~D.IA.BJRJ | D.IA.B & ~D.IA.BGO},
PF.pc
);
@ -448,57 +464,87 @@ module Datapath (
);
// D.Exc
instr_valid D_IA_instr_valid (
decoder2 D_IA_decoder2 (
D.IA_inst,
D_IA_iv
C0_CU,
C0_kernel,
D_IA_ri,
D_IA_cpu,
D.IA_CE
);
instr_valid D_IB_instr_valid (
decoder2 D_IB_decoder2 (
D.IB_inst,
D_IB_iv
C0_CU,
C0_kernel,
D_IB_ri,
D_IB_cpu,
D.IB_CE
);
// INFO: Merge "pc[1:0] != 2'b00" into AddressError
assign D.IA_ExcValid = D_IA_valid & ( D.IA_pc[1:0] != 2'b00
| ~D_IA_iv
| D_IA_ri | D_IA_cpu
| D_IA_TLBRefill | D_IA_TLBInvalid
| D_IA_AddressError
| D.IA.SYSCALL | D.IA.BREAK | D.IA.ERET
| D.IA.PRV & ~C0_kernel);
assign D.IA_ERET = D_IA_valid & D.IA_pc[1:0] == 2'b00 & ~D_IA_TLBRefill & ~D_IA_TLBInvalid & ~D_IA_AddressError & D_IA_iv & D.IA.ERET;
| D.IA.SYSCALL | D.IA.BREAK | D.IA.ERET);
assign D.IA_ERET = D_IA_valid & D.IA_pc[1:0] == 2'b00 & ~D_IA_TLBRefill & ~D_IA_TLBInvalid & ~D_IA_AddressError & ~D_IA_ri & ~D_IA_cpu & D.IA.ERET;
assign D.IA_REFILL = D_IA_valid & D.IB_pc[1:0] == 2'b00 & D_IA_TLBRefill;
assign D.IA_ExcCode = D.IA_pc[1:0] != 2'b00 | D_IA_AddressError ? `EXCCODE_ADEL
: D_IA_TLBRefill ? `EXCCODE_TLBL
: D_IA_TLBInvalid ? `EXCCODE_TLBL
: ~D_IA_iv ? `EXCCODE_RI
: D_IA_cpu ? `EXCCODE_CPU
: D_IA_ri ? `EXCCODE_RI
: ~D.IA_inst[30] & D.IA_inst[0] ? `EXCCODE_BP
: ~D.IA_inst[30] & ~D.IA_inst[0] ? `EXCCODE_SYS
: `EXCCODE_CPU;
: `EXCCODE_RI;
assign D.IB_ExcValid = D_IB_valid & ( D.IB_pc[1:0] != 2'b00
| ~D_IB_iv
| D_IB_ri | D_IB_cpu
| D_IB_TLBRefill | D_IB_TLBInvalid
| D_IB_AddressError
| D.IB.SYSCALL | D.IB.BREAK | D.IB.ERET
| D.IB_Delay & D.IB.BJRJ
| D.IB.PRV & ~C0_kernel);
assign D.IB_ERET = D_IB_valid & D.IB_pc[1:0] == 2'b00 & ~D_IB_TLBRefill & ~D_IB_TLBInvalid & ~D_IB_AddressError & D_IB_iv & D.IB.ERET & ~D.IB_Delay;
| D.IB_Delay & D.IB.BJRJ);
assign D.IB_ERET = D_IB_valid & D.IB_pc[1:0] == 2'b00 & ~D_IB_TLBRefill & ~D_IB_TLBInvalid & ~D_IB_AddressError & ~D_IB_ri & ~D_IB_cpu & D.IB.ERET & ~D.IB_Delay;
assign D.IB_REFILL = D_IB_valid & D.IB_pc[1:0] == 2'b00 & D_IB_TLBRefill;
// EXCCODE_BP and EXCCODE_SYSCALL -> exc.txt
assign D.IB_ExcCode = D.IB_pc[1:0] != 2'b00 | D_IB_AddressError ? `EXCCODE_ADEL
: D_IB_TLBRefill ? `EXCCODE_TLBL
: D_IB_TLBInvalid ? `EXCCODE_TLBL
: ~D_IB_iv ? `EXCCODE_RI
: D_IB_cpu ? `EXCCODE_CPU
: D_IB_ri ? `EXCCODE_RI
: D.IB.ERET ? `EXCCODE_RI
: D.IB_Delay & D.IB.BJRJ ? `EXCCODE_RI
: ~D.IB_inst[30] & D.IB_inst[0] ? `EXCCODE_BP
: ~D.IB_inst[30] & ~D.IB_inst[0] ? `EXCCODE_SYS
: `EXCCODE_CPU;
: `EXCCODE_RI;
assign D.IB_Delay = D.IA.BJRJ;
// D.Dispatch
// Not Arith -> Arith
assign D_IA_Hazard = E.I0.WCtrl.RW & D.IA.RS == E.I0.RD & D.IA.ES & ~E.I0.MCtrl.RS0[2]
| E.I0.WCtrl.RW & D.IA.RT == E.I0.RD & D.IA.ET & ~E.I0.MCtrl.RS0[2]
assign D_IA_HazardALU2 = E.I0.WCtrl.RW & D.IA.RS == E.I0.RD & D.IA.ES2 & ~E.I0.MCtrl_ALU1
| E.I0.WCtrl.RW & D.IA.RT == E.I0.RD & D.IA.ET2 & ~E.I0.MCtrl_ALU1
// Load -> Arith
| E.I1.WCtrl.RW & D.IA.RS == E.I1.RD & D.IA.ES2 & E.I1.MCtrl.MR
| E.I1.WCtrl.RW & D.IA.RT == E.I1.RD & D.IA.ET2 & E.I1.MCtrl.MR
;
// Not Arith -> Arith
assign D_IB_HazardALU2 = E.I0.WCtrl.RW & D.IB.RS == E.I0.RD & D.IB.ES2 & ~E.I0.MCtrl_ALU1
| E.I0.WCtrl.RW & D.IB.RT == E.I0.RD & D.IB.ET2 & ~E.I0.MCtrl_ALU1
// Load -> Arith
| E.I1.WCtrl.RW & D.IB.RS == E.I1.RD & D.IB.ES2 & E.I1.MCtrl.MR
| E.I1.WCtrl.RW & D.IB.RT == E.I1.RD & D.IB.ET2 & E.I1.MCtrl.MR
// Arith -> Arith
| D.IA.WCtrl.RW & D.IB.RS == D.IA.RD & D.IB.ES2
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.ET2
;
assign D.A = ~(D.IA.DP0 & D.IA.DP1 | D.IA_ExcValid) ? D.IA.DP1 : D.IB.DP0 & ~D_IA_HazardALU2;
// D.Dispatch
assign D_IA_Hazard = D_IA_HazardALU2 & D.A
// Not Arith -> Arith
| E.I0.WCtrl.RW & D.IA.RS == E.I0.RD & D.IA.ES & ~E.I0.MCtrl_ALU1
| E.I0.WCtrl.RW & D.IA.RT == E.I0.RD & D.IA.ET & ~E.I0.MCtrl_ALU1
// Load -> Arith
| E.I1.WCtrl.RW & D.IA.RS == E.I1.RD & D.IA.ES & E.I1.MCtrl.MR
| E.I1.WCtrl.RW & D.IA.RT == E.I1.RD & D.IA.ET & E.I1.MCtrl.MR
@ -508,8 +554,8 @@ module Datapath (
| E.I1.WCtrl.RW & D.IA.RS == E.I1.RD & D.IA.DS
| E.I1.WCtrl.RW & D.IA.RT == E.I1.RD & D.IA.DT
// Not Arith -> B / JR
| M.I0.WCtrl.RW & D.IA.RS == M.I0.RD & D.IA.DS & ~M.I0.MCtrl.RS0[2]
| M.I0.WCtrl.RW & D.IA.RT == M.I0.RD & D.IA.DT & ~M.I0.MCtrl.RS0[2]
| M.I0.WCtrl.RW & D.IA.RS == M.I0.RD & D.IA.DS & ~M.I0.MCtrl_ALU1
| M.I0.WCtrl.RW & D.IA.RT == M.I0.RD & D.IA.DT & ~M.I0.MCtrl_ALU1
// Load -> B / JR
| M.I1.WCtrl.RW & D.IA.RS == M.I1.RD & D.IA.DS & M.I1.MCtrl.MR
| M.I1.WCtrl.RW & D.IA.RT == M.I1.RD & D.IA.DT & M.I1.MCtrl.MR
@ -518,23 +564,27 @@ module Datapath (
| E.I0.MCtrl.C0W & D.IA.MCtrl1.TLBP & E.I0.MCtrl.C0D == C0_ENTRYHI
;
assign D_IB_Hazard = D_IB_HazardALU2 & ~D.A
// Not Arith -> Arith
assign D_IB_Hazard = E.I0.WCtrl.RW & D.IB.RS == E.I0.RD & D.IB.ES & ~E.I0.MCtrl.RS0[2]
| E.I0.WCtrl.RW & D.IB.RT == E.I0.RD & D.IB.ET & ~E.I0.MCtrl.RS0[2]
| E.I0.WCtrl.RW & D.IB.RS == E.I0.RD & D.IB.ES & ~E.I0.MCtrl_ALU1
| E.I0.WCtrl.RW & D.IB.RT == E.I0.RD & D.IB.ET & ~E.I0.MCtrl_ALU1
// Load -> Arith
| E.I1.WCtrl.RW & D.IB.RS == E.I1.RD & D.IB.ES & E.I1.MCtrl.MR
| E.I1.WCtrl.RW & D.IB.RT == E.I1.RD & D.IB.ET & E.I1.MCtrl.MR
// Arith -> Arith
| D.IA.WCtrl.RW & D.IB.RS == D.IA.RD & D.IB.ES
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.ET
// Load -> Arith2
| D.IA.WCtrl.RW & D.IB.RS == D.IA.RD & D.IB.ES2 & ~D.IA.DP0
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.ET2 & ~D.IA.DP0
// Load -> MulDiv
| D.IA.WCtrl.RW & D.IB.RS == D.IA.RD & D.IB.MCtrl0.HLS[2] & ~D.IA.DP0
| D.IA.WCtrl.RW & D.IB.RS == D.IA.RD & ~D.IB.MCtrl0.HLS[2] & (D.IB.MCtrl0.HW | D.IB.MCtrl0.LW) & ~D.IA.DP0
// Load -> C0
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.MCtrl0.C0W & ~D.IA.DP0
// Not Arith -> Store
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.MCtrl1.MWR & ~D.IA.DP1
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & D.IB.MCtrl1.MWR & (~D.IA.DP1 | D_IA_HazardALU2)
// Not Arith -> LWL/LWR
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & |D.IB.MCtrl1.ALR & ~D.IA.DP1
| D.IA.WCtrl.RW & D.IB.RT == D.IA.RD & |D.IB.MCtrl1.ALR & (~D.IA.DP1 | D_IA_HazardALU2)
// CP0 Execution Hazards
// Hazards Related to the TLB
| D.IA.MCtrl0.C0W & D.IB.MCtrl1.TLBR & D.IA.MCtrl0.C0D == C0_INDEX
@ -558,8 +608,6 @@ module Datapath (
| D.IA.MCtrl0.C0W & D.IB.ERET & D.IA.MCtrl0.C0D == C0_EPC
;
assign D.A = (D.IA.DP0 & D.IA.DP1 | D.IA_ExcValid) ? D.IB.DP0 : D.IA.DP1;
assign D_IA_can_dispatch = ~D_IA_valid | D.IA_ExcValid | ~D_IA_Hazard & (~D.IA.BJRJ | D_IB_valid);
assign D_IB_can_dispatch = ~D_IB_valid | D.IB_ExcValid & ~(D.IB.ERET & ~D.IB_Delay) | ~D_IB_Hazard & ~D.IB.BJRJ & (D.A ? D.IB.DP0 : D.IB.DP1);
@ -579,6 +627,7 @@ module Datapath (
assign D.I0.ERET = D.A ? D.IB_ERET : D.IA_ERET;
assign D.I0.REFILL = D.A ? D.IB_REFILL : D.IA_REFILL;
assign D.I0.ExcCode = D.A ? D.IB_ExcCode : D.IA_ExcCode;
assign D.I0.CE = D.A ? D.IB_CE : D.IA_CE;
assign D.I0.Delay = D.A ? D.IB_Delay : D.IA_Delay;
assign D.I0.OFA = D.A ? D.IB.OFA : D.IA.OFA;
assign D.I0.RS = D.A ? D.IB.RS : D.IA.RS;
@ -589,12 +638,14 @@ module Datapath (
assign D.I0.sa = D.A ? D.IB_sa : D.IA_sa;
assign D.I0.ECtrl = D.A ? D.IB.ECtrl : D.IA.ECtrl;
assign D.I0.MCtrl = D.A ? D.IB.MCtrl0 : D.IA.MCtrl0;
assign D.I0.MCtrl_ALU1 = D.I0.MCtrl.RS0[2] & (D.A ? ~D_IB_HazardALU2 : ~D_IA_HazardALU2);
assign D.I0.RD = D.A ? D.IB.RD : D.IA.RD;
assign D.I0.WCtrl = D.A ? D.IB.WCtrl : D.IA.WCtrl;
assign D_I1_go = D.A ? D_IA_go : D_IB_go;
assign D.I1.pc = D.A ? D.IA_pc : D.IB_pc;
assign D.I1.ExcValid = D.A ? D.IA_ExcValid : D.IB_ExcValid;
assign D.I1.CE = D.A ? D.IA_CE : D.IB_CE;
assign D.I1.ERET = D.A ? D.IA_ERET : D.IB_ERET;
assign D.I1.REFILL = D.A ? D.IA_REFILL : D.IB_REFILL;
assign D.I1.ExcCode = D.A ? D.IA_ExcCode : D.IB_ExcCode;
@ -685,13 +736,13 @@ module Datapath (
E.en,
E.I0.pc
);
ffenrc #(1 + 1 + 1 + 5 + 1) E_I0_Exc_ff (
ffenrc #(1 + 1 + 1 + 5 + 2 + 1) E_I0_Exc_ff (
clk,
rst | rstM,
{D.I0.ExcValid, D.I0.ERET, D.I0.REFILL, D.I0.ExcCode, D.I0.Delay},
{D.I0.ExcValid, D.I0.ERET, D.I0.REFILL, D.I0.ExcCode, D.I0.CE, D.I0.Delay},
E.en,
~D_go,
{E_I0_PrevExcValid, E_I0_PrevERET, E_I0_PrevREFILL, E_I0_PrevExcCode, E.I0.Delay}
{E_I0_PrevExcValid, E_I0_PrevERET, E_I0_PrevREFILL, E_I0_PrevExcCode, E.I0.CE, E.I0.Delay}
);
ffenrc #(1) E_I0_ExcCtrl_ff (
clk,
@ -725,13 +776,13 @@ module Datapath (
E.en,
E.I0.ECtrl
);
ffenrc #(19) E_I0_MCtrl_ff (
ffenrc #(20) E_I0_MCtrl_ff (
clk,
rst | rstM,
D.I0.MCtrl,
{D.I0.MCtrl, D.I0.MCtrl_ALU1},
E.en,
~D_go | ~D_I0_go,
E.I0.MCtrl
{E.I0.MCtrl, E.I0.MCtrl_ALU1}
);
ffenrc #(5 + 1) E_I0_WCtrl_ff (
clk,
@ -748,13 +799,13 @@ module Datapath (
E.en,
E.I1.pc
);
ffenrc #(1 + 1 + 1 + 5 + 1) E_I1_Exc_ff (
ffenrc #(1 + 1 + 1 + 5 + 2 + 1) E_I1_Exc_ff (
clk,
rst | rstM,
{D.I1.ExcValid, D.I1.ERET, D.I1.REFILL, D.I1.ExcCode, D.I1.Delay},
{D.I1.ExcValid, D.I1.ERET, D.I1.REFILL, D.I1.ExcCode, D.I1.CE, D.I1.Delay},
E.en,
~D_go,
{E_I1_PrevExcValid, E_I1_PrevERET, E_I1_PrevREFILL, E_I1_PrevExcCode, E.I1.Delay}
{E_I1_PrevExcValid, E_I1_PrevERET, E_I1_PrevREFILL, E_I1_PrevExcCode, E.I1.CE, E.I1.Delay}
);
ffenrc #(1) E_I1_ExcCtrl_ff (
clk,
@ -788,7 +839,7 @@ module Datapath (
E.en,
E.I1.ECtrl
);
ffenrc #(14) E_I1_MCtrl_ff (
ffenrc #(15) E_I1_MCtrl_ff (
clk,
rst | rstM,
D.I1.MCtrl,
@ -860,8 +911,10 @@ module Datapath (
E_I0_B,
E.I0.ECtrl.OP,
E.I0.ALUOut,
E_I0_ALUvalid,
E_I0_Overflow
);
assign E_I0_NowWCtrl.RW = E.I0.WCtrl.RW & (~E.I0.MCtrl_ALU1 | E_I0_ALUvalid);
// E.I0.MUL
mul_signed E_I0_MULT_mul (
@ -918,8 +971,10 @@ module Datapath (
E_I1_B,
E.I1.ECtrl.OP,
E.I1.ALUOut,
E_I1_ALUvalid,
E_I1_Overflow
);
assign E_I1_NowWCtrl.RW = E.I1.WCtrl.RW & (E.I1.MCtrl.MR | E_I1_ALUvalid);
// E.I1.MEM
memerror E_I1_memerror (
@ -1007,13 +1062,13 @@ module Datapath (
M.en,
M.I0.pc
);
ffenrc #(1 + 1 + 1 + 5 + 1) M_I0_Exc_ff (
ffenrc #(1 + 1 + 1 + 5 + 2 + 1) M_I0_Exc_ff (
clk,
rst | rstM,
{E.I0.ExcValid, E.I0.ERET, E.I0.REFILL, E.I0.ExcCode, E.I0.Delay},
{E.I0.ExcValid, E.I0.ERET, E.I0.REFILL, E.I0.ExcCode, E.I0.CE, E.I0.Delay},
M.en,
~E_go,
{M.I0.ExcValid, M.I0.ERET, M.I0.REFILL, M.I0.ExcCode, M.I0.Delay}
{M.I0.ExcValid, M.I0.ERET, M.I0.REFILL, M.I0.ExcCode, M.I0.CE, M.I0.Delay}
);
ffen #(5 + 5) M_I0_RST_ff (
clk,
@ -1033,26 +1088,38 @@ module Datapath (
M.en,
M.I0.ALUOut
);
ffenrc #(19) M_I0_MCtrl_ff (
ffen #(32 + 5) M_I0_IS_ff (
clk,
{E.I0.imm, E.I0.sa},
M.en,
{M.I0.imm, M.I0.sa}
);
ffen #(14) M_I0_ECtrl_ff (
clk,
E.I0.ECtrl,
M.en,
M.I0.ECtrl
);
ffenrc #(20) M_I0_MCtrl_ff (
clk,
rst | rstM,
E.I0.MCtrl,
{E.I0.MCtrl, E.I0.MCtrl_ALU1},
M.en,
~E_go | ~E_I0_go,
M.I0.MCtrl
{M.I0.MCtrl, M.I0.MCtrl_ALU1}
);
ffenrc #(5 + 1) M_I0_WCtrl_ff (
clk,
rst | rstM,
{E.I0.RD, E.I0.WCtrl},
{E.I0.RD, E_I0_NowWCtrl},
M.en,
~E_go | ~E_I0_go,
{M.I0.RD, M.I0.WCtrl}
);
ffenr #(6) M_I0_MULT_CNTR_ff (
ffenr #(1) M_I0_MULT_CNTR_ff (
clk,
rst | rstM,
{E.I0.MCtrl.HLS[2:1] == 2'b10 & E_go & M.en, M_I0_MULT_CNTR[5:1]},
{E.I0.MCtrl.HLS[2:1] == 2'b10 & E_go & M.en},
1'b1,
M_I0_MULT_CNTR
);
@ -1062,13 +1129,13 @@ module Datapath (
M.en,
M.I1.pc
);
ffenrc #(1 + 1 + 1 + 5 + 32 + 1) M_I1_Exc_ff (
ffenrc #(1 + 1 + 1 + 5 + 2 + 32 + 1) M_I1_Exc_ff (
clk,
rst | rstM,
{E.I1.ExcValid, E.I1.ERET, E.I1.REFILL, E.I1.ExcCode, E.I1.BadVAddr, E.I1.Delay},
{E.I1.ExcValid, E.I1.ERET, E.I1.REFILL, E.I1.ExcCode, E.I1.CE, E.I1.BadVAddr, E.I1.Delay},
M.en,
~E_go,
{M_I1_PrevExcValid, M.I1.ERET, M_I1_PrevREFILL, M_I1_PrevExcCode, M.I1.BadVAddr, M.I1.Delay}
{M_I1_PrevExcValid, M.I1.ERET, M_I1_PrevREFILL, M_I1_PrevExcCode, M.I1.CE, M.I1.BadVAddr, M.I1.Delay}
);
ffen #(5) M_I1_RT_ff (
clk,
@ -1088,7 +1155,7 @@ module Datapath (
M.en,
M.I1.ALUOut
);
ffenrc #(14) M_I1_MCtrl_ff (
ffenrc #(15) M_I1_MCtrl_ff (
clk,
rst | rstM,
E.I1.MCtrl,
@ -1107,7 +1174,7 @@ module Datapath (
ffenrc #(5 + 1) M_I1_WCtrl_ff (
clk,
rst | rstM,
{E.I1.RD, E.I1.WCtrl},
{E.I1.RD, E_I1_NowWCtrl},
M.en,
~E_go | ~E_I1_go,
{M.I1.RD, M.I1.WCtrl}
@ -1129,12 +1196,13 @@ module Datapath (
dTLBExcValid,
{dTLBRefillB, dTLBInvalidB, dTLBModifiedB, dAddressErrorB}
);
assign M_I1_NowExcValid = dTLBRefillB | dTLBInvalidB | dTLBModifiedB | dAddressErrorB | M_I1_Trap;
assign M.I1.ExcValid = M_I1_PrevExcValid | M_I1_NowExcValid;
assign M.I1.REFILL = M_I1_PrevREFILL | dTLBRefillB;
assign M.I1.ExcCode = M_I1_PrevExcValid ? M_I1_PrevExcCode
: M_I1_Trap ? `EXCCODE_TR
: dAddressErrorB ? M.I1.MCtrl.MWR ? `EXCCODE_ADES : `EXCCODE_ADES
: dAddressErrorB ? M.I1.MCtrl.MWR ? `EXCCODE_ADES : `EXCCODE_ADEL
: dTLBRefillB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
: dTLBInvalidB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
: `EXCCODE_MOD;
@ -1144,22 +1212,48 @@ module Datapath (
assign {M_exception, M_exception_REFILL} = {
M.I1.ExcValid | M.I0.ExcValid,
~M.I0.ExcValid | M.I1.ExcValid & M.A ? {M.I1.Delay, M.I1.ExcCode, M.I1.BadVAddr, M.I1.pc, M.I1.ERET, M.I1.REFILL}
: {M.I0.Delay, M.I0.ExcCode, M.I0.BadVAddr, M.I0.pc, M.I0.ERET, M.I0.REFILL}
~M.I0.ExcValid | M.I1.ExcValid & M.A ? {M.I1.Delay, M.I1.CE, M.I1.ExcCode, M.I1.BadVAddr, M.I1.pc, M.I1.ERET, M.I1.REFILL}
: {M.I0.Delay, M.I0.CE, M.I0.ExcCode, M.I0.BadVAddr, M.I0.pc, M.I0.ERET, M.I0.REFILL}
};
assign C0_exception = {
M_exception.ExcValid & M.en,
M_exception.Delay,
M_exception.CE,
M_exception.ExcCode,
M_exception.BadVAddr,
M_exception.EPC,
M_exception.ERET & M.en
};
// M.I0.ALU
mux4 #(32) M_I0_A_mux (
{27'b0, M.I0.sa},
M.I0.pc,
32'd0,
M_I0_ForwardS,
M.I0.ECtrl.SA,
M_I0_A
);
mux3 #(32) M_I0_B_mux (
M_I0_ForwardT,
32'd8,
M.I0.imm,
M.I0.ECtrl.SB,
M_I0_B
);
ALU M_I0_ALU (
M_I0_A,
M_I0_B,
M.I0.ECtrl.OP,
M.I0.ALUOut2,
M_I0_ALUvalid,
M_I0_Overflow
);
// M.I0.MUL
ffenr #(97) M_I0_MAS_ff (
clk,rst,
{M_I0_MULTL, M_I0_MULTH, M_I0_MULTUH, M_I0_MULT_CNTR[0]},
{M_I0_MULTL, M_I0_MULTH, M_I0_MULTUH, M_I0_MULT_CNTR},
1'b1,
{M_I0_MULTLF, M_I0_MULTHF, M_I0_MULTUHF, M_I0_MAS_bvalid}
);
@ -1172,7 +1266,7 @@ module Datapath (
myBuffer #(96) M_I0_MULT_buffer (
clk, rst,
M_I0_MULT_CNTR[0] & M.I0.MCtrl.MAS == 2'b00 | M_I0_MAS_bvalid & |M.I0.MCtrl.MAS,
M_I0_MULT_CNTR & M.I0.MCtrl.MAS == 2'b00 | M_I0_MAS_bvalid & |M.I0.MCtrl.MAS,
M.I0.MCtrl.MAS == 2'b00 ? {M_I0_MULTL, M_I0_MULTH, M_I0_MULTUH}
: {M_I0_MASL, M_I0_MASH, M_I0_MUASH},
M.en,
@ -1204,7 +1298,7 @@ module Datapath (
HI,
M_I0_MULTLB,
C0_rdata,
M.I0.ALUOut,
M.I0.ALUOut2,
M.I0.MCtrl.RS0,
M.I0.RDataW
);
@ -1220,19 +1314,19 @@ module Datapath (
ffen #(32) HI_ff (
clk,
M_I0_HI,
M.I0.MCtrl.HW & M_go,
M.I0.MCtrl.HW & M_I0_go & M.en,
HI
);
ffen #(32) LO_ff (
clk,
M_I0_LO,
M.I0.MCtrl.LW & M_go,
M.I0.MCtrl.LW & M_I0_go & M.en,
LO
);
assign C0_addr = M.I0.MCtrl.C0D;
assign C0_sel = M.I0.MCtrl.SEL;
assign C0_we = M.I0.MCtrl.C0W & M_I0_go;
assign C0_we = M.I0.MCtrl.C0W & M_I0_go & M.en;
assign C0_wdata = M_I0_ForwardT;
// M.I1.MEM
@ -1418,4 +1512,5 @@ module Datapath (
assign W.en = 1'b1;
endmodule

View File

@ -0,0 +1,126 @@
`include "defines.svh"
module decoder2 (
input word_t instr,
input logic [3:0] CU,
input logic kernel,
output logic ri,
output logic cpu,
output logic [1:0] ce
);
logic [3:0] CU2;
assign CU2 = {CU[3:1], CU[0] | kernel};
always_comb begin
ri = 1'b1;
ce = {instr[27] & ~instr[26], instr[26]};
cpu = ~CU2[ce] & ( instr[31:28] == 4'b0100 // COPx
| instr[31:26] == 6'b110001 // LWC1
| instr[31:26] == 6'b110010 // LWC2
| instr[31:26] == 6'b110101 // LDC1
| instr[31:26] == 6'b110110 // LDC2
| instr[31:26] == 6'b111001 // SWC1
| instr[31:26] == 6'b111010 // SWC2
| instr[31:26] == 6'b111101 // SDC1
| instr[31:26] == 6'b111110 // SDC2
); // TODO: Cache instruction
casez (instr)
32'b00000000000???????????????000000: ri = 1'b0; // SLL
32'b00000000000???????????????000010: ri = 1'b0; // SRL
32'b00000000000???????????????000011: ri = 1'b0; // SRA
32'b000000???????????????00000000100: ri = 1'b0; // SLLV
32'b000000???????????????00000000110: ri = 1'b0; // SRLV
32'b000000???????????????00000000111: ri = 1'b0; // SRAV
32'b000000?????0000000000?????001000: ri = 1'b0; // JR
32'b000000?????00000??????????001001: ri = 1'b0; // JALR
32'b000000???????????????00000001010: ri = 1'b0; // MOVZ
32'b000000???????????????00000001011: ri = 1'b0; // MOVN
32'b000000????????????????????001100: ri = 1'b0; // SYSCALL
32'b000000????????????????????001101: ri = 1'b0; // BREAK
32'b000000000000000000000?????001111: ri = 1'b0; // SYNC (NOP)
32'b0000000000000000?????00000010000: ri = 1'b0; // MFHI
32'b000000?????000000000000000010001: ri = 1'b0; // MTHI
32'b0000000000000000?????00000010010: ri = 1'b0; // MFLO
32'b000000?????000000000000000010011: ri = 1'b0; // MTLO
32'b000000??????????0000000000011000: ri = 1'b0; // MULT
32'b000000??????????0000000000011001: ri = 1'b0; // MULTU
32'b000000??????????0000000000011010: ri = 1'b0; // DIV
32'b000000??????????0000000000011011: ri = 1'b0; // DIVU
32'b000000???????????????00000100000: ri = 1'b0; // ADD
32'b000000???????????????00000100001: ri = 1'b0; // ADDU
32'b000000???????????????00000100010: ri = 1'b0; // SUB
32'b000000???????????????00000100011: ri = 1'b0; // SUBU
32'b000000???????????????00000100100: ri = 1'b0; // AND
32'b000000???????????????00000100101: ri = 1'b0; // OR
32'b000000???????????????00000100110: ri = 1'b0; // XOR
32'b000000???????????????00000100111: ri = 1'b0; // NOR
32'b000000???????????????00000101010: ri = 1'b0; // SLT
32'b000000???????????????00000101011: ri = 1'b0; // SLTU
32'b000000????????????????????110000: ri = 1'b0; // TGE
32'b000000????????????????????110001: ri = 1'b0; // TGEU
32'b000000????????????????????110010: ri = 1'b0; // TLT
32'b000000????????????????????110011: ri = 1'b0; // TLTU
32'b000000????????????????????110100: ri = 1'b0; // TEQ
32'b000000????????????????????110110: ri = 1'b0; // TNE
32'b000001?????00000????????????????: ri = 1'b0; // BLTZ
32'b000001?????00001????????????????: ri = 1'b0; // BGEZ
32'b000001?????01000????????????????: ri = 1'b0; // TGEI
32'b000001?????01001????????????????: ri = 1'b0; // TGEIU
32'b000001?????01010????????????????: ri = 1'b0; // TLTI
32'b000001?????01011????????????????: ri = 1'b0; // TLTIU
32'b000001?????01110????????????????: ri = 1'b0; // TNEI
32'b000001?????01100????????????????: ri = 1'b0; // TEQI
32'b000001?????10000????????????????: ri = 1'b0; // BLTZAL
32'b000001?????10001????????????????: ri = 1'b0; // BGEZAL
32'b000010??????????????????????????: ri = 1'b0; // J
32'b000011??????????????????????????: ri = 1'b0; // JAL
32'b000100??????????????????????????: ri = 1'b0; // BEQ
32'b000101??????????????????????????: ri = 1'b0; // BNE
32'b000110?????00000????????????????: ri = 1'b0; // BLEZ
32'b000111?????00000????????????????: ri = 1'b0; // BGTZ
32'b001000??????????????????????????: ri = 1'b0; // ADDI
32'b001001??????????????????????????: ri = 1'b0; // ADDIU
32'b001010??????????????????????????: ri = 1'b0; // SLTI
32'b001011??????????????????????????: ri = 1'b0; // SLTIU
32'b001100??????????????????????????: ri = 1'b0; // ANDI
32'b001101??????????????????????????: ri = 1'b0; // ORI
32'b001110??????????????????????????: ri = 1'b0; // XORI
32'b00111100000?????????????????????: ri = 1'b0; // LUI
32'b01000000000??????????00000000???: ri = 1'b0; // MFC0
32'b01000000100??????????00000000???: ri = 1'b0; // MTC0
32'b01000010000000000000000000000001: ri = 1'b0; // TLBR
32'b01000010000000000000000000000010: ri = 1'b0; // TLBWI
32'b01000010000000000000000000000110: ri = 1'b0; // TLBWR
32'b01000010000000000000000000001000: ri = 1'b0; // TLBP
32'b01000010000000000000000000011000: ri = 1'b0; // ERET
32'b011100??????????0000000000000000: ri = 1'b0; // MADD
32'b011100??????????0000000000000001: ri = 1'b0; // MADDU
32'b011100??????????0000000000000100: ri = 1'b0; // MSUB
32'b011100??????????0000000000000101: ri = 1'b0; // MSUBU
32'b011100???????????????00000000010: ri = 1'b0; // MUL
// 32'b01111100000??????????00000111011: begin cpu = 1'b1; ce = 2'b0; end // RDHWR (CpU)
32'b100000??????????????????????????: ri = 1'b0; // LB
32'b100001??????????????????????????: ri = 1'b0; // LH
32'b100010??????????????????????????: ri = 1'b0; // LWL
32'b100011??????????????????????????: ri = 1'b0; // LW
32'b100100??????????????????????????: ri = 1'b0; // LBU
32'b100101??????????????????????????: ri = 1'b0; // LHU
32'b100110??????????????????????????: ri = 1'b0; // LWR
32'b101000??????????????????????????: ri = 1'b0; // SB
32'b101001??????????????????????????: ri = 1'b0; // SH
32'b101010??????????????????????????: ri = 1'b0; // SWL
32'b101011??????????????????????????: ri = 1'b0; // SW
32'b101110??????????????????????????: ri = 1'b0; // SWR
32'b101111?????00000????????????????: ri = 1'b0; // I-Cache Index Invalid
32'b101111?????01000????????????????: ri = 1'b0; // I-Cache Index Store Tag
32'b101111?????10000????????????????: ri = 1'b0; // I-Cache Hit Invalid
32'b101111?????00001????????????????: ri = 1'b0; // D-Cache Index Writeback Invalid
32'b101111?????01001????????????????: ri = 1'b0; // D-Cache Index Store Tag
32'b101111?????10001????????????????: ri = 1'b0; // D-Cache Hit Invalid
32'b101111?????10101????????????????: ri = 1'b0; // D-Cache Hit Writeback Invalid
// 32'b110000??????????????????????????: begin cpu = 1'b1; ce = 2'b0; end // LL (CpU)
32'b110011??????????????????????????: ri = 1'b0; // PREF (NOP)
// 32'b111000??????????????????????????: begin cpu = 1'b1; ce = 2'b0; end // SC (CpU)
endcase
end
endmodule

View File

@ -1,105 +0,0 @@
`include "defines.svh"
module instr_valid (
input word_t instr,
output logic valid
);
always_comb
casez (instr)
32'b000000000000000000000?????001111: valid = 1'b1; // SYNC (NOP)
32'b00000000000???????????????000000: valid = 1'b1; // SLL
32'b00000000000???????????????000010: valid = 1'b1; // SRL
32'b00000000000???????????????000011: valid = 1'b1; // SRA
32'b000000???????????????00000000100: valid = 1'b1; // SLLV
32'b000000???????????????00000000110: valid = 1'b1; // SRLV
32'b000000???????????????00000000111: valid = 1'b1; // SRAV
32'b000000???????????????00000001010: valid = 1'b1; // MOVZ
32'b000000???????????????00000001011: valid = 1'b1; // MOVN
32'b000000?????000000000000000001000: valid = 1'b1; // JR
32'b000000?????00000?????00000001001: valid = 1'b1; // JALR
32'b000000????????????????????001100: valid = 1'b1; // SYSCALL
32'b000000????????????????????001101: valid = 1'b1; // BREAK
32'b0000000000000000?????00000010000: valid = 1'b1; // MFHI
32'b000000?????000000000000000010001: valid = 1'b1; // MTHI
32'b0000000000000000?????00000010010: valid = 1'b1; // MFLO
32'b000000?????000000000000000010011: valid = 1'b1; // MTLO
32'b000000??????????0000000000011000: valid = 1'b1; // MULT
32'b000000??????????0000000000011001: valid = 1'b1; // MULTU
32'b000000??????????0000000000011010: valid = 1'b1; // DIV
32'b000000??????????0000000000011011: valid = 1'b1; // DIVU
32'b000000???????????????00000100000: valid = 1'b1; // ADD
32'b000000???????????????00000100001: valid = 1'b1; // ADDU
32'b000000???????????????00000100010: valid = 1'b1; // SUB
32'b000000???????????????00000100011: valid = 1'b1; // SUBU
32'b000000???????????????00000100100: valid = 1'b1; // AND
32'b000000???????????????00000100101: valid = 1'b1; // OR
32'b000000???????????????00000100110: valid = 1'b1; // XOR
32'b000000???????????????00000100111: valid = 1'b1; // NOR
32'b000000???????????????00000101010: valid = 1'b1; // SLT
32'b000000???????????????00000101011: valid = 1'b1; // SLTU
32'b000000????????????????????110000: valid = 1'b1; // TGE
32'b000000????????????????????110001: valid = 1'b1; // TGEU
32'b000000????????????????????110010: valid = 1'b1; // TLT
32'b000000????????????????????110011: valid = 1'b1; // TLTU
32'b000000????????????????????110100: valid = 1'b1; // TEQ
32'b000000????????????????????110110: valid = 1'b1; // TNE
32'b000001?????00000????????????????: valid = 1'b1; // BLTZ
32'b000001?????00001????????????????: valid = 1'b1; // BGEZ
32'b000001?????01000????????????????: valid = 1'b1; // TGEI
32'b000001?????01001????????????????: valid = 1'b1; // TGEIU
32'b000001?????01010????????????????: valid = 1'b1; // TLTI
32'b000001?????01011????????????????: valid = 1'b1; // TLTIU
32'b000001?????01110????????????????: valid = 1'b1; // TNEI
32'b000001?????01100????????????????: valid = 1'b1; // TEQI
32'b000001?????10000????????????????: valid = 1'b1; // BLTZAL
32'b000001?????10001????????????????: valid = 1'b1; // BGEZAL
32'b000010??????????????????????????: valid = 1'b1; // J
32'b000011??????????????????????????: valid = 1'b1; // JAL
32'b000100??????????????????????????: valid = 1'b1; // BEQ
32'b000101??????????????????????????: valid = 1'b1; // BNE
32'b000110?????00000????????????????: valid = 1'b1; // BLEZ
32'b000111?????00000????????????????: valid = 1'b1; // BGTZ
32'b001000??????????????????????????: valid = 1'b1; // ADDI
32'b001001??????????????????????????: valid = 1'b1; // ADDIU
32'b001010??????????????????????????: valid = 1'b1; // SLTI
32'b001011??????????????????????????: valid = 1'b1; // SLTIU
32'b001100??????????????????????????: valid = 1'b1; // ANDI
32'b001101??????????????????????????: valid = 1'b1; // ORI
32'b001110??????????????????????????: valid = 1'b1; // XORI
32'b00111100000?????????????????????: valid = 1'b1; // LUI
32'b01000000000??????????00000000???: valid = 1'b1; // MFC0
32'b01000000100??????????00000000???: valid = 1'b1; // MTC0
32'b01000010000000000000000000000001: valid = 1'b1; // TLBR
32'b01000010000000000000000000000010: valid = 1'b1; // TLBWI
32'b01000010000000000000000000000110: valid = 1'b1; // TLBWR
32'b01000010000000000000000000001000: valid = 1'b1; // TLBP
32'b01000010000000000000000000011000: valid = 1'b1; // ERET
32'b011100??????????0000000000000000: valid = 1'b1; // MADD
32'b011100??????????0000000000000001: valid = 1'b1; // MADDU
32'b011100??????????0000000000000100: valid = 1'b1; // MSUB
32'b011100??????????0000000000000101: valid = 1'b1; // MSUBU
32'b011100???????????????00000000010: valid = 1'b1; // MUL
32'b100000??????????????????????????: valid = 1'b1; // LB
32'b100001??????????????????????????: valid = 1'b1; // LH
32'b100010??????????????????????????: valid = 1'b1; // LWL
32'b100011??????????????????????????: valid = 1'b1; // LW
32'b100100??????????????????????????: valid = 1'b1; // LBU
32'b100101??????????????????????????: valid = 1'b1; // LHU
32'b100110??????????????????????????: valid = 1'b1; // LWR
32'b101000??????????????????????????: valid = 1'b1; // SB
32'b101001??????????????????????????: valid = 1'b1; // SH
32'b101010??????????????????????????: valid = 1'b1; // SWL
32'b101011??????????????????????????: valid = 1'b1; // SW
32'b101110??????????????????????????: valid = 1'b1; // SWR
32'b101111?????00000????????????????: valid = 1'b1; // I-Cache Index Invalid
32'b101111?????01000????????????????: valid = 1'b1; // I-Cache Index Store Tag
32'b101111?????10000????????????????: valid = 1'b1; // I-Cache Hit Invalid
32'b101111?????00001????????????????: valid = 1'b1; // D-Cache Index Writeback Invalid
32'b101111?????01001????????????????: valid = 1'b1; // D-Cache Index Store Tag
32'b101111?????10001????????????????: valid = 1'b1; // D-Cache Hit Invalid
32'b101111?????10101????????????????: valid = 1'b1; // D-Cache Hit Writeback Invalid
32'b110011??????????????????????????: valid = 1'b1; // PREF (NOP)
default: valid = 1'b0;
endcase
endmodule

View File

@ -33,7 +33,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -64,7 +64,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -84,10 +84,12 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.MEM_WIDTH">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_WRITE_MODE"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_HZ">100000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.RST.ARESETN.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRA_WIDTH">7</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRB_WIDTH">7</spirit:configurableElementValue>
@ -250,12 +252,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">5</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -304,6 +306,82 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_A" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_B" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;clka&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;wea&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;0&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;addra&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;6&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;dina&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;127&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;douta&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;127&quot;, &quot;size_right&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;CLK.ACLK&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;AXI_SLAVE_S_AXI:AXILite_SLAVE_S_AXI&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;s_aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;RST.ARESETN&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;BRAM_PORTA&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:bram:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:bram_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;MEM_SIZE&quot;: [ { &quot;value&quot;: &quot;8192&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_WIDTH&quot;: [ { &quot;value&quot;: &quot;32&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_ECC&quot;: [ { &quot;value&quot;: &quot;NONE&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MASTER_TYPE&quot;: [ { &quot;value&quot;: &quot;OTHER&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_WRITE_MODE&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_LATENCY&quot;: [ { &quot;value&quot;: &quot;1&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;ADDR&quot;: [ { &quot;physical_name&quot;: &quot;addra&quot; } ],
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;clka&quot; } ],
&quot;DIN&quot;: [ { &quot;physical_name&quot;: &quot;dina&quot; } ],
&quot;DOUT&quot;: [ { &quot;physical_name&quot;: &quot;douta&quot; } ],
&quot;WE&quot;: [ { &quot;physical_name&quot;: &quot;wea&quot; } ]
}
}
},
&quot;memory_maps&quot;: {
&quot;S_1&quot;: {
&quot;address_blocks&quot;: {
&quot;Mem0&quot;: {
&quot;base_address&quot;: &quot;0&quot;,
&quot;range&quot;: &quot;4096&quot;,
&quot;usage&quot;: &quot;memory&quot;,
&quot;access&quot;: &quot;read-write&quot;,
&quot;parameters&quot;: {
&quot;OFFSET_BASE_PARAM&quot;: [ { &quot;value&quot;: &quot;C_BASEADDR&quot; } ],
&quot;OFFSET_HIGH_PARAM&quot;: [ { &quot;value&quot;: &quot;C_HIGHADDR&quot; } ]
}
}
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -33,7 +33,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -64,7 +64,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -84,10 +84,12 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.MEM_WIDTH">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_WRITE_MODE"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_HZ">100000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.RST.ARESETN.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRA_WIDTH">7</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRB_WIDTH">7</spirit:configurableElementValue>
@ -250,12 +252,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">5</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -304,6 +306,82 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_A" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_B" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;clka&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;wea&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;0&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;addra&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;6&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;dina&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;22&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;douta&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;22&quot;, &quot;size_right&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;CLK.ACLK&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;AXI_SLAVE_S_AXI:AXILite_SLAVE_S_AXI&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;s_aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;RST.ARESETN&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;BRAM_PORTA&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:bram:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:bram_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;MEM_SIZE&quot;: [ { &quot;value&quot;: &quot;8192&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_WIDTH&quot;: [ { &quot;value&quot;: &quot;32&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_ECC&quot;: [ { &quot;value&quot;: &quot;NONE&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MASTER_TYPE&quot;: [ { &quot;value&quot;: &quot;OTHER&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_WRITE_MODE&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_LATENCY&quot;: [ { &quot;value&quot;: &quot;1&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;ADDR&quot;: [ { &quot;physical_name&quot;: &quot;addra&quot; } ],
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;clka&quot; } ],
&quot;DIN&quot;: [ { &quot;physical_name&quot;: &quot;dina&quot; } ],
&quot;DOUT&quot;: [ { &quot;physical_name&quot;: &quot;douta&quot; } ],
&quot;WE&quot;: [ { &quot;physical_name&quot;: &quot;wea&quot; } ]
}
}
},
&quot;memory_maps&quot;: {
&quot;S_1&quot;: {
&quot;address_blocks&quot;: {
&quot;Mem0&quot;: {
&quot;base_address&quot;: &quot;0&quot;,
&quot;range&quot;: &quot;4096&quot;,
&quot;usage&quot;: &quot;memory&quot;,
&quot;access&quot;: &quot;read-write&quot;,
&quot;parameters&quot;: {
&quot;OFFSET_BASE_PARAM&quot;: [ { &quot;value&quot;: &quot;C_BASEADDR&quot; } ],
&quot;OFFSET_HIGH_PARAM&quot;: [ { &quot;value&quot;: &quot;C_HIGHADDR&quot; } ]
}
}
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -33,7 +33,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -64,7 +64,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -84,10 +84,12 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.MEM_WIDTH">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_WRITE_MODE"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_HZ">100000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.RST.ARESETN.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRA_WIDTH">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRB_WIDTH">6</spirit:configurableElementValue>
@ -250,12 +252,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">5</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -304,6 +306,82 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_A" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_B" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;clka&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;wea&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;0&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;addra&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;5&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;dina&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;255&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;douta&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;255&quot;, &quot;size_right&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;CLK.ACLK&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;AXI_SLAVE_S_AXI:AXILite_SLAVE_S_AXI&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;s_aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;RST.ARESETN&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;BRAM_PORTA&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:bram:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:bram_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;MEM_SIZE&quot;: [ { &quot;value&quot;: &quot;8192&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_WIDTH&quot;: [ { &quot;value&quot;: &quot;32&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_ECC&quot;: [ { &quot;value&quot;: &quot;NONE&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MASTER_TYPE&quot;: [ { &quot;value&quot;: &quot;OTHER&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_WRITE_MODE&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_LATENCY&quot;: [ { &quot;value&quot;: &quot;1&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;ADDR&quot;: [ { &quot;physical_name&quot;: &quot;addra&quot; } ],
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;clka&quot; } ],
&quot;DIN&quot;: [ { &quot;physical_name&quot;: &quot;dina&quot; } ],
&quot;DOUT&quot;: [ { &quot;physical_name&quot;: &quot;douta&quot; } ],
&quot;WE&quot;: [ { &quot;physical_name&quot;: &quot;wea&quot; } ]
}
}
},
&quot;memory_maps&quot;: {
&quot;S_1&quot;: {
&quot;address_blocks&quot;: {
&quot;Mem0&quot;: {
&quot;base_address&quot;: &quot;0&quot;,
&quot;range&quot;: &quot;4096&quot;,
&quot;usage&quot;: &quot;memory&quot;,
&quot;access&quot;: &quot;read-write&quot;,
&quot;parameters&quot;: {
&quot;OFFSET_BASE_PARAM&quot;: [ { &quot;value&quot;: &quot;C_BASEADDR&quot; } ],
&quot;OFFSET_HIGH_PARAM&quot;: [ { &quot;value&quot;: &quot;C_HIGHADDR&quot; } ]
}
}
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -33,7 +33,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXILITE_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -64,7 +64,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_READ_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_OUTSTANDING">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.NUM_WRITE_THREADS">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.PROTOCOL">AXI4LITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.READ_WRITE_MODE">READ_WRITE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.AXI_SLAVE_S_AXI.RUSER_BITS_PER_BYTE">0</spirit:configurableElementValue>
@ -84,10 +84,12 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.MEM_WIDTH">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.BRAM_PORTB.READ_WRITE_MODE"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_HZ">100000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK.ACLK.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.RST.ARESETN.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRA_WIDTH">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ADDRB_WIDTH">6</spirit:configurableElementValue>
@ -250,12 +252,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">5</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -304,6 +306,82 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_A" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.Write_Width_B" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;clka&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;wea&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;0&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;addra&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;5&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;dina&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;21&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;douta&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;21&quot;, &quot;size_right&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;CLK.ACLK&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;AXI_SLAVE_S_AXI:AXILite_SLAVE_S_AXI&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;s_aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;RST.ARESETN&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;BRAM_PORTA&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:bram:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:bram_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;MEM_SIZE&quot;: [ { &quot;value&quot;: &quot;8192&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_WIDTH&quot;: [ { &quot;value&quot;: &quot;32&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MEM_ECC&quot;: [ { &quot;value&quot;: &quot;NONE&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;MASTER_TYPE&quot;: [ { &quot;value&quot;: &quot;OTHER&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_WRITE_MODE&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;READ_LATENCY&quot;: [ { &quot;value&quot;: &quot;1&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;ADDR&quot;: [ { &quot;physical_name&quot;: &quot;addra&quot; } ],
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;clka&quot; } ],
&quot;DIN&quot;: [ { &quot;physical_name&quot;: &quot;dina&quot; } ],
&quot;DOUT&quot;: [ { &quot;physical_name&quot;: &quot;douta&quot; } ],
&quot;WE&quot;: [ { &quot;physical_name&quot;: &quot;wea&quot; } ]
}
}
},
&quot;memory_maps&quot;: {
&quot;S_1&quot;: {
&quot;address_blocks&quot;: {
&quot;Mem0&quot;: {
&quot;base_address&quot;: &quot;0&quot;,
&quot;range&quot;: &quot;4096&quot;,
&quot;usage&quot;: &quot;memory&quot;,
&quot;access&quot;: &quot;read-write&quot;,
&quot;parameters&quot;: {
&quot;OFFSET_BASE_PARAM&quot;: [ { &quot;value&quot;: &quot;C_BASEADDR&quot; } ],
&quot;OFFSET_HIGH_PARAM&quot;: [ { &quot;value&quot;: &quot;C_HIGHADDR&quot; } ]
}
}
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -9,10 +9,12 @@
<spirit:instanceName>div_signed</spirit:instanceName>
<spirit:componentRef spirit:vendor="xilinx.com" spirit:library="ip" spirit:name="div_gen" spirit:version="5.1"/>
<spirit:configurableElementValues>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.FREQ_HZ">1000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ARESETN_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.FREQ_HZ">100000000</spirit:configurableElementValue>
@ -22,7 +24,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TDATA_NUM_BYTES">8</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TID_WIDTH">0</spirit:configurableElementValue>
@ -35,7 +37,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TDATA_NUM_BYTES">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TID_WIDTH">0</spirit:configurableElementValue>
@ -48,7 +50,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TDATA_NUM_BYTES">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TID_WIDTH">0</spirit:configurableElementValue>
@ -61,7 +63,7 @@
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVIDEND_TUSER">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVISOR_TLAST">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVISOR_TUSER">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">36</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">14</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_M_AXIS_DOUT_TDATA_WIDTH">64</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_M_AXIS_DOUT_TUSER_WIDTH">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_S_AXIS_DIVIDEND_TDATA_WIDTH">32</spirit:configurableElementValue>
@ -96,8 +98,8 @@
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.divisor_tuser_width">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.divisor_width">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.fractional_width">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency">36</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency_configuration">Automatic</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency">14</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency_configuration">Manual</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.operand_sign">Signed</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.remainder_type">Remainder</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.ARCHITECTURE">artix7</spirit:configurableElementValue>
@ -114,12 +116,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">16</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">19</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -154,6 +156,132 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.latency_configuration" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.remainder_type" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;aclk&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x1&quot; } ],
&quot;s_axis_divisor_tvalid&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;s_axis_divisor_tdata&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;s_axis_dividend_tvalid&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;s_axis_dividend_tdata&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;m_axis_dout_tvalid&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;m_axis_dout_tdata&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;63&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;M_AXIS_DOUT&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;master&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;8&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;m_axis_dout_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;m_axis_dout_tvalid&quot; } ]
}
},
&quot;aclk_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;S_AXIS_DIVIDEND:S_AXIS_DIVISOR:M_AXIS_DOUT&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_CLKEN&quot;: [ { &quot;value&quot;: &quot;aclken&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;1000000&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;aclk&quot; } ]
}
},
&quot;aresetn_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;aclken_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clockenable:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clockenable_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ]
}
},
&quot;S_AXIS_DIVISOR&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;4&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_divisor_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_divisor_tvalid&quot; } ]
}
},
&quot;S_AXIS_DIVIDEND&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;4&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_dividend_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_dividend_tvalid&quot; } ]
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -9,10 +9,12 @@
<spirit:instanceName>div_unsigned</spirit:instanceName>
<spirit:componentRef spirit:vendor="xilinx.com" spirit:library="ip" spirit:name="div_gen" spirit:version="5.1"/>
<spirit:configurableElementValues>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.FREQ_HZ">1000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ACLK_INTF.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.ARESETN_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.FREQ_HZ">100000000</spirit:configurableElementValue>
@ -22,7 +24,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TDATA_NUM_BYTES">8</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.M_AXIS_DOUT.TID_WIDTH">0</spirit:configurableElementValue>
@ -35,7 +37,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TDATA_NUM_BYTES">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVIDEND.TID_WIDTH">0</spirit:configurableElementValue>
@ -48,7 +50,7 @@
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.HAS_TSTRB">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TDATA_NUM_BYTES">4</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TDEST_WIDTH">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.S_AXIS_DIVISOR.TID_WIDTH">0</spirit:configurableElementValue>
@ -61,7 +63,7 @@
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVIDEND_TUSER">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVISOR_TLAST">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_S_AXIS_DIVISOR_TUSER">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">34</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">14</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_M_AXIS_DOUT_TDATA_WIDTH">64</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_M_AXIS_DOUT_TUSER_WIDTH">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_S_AXIS_DIVIDEND_TDATA_WIDTH">32</spirit:configurableElementValue>
@ -96,8 +98,8 @@
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.divisor_tuser_width">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.divisor_width">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.fractional_width">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency">34</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency_configuration">Automatic</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency">14</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.latency_configuration">Manual</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.operand_sign">Unsigned</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.remainder_type">Remainder</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.ARCHITECTURE">artix7</spirit:configurableElementValue>
@ -114,12 +116,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">16</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">19</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -151,6 +153,132 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.latency_configuration" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.operand_sign" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;aclk&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x1&quot; } ],
&quot;s_axis_divisor_tvalid&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;s_axis_divisor_tdata&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;s_axis_dividend_tvalid&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;s_axis_dividend_tdata&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;m_axis_dout_tvalid&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;driver_value&quot;: &quot;0x0&quot; } ],
&quot;m_axis_dout_tdata&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;63&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;M_AXIS_DOUT&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;master&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;8&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;m_axis_dout_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;m_axis_dout_tvalid&quot; } ]
}
},
&quot;aclk_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;S_AXIS_DIVIDEND:S_AXIS_DIVISOR:M_AXIS_DOUT&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;aresetn&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_CLKEN&quot;: [ { &quot;value&quot;: &quot;aclken&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;1000000&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;aclk&quot; } ]
}
},
&quot;aresetn_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_LOW&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;aclken_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clockenable:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clockenable_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ]
}
},
&quot;S_AXIS_DIVISOR&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;4&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_divisor_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_divisor_tvalid&quot; } ]
}
},
&quot;S_AXIS_DIVIDEND&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:interface:axis:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:interface:axis_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;TDATA_NUM_BYTES&quot;: [ { &quot;value&quot;: &quot;4&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TDEST_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TID_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;TUSER_WIDTH&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TREADY&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;auto&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TSTRB&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TKEEP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;HAS_TLAST&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;100000000&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;TDATA&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_dividend_tdata&quot; } ],
&quot;TVALID&quot;: [ { &quot;physical_name&quot;: &quot;s_axis_dividend_tvalid&quot; } ]
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -11,10 +11,12 @@
<spirit:configurableElementValues>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.A_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.B_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.FREQ_HZ">10000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.P_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.SCLR_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_A_TYPE">0</spirit:configurableElementValue>
@ -27,7 +29,7 @@
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_CE">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_SCLR">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_ZERO_DETECT">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MODEL_TYPE">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MULT_TYPE">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OPTIMIZE_GOAL">1</spirit:configurableElementValue>
@ -47,7 +49,7 @@
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OptGoal">Speed</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OutputWidthHigh">63</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OutputWidthLow">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PipeStages">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PipeStages">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortAType">Signed</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortAWidth">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortBType">Signed</spirit:configurableElementValue>
@ -72,12 +74,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">16</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">18</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -89,6 +91,90 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PortAWidth" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PortBWidth" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;CLK&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x1&quot; } ],
&quot;A&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;B&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;P&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;63&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;a_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;A&quot; } ]
}
},
&quot;clk_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;p_intf:b_intf:a_intf&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;sclr&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_CLKEN&quot;: [ { &quot;value&quot;: &quot;ce&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;10000000&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;CLK&quot; } ]
}
},
&quot;sclr_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;ce_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clockenable:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clockenable_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ]
}
},
&quot;b_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;B&quot; } ]
}
},
&quot;p_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;master&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;P&quot; } ]
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -11,10 +11,12 @@
<spirit:configurableElementValues>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.A_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.B_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.ASSOCIATED_PORT"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.CLK_DOMAIN"/>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.FREQ_HZ">10000000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.FREQ_TOLERANCE_HZ">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.PHASE">0.000</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.CLK_INTF.PHASE">0.0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.P_INTF.LAYERED_METADATA">undef</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="BUSIFPARAM_VALUE.SCLR_INTF.INSERT_VIP">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_A_TYPE">1</spirit:configurableElementValue>
@ -27,7 +29,7 @@
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_CE">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_SCLR">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_ZERO_DETECT">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LATENCY">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MODEL_TYPE">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MULT_TYPE">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OPTIMIZE_GOAL">1</spirit:configurableElementValue>
@ -47,7 +49,7 @@
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OptGoal">Speed</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OutputWidthHigh">63</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OutputWidthLow">0</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PipeStages">6</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PipeStages">1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortAType">Unsigned</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortAWidth">32</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PortBType">Unsigned</spirit:configurableElementValue>
@ -72,12 +74,12 @@
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">16</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">18</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2019.2</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2022.1</spirit:configurableElementValue>
<spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue>
</spirit:configurableElementValues>
<spirit:vendorExtensions>
@ -91,6 +93,90 @@
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PortBType" xilinx:valueSource="user"/>
<xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PortBWidth" xilinx:valueSource="user"/>
</xilinx:configElementInfos>
<xilinx:boundaryDescriptionInfo>
<xilinx:boundaryDescription xilinx:boundaryDescriptionJSON="{
&quot;schema&quot;: &quot;xilinx.com:schema:json_boundary:1.0&quot;,
&quot;boundary&quot;: {
&quot;ports&quot;: {
&quot;CLK&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;driver_value&quot;: &quot;0x1&quot; } ],
&quot;A&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;B&quot;: [ { &quot;direction&quot;: &quot;in&quot;, &quot;size_left&quot;: &quot;31&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ],
&quot;P&quot;: [ { &quot;direction&quot;: &quot;out&quot;, &quot;size_left&quot;: &quot;63&quot;, &quot;size_right&quot;: &quot;0&quot;, &quot;driver_value&quot;: &quot;0&quot; } ]
},
&quot;interfaces&quot;: {
&quot;a_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;A&quot; } ]
}
},
&quot;clk_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clock:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clock_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;ASSOCIATED_BUSIF&quot;: [ { &quot;value&quot;: &quot;p_intf:b_intf:a_intf&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_RESET&quot;: [ { &quot;value&quot;: &quot;sclr&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;ASSOCIATED_CLKEN&quot;: [ { &quot;value&quot;: &quot;ce&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_HZ&quot;: [ { &quot;value&quot;: &quot;10000000&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;FREQ_TOLERANCE_HZ&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;long&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;PHASE&quot;: [ { &quot;value&quot;: &quot;0.0&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;format&quot;: &quot;float&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;CLK_DOMAIN&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;ASSOCIATED_PORT&quot;: [ { &quot;value&quot;: &quot;&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;CLK&quot;: [ { &quot;physical_name&quot;: &quot;CLK&quot; } ]
}
},
&quot;sclr_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:reset:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:reset_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ],
&quot;INSERT_VIP&quot;: [ { &quot;value&quot;: &quot;0&quot;, &quot;resolve_type&quot;: &quot;user&quot;, &quot;format&quot;: &quot;long&quot;, &quot;usage&quot;: &quot;simulation.rtl&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
}
},
&quot;ce_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:clockenable:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:clockenable_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;POLARITY&quot;: [ { &quot;value&quot;: &quot;ACTIVE_HIGH&quot;, &quot;value_src&quot;: &quot;constant&quot;, &quot;usage&quot;: &quot;all&quot; } ]
}
},
&quot;b_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;slave&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;B&quot; } ]
}
},
&quot;p_intf&quot;: {
&quot;vlnv&quot;: &quot;xilinx.com:signal:data:1.0&quot;,
&quot;abstraction_type&quot;: &quot;xilinx.com:signal:data_rtl:1.0&quot;,
&quot;mode&quot;: &quot;master&quot;,
&quot;parameters&quot;: {
&quot;LAYERED_METADATA&quot;: [ { &quot;value&quot;: &quot;undef&quot;, &quot;resolve_type&quot;: &quot;generated&quot;, &quot;is_ips_inferred&quot;: true, &quot;is_static_object&quot;: false } ]
},
&quot;port_maps&quot;: {
&quot;DATA&quot;: [ { &quot;physical_name&quot;: &quot;P&quot; } ]
}
}
}
}
}"/>
</xilinx:boundaryDescriptionInfo>
</xilinx:componentInstanceExtensions>
</spirit:vendorExtensions>
</spirit:componentInstance>

View File

@ -419,10 +419,10 @@ module MMU (
if (rdata_axi.addr_ok) begin
if (~rdata_axi.rvalid) drNextState = DR_WD1;
else begin
data.data_ok = 1;
if (dCached2) drNextState = DR_WD2;
else begin
dEn = 1;
data.data_ok = 1;
drNextState = DR_IDLE;
end
end

View File

@ -1,6 +1,8 @@
`include "defines.svh"
`include "TLB.svh"
`ifdef TLB_ENABLE
module TLB (
input clk,
input rst,
@ -200,3 +202,118 @@ module TLB (
end
endmodule
`else
module TLB (
input clk,
input rst,
// CP0
input logic [2:0] K0,
input logic tlbw, // TLBWI + TLBWR
input logic tlbp, // TLBP
input logic [2:0] c0_Index, // TLBWR + TLBWI + TLBR
input EntryHi_t c0_EntryHi, // TLBWI + F/M(ASID)
// input PageMask_t c0_PageMask, // TLBWI
input EntryLo_t c0_EntryLo1, // TLBWI
input EntryLo_t c0_EntryLo0, // TLBWI
output EntryHi_t EntryHi, // TLBR
// output PageMask_t PageMask, // TLBR
output EntryLo_t EntryLo1, // TLBR
output EntryLo_t EntryLo0, // TLBR
output Index_t Index, // TLBP
// MMU
input word_t iVAddr,
output word_t iPAddr,
output logic iHit, // TLB Refill
output logic iCached,
output logic iValid, // TLB Invalid
output logic iUser, // Privilege
input word_t dVAddr,
output word_t dPAddr,
output logic dHit, // TLB Refill
output logic dCached,
output logic dDirty, // TLB Modified
output logic dValid, // TLB Invalid
output logic dUser // Privilege
);
word_t fVAddr, fVAddr1;
word_t mVAddr, mVAddr1;
assign fVAddr = iVAddr;
// Output
ffenr #(32) inst_ff(
clk, rst,
fVAddr,
1'b1,
fVAddr1
);
always_comb begin
if (fVAddr1 > 32'hBFFF_FFFF || fVAddr1 <= 32'h7FFF_FFFF) begin
// kseg2 + kseg3 + kuseg -> tlb
iPAddr = fVAddr1 & 32'h1FFF_FFFF;
iHit = 1'b1;
iCached = K0[0];
iValid = 1'b1;
iUser = 1'b1;
end else if (fVAddr1 > 32'h9FFF_FFFF) begin
// kseg1 uncached
iPAddr = fVAddr1 & 32'h1FFF_FFFF;
iHit = 1'b1;
iCached = 1'b0;
iValid = 1'b1;
iUser = 1'b0;
end else begin
// kseg0 -> CP0.K0
iPAddr = fVAddr1 & 32'h1FFF_FFFF;
iHit = 1'b1;
iCached = K0[0];
iValid = 1'b1;
iUser = 1'b0;
end
end
assign mVAddr = dVAddr;
ffenr #(32) data_ff (
clk, rst,
mVAddr,
1'b1,
mVAddr1
);
always_comb begin
if (mVAddr1 > 32'hBFFF_FFFF || mVAddr1 <= 32'h7FFF_FFFF) begin
// kseg2 + kseg3 + kuseg -> tlb
dPAddr = mVAddr1 & 32'h1FFF_FFFF;
dHit = 1'b1;
dCached = K0[0];
dDirty = 1'b1;
dValid = 1'b1;
dUser = 1'b1;
end else if (mVAddr1 > 32'h9FFF_FFFF) begin
// kseg1 uncached
dPAddr = mVAddr1 & 32'h1FFF_FFFF;
dHit = 1'b1;
dCached = 1'b0;
dDirty = 1'b1;
dValid = 1'b1;
dUser = 1'b0;
end else begin
// kseg0 -> CP0.K0
dPAddr = mVAddr1 & 32'h1FFF_FFFF;
dHit = 1'b1;
dCached = K0[0];
dDirty = 1'b1;
dValid = 1'b1;
dUser = 1'b0;
end
end
endmodule
`endif

View File

@ -42,6 +42,7 @@ typedef enum bit [4:0] {
typedef struct packed {
logic ExcValid;
logic Delay;
logic [1:0] CE;
logic [4:0] ExcCode;
word_t BadVAddr;
word_t EPC;
@ -60,7 +61,19 @@ typedef struct packed {
} CP0_REGS_CONFIG_t;
typedef struct packed {
logic [8:0] zero1;
logic BD;
logic TI;
logic [1:0] CE;
logic [11:0] zero1;
logic [7:0] IP;
logic zero2;
logic [4:0] ExcCode;
logic [1:0] zero3;
} CP0_REGS_CAUSE_t;
typedef struct packed {
logic [3:0] CU;
logic [4:0] zero1;
logic Bev;
logic [5:0] zero2;
logic [7:0] IM;
@ -71,16 +84,6 @@ typedef struct packed {
logic IE;
} CP0_REGS_STATUS_t;
typedef struct packed {
logic BD;
logic TI;
logic [13:0] zero1;
logic [7:0] IP;
logic zero2;
logic [4:0] ExcCode;
logic [1:0] zero3;
} CP0_REGS_CAUSE_t;
typedef struct packed {
logic one;
logic zero1;
@ -118,7 +121,7 @@ typedef struct packed {
word_t BadVAddr;
// HWREna
Wired_t Wired;
// Context,
Context_t Context;
// word_t PageMask;
EntryLo_t EntryLo1;
EntryLo_t EntryLo0;

View File

@ -12,6 +12,11 @@ typedef struct packed {
// logic [11:0] Mask;
// logic [12:0] zero2;
// } PageMask_t;
typedef struct packed {
logic [ 8:0] PTEBase;
logic [18:0] BadVPN2;
logic [ 3:0] zero;
} Context_t;
typedef struct packed {
logic [ 5:0] zero;
@ -22,6 +27,7 @@ typedef struct packed {
logic G;
} EntryLo_t;
typedef struct packed {
logic P;
logic [27:0] zero;

View File

@ -5,11 +5,13 @@
`define Off_TRef 9'h000
`define Off_GExc 9'h180
`define TLB_ENABLE
// prio: int
// fetch_addr
// fetch_tlb_refill
// fetch_tlb_invalid
// ri
// ri, cpu
// syscall, break, overflow, trap
// mem_addr
// mem_tlb_refill
@ -39,9 +41,9 @@ typedef struct packed {
logic f_xor;
logic f_slt;
logic f_sltu;
logic f_mova;
logic f_mov;
logic alt;
} aluctrl_t;
} ALUCtrl_t;
typedef enum logic [1:0] {
SA = 2'b00,
@ -104,7 +106,7 @@ typedef enum logic [1:0] {
typedef struct packed {
SA_t SA;
SB_t SB;
aluctrl_t OP;
ALUCtrl_t OP;
} ECtrl_t;
typedef struct packed {
@ -141,8 +143,6 @@ typedef struct packed {
} WCtrl_t;
typedef struct packed {
logic PRV;
logic SYSCALL;
logic BREAK;
logic ERET;
@ -162,6 +162,8 @@ typedef struct packed {
logic DT;
logic ES;
logic ET;
logic ES2;
logic ET2;
ECtrl_t ECtrl;
@ -193,6 +195,7 @@ typedef struct packed {
logic IA_ERET;
logic IA_REFILL;
logic [4:0] IA_ExcCode;
logic [1:0] IA_CE;
logic IA_Delay;
word_t IA_S;
word_t IA_T;
@ -205,6 +208,7 @@ typedef struct packed {
logic IB_ERET;
logic IB_REFILL;
logic [4:0] IB_ExcCode;
logic [1:0] IB_CE;
logic IB_Delay;
word_t IB_S;
word_t IB_T;
@ -218,6 +222,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
logic Delay;
logic OFA;
@ -232,6 +237,7 @@ typedef struct packed {
ECtrl_t ECtrl;
MCtrl0_t MCtrl;
logic MCtrl_ALU1; // critical
logic [4:0] RD;
WCtrl_t WCtrl;
@ -244,6 +250,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
logic Delay;
logic OFA;
@ -276,6 +283,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
logic Delay;
logic OFA;
@ -291,6 +299,7 @@ typedef struct packed {
word_t ALUOut;
MCtrl0_t MCtrl;
logic MCtrl_ALU1; // critical
logic [4:0] RD;
WCtrl_t WCtrl;
@ -303,6 +312,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
word_t BadVAddr;
logic Delay;
logic OFA;
@ -337,6 +347,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
word_t BadVAddr;
logic Delay;
@ -347,7 +358,14 @@ typedef struct packed {
word_t ALUOut;
word_t imm;
logic [4:0] sa;
ECtrl_t ECtrl;
word_t ALUOut2;
MCtrl0_t MCtrl;
logic MCtrl_ALU1; // critical
word_t RDataW;
logic [4:0] RD;
@ -361,6 +379,7 @@ typedef struct packed {
logic ERET;
logic REFILL;
logic [4:0] ExcCode;
logic [1:0] CE;
word_t BadVAddr;
logic Delay;

View File

@ -89,10 +89,12 @@ module mycpu_top (
word_t C0_wdata;
EXCEPTION_t C0_exception;
word_t C0_ERETPC;
logic C0_EXL;
logic C0_Bev;
logic [19:0] C0_EBase;
logic [2:0] K0;
logic [3:0] C0_CU;
logic in_kernel;
logic [2:0] K0;
Random_t c0_Random;
Index_t c0_Index;
EntryHi_t c0_EntryHi;
@ -117,6 +119,11 @@ module mycpu_top (
logic tlb_tlbp;
logic c0_tlbr;
logic c0_tlbp;
logic [5:0] ext_intb;
always_ff @(posedge aclk) begin
if (~aresetn) ext_intb = 5'b0;
else ext_intb = ext_int;
end
AXI axi (
@ -187,14 +194,16 @@ module mycpu_top (
.wdata (C0_wdata),
.exception (C0_exception),
.EPC (C0_ERETPC),
.EXL (C0_EXL),
.Bev (C0_Bev),
.EBase (C0_EBase),
.ext_int (ext_int),
.CU (C0_CU),
.in_kernel (in_kernel),
.ext_int (ext_intb),
.interrupt (C0_int),
.tlbr (c0_tlbr),
.tlbp (c0_tlbp),
.K0 (K0),
.in_kernel (in_kernel),
.Random (c0_Random),
.Index (c0_Index),
.EntryHi (c0_EntryHi),
@ -236,8 +245,10 @@ module mycpu_top (
.C0_wdata (C0_wdata),
.C0_exception(C0_exception),
.C0_ERETPC (C0_ERETPC),
.C0_EXL (C0_EXL),
.C0_Bev (C0_Bev),
.C0_EBase (C0_EBase),
.C0_CU (C0_CU),
.C0_kernel (in_kernel),
.debug_wb_pc (debug_wb_pc),

View File

@ -6,8 +6,8 @@
32'b000000???????????????00000000100 SL ? RS 1 1 RT 0 0 ? ? ? // SLLV
32'b000000???????????????00000000110 SR 0 RS 1 1 RT 0 0 ? ? ? // SRLV
32'b000000???????????????00000000111 SR 1 RS 1 1 RT 0 0 ? ? ? // SRAV
32'b000000???????????????00000001010 MOVA ? RS 1 1 ? ? ? ? ? ? // MOVZ
32'b000000???????????????00000001011 MOVA ? RS 1 1 ? ? ? ? ? ? // MOVN
32'b000000???????????????00000001010 MOV 0 RS 1 1 RT 0 0 ? ? ? // MOVZ
32'b000000???????????????00000001011 MOV 1 RS 1 1 RT 0 0 ? ? ? // MOVN
32'b000000?????000000000000000001000 ? ? ? ? ? ? ? ? ? ? ? // JR
32'b000000?????00000?????00000001001 ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // JALR
32'b000000????????????????????001100 ? ? ? ? ? ? ? ? ? ? ? // SYSCALL
@ -74,11 +74,11 @@
32'b011100???????????????00000000010 ? ? ? ? ? ? ? ? ? ? ? // MUL
32'b100000?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LB
32'b100001?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LH
32'h100010?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LWL
32'b100010?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LWL
32'b100011?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LW
32'b100100?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LBU
32'b100101?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LHU
32'h100110?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LWR
32'b100110?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // LWR
32'b101000?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // SB
32'b101001?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // SH
32'b101010?????????????????????????? ADD 0 RS 1 1 IMM 1 ? IX 0 1 // SWL

View File

@ -1,88 +1,88 @@
////-------------------------------- SYSCALL BREAK ERET OFA ES ET DS DT DP0 DP1
32'b000000000000000000000?????001111 0 0 0 0 ? ? ? ? 1 1 // SYNC (NOP)
32'b00000000000???????????????000000 0 0 0 0 0 1 0 0 1 1 // SLL
32'b00000000000???????????????000010 0 0 0 0 0 1 0 0 1 1 // SRL
32'b00000000000???????????????000011 0 0 0 0 0 1 0 0 1 1 // SRA
32'b000000???????????????00000000100 0 0 0 0 1 1 0 0 1 1 // SLLV
32'b000000???????????????00000000110 0 0 0 0 1 1 0 0 1 1 // SRLV
32'b000000???????????????00000000111 0 0 0 0 1 1 0 0 1 1 // SRAV
32'b000000???????????????00000001010 0 0 0 0 1 0 0 1 1 1 // MOVZ
32'b000000???????????????00000001011 0 0 0 0 1 0 0 1 1 1 // MOVN
32'b000000?????000000000000000001000 0 0 0 0 0 0 1 0 1 1 // JR
32'b000000?????00000?????00000001001 0 0 0 0 0 0 1 0 1 1 // JALR
32'b000000????????????????????001100 1 0 0 0 0 0 0 0 1 1 // SYSCALL
32'b000000????????????????????001101 0 1 0 0 0 0 0 0 1 1 // BREAK
32'b0000000000000000?????00000010000 0 0 0 0 0 0 0 0 1 0 // MFHI
32'b000000?????000000000000000010001 0 0 0 0 0 0 0 0 1 0 // MTHI
32'b0000000000000000?????00000010010 0 0 0 0 0 0 0 0 1 0 // MFLO
32'b000000?????000000000000000010011 0 0 0 0 0 0 0 0 1 0 // MTLO
32'b000000??????????0000000000011000 0 0 0 0 1 1 0 0 1 0 // MULT
32'b000000??????????0000000000011001 0 0 0 0 1 1 0 0 1 0 // MULTU
32'b000000??????????0000000000011010 0 0 0 0 1 1 0 0 1 0 // DIV
32'b000000??????????0000000000011011 0 0 0 0 1 1 0 0 1 0 // DIVU
32'b000000???????????????00000100000 0 0 0 1 1 1 0 0 1 1 // ADD
32'b000000???????????????00000100001 0 0 0 0 1 1 0 0 1 1 // ADDU
32'b000000???????????????00000100010 0 0 0 1 1 1 0 0 1 1 // SUB
32'b000000???????????????00000100011 0 0 0 0 1 1 0 0 1 1 // SUBU
32'b000000???????????????00000100100 0 0 0 0 1 1 0 0 1 1 // AND
32'b000000???????????????00000100101 0 0 0 0 1 1 0 0 1 1 // OR
32'b000000???????????????00000100110 0 0 0 0 1 1 0 0 1 1 // XOR
32'b000000???????????????00000100111 0 0 0 0 1 1 0 0 1 1 // NOR
32'b000000???????????????00000101010 0 0 0 0 1 1 0 0 1 1 // SLT
32'b000000???????????????00000101011 0 0 0 0 1 1 0 0 1 1 // SLTU
32'b000000????????????????????110000 0 0 0 0 1 1 0 0 0 1 // TGE
32'b000000????????????????????110001 0 0 0 0 1 1 0 0 0 1 // TGEU
32'b000000????????????????????110010 0 0 0 0 1 1 0 0 0 1 // TLT
32'b000000????????????????????110011 0 0 0 0 1 1 0 0 0 1 // TLTU
32'b000000????????????????????110100 0 0 0 0 1 1 0 0 0 1 // TEQ
32'b000000????????????????????110110 0 0 0 0 1 1 0 0 0 1 // TNE
32'b000001?????00000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZ
32'b000001?????00001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZ
32'b000001?????01000???????????????? 0 0 0 0 1 0 0 0 0 1 // TGEI
32'b000001?????01001???????????????? 0 0 0 0 1 0 0 0 0 1 // TGEIU
32'b000001?????01010???????????????? 0 0 0 0 1 0 0 0 0 1 // TLTI
32'b000001?????01011???????????????? 0 0 0 0 1 0 0 0 0 1 // TLTIU
32'b000001?????01110???????????????? 0 0 0 0 1 0 0 0 0 1 // TNEI
32'b000001?????01100???????????????? 0 0 0 0 1 0 0 0 0 1 // TEQI
32'b000001?????10000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZAL
32'b000001?????10001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZAL
32'b000010?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // J
32'b000011?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // JAL
32'b000100?????????????????????????? 0 0 0 0 0 0 1 1 1 1 // BEQ
32'b000101?????????????????????????? 0 0 0 0 0 0 1 1 1 1 // BNE
32'b000110?????00000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLEZ
32'b000111?????00000???????????????? 0 0 0 0 0 0 1 0 1 1 // BGTZ
32'b001000?????????????????????????? 0 0 0 1 1 0 0 0 1 1 // ADDI
32'b001001?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // ADDIU
32'b001010?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // SLTI
32'b001011?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // SLTIU
32'b001100?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // ANDI
32'b001101?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // ORI
32'b001110?????????????????????????? 0 0 0 0 1 0 0 0 1 1 // XORI
32'b00111100000????????????????????? 0 0 0 0 1 0 0 0 1 1 // LUI
32'b01000000000??????????00000000??? 0 0 0 0 0 0 0 0 1 0 // MFC0
32'b01000000100??????????00000000??? 0 0 0 0 0 0 0 0 1 0 // MTC0
32'b01000010000000000000000000000001 0 0 0 0 0 0 0 0 0 1 // TLBR
32'b01000010000000000000000000000010 0 0 0 0 0 0 0 0 0 1 // TLBWI
32'b01000010000000000000000000000110 0 0 0 0 0 0 0 0 0 1 // TLBWR
32'b01000010000000000000000000001000 0 0 0 0 0 0 0 0 0 1 // TLBP
32'b01000010000000000000000000011000 0 0 1 0 0 0 0 0 1 1 // ERET
32'b011100??????????0000000000000000 0 0 0 0 1 1 0 0 1 0 // MADD
32'b011100??????????0000000000000001 0 0 0 0 1 1 0 0 1 0 // MADDU
32'b011100??????????0000000000000100 0 0 0 0 1 1 0 0 1 0 // MSUB
32'b011100??????????0000000000000101 0 0 0 0 1 1 0 0 1 0 // MSUBU
32'b011100???????????????00000000010 0 0 0 0 1 1 0 0 1 0 // MUL
32'b100000?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LB
32'b100001?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LH
32'h100010?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LWL
32'b100011?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LW
32'b100100?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LBU
32'b100101?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LHU
32'h100110?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // LWR
32'b101000?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // SB
32'b101001?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // SH
32'b101010?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // SWL
32'b101011?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // SW
32'b101110?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // SWR
32'b101111?????????????????????????? 0 0 0 0 1 0 0 0 0 1 // CACHE
32'b110011?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // PREF (NOP)
////-------------------------------- SYSCALL BREAK ERET OFA ES ET ES2 ET2 DS DT DP0 DP1
32'b000000000000000000000?????001111 0 0 0 0 0 0 0 0 0 0 1 1 // SYNC (NOP)
32'b00000000000???????????????000000 0 0 0 0 0 0 0 1 0 0 1 1 // SLL
32'b00000000000???????????????000010 0 0 0 0 0 0 0 1 0 0 1 1 // SRL
32'b00000000000???????????????000011 0 0 0 0 0 0 0 1 0 0 1 1 // SRA
32'b000000???????????????00000000100 0 0 0 0 0 0 1 1 0 0 1 1 // SLLV
32'b000000???????????????00000000110 0 0 0 0 0 0 1 1 0 0 1 1 // SRLV
32'b000000???????????????00000000111 0 0 0 0 0 0 1 1 0 0 1 1 // SRAV
32'b000000???????????????00000001010 0 0 0 0 1 1 ? ? 0 0 1 1 // MOVZ
32'b000000???????????????00000001011 0 0 0 0 1 1 ? ? 0 0 1 1 // MOVN
32'b000000?????000000000000000001000 0 0 0 0 0 0 0 0 1 0 1 1 // JR
32'b000000?????00000?????00000001001 0 0 0 0 0 0 0 0 1 0 1 1 // JALR
32'b000000????????????????????001100 1 0 0 0 0 0 0 0 0 0 1 1 // SYSCALL
32'b000000????????????????????001101 0 1 0 0 0 0 0 0 0 0 1 1 // BREAK
32'b0000000000000000?????00000010000 0 0 0 0 0 0 0 0 0 0 1 0 // MFHI
32'b000000?????000000000000000010001 0 0 0 0 0 0 0 0 0 0 1 0 // MTHI
32'b0000000000000000?????00000010010 0 0 0 0 0 0 0 0 0 0 1 0 // MFLO
32'b000000?????000000000000000010011 0 0 0 0 0 0 0 0 0 0 1 0 // MTLO
32'b000000??????????0000000000011000 0 0 0 0 1 1 ? ? 0 0 1 0 // MULT
32'b000000??????????0000000000011001 0 0 0 0 1 1 ? ? 0 0 1 0 // MULTU
32'b000000??????????0000000000011010 0 0 0 0 1 1 ? ? 0 0 1 0 // DIV
32'b000000??????????0000000000011011 0 0 0 0 1 1 ? ? 0 0 1 0 // DIVU
32'b000000???????????????00000100000 0 0 0 1 1 1 ? ? 0 0 1 1 // ADD
32'b000000???????????????00000100001 0 0 0 0 0 0 1 1 0 0 1 1 // ADDU
32'b000000???????????????00000100010 0 0 0 1 1 1 ? ? 0 0 1 1 // SUB
32'b000000???????????????00000100011 0 0 0 0 0 0 1 1 0 0 1 1 // SUBU
32'b000000???????????????00000100100 0 0 0 0 0 0 1 1 0 0 1 1 // AND
32'b000000???????????????00000100101 0 0 0 0 0 0 1 1 0 0 1 1 // OR
32'b000000???????????????00000100110 0 0 0 0 0 0 1 1 0 0 1 1 // XOR
32'b000000???????????????00000100111 0 0 0 0 0 0 1 1 0 0 1 1 // NOR
32'b000000???????????????00000101010 0 0 0 0 0 0 1 1 0 0 1 1 // SLT
32'b000000???????????????00000101011 0 0 0 0 0 0 1 1 0 0 1 1 // SLTU
32'b000000????????????????????110000 0 0 0 0 1 1 ? ? 0 0 0 1 // TGE
32'b000000????????????????????110001 0 0 0 0 1 1 ? ? 0 0 0 1 // TGEU
32'b000000????????????????????110010 0 0 0 0 1 1 ? ? 0 0 0 1 // TLT
32'b000000????????????????????110011 0 0 0 0 1 1 ? ? 0 0 0 1 // TLTU
32'b000000????????????????????110100 0 0 0 0 1 1 ? ? 0 0 0 1 // TEQ
32'b000000????????????????????110110 0 0 0 0 1 1 ? ? 0 0 0 1 // TNE
32'b000001?????00000???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BLTZ
32'b000001?????00001???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BGEZ
32'b000001?????01000???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TGEI
32'b000001?????01001???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TGEIU
32'b000001?????01010???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TLTI
32'b000001?????01011???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TLTIU
32'b000001?????01110???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TNEI
32'b000001?????01100???????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // TEQI
32'b000001?????10000???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BLTZAL
32'b000001?????10001???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BGEZAL
32'b000010?????????????????????????? 0 0 0 0 0 0 0 0 0 0 1 1 // J
32'b000011?????????????????????????? 0 0 0 0 0 0 0 0 0 0 1 1 // JAL
32'b000100?????????????????????????? 0 0 0 0 0 0 0 0 1 1 1 1 // BEQ
32'b000101?????????????????????????? 0 0 0 0 0 0 0 0 1 1 1 1 // BNE
32'b000110?????00000???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BLEZ
32'b000111?????00000???????????????? 0 0 0 0 0 0 0 0 1 0 1 1 // BGTZ
32'b001000?????????????????????????? 0 0 0 1 1 0 ? 0 0 0 1 1 // ADDI
32'b001001?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // ADDIU
32'b001010?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // SLTI
32'b001011?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // SLTIU
32'b001100?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // ANDI
32'b001101?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // ORI
32'b001110?????????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // XORI
32'b00111100000????????????????????? 0 0 0 0 0 0 1 0 0 0 1 1 // LUI
32'b01000000000??????????00000000??? 0 0 0 0 0 0 0 0 0 0 1 0 // MFC0
32'b01000000100??????????00000000??? 0 0 0 0 0 0 0 0 0 0 1 0 // MTC0
32'b01000010000000000000000000000001 0 0 0 0 0 0 0 0 0 0 0 1 // TLBR
32'b01000010000000000000000000000010 0 0 0 0 0 0 0 0 0 0 0 1 // TLBWI
32'b01000010000000000000000000000110 0 0 0 0 0 0 0 0 0 0 0 1 // TLBWR
32'b01000010000000000000000000001000 0 0 0 0 0 0 0 0 0 0 0 1 // TLBP
32'b01000010000000000000000000011000 0 0 1 0 0 0 0 0 0 0 1 1 // ERET
32'b011100??????????0000000000000000 0 0 0 0 1 1 ? ? 0 0 1 0 // MADD
32'b011100??????????0000000000000001 0 0 0 0 1 1 ? ? 0 0 1 0 // MADDU
32'b011100??????????0000000000000100 0 0 0 0 1 1 ? ? 0 0 1 0 // MSUB
32'b011100??????????0000000000000101 0 0 0 0 1 1 ? ? 0 0 1 0 // MSUBU
32'b011100???????????????00000000010 0 0 0 0 1 1 ? ? 0 0 1 0 // MUL
32'b100000?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LB
32'b100001?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LH
32'b100010?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LWL
32'b100011?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LW
32'b100100?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LBU
32'b100101?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LHU
32'b100110?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // LWR
32'b101000?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // SB
32'b101001?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // SH
32'b101010?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // SWL
32'b101011?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // SW
32'b101110?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // SWR
32'b101111?????????????????????????? 0 0 0 0 1 0 ? 0 0 0 0 1 // CACHE
32'b110011?????????????????????????? 0 0 0 0 0 0 0 0 0 0 1 1 // PREF (NOP)

View File

@ -74,11 +74,11 @@
32'b011100???????????????00000000010 0 0 MUL? 1 0 ? PASST 0 0 0 MUL 0 1 0 // MUL
32'b100000?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LB
32'b100001?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LH
32'h100010?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LWL
32'b100010?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LWL
32'b100011?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LW
32'b100100?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LBU
32'b100101?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LHU
32'h100110?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LWR
32'b100110?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // LWR
32'b101000?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // SB
32'b101001?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // SH
32'b101010?????????????????????????? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? // SWL

View File

@ -1,94 +1,94 @@
////-------------------------------- TLBR TLBWI TLBWR TLBP MR MWR MX ALR ALR1 ALR0 CACHEOP CO2 CO1 CO0
32'b000000000000000000000?????001111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SYNC (NOP)
32'b00000000000???????????????000000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLL
32'b00000000000???????????????000010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRL
32'b00000000000???????????????000011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRA
32'b000000???????????????00000000100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLLV
32'b000000???????????????00000000110 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRLV
32'b000000???????????????00000000111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRAV
32'b000000???????????????00000001010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // MOVZ
32'b000000???????????????00000001011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // MOVN
32'b000000?????000000000000000001000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JR
32'b000000?????00000?????00000001001 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JALR
32'b000000????????????????????001100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SYSCALL
32'b000000????????????????????001101 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BREAK
32'b0000000000000000?????00000010000 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MFHI
32'b000000?????000000000000000010001 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MTHI
32'b0000000000000000?????00000010010 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MFLO
32'b000000?????000000000000000010011 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MTLO
32'b000000??????????0000000000011000 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MULT
32'b000000??????????0000000000011001 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MULTU
32'b000000??????????0000000000011010 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // DIV
32'b000000??????????0000000000011011 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // DIVU
32'b000000???????????????00000100000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ADD
32'b000000???????????????00000100001 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ADDU
32'b000000???????????????00000100010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SUB
32'b000000???????????????00000100011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SUBU
32'b000000???????????????00000100100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // AND
32'b000000???????????????00000100101 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // OR
32'b000000???????????????00000100110 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // XOR
32'b000000???????????????00000100111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // NOR
32'b000000???????????????00000101010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLT
32'b000000???????????????00000101011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLTU
32'b000000????????????????????110000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGE
32'b000000????????????????????110001 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEU
32'b000000????????????????????110010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLT
32'b000000????????????????????110011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTU
32'b000000????????????????????110100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TEQ
32'b000000????????????????????110110 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TNE
32'b000001?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZ
32'b000001?????00001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZ
32'b000001?????01000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEI
32'b000001?????01001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEIU
32'b000001?????01010???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTI
32'b000001?????01011???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTIU
32'b000001?????01110???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TNEI
32'b000001?????01100???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TEQI
32'b000001?????10000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZAL
32'b000001?????10001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZAL
32'b000010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // J
32'b000011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JAL
32'b000100?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BEQ
32'b000101?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BNE
32'b000110?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLEZ
32'b000111?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGTZ
32'b001000?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ADDI
32'b001001?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ADDIU
32'b001010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLTI
32'b001011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLTIU
32'b001100?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ANDI
32'b001101?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ORI
32'b001110?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // XORI
32'b00111100000????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // LUI
32'b01000000000??????????00000000??? 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MFC0
32'b01000000100??????????00000000??? 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MTC0
32'b01000010000000000000000000000001 1 0 1 0 0 ? ? ? ? ? ? ? ? ? // TLBR
32'b01000010000000000000000000000010 0 1 0 0 0 ? ? ? ? ? ? ? ? ? // TLBWI
32'b01000010000000000000000000000110 0 1 1 0 0 ? ? ? ? ? ? ? ? ? // TLBWR
32'b01000010000000000000000000001000 0 0 0 1 0 ? ? ? ? ? ? ? ? ? // TLBP
32'b01000010000000000000000000011000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // ERET
32'b011100??????????0000000000000000 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MADD
32'b011100??????????0000000000000001 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MADDU
32'b011100??????????0000000000000100 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MSUB
32'b011100??????????0000000000000101 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MSUBU
32'b011100???????????????00000000010 0 0 0 0 ? ? ? ? ? ? ? ? ? ? // MUL
32'b100000?????????????????????????? 0 0 0 0 1 0 1 ALIGN 0 0 CNOP 0 0 0 // LB
32'b100001?????????????????????????? 0 0 0 0 1 0 1 ALIGN 0 0 CNOP 0 0 0 // LH
32'h100010?????????????????????????? 0 0 0 0 1 0 ? ULEFT 0 1 CNOP 0 0 0 // LWL
32'b100011?????????????????????????? 0 0 0 0 1 0 ? ALIGN 0 0 CNOP 0 0 0 // LW
32'b100100?????????????????????????? 0 0 0 0 1 0 0 ALIGN 0 0 CNOP 0 0 0 // LBU
32'b100101?????????????????????????? 0 0 0 0 1 0 0 ALIGN 0 0 CNOP 0 0 0 // LHU
32'h100110?????????????????????????? 0 0 0 0 1 0 ? URIGHT 1 0 CNOP 0 0 0 // LWR
32'b101000?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 0 // SB
32'b101001?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 0 // SH
32'b101010?????????????????????????? 0 0 0 0 1 1 ? ULEFT 0 1 CNOP 0 0 0 // SWL
32'b101011?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 0 // SW
32'b101110?????????????????????????? 0 0 0 0 1 1 ? URIGHT 1 0 CNOP 0 0 0 // SWR
32'b101111?????00000???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 IC_I 0 1 1 // I-Cache Index Invalid
32'b101111?????01000???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 IC_I 0 1 1 // I-Cache Index Store Tag
32'b101111?????10000???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 IC_L 0 0 1 // I-Cache Hit Invalid
32'b101111?????00001???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 DC_IB 1 1 0 // D-Cache Index Writeback Invalid
32'b101111?????01001???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 DC_IO 1 1 1 // D-Cache Index Store Tag
32'b101111?????10001???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 DC_LO 1 0 1 // D-Cache Hit Invalid
32'b101111?????10101???????????????? 0 0 0 0 1 1 ? ALIGN 0 0 DC_LB 1 0 0 // D-Cache Hit Writeback Invalid
32'b110011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // PREF (NOP)
////-------------------------------- TLBR TLBWI TLBWR TLBP MR MWR MX ALR ALR1 ALR0 CACHEOP iop dop ioh wb
32'b000000000000000000000?????001111 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SYNC (NOP)
32'b00000000000???????????????000000 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLL
32'b00000000000???????????????000010 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SRL
32'b00000000000???????????????000011 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SRA
32'b000000???????????????00000000100 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLLV
32'b000000???????????????00000000110 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SRLV
32'b000000???????????????00000000111 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SRAV
32'b000000???????????????00000001010 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // MOVZ
32'b000000???????????????00000001011 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // MOVN
32'b000000?????000000000000000001000 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // JR
32'b000000?????00000?????00000001001 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // JALR
32'b000000????????????????????001100 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SYSCALL
32'b000000????????????????????001101 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BREAK
32'b0000000000000000?????00000010000 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MFHI
32'b000000?????000000000000000010001 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MTHI
32'b0000000000000000?????00000010010 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MFLO
32'b000000?????000000000000000010011 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MTLO
32'b000000??????????0000000000011000 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MULT
32'b000000??????????0000000000011001 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MULTU
32'b000000??????????0000000000011010 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // DIV
32'b000000??????????0000000000011011 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // DIVU
32'b000000???????????????00000100000 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ADD
32'b000000???????????????00000100001 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ADDU
32'b000000???????????????00000100010 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SUB
32'b000000???????????????00000100011 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SUBU
32'b000000???????????????00000100100 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // AND
32'b000000???????????????00000100101 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // OR
32'b000000???????????????00000100110 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // XOR
32'b000000???????????????00000100111 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // NOR
32'b000000???????????????00000101010 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLT
32'b000000???????????????00000101011 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLTU
32'b000000????????????????????110000 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TGE
32'b000000????????????????????110001 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TGEU
32'b000000????????????????????110010 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLT
32'b000000????????????????????110011 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLTU
32'b000000????????????????????110100 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TEQ
32'b000000????????????????????110110 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TNE
32'b000001?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BLTZ
32'b000001?????00001???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BGEZ
32'b000001?????01000???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TGEI
32'b000001?????01001???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TGEIU
32'b000001?????01010???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLTI
32'b000001?????01011???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLTIU
32'b000001?????01110???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TNEI
32'b000001?????01100???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TEQI
32'b000001?????10000???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BLTZAL
32'b000001?????10001???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BGEZAL
32'b000010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // J
32'b000011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // JAL
32'b000100?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BEQ
32'b000101?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BNE
32'b000110?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BLEZ
32'b000111?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // BGTZ
32'b001000?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ADDI
32'b001001?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ADDIU
32'b001010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLTI
32'b001011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // SLTIU
32'b001100?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ANDI
32'b001101?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ORI
32'b001110?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // XORI
32'b00111100000????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // LUI
32'b01000000000??????????00000000??? 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MFC0
32'b01000000100??????????00000000??? 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MTC0
32'b01000010000000000000000000000001 1 0 1 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLBR
32'b01000010000000000000000000000010 0 1 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLBWI
32'b01000010000000000000000000000110 0 1 1 0 0 ? ? ? ? ? CNOP 0 0 ? ? // TLBWR
32'b01000010000000000000000000001000 0 0 0 1 0 ? ? ? ? ? CNOP 0 0 ? ? // TLBP
32'b01000010000000000000000000011000 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // ERET
32'b011100??????????0000000000000000 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MADD
32'b011100??????????0000000000000001 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MADDU
32'b011100??????????0000000000000100 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MSUB
32'b011100??????????0000000000000101 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MSUBU
32'b011100???????????????00000000010 0 0 0 0 ? ? ? ? ? ? CNOP 0 0 ? ? // MUL
32'b100000?????????????????????????? 0 0 0 0 1 0 1 ALIGN 0 0 CNOP 0 0 ? ? // LB
32'b100001?????????????????????????? 0 0 0 0 1 0 1 ALIGN 0 0 CNOP 0 0 ? ? // LH
32'b100010?????????????????????????? 0 0 0 0 1 0 ? ULEFT 0 1 CNOP 0 0 ? ? // LWL
32'b100011?????????????????????????? 0 0 0 0 1 0 ? ALIGN 0 0 CNOP 0 0 ? ? // LW
32'b100100?????????????????????????? 0 0 0 0 1 0 0 ALIGN 0 0 CNOP 0 0 ? ? // LBU
32'b100101?????????????????????????? 0 0 0 0 1 0 0 ALIGN 0 0 CNOP 0 0 ? ? // LHU
32'b100110?????????????????????????? 0 0 0 0 1 0 ? URIGHT 1 0 CNOP 0 0 ? ? // LWR
32'b101000?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 ? ? // SB
32'b101001?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 ? ? // SH
32'b101010?????????????????????????? 0 0 0 0 1 1 ? ULEFT 0 1 CNOP 0 0 ? ? // SWL
32'b101011?????????????????????????? 0 0 0 0 1 1 ? ALIGN 0 0 CNOP 0 0 ? ? // SW
32'b101110?????????????????????????? 0 0 0 0 1 1 ? URIGHT 1 0 CNOP 0 0 ? ? // SWR
32'b101111?????00000???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 IC_I 1 0 0 0 // I-Cache Index Invalid
32'b101111?????01000???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 IC_I 1 0 0 0 // I-Cache Index Store Tag
32'b101111?????10000???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 IC_L 1 0 1 0 // I-Cache Hit Invalid
32'b101111?????00001???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 DC_IB 0 1 0 1 // D-Cache Index Writeback Invalid
32'b101111?????01001???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 DC_IO 0 1 0 0 // D-Cache Index Store Tag
32'b101111?????10001???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 DC_LO 0 1 1 0 // D-Cache Hit Invalid
32'b101111?????10101???????????????? 0 0 0 0 0 ? ? ALIGN 0 0 DC_LB 0 1 1 1 // D-Cache Hit Writeback Invalid
32'b110011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? CNOP 0 0 ? ? // PREF (NOP)

View File

@ -74,11 +74,11 @@
32'b011100???????????????00000000010 0 0 0 0 // MUL
32'b100000?????????????????????????? 0 0 0 0 // LB
32'b100001?????????????????????????? 0 0 0 0 // LH
32'h100010?????????????????????????? 0 0 0 0 // LWL
32'b100010?????????????????????????? 0 0 0 0 // LWL
32'b100011?????????????????????????? 0 0 0 0 // LW
32'b100100?????????????????????????? 0 0 0 0 // LBU
32'b100101?????????????????????????? 0 0 0 0 // LHU
32'h100110?????????????????????????? 0 0 0 0 // LWR
32'b100110?????????????????????????? 0 0 0 0 // LWR
32'b101000?????????????????????????? 0 0 0 0 // SB
32'b101001?????????????????????????? 0 0 0 0 // SH
32'b101010?????????????????????????? 0 0 0 0 // SWL

View File

@ -1,88 +0,0 @@
////-------------------------------- PRV
32'b000000000000000000000?????001111 0 // SYNC (NOP)
32'b00000000000???????????????000000 0 // SLL
32'b00000000000???????????????000010 0 // SRL
32'b00000000000???????????????000011 0 // SRA
32'b000000???????????????00000000100 0 // SLLV
32'b000000???????????????00000000110 0 // SRLV
32'b000000???????????????00000000111 0 // SRAV
32'b000000???????????????00000001010 0 // MOVZ
32'b000000???????????????00000001011 0 // MOVN
32'b000000?????000000000000000001000 0 // JR
32'b000000?????00000?????00000001001 0 // JALR
32'b000000????????????????????001100 0 // SYSCALL
32'b000000????????????????????001101 0 // BREAK
32'b0000000000000000?????00000010000 0 // MFHI
32'b000000?????000000000000000010001 0 // MTHI
32'b0000000000000000?????00000010010 0 // MFLO
32'b000000?????000000000000000010011 0 // MTLO
32'b000000??????????0000000000011000 0 // MULT
32'b000000??????????0000000000011001 0 // MULTU
32'b000000??????????0000000000011010 0 // DIV
32'b000000??????????0000000000011011 0 // DIVU
32'b000000???????????????00000100000 0 // ADD
32'b000000???????????????00000100001 0 // ADDU
32'b000000???????????????00000100010 0 // SUB
32'b000000???????????????00000100011 0 // SUBU
32'b000000???????????????00000100100 0 // AND
32'b000000???????????????00000100101 0 // OR
32'b000000???????????????00000100110 0 // XOR
32'b000000???????????????00000100111 0 // NOR
32'b000000???????????????00000101010 0 // SLT
32'b000000???????????????00000101011 0 // SLTU
32'b000000????????????????????110000 0 // TGE
32'b000000????????????????????110001 0 // TGEU
32'b000000????????????????????110010 0 // TLT
32'b000000????????????????????110011 0 // TLTU
32'b000000????????????????????110100 0 // TEQ
32'b000000????????????????????110110 0 // TNE
32'b000001?????00000???????????????? 0 // BLTZ
32'b000001?????00001???????????????? 0 // BGEZ
32'b000001?????01000???????????????? 0 // TGEI
32'b000001?????01001???????????????? 0 // TGEIU
32'b000001?????01010???????????????? 0 // TLTI
32'b000001?????01011???????????????? 0 // TLTIU
32'b000001?????01110???????????????? 0 // TNEI
32'b000001?????01100???????????????? 0 // TEQI
32'b000001?????10000???????????????? 0 // BLTZAL
32'b000001?????10001???????????????? 0 // BGEZAL
32'b000010?????????????????????????? 0 // J
32'b000011?????????????????????????? 0 // JAL
32'b000100?????????????????????????? 0 // BEQ
32'b000101?????????????????????????? 0 // BNE
32'b000110?????00000???????????????? 0 // BLEZ
32'b000111?????00000???????????????? 0 // BGTZ
32'b001000?????????????????????????? 0 // ADDI
32'b001001?????????????????????????? 0 // ADDIU
32'b001010?????????????????????????? 0 // SLTI
32'b001011?????????????????????????? 0 // SLTIU
32'b001100?????????????????????????? 0 // ANDI
32'b001101?????????????????????????? 0 // ORI
32'b001110?????????????????????????? 0 // XORI
32'b00111100000????????????????????? 0 // LUI
32'b01000000000??????????00000000??? 1 // MFC0
32'b01000000100??????????00000000??? 1 // MTC0
32'b01000010000000000000000000000001 1 // TLBR
32'b01000010000000000000000000000010 1 // TLBWI
32'b01000010000000000000000000000110 1 // TLBWR
32'b01000010000000000000000000001000 1 // TLBP
32'b01000010000000000000000000011000 1 // ERET
32'b011100??????????0000000000000000 0 // MADD
32'b011100??????????0000000000000001 0 // MADDU
32'b011100??????????0000000000000100 0 // MSUB
32'b011100??????????0000000000000101 0 // MSUBU
32'b011100???????????????00000000010 0 // MUL
32'b100000?????????????????????????? 0 // LB
32'b100001?????????????????????????? 0 // LH
32'h100010?????????????????????????? 0 // LWL
32'b100011?????????????????????????? 0 // LW
32'b100100?????????????????????????? 0 // LBU
32'b100101?????????????????????????? 0 // LHU
32'h100110?????????????????????????? 0 // LWR
32'b101000?????????????????????????? 0 // SB
32'b101001?????????????????????????? 0 // SH
32'b101010?????????????????????????? 0 // SWL
32'b101011?????????????????????????? 0 // SW
32'b101110?????????????????????????? 0 // SWR
32'b101111?????????????????????????? 0 // CACHE
32'b110011?????????????????????????? 0 // PREF (NOP)

View File

@ -60,13 +60,13 @@
32'b001101?????????????????????????? 0 ? ? ? // ORI
32'b001110?????????????????????????? 0 ? ? ? // XORI
32'b00111100000????????????????????? 0 ? ? ? // LUI
32'b01000000000??????????00000000??? 1 ? ? ? // MFC0
32'b01000000100??????????00000000??? 1 ? ? ? // MTC0
32'b01000010000000000000000000000001 1 ? ? ? // TLBR
32'b01000010000000000000000000000010 1 ? ? ? // TLBWI
32'b01000010000000000000000000000110 1 ? ? ? // TLBWR
32'b01000010000000000000000000001000 1 ? ? ? // TLBP
32'b01000010000000000000000000011000 1 ? ? ? // ERET
32'b01000000000??????????00000000??? 0 ? ? ? // MFC0
32'b01000000100??????????00000000??? 0 ? ? ? // MTC0
32'b01000010000000000000000000000001 0 ? ? ? // TLBR
32'b01000010000000000000000000000010 0 ? ? ? // TLBWI
32'b01000010000000000000000000000110 0 ? ? ? // TLBWR
32'b01000010000000000000000000001000 0 ? ? ? // TLBP
32'b01000010000000000000000000011000 0 ? ? ? // ERET
32'b011100??????????0000000000000000 0 ? ? ? // MADD
32'b011100??????????0000000000000001 0 ? ? ? // MADDU
32'b011100??????????0000000000000100 0 ? ? ? // MSUB
@ -74,11 +74,11 @@
32'b011100???????????????00000000010 0 ? ? ? // MUL
32'b100000?????????????????????????? 0 ? ? ? // LB
32'b100001?????????????????????????? 0 ? ? ? // LH
32'h100010?????????????????????????? 0 ? ? ? // LWL
32'b100010?????????????????????????? 0 ? ? ? // LWL
32'b100011?????????????????????????? 0 ? ? ? // LW
32'b100100?????????????????????????? 0 ? ? ? // LBU
32'b100101?????????????????????????? 0 ? ? ? // LHU
32'h100110?????????????????????????? 0 ? ? ? // LWR
32'b100110?????????????????????????? 0 ? ? ? // LWR
32'b101000?????????????????????????? 0 ? ? ? // SB
32'b101001?????????????????????????? 0 ? ? ? // SH
32'b101010?????????????????????????? 0 ? ? ? // SWL

View File

@ -1,88 +1,88 @@
////-------------------------------- MOV RW RD RD1 RD0
32'b000000000000000000000?????001111 0 0 ? ? ? // SYNC (NOP)
32'b00000000000???????????????000000 0 1 RD 0 0 // SLL
32'b00000000000???????????????000010 0 1 RD 0 0 // SRL
32'b00000000000???????????????000011 0 1 RD 0 0 // SRA
32'b000000???????????????00000000100 0 1 RD 0 0 // SLLV
32'b000000???????????????00000000110 0 1 RD 0 0 // SRLV
32'b000000???????????????00000000111 0 1 RD 0 0 // SRAV
32'b000000???????????????00000001010 1 1 RD 0 0 // MOVZ
32'b000000???????????????00000001011 1 1 RD 0 0 // MOVN
32'b000000?????000000000000000001000 0 0 ? ? ? // JR
32'b000000?????00000?????00000001001 0 1 RD 0 0 // JALR
32'b000000????????????????????001100 0 0 ? ? ? // SYSCALL
32'b000000????????????????????001101 0 0 ? ? ? // BREAK
32'b0000000000000000?????00000010000 0 1 RD 0 0 // MFHI
32'b000000?????000000000000000010001 0 0 ? ? ? // MTHI
32'b0000000000000000?????00000010010 0 1 RD 0 0 // MFLO
32'b000000?????000000000000000010011 0 0 ? ? ? // MTLO
32'b000000??????????0000000000011000 0 0 ? ? ? // MULT
32'b000000??????????0000000000011001 0 0 ? ? ? // MULTU
32'b000000??????????0000000000011010 0 0 ? ? ? // DIV
32'b000000??????????0000000000011011 0 0 ? ? ? // DIVU
32'b000000???????????????00000100000 0 1 RD 0 0 // ADD
32'b000000???????????????00000100001 0 1 RD 0 0 // ADDU
32'b000000???????????????00000100010 0 1 RD 0 0 // SUB
32'b000000???????????????00000100011 0 1 RD 0 0 // SUBU
32'b000000???????????????00000100100 0 1 RD 0 0 // AND
32'b000000???????????????00000100101 0 1 RD 0 0 // OR
32'b000000???????????????00000100110 0 1 RD 0 0 // XOR
32'b000000???????????????00000100111 0 1 RD 0 0 // NOR
32'b000000???????????????00000101010 0 1 RD 0 0 // SLT
32'b000000???????????????00000101011 0 1 RD 0 0 // SLTU
32'b000000????????????????????110000 0 0 ? ? ? // TGE
32'b000000????????????????????110001 0 0 ? ? ? // TGEU
32'b000000????????????????????110010 0 0 ? ? ? // TLT
32'b000000????????????????????110011 0 0 ? ? ? // TLTU
32'b000000????????????????????110100 0 0 ? ? ? // TEQ
32'b000000????????????????????110110 0 0 ? ? ? // TNE
32'b000001?????00000???????????????? 0 0 ? ? ? // BLTZ
32'b000001?????00001???????????????? 0 0 ? ? ? // BGEZ
32'b000001?????01000???????????????? 0 0 ? ? ? // TGEI
32'b000001?????01001???????????????? 0 0 ? ? ? // TGEIU
32'b000001?????01010???????????????? 0 0 ? ? ? // TLTI
32'b000001?????01011???????????????? 0 0 ? ? ? // TLTIU
32'b000001?????01110???????????????? 0 0 ? ? ? // TNEI
32'b000001?????01100???????????????? 0 0 ? ? ? // TEQI
32'b000001?????10000???????????????? 0 1 31 0 1 // BLTZAL
32'b000001?????10001???????????????? 0 1 31 0 1 // BGEZAL
32'b000010?????????????????????????? 0 0 ? ? ? // J
32'b000011?????????????????????????? 0 1 31 0 1 // JAL
32'b000100?????????????????????????? 0 0 ? ? ? // BEQ
32'b000101?????????????????????????? 0 0 ? ? ? // BNE
32'b000110?????00000???????????????? 0 0 ? ? ? // BLEZ
32'b000111?????00000???????????????? 0 0 ? ? ? // BGTZ
32'b001000?????????????????????????? 0 1 RT 1 ? // ADDI
32'b001001?????????????????????????? 0 1 RT 1 ? // ADDIU
32'b001010?????????????????????????? 0 1 RT 1 ? // SLTI
32'b001011?????????????????????????? 0 1 RT 1 ? // SLTIU
32'b001100?????????????????????????? 0 1 RT 1 ? // ANDI
32'b001101?????????????????????????? 0 1 RT 1 ? // ORI
32'b001110?????????????????????????? 0 1 RT 1 ? // XORI
32'b00111100000????????????????????? 0 1 RT 1 ? // LUI
32'b01000000000??????????00000000??? 0 1 RT 1 ? // MFC0
32'b01000000100??????????00000000??? 0 0 ? ? ? // MTC0
32'b01000010000000000000000000000001 0 0 ? ? ? // TLBR
32'b01000010000000000000000000000010 0 0 ? ? ? // TLBWI
32'b01000010000000000000000000000110 0 0 ? ? ? // TLBWR
32'b01000010000000000000000000001000 0 0 ? ? ? // TLBP
32'b01000010000000000000000000011000 0 0 ? ? ? // ERET
32'b011100??????????0000000000000000 0 0 ? ? ? // MADD
32'b011100??????????0000000000000001 0 0 ? ? ? // MADDU
32'b011100??????????0000000000000100 0 0 ? ? ? // MSUB
32'b011100??????????0000000000000101 0 0 ? ? ? // MSUBU
32'b011100???????????????00000000010 0 1 RD 0 0 // MUL
32'b100000?????????????????????????? 0 1 RT 1 ? // LB
32'b100001?????????????????????????? 0 1 RT 1 ? // LH
32'h100010?????????????????????????? 0 1 RT 1 ? // LWL
32'b100011?????????????????????????? 0 1 RT 1 ? // LW
32'b100100?????????????????????????? 0 1 RT 1 ? // LBU
32'b100101?????????????????????????? 0 1 RT 1 ? // LHU
32'h100110?????????????????????????? 0 1 RT 1 ? // LWR
32'b101000?????????????????????????? 0 0 ? ? ? // SB
32'b101001?????????????????????????? 0 0 ? ? ? // SH
32'b101010?????????????????????????? 0 0 ? ? ? // SWL
32'b101011?????????????????????????? 0 0 ? ? ? // SW
32'b101110?????????????????????????? 0 0 ? ? ? // SWR
32'b101111?????????????????????????? 0 0 ? ? ? // CACHE
32'b110011?????????????????????????? 0 0 ? ? ? // PREF (NOP)
////-------------------------------- RW RD RD1 RD0
32'b000000000000000000000?????001111 0 ? ? ? // SYNC (NOP)
32'b00000000000???????????????000000 1 RD 0 0 // SLL
32'b00000000000???????????????000010 1 RD 0 0 // SRL
32'b00000000000???????????????000011 1 RD 0 0 // SRA
32'b000000???????????????00000000100 1 RD 0 0 // SLLV
32'b000000???????????????00000000110 1 RD 0 0 // SRLV
32'b000000???????????????00000000111 1 RD 0 0 // SRAV
32'b000000???????????????00000001010 1 RD 0 0 // MOVZ
32'b000000???????????????00000001011 1 RD 0 0 // MOVN
32'b000000?????000000000000000001000 0 ? ? ? // JR
32'b000000?????00000?????00000001001 1 RD 0 0 // JALR
32'b000000????????????????????001100 0 ? ? ? // SYSCALL
32'b000000????????????????????001101 0 ? ? ? // BREAK
32'b0000000000000000?????00000010000 1 RD 0 0 // MFHI
32'b000000?????000000000000000010001 0 ? ? ? // MTHI
32'b0000000000000000?????00000010010 1 RD 0 0 // MFLO
32'b000000?????000000000000000010011 0 ? ? ? // MTLO
32'b000000??????????0000000000011000 0 ? ? ? // MULT
32'b000000??????????0000000000011001 0 ? ? ? // MULTU
32'b000000??????????0000000000011010 0 ? ? ? // DIV
32'b000000??????????0000000000011011 0 ? ? ? // DIVU
32'b000000???????????????00000100000 1 RD 0 0 // ADD
32'b000000???????????????00000100001 1 RD 0 0 // ADDU
32'b000000???????????????00000100010 1 RD 0 0 // SUB
32'b000000???????????????00000100011 1 RD 0 0 // SUBU
32'b000000???????????????00000100100 1 RD 0 0 // AND
32'b000000???????????????00000100101 1 RD 0 0 // OR
32'b000000???????????????00000100110 1 RD 0 0 // XOR
32'b000000???????????????00000100111 1 RD 0 0 // NOR
32'b000000???????????????00000101010 1 RD 0 0 // SLT
32'b000000???????????????00000101011 1 RD 0 0 // SLTU
32'b000000????????????????????110000 0 ? ? ? // TGE
32'b000000????????????????????110001 0 ? ? ? // TGEU
32'b000000????????????????????110010 0 ? ? ? // TLT
32'b000000????????????????????110011 0 ? ? ? // TLTU
32'b000000????????????????????110100 0 ? ? ? // TEQ
32'b000000????????????????????110110 0 ? ? ? // TNE
32'b000001?????00000???????????????? 0 ? ? ? // BLTZ
32'b000001?????00001???????????????? 0 ? ? ? // BGEZ
32'b000001?????01000???????????????? 0 ? ? ? // TGEI
32'b000001?????01001???????????????? 0 ? ? ? // TGEIU
32'b000001?????01010???????????????? 0 ? ? ? // TLTI
32'b000001?????01011???????????????? 0 ? ? ? // TLTIU
32'b000001?????01110???????????????? 0 ? ? ? // TNEI
32'b000001?????01100???????????????? 0 ? ? ? // TEQI
32'b000001?????10000???????????????? 1 31 0 1 // BLTZAL
32'b000001?????10001???????????????? 1 31 0 1 // BGEZAL
32'b000010?????????????????????????? 0 ? ? ? // J
32'b000011?????????????????????????? 1 31 0 1 // JAL
32'b000100?????????????????????????? 0 ? ? ? // BEQ
32'b000101?????????????????????????? 0 ? ? ? // BNE
32'b000110?????00000???????????????? 0 ? ? ? // BLEZ
32'b000111?????00000???????????????? 0 ? ? ? // BGTZ
32'b001000?????????????????????????? 1 RT 1 ? // ADDI
32'b001001?????????????????????????? 1 RT 1 ? // ADDIU
32'b001010?????????????????????????? 1 RT 1 ? // SLTI
32'b001011?????????????????????????? 1 RT 1 ? // SLTIU
32'b001100?????????????????????????? 1 RT 1 ? // ANDI
32'b001101?????????????????????????? 1 RT 1 ? // ORI
32'b001110?????????????????????????? 1 RT 1 ? // XORI
32'b00111100000????????????????????? 1 RT 1 ? // LUI
32'b01000000000??????????00000000??? 1 RT 1 ? // MFC0
32'b01000000100??????????00000000??? 0 ? ? ? // MTC0
32'b01000010000000000000000000000001 0 ? ? ? // TLBR
32'b01000010000000000000000000000010 0 ? ? ? // TLBWI
32'b01000010000000000000000000000110 0 ? ? ? // TLBWR
32'b01000010000000000000000000001000 0 ? ? ? // TLBP
32'b01000010000000000000000000011000 0 ? ? ? // ERET
32'b011100??????????0000000000000000 0 ? ? ? // MADD
32'b011100??????????0000000000000001 0 ? ? ? // MADDU
32'b011100??????????0000000000000100 0 ? ? ? // MSUB
32'b011100??????????0000000000000101 0 ? ? ? // MSUBU
32'b011100???????????????00000000010 1 RD 0 0 // MUL
32'b100000?????????????????????????? 1 RT 1 ? // LB
32'b100001?????????????????????????? 1 RT 1 ? // LH
32'b100010?????????????????????????? 1 RT 1 ? // LWL
32'b100011?????????????????????????? 1 RT 1 ? // LW
32'b100100?????????????????????????? 1 RT 1 ? // LBU
32'b100101?????????????????????????? 1 RT 1 ? // LHU
32'b100110?????????????????????????? 1 RT 1 ? // LWR
32'b101000?????????????????????????? 0 ? ? ? // SB
32'b101001?????????????????????????? 0 ? ? ? // SH
32'b101010?????????????????????????? 0 ? ? ? // SWL
32'b101011?????????????????????????? 0 ? ? ? // SW
32'b101110?????????????????????????? 0 ? ? ? // SWR
32'b101111?????????????????????????? 0 ? ? ? // CACHE
32'b110011?????????????????????????? 0 ? ? ? // PREF (NOP)