diff --git a/ip/ibex_qsys b/ip/ibex_qsys
index 8056961..79c0da7 160000
--- a/ip/ibex_qsys
+++ b/ip/ibex_qsys
@@ -1 +1 @@
-Subproject commit 80569615842bf4e82f8efdef7c4937b0d9e0141e
+Subproject commit 79c0da70116a3a10c73a14c91652e81acd3fc9a9
diff --git a/ip/sc_config/inc/sc_config_regs.h b/ip/sc_config/inc/sc_config_regs.h
index 2a9c36f..1429081 100644
--- a/ip/sc_config/inc/sc_config_regs.h
+++ b/ip/sc_config/inc/sc_config_regs.h
@@ -165,6 +165,8 @@ typedef struct {
sl_config_reg sl_config;
sl_config2_reg sl_config2;
sl_config3_reg sl_config3;
+ uint32_t padding[1];
+ uint32_t lumacode_pal_ram[496];
} sc_regs;
#endif //SC_CONFIG_REGS_H_
diff --git a/ip/sc_config/sc_config_hw.tcl b/ip/sc_config/sc_config_hw.tcl
index d07c21c..4093f8c 100644
--- a/ip/sc_config/sc_config_hw.tcl
+++ b/ip/sc_config/sc_config_hw.tcl
@@ -100,7 +100,7 @@ set_interface_property avalon_s PORT_NAME_MAP ""
set_interface_property avalon_s CMSIS_SVD_VARIABLES ""
set_interface_property avalon_s SVD_ADDRESS_GROUP ""
-add_interface_port avalon_s avalon_s_address address Input 4
+add_interface_port avalon_s avalon_s_address address Input 9
add_interface_port avalon_s avalon_s_writedata writedata Input 32
add_interface_port avalon_s avalon_s_readdata readdata Output 32
add_interface_port avalon_s avalon_s_byteenable byteenable Input 4
@@ -158,3 +158,21 @@ add_interface_port sc_if misc_config_o misc_config_o Output 32
add_interface_port sc_if sl_config_o sl_config_o Output 32
add_interface_port sc_if sl_config2_o sl_config2_o Output 32
add_interface_port sc_if sl_config3_o sl_config3_o Output 32
+
+
+#
+# connection point lumacode_ram_if
+#
+add_interface lc_ram_if conduit end
+set_interface_property lc_ram_if associatedClock ""
+set_interface_property lc_ram_if associatedReset ""
+set_interface_property lc_ram_if ENABLED true
+set_interface_property lc_ram_if EXPORT_OF ""
+set_interface_property lc_ram_if PORT_NAME_MAP ""
+set_interface_property lc_ram_if CMSIS_SVD_VARIABLES ""
+set_interface_property lc_ram_if SVD_ADDRESS_GROUP ""
+
+add_interface_port lc_ram_if lumacode_clk_i lumacode_clk_i Input 1
+add_interface_port lc_ram_if lumacode_addr_i lumacode_addr_i Input 9
+add_interface_port lc_ram_if lumacode_rden_i lumacode_rden_i Input 1
+add_interface_port lc_ram_if lumacode_data_o lumacode_data_o Output 32
diff --git a/ip/sc_config/sc_config_top.sv b/ip/sc_config/sc_config_top.sv
index 386dcb8..8c03b83 100644
--- a/ip/sc_config/sc_config_top.sv
+++ b/ip/sc_config/sc_config_top.sv
@@ -24,7 +24,7 @@ module sc_config_top(
// avalon slave
input [31:0] avalon_s_writedata,
output reg [31:0] avalon_s_readdata,
- input [3:0] avalon_s_address,
+ input [8:0] avalon_s_address,
input [3:0] avalon_s_byteenable,
input avalon_s_write,
input avalon_s_read,
@@ -45,24 +45,31 @@ module sc_config_top(
output [31:0] misc_config_o,
output [31:0] sl_config_o,
output [31:0] sl_config2_o,
- output [31:0] sl_config3_o
+ output [31:0] sl_config3_o,
+ // Lumacode interface
+ input lumacode_clk_i,
+ input [8:0] lumacode_addr_i,
+ input lumacode_rden_i,
+ output [31:0] lumacode_data_o
);
-localparam FE_STATUS_REGNUM = 4'h0;
-localparam FE_STATUS2_REGNUM = 4'h1;
-localparam LT_STATUS_REGNUM = 4'h2;
-localparam HV_IN_CONFIG_REGNUM = 4'h3;
-localparam HV_IN_CONFIG2_REGNUM = 4'h4;
-localparam HV_IN_CONFIG3_REGNUM = 4'h5;
-localparam HV_OUT_CONFIG_REGNUM = 4'h6;
-localparam HV_OUT_CONFIG2_REGNUM = 4'h7;
-localparam HV_OUT_CONFIG3_REGNUM = 4'h8;
-localparam XY_OUT_CONFIG_REGNUM = 4'h9;
-localparam XY_OUT_CONFIG2_REGNUM = 4'ha;
-localparam MISC_CONFIG_REGNUM = 4'hb;
-localparam SL_CONFIG_REGNUM = 4'hc;
-localparam SL_CONFIG2_REGNUM = 4'hd;
-localparam SL_CONFIG3_REGNUM = 4'he;
+localparam FE_STATUS_REGNUM = 9'h0;
+localparam FE_STATUS2_REGNUM = 9'h1;
+localparam LT_STATUS_REGNUM = 9'h2;
+localparam HV_IN_CONFIG_REGNUM = 9'h3;
+localparam HV_IN_CONFIG2_REGNUM = 9'h4;
+localparam HV_IN_CONFIG3_REGNUM = 9'h5;
+localparam HV_OUT_CONFIG_REGNUM = 9'h6;
+localparam HV_OUT_CONFIG2_REGNUM = 9'h7;
+localparam HV_OUT_CONFIG3_REGNUM = 9'h8;
+localparam XY_OUT_CONFIG_REGNUM = 9'h9;
+localparam XY_OUT_CONFIG2_REGNUM = 9'ha;
+localparam MISC_CONFIG_REGNUM = 9'hb;
+localparam SL_CONFIG_REGNUM = 9'hc;
+localparam SL_CONFIG2_REGNUM = 9'hd;
+localparam SL_CONFIG3_REGNUM = 9'he;
+
+localparam LUMACODE_RAM_START = 9'h10;
reg [31:0] config_reg[HV_IN_CONFIG_REGNUM:SL_CONFIG3_REGNUM] /* synthesis ramstyle = "logic" */;
@@ -118,4 +125,51 @@ assign sl_config_o = config_reg[SL_CONFIG_REGNUM];
assign sl_config2_o = config_reg[SL_CONFIG2_REGNUM];
assign sl_config3_o = config_reg[SL_CONFIG3_REGNUM];
+
+// Lumacode palette RAM
+altsyncram lumacode_pal_ram (
+ .address_a (avalon_s_address),
+ .address_b (lumacode_addr_i),
+ .clock0 (clk_i),
+ .clock1 (lumacode_clk_i),
+ .data_a (avalon_s_writedata),
+ .rden_b (lumacode_rden_i),
+ .wren_a (avalon_s_chipselect && avalon_s_write && (avalon_s_address >= LUMACODE_RAM_START)),
+ .q_b (lumacode_data_o),
+ .aclr0 (1'b0),
+ .aclr1 (1'b0),
+ .addressstall_a (1'b0),
+ .addressstall_b (1'b0),
+ .byteena_a (1'b1),
+ .byteena_b (1'b1),
+ .clocken0 (1'b1),
+ .clocken1 (1'b1),
+ .clocken2 (1'b1),
+ .clocken3 (1'b1),
+ .data_b ({32{1'b1}}),
+ .eccstatus (),
+ .q_a (),
+ .rden_a (1'b1),
+ .wren_b (1'b0));
+defparam
+ lumacode_pal_ram.address_aclr_b = "NONE",
+ lumacode_pal_ram.address_reg_b = "CLOCK1",
+ lumacode_pal_ram.clock_enable_input_a = "BYPASS",
+ lumacode_pal_ram.clock_enable_input_b = "BYPASS",
+ lumacode_pal_ram.clock_enable_output_b = "BYPASS",
+ lumacode_pal_ram.intended_device_family = "Cyclone IV E",
+ lumacode_pal_ram.lpm_type = "altsyncram",
+ lumacode_pal_ram.numwords_a = 512,
+ lumacode_pal_ram.numwords_b = 512,
+ lumacode_pal_ram.operation_mode = "DUAL_PORT",
+ lumacode_pal_ram.outdata_aclr_b = "NONE",
+ lumacode_pal_ram.outdata_reg_b = "UNREGISTERED",
+ lumacode_pal_ram.power_up_uninitialized = "FALSE",
+ lumacode_pal_ram.rdcontrol_reg_b = "CLOCK1",
+ lumacode_pal_ram.widthad_a = 9,
+ lumacode_pal_ram.widthad_b = 9,
+ lumacode_pal_ram.width_a = 32,
+ lumacode_pal_ram.width_b = 32,
+ lumacode_pal_ram.width_byteena_a = 1;
+
endmodule
diff --git a/ossc.sdc b/ossc.sdc
index e585d0a..b5eb6a5 100644
--- a/ossc.sdc
+++ b/ossc.sdc
@@ -53,8 +53,7 @@ foreach_in_collection c [get_clocks pclk_*_out] {
set_false_path -to [remove_from_collection [all_outputs] $critoutputs_hdmi]
# Lumacode (constrained to max. 60MHz sampling)
-set_max_delay 16.6 -from [get_clocks pclk_tvp_high] -through [get_cells tvp7002_frontend:u_tvp_frontend|lc_code*]
-set_max_delay 16.6 -from [get_clocks pclk_tvp_high] -through [get_cells u_tvp_frontend|lc_atari_*]
+set_max_delay 16.6 -from [get_registers sys:sys_inst|sc_config_top:sc_config_0|altsyncram:lumacode_pal_ram|*]
### CPU/scanconverter clock relations ###
diff --git a/rtl/ossc.v b/rtl/ossc.v
index a14243e..4612ac9 100644
--- a/rtl/ossc.v
+++ b/rtl/ossc.v
@@ -129,6 +129,10 @@ wire [11:0] lt_stb_result;
wire lt_trig_waiting;
wire lt_finished;
+wire [31:0] lumacode_data;
+wire [8:0] lumacode_addr;
+wire lumacode_rden;
+
reg remove_event_prev;
reg [14:0] to_ctr, to_ctr_ms;
wire lcd_bl_timeout;
@@ -195,6 +199,7 @@ tvp7002_frontend u_tvp_frontend (
.hv_in_config2(hv_in_config2),
.hv_in_config3(hv_in_config3),
.misc_config(misc_config),
+ .lumacode_data(lumacode_data),
.R_o(TVP_R_post),
.G_o(TVP_G_post),
.B_o(TVP_B_post),
@@ -211,7 +216,9 @@ tvp7002_frontend u_tvp_frontend (
.sof_scaler(TVP_sof_scaler),
.pcnt_field(TVP_fe_pcnt_field),
.hsync_width(TVP_hsync_width),
- .sync_active(TVP_sync_active)
+ .sync_active(TVP_sync_active),
+ .lumacode_addr(lumacode_addr),
+ .lumacode_rden(lumacode_rden)
);
// Insert synchronizers to async inputs (synchronize to CPU clock)
@@ -402,6 +409,10 @@ sys sys_inst(
.sc_config_0_sc_if_sl_config_o (sl_config),
.sc_config_0_sc_if_sl_config2_o (sl_config2),
.sc_config_0_sc_if_sl_config3_o (sl_config3),
+ .sc_config_0_lc_ram_if_lumacode_clk_i (TVP_PCLK_i),
+ .sc_config_0_lc_ram_if_lumacode_addr_i (lumacode_addr),
+ .sc_config_0_lc_ram_if_lumacode_rden_i (lumacode_rden),
+ .sc_config_0_lc_ram_if_lumacode_data_o (lumacode_data),
.osd_generator_0_osd_if_vclk (PCLK_sc),
.osd_generator_0_osd_if_xpos (xpos_sc),
.osd_generator_0_osd_if_ypos (ypos_sc),
diff --git a/rtl/tvp7002_frontend.v b/rtl/tvp7002_frontend.v
index 252fd9b..8a59fd2 100644
--- a/rtl/tvp7002_frontend.v
+++ b/rtl/tvp7002_frontend.v
@@ -36,6 +36,7 @@ module tvp7002_frontend (
input [31:0] hv_in_config2,
input [31:0] hv_in_config3,
input [31:0] misc_config,
+ input [31:0] lumacode_data,
output [7:0] R_o,
output [7:0] G_o,
output [7:0] B_o,
@@ -52,7 +53,9 @@ module tvp7002_frontend (
output reg sof_scaler,
output reg [19:0] pcnt_field,
output reg [7:0] hsync_width,
- output reg sync_active
+ output reg sync_active,
+ output [8:0] lumacode_addr,
+ output lumacode_rden
);
localparam FID_EVEN = 1'b0;
@@ -151,59 +154,6 @@ wire [3:0] H_SAMPLE_SEL = hv_in_config3[31:28];
wire [2:0] LC_SAMPLES = (MISC_LUMACODE_MODE <= 3) ? 2 : ((MISC_LUMACODE_MODE <= 5) ? 3 : 2);
wire [2:0] LC_H_SKIP = ((H_SKIP+1) / LC_SAMPLES) - 1;
-// Lumacode palettes for 2-sample index-based sources (C64, Spectrum, Coleco/MSX)
-wire [23:0] lumacode_data_2s[0:2][0:15] = '{'{ 24'h000000,24'h2a1b9d,24'h7d202c,24'h84258c,24'h4c2e00,24'h3c3c3c,24'h646464,24'h4fb3a5,24'h7f410d,24'h6351db,24'h939393,24'hbfd04a,24'h339840,24'hb44f5c,24'h7ce587,24'hffffff},
- '{ 24'h000000,24'h000000,24'h0200FD,24'hCF01CE,24'h0100CE,24'hCF0100,24'hFF02FD,24'h01CFCF,24'hFF0201,24'h00CF15,24'h02FFFF,24'hFFFF1D,24'h00FF1C,24'hCFCF15,24'hCFCFCF,24'hFFFFFF},
- '{ 24'h000000,24'h5455ed,24'hfc5554,24'hff7978,24'h000000,24'hd4524d,24'h7d76fc,24'h42ebf5,24'h21b03b,24'h21c842,24'hff7978,24'hcccccc,24'hc95bba,24'hd4c154,24'he6ce80,24'hffffff}};
-
-// Lumacode palette for NES
-wire [23:0] lumacode_data_3s[0:63] = '{ 24'h000000, 24'h000000, 24'h000000, 24'h000000, 24'h000000, 24'h000000, 24'h000000, 24'h000000,
- 24'h626262, 24'h001fb2, 24'h2404c8, 24'h5200b2, 24'h730076, 24'h800024, 24'h730b00, 24'h522800, 24'h244400, 24'h005700, 24'h005c00, 24'h005324, 24'h003c76, 24'h000000,
- 24'hababab, 24'h0d57ff, 24'h4b30ff, 24'h8a13ff, 24'hbc08d6, 24'hd21269, 24'hc72e00, 24'h9d5400, 24'h607b00, 24'h209800, 24'h00a300, 24'h009942, 24'h007db4, 24'h000000,
- 24'hffffff, 24'h53aeff, 24'h9085ff, 24'hd365ff, 24'hff57ff, 24'hff5dcf, 24'hff7757, 24'hfa9e00, 24'hbdc700, 24'h7ae700, 24'h43f611, 24'h26ef7e, 24'h2cd5f6, 24'h4e4e4e,
- 24'hffffff, 24'hb6e1ff, 24'hced1ff, 24'he9c3ff, 24'hffbcff, 24'hffbdf4, 24'hffc6c3, 24'hffd59a, 24'he9e681, 24'hcef481, 24'hb6fb9a, 24'ha9fac3, 24'ha9f0f4, 24'hb8b8b8};
-wire [7:0] lumacode_data_3s_R = lumacode_data_3s[{lc_code[1], lc_code[2], lc_code[3]}][23:16];
-wire [7:0] lumacode_data_3s_G = lumacode_data_3s[{lc_code[1], lc_code[2], lc_code[3]}][15:8];
-wire [7:0] lumacode_data_3s_B = lumacode_data_3s[{lc_code[1], lc_code[2], lc_code[3]}][7:0];
-
-// Lumacode palette Atari GTIA
-/*wire [23:0] lumacode_data_gtia[0:255] = '{
-24'h000000, 24'h111111, 24'h222222, 24'h333333, 24'h444444, 24'h555555, 24'h666666, 24'h777777, 24'h888888, 24'h999999, 24'haaaaaa, 24'hbbbbbb, 24'hcccccc, 24'hdddddd, 24'heeeeee, 24'hffffff,
-24'h091900, 24'h192806, 24'h29370d, 24'h3a4714, 24'h4a561b, 24'h5a6522, 24'h6b7529, 24'h7b8430, 24'h8c9336, 24'h9ca33d, 24'hacb244, 24'hbdc14b, 24'hcdd152, 24'hdee059, 24'heeef60, 24'hffff67,
-24'h300000, 24'h3d1108, 24'h4b2211, 24'h593319, 24'h674422, 24'h75552a, 24'h826633, 24'h90773b, 24'h9e8844, 24'hac994c, 24'hbaaa55, 24'hc7bb5d, 24'hd5cc66, 24'he3dd6e, 24'hf1ee77, 24'hffff80,
-24'h4b0000, 24'h570f0c, 24'h631e18, 24'h6f2e24, 24'h7a3d30, 24'h874d3c, 24'h935c49, 24'h9f6b55, 24'hab7b61, 24'hb68a6d, 24'hc39a79, 24'hcfa986, 24'hdbb892, 24'he6c89e, 24'hf3d7aa, 24'hffe7b7,
-24'h550000, 24'h600e10, 24'h6b1c21, 24'h772a32, 24'h823843, 24'h8d4654, 24'h995465, 24'ha46276, 24'haf7187, 24'hbb7f98, 24'hc68da9, 24'hd19bba, 24'hdda9cb, 24'he8b7dc, 24'hf3c5ed, 24'hffd4fe,
-24'h4c0047, 24'h570d53, 24'h631b5f, 24'h6f286b, 24'h7b3678, 24'h874384, 24'h935190, 24'h9f5e9c, 24'hab6ca9, 24'hb779b5, 24'hc387c1, 24'hcf94cd, 24'hdba2da, 24'he7afe6, 24'hf3bdf2, 24'hffcbff,
-24'h30007e, 24'h3b0b85, 24'h49198d, 24'h572796, 24'h65349f, 24'h7242a7, 24'h8050b0, 24'h8e5db8, 24'h9c6bc1, 24'ha979c9, 24'hb786d2, 24'hc594db, 24'hd3a2e3, 24'he0afec, 24'heebdf4, 24'hfccbfd,
-24'h0a0097, 24'h1a0e9d, 24'h2a1da4, 24'h3b2cab, 24'h4b3ab2, 24'h5b49b9, 24'h6c58c0, 24'h7c67c7, 24'h8c75ce, 24'h9c84d5, 24'had93dc, 24'hbda2e3, 24'hceb0ea, 24'hdebff1, 24'heecef8, 24'hffddff,
-24'h00008e, 24'h0c0d94, 24'h1b1e9c, 24'h2a2ea3, 24'h393eab, 24'h484eb2, 24'h575eba, 24'h666ec1, 24'h747ec9, 24'h838fd0, 24'h929fd8, 24'ha1afdf, 24'hb0bfe6, 24'hbfcfee, 24'hcedff5, 24'hddeffd,
-24'h000e64, 24'h0c1e6e, 24'h192e78, 24'h263e83, 24'h324e8d, 24'h3f5e97, 24'h4c6ea2, 24'h587eac, 24'h658eb6, 24'h729ec1, 24'h7eaecb, 24'h8bbed5, 24'h98cee0, 24'ha4deea, 24'hb1eef4, 24'hbeffff,
-24'h002422, 24'h09302e, 24'h153f3d, 24'h204d4c, 24'h2c5c5a, 24'h376a69, 24'h427978, 24'h4e8786, 24'h599695, 24'h65a4a4, 24'h70b3b2, 24'h7cc1c1, 24'h87d0d0, 24'h92dfde, 24'h9eeded, 24'ha9fcfc,
-24'h003200, 24'h0b3f0e, 24'h164d1c, 24'h225b2b, 24'h2d6839, 24'h397648, 24'h448456, 24'h509164, 24'h5b9f73, 24'h67ad81, 24'h72ba90, 24'h7ec89e, 24'h89d6ac, 24'h95e3bb, 24'ha0f1c9, 24'hacffd8,
-24'h003400, 24'h0c410a, 24'h194f14, 24'h265c1e, 24'h336a28, 24'h407732, 24'h4c853c, 24'h599246, 24'h66a050, 24'h73ad5a, 24'h80bb64, 24'h8cc86e, 24'h99d678, 24'ha6e382, 24'hb3f18c, 24'hc0ff97,
-24'h002a00, 24'h0f3807, 24'h1e460e, 24'h2d5416, 24'h3c621d, 24'h4b7124, 24'h5a7f2c, 24'h698d33, 24'h799b3b, 24'h88a942, 24'h97b849, 24'ha6c651, 24'hb5d458, 24'hc4e260, 24'hd3f067, 24'he3ff6f,
-24'h0d1700, 24'h1d2606, 24'h2d350d, 24'h3d4514, 24'h4d541b, 24'h5d6422, 24'h6d7329, 24'h7d8330, 24'h8e9237, 24'h9ea23e, 24'haeb145, 24'hbec14c, 24'hced053, 24'hdee05a, 24'heeef61, 24'hffff68,
-24'h330000, 24'h401008, 24'h4e2111, 24'h5b321a, 24'h694323, 24'h77542c, 24'h846535, 24'h92763e, 24'h9f8646, 24'had974f, 24'hbba858, 24'hc8b961, 24'hd6ca6a, 24'he3db73, 24'hf1ec7c, 24'hfffd85};*/
-
-// Lumacode palette Atari CTIA/TIA
-/*wire [23:0] lumacode_data_ctia[0:127] = '{
-24'h000000, 24'h404040, 24'h6C6C6C, 24'h909090, 24'hB0B0B0, 24'hC8C8C8, 24'hDCDCDC, 24'hECECEC,
-24'h444400, 24'h646410, 24'h848424, 24'hA0A034, 24'hB8B840, 24'hD0D050, 24'hE8E85C, 24'hFCFC68,
-24'h702800, 24'h844414, 24'h985C28, 24'hAC783C, 24'hBC8C4C, 24'hCCA05C, 24'hDCB468, 24'hECC878,
-24'h841800, 24'h983418, 24'hAC5030, 24'hC06848, 24'hD0805C, 24'hE09470, 24'hECA880, 24'hFCBC94,
-24'h880000, 24'h9C2020, 24'hB03C3C, 24'hC05858, 24'hD07070, 24'hE08888, 24'hECA0A0, 24'hFCB4B4,
-24'h78005C, 24'h8C2074, 24'hA03C88, 24'hB0589C, 24'hC070B0, 24'hD084C0, 24'hDC9CD0, 24'hECB0E0,
-24'h480078, 24'h602090, 24'h783CA4, 24'h8C58B8, 24'hA070CC, 24'hB484DC, 24'hC49CEC, 24'hD4B0FC,
-24'h140084, 24'h302098, 24'h4C3CAC, 24'h6858C0, 24'h7C70D0, 24'h9488E0, 24'hA8A0EC, 24'hBCB4FC,
-24'h000088, 24'h1C209C, 24'h3840B0, 24'h505CC0, 24'h6874D0, 24'h7C8CE0, 24'h90A4EC, 24'hA4B8FC,
-24'h00187C, 24'h1C3890, 24'h3854A8, 24'h5070BC, 24'h6888CC, 24'h7C9CDC, 24'h90B4EC, 24'hA4C8FC,
-24'h002C5C, 24'h1C4C78, 24'h386890, 24'h5084AC, 24'h689CC0, 24'h7CB4D4, 24'h90CCE8, 24'hA4E0FC,
-24'h003C2C, 24'h1C5C48, 24'h387C64, 24'h509C80, 24'h68B494, 24'h7CD0AC, 24'h90E4C0, 24'hA4FCD4,
-24'h003C00, 24'h205C20, 24'h407C40, 24'h5C9C5C, 24'h74B474, 24'h8CD08C, 24'hA4E4A4, 24'hB8FCB8,
-24'h143800, 24'h345C1C, 24'h507C38, 24'h6C9850, 24'h84B468, 24'h9CCC7C, 24'hB4E490, 24'hC8FCA4,
-24'h2C3000, 24'h4C501C, 24'h687034, 24'h848C4C, 24'h9CA864, 24'hB4C078, 24'hCCD488, 24'hE0EC9C,
-24'h442800, 24'h644818, 24'h846830, 24'hA08444, 24'hB89C58, 24'hD0B46C, 24'hE8CC7C, 24'hFCE08C};*/
-
// SOF position for scaler
wire [10:0] V_SOF_LINE = hv_in_config3[23:13];
@@ -312,35 +262,9 @@ always @(posedge PCLK_i) begin
lc_ctr <= lc_ctr + 1;
end
- // Standard output
- if (MISC_LUMACODE_MODE == '0) begin
- {R_pp[2], G_pp[2], B_pp[2]} <= {R_pp[1], G_pp[1], B_pp[1]};
- // Lumacode C64, C128, VIC20, Spectrum, TMS99xxA
- end else if (MISC_LUMACODE_MODE <= 3) begin
- {R_pp[2], G_pp[2], B_pp[2]} <= lumacode_data_2s[MISC_LUMACODE_MODE-1'b1][{lc_code[1], lc_code[2]}];
+ // Lumacode related source-specific registers (used as part of palette RAM addressing / data processing)
// Lumacode NES
- end else if (MISC_LUMACODE_MODE == 4) begin
- if (lc_emp_nes[1] & lc_emp_nes[0])
- R_pp[2] <= lumacode_data_3s_R/2;
- else if (lc_emp_nes[1] | lc_emp_nes[0])
- R_pp[2] <= lumacode_data_3s_R - lumacode_data_3s_R/4;
- else
- R_pp[2] <= lumacode_data_3s_R;
-
- if (lc_emp_nes[2] & lc_emp_nes[0])
- G_pp[2] <= lumacode_data_3s_G/2;
- else if (lc_emp_nes[2] | lc_emp_nes[0])
- G_pp[2] <= lumacode_data_3s_G - lumacode_data_3s_G/4;
- else
- G_pp[2] <= lumacode_data_3s_G;
-
- if (lc_emp_nes[2] & lc_emp_nes[1])
- B_pp[2] <= lumacode_data_3s_B/2;
- else if (lc_emp_nes[2] | lc_emp_nes[1])
- B_pp[2] <= lumacode_data_3s_B - lumacode_data_3s_B/4;
- else
- B_pp[2] <= lumacode_data_3s_B;
-
+ if (MISC_LUMACODE_MODE == 4) begin
if ((h_ctr == H_SAMPLE_SEL) & ({lc_code[1], lc_code[2], lc_code[3]} < 8))
lc_emp_nes <= {lc_code[2][0], lc_code[3]};
// Lumacode Atari GTIA
@@ -351,12 +275,10 @@ always @(posedge PCLK_i) begin
lc_atari_hue <= {lc_code[1], lc_code[2]};
lc_atari_luma[3:2] <= lc_code[3];
//{R_pp[2], G_pp[2], B_pp[2]} <= lumacode_data_gtia[{lc_atari_hue, lc_atari_luma}];
- {R_pp[2], G_pp[2], B_pp[2]} <= '0;
end else begin
// Store luma for 2nd pixel, and display first pixel of current pair
lc_atari_luma <= {lc_code[2], lc_code[3]};
//{R_pp[2], G_pp[2], B_pp[2]} <= lumacode_data_gtia[{lc_atari_hue, lc_atari_luma[3:2], lc_code[1]}];
- {R_pp[2], G_pp[2], B_pp[2]} <= '0;
end
end
// Lumacode Atari VCS
@@ -368,11 +290,11 @@ always @(posedge PCLK_i) begin
end else begin
// Display pixel after receiving remaining 2 lumacode samples (luma)
//{R_pp[2], G_pp[2], B_pp[2]} <= lumacode_data_ctia[{lc_atari_hue, lc_code[1], lc_code[2][1]}];
- {R_pp[2], G_pp[2], B_pp[2]} <= '0;
end
end
end
+ {R_pp[2], G_pp[2], B_pp[2]} <= {R_pp[1], G_pp[1], B_pp[1]};
HSYNC_pp[2] <= HSYNC_pp[1];
VSYNC_pp[2] <= VSYNC_pp[1];
FID_pp[2] <= FID_pp[1];
@@ -422,13 +344,61 @@ always @(posedge PCLK_i) begin
B_diff_s15 <= (B_diff_s15_pre * MISC_REV_LPF_STR);
// Cycle 3
- if (MISC_REV_LPF_ENABLE) begin
+ if (MISC_REV_LPF_ENABLE & (MISC_LUMACODE_MODE == 0)) begin
R_pp[PP_RLPF_END] <= apply_reverse_lpf(R_pp[PP_RLPF_START+2], R_diff_s15);
G_pp[PP_RLPF_END] <= apply_reverse_lpf(G_pp[PP_RLPF_START+2], G_diff_s15);
B_pp[PP_RLPF_END] <= apply_reverse_lpf(B_pp[PP_RLPF_START+2], B_diff_s15);
end
+
+ /* --- Lumacode overwrite data from RAM --- */
+ if (MISC_LUMACODE_MODE != 0) begin
+ if (MISC_LUMACODE_MODE == 4) begin
+ // NES
+ R_pp[PP_RLPF_START+1] <= &lc_emp_nes[1:0] ? (lumacode_data[23:16]/2) : (|lc_emp_nes[1:0] ? (lumacode_data[23:16] - lumacode_data[23:16]/4) : lumacode_data[23:16]);
+ G_pp[PP_RLPF_START+1] <= (lc_emp_nes[2] & lc_emp_nes[0]) ? (lumacode_data[15:8]/2) : ((lc_emp_nes[2] | lc_emp_nes[0]) ? (lumacode_data[15:8] - lumacode_data[15:8]/4) : lumacode_data[15:8]);
+ B_pp[PP_RLPF_START+1] <= &lc_emp_nes[2:1] ? (lumacode_data[7:0]/2) : (|lc_emp_nes[2:1] ? (lumacode_data[7:0] - lumacode_data[7:0]/4) : lumacode_data[7:0]);
+ end else begin
+ // With other palette data used as-is
+ R_pp[PP_RLPF_START+1] <= lumacode_data[23:16];
+ G_pp[PP_RLPF_START+1] <= lumacode_data[15:8];
+ B_pp[PP_RLPF_START+1] <= lumacode_data[7:0];
+ end
+ end
end
+// Lumacode palette RAM inputs
+always @(*)
+case (MISC_LUMACODE_MODE)
+ 1: begin // C64, C128, VIC20
+ lumacode_addr = {5'h1, lc_code[1], lc_code[2]};
+ lumacode_rden = 1;
+ end
+ 2: begin // Spectrum
+ lumacode_addr = {5'h2, lc_code[1], lc_code[2]};
+ lumacode_rden = 1;
+ end
+ 3: begin // TMS99xxA
+ lumacode_addr = {5'h3, lc_code[1], lc_code[2]};
+ lumacode_rden = 1;
+ end
+ 4: begin // NES
+ lumacode_addr = {3'h1, lc_code[1], lc_code[2], lc_code[3]};
+ lumacode_rden = 1;
+ end
+ 6: begin // Atari CTIA/TIA
+ lumacode_addr = {2'h1, lc_atari_hue, lc_code[1], lc_code[2][1]};
+ lumacode_rden = (h_ctr == H_SAMPLE_SEL) & !lc_atari_ctr;
+ end
+ 5: begin // Atari GTIA
+ lumacode_addr = lc_atari_ctr ? {1'h1, lc_atari_hue, lc_atari_luma} : {1'h1, lc_atari_hue, lc_atari_luma[3:2], lc_code[1]};
+ lumacode_rden = (h_ctr == H_SAMPLE_SEL);
+ end
+ default: begin // Standard output
+ lumacode_addr = '0;
+ lumacode_rden = 0;
+ end
+endcase
+
// Output
assign R_o = R_pp[PP_PL_END];
assign G_o = G_pp[PP_PL_END];
diff --git a/software/ossc_sw.project b/software/ossc_sw.project
index b5bbd70..9e7874c 100644
--- a/software/ossc_sw.project
+++ b/software/ossc_sw.project
@@ -52,6 +52,7 @@
+
diff --git a/software/sys_controller/av_controller.c b/software/sys_controller/av_controller.c
index 8951161..8e53853 100644
--- a/software/sys_controller/av_controller.c
+++ b/software/sys_controller/av_controller.c
@@ -126,6 +126,10 @@ volatile sc_regs *sc = (volatile sc_regs*)SC_CONFIG_0_BASE;
volatile osd_regs *osd = (volatile osd_regs*)OSD_GENERATOR_0_BASE;
volatile pll_reconfig_regs *pll_reconfig = (volatile pll_reconfig_regs*)PLL_RECONFIG_0_BASE;
+#include "src/lumacode_palettes.c"
+const lc_palette_set* lc_palette_set_list[] = {&lc_palette_pal};
+int loaded_lc_palette = -1;
+
void ui_disp_menu(alt_u8 osd_mode)
{
alt_u8 menu_page;
@@ -458,6 +462,12 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
sl_config2_reg sl_config2 = {.data=0x00000000};
sl_config3_reg sl_config3 = {.data=0x00000000};
+ if (avconfig->lumacode_mode && (avconfig->lumacode_pal != loaded_lc_palette)) {
+ for (i=0; i<(sizeof(lc_palette_set)/4); i++)
+ sc->lumacode_pal_ram[i] = lc_palette_set_list[avconfig->lumacode_pal]->data[i];
+ loaded_lc_palette = avconfig->lumacode_pal;
+ }
+
// Set input params
hv_in_config.h_total = vm_in->timings.h_total;
hv_in_config.h_active = vm_in->timings.h_active;
diff --git a/software/sys_controller/inc/av_controller.h b/software/sys_controller/inc/av_controller.h
index c2a1be0..748bdd6 100644
--- a/software/sys_controller/inc/av_controller.h
+++ b/software/sys_controller/inc/av_controller.h
@@ -89,6 +89,18 @@ typedef struct {
avconfig_t cc;
} avmode_t;
+typedef union {
+ struct {
+ uint32_t c64_pal[16];
+ uint32_t zx_pal[16];
+ uint32_t msx_pal[16];
+ uint32_t nes_pal[64];
+ uint32_t tia_pal[128];
+ uint32_t gtia_pal[256];
+ } __attribute__((packed, __may_alias__));
+ uint32_t data[496];
+} lc_palette_set;
+
void ui_disp_menu(alt_u8 osd_mode);
void ui_disp_status(alt_u8 refresh_osd_timer);
diff --git a/software/sys_controller/inc/avconfig.h b/software/sys_controller/inc/avconfig.h
index 52f7d04..f7e0ec1 100644
--- a/software/sys_controller/inc/avconfig.h
+++ b/software/sys_controller/inc/avconfig.h
@@ -123,6 +123,7 @@ typedef struct {
alt_u8 reverse_lpf;
alt_u8 shmask_mode;
alt_u8 lumacode_mode;
+ alt_u8 lumacode_pal;
/* AFE settings */
alt_u8 sync_vth;
diff --git a/software/sys_controller/src/lumacode_palettes.c b/software/sys_controller/src/lumacode_palettes.c
new file mode 100644
index 0000000..c00eab2
--- /dev/null
+++ b/software/sys_controller/src/lumacode_palettes.c
@@ -0,0 +1,33 @@
+// Lumacode palette sets
+
+const lc_palette_set lc_palette_pal = {.c64_pal={0x000000,0x2a1b9d,0x7d202c,0x84258c,0x4c2e00,0x3c3c3c,0x646464,0x4fb3a5,0x7f410d,0x6351db,0x939393,0xbfd04a,0x339840,0xb44f5c,0x7ce587,0xffffff},
+ .zx_pal= {0x000000,0x000000,0x0200FD,0xCF01CE,0x0100CE,0xCF0100,0xFF02FD,0x01CFCF,0xFF0201,0x00CF15,0x02FFFF,0xFFFF1D,0x00FF1C,0xCFCF15,0xCFCFCF,0xFFFFFF},
+ .msx_pal={0x000000,0x5455ed,0xfc5554,0xff7978,0x000000,0xd4524d,0x7d76fc,0x42ebf5,0x21b03b,0x21c842,0xff7978,0xcccccc,0xc95bba,0xd4c154,0xe6ce80,0xffffff},
+ .nes_pal={0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x000000,0x626262,0x001fb2,0x2404c8,0x5200b2,0x730076,0x800024,0x730b00,0x522800,
+ 0x244400,0x005700,0x005c00,0x005324,0x003c76,0x000000,0xababab,0x0d57ff,0x4b30ff,0x8a13ff,0xbc08d6,0xd21269,0xc72e00,0x9d5400,0x607b00,0x209800,
+ 0x00a300,0x009942,0x007db4,0x000000,0xffffff,0x53aeff,0x9085ff,0xd365ff,0xff57ff,0xff5dcf,0xff7757,0xfa9e00,0xbdc700,0x7ae700,0x43f611,0x26ef7e,
+ 0x2cd5f6,0x4e4e4e,0xffffff,0xb6e1ff,0xced1ff,0xe9c3ff,0xffbcff,0xffbdf4,0xffc6c3,0xffd59a,0xe9e681,0xcef481,0xb6fb9a,0xa9fac3,0xa9f0f4,0xb8b8b8},
+ .tia_pal={0x000000,0x404040,0x6C6C6C,0x909090,0xB0B0B0,0xC8C8C8,0xDCDCDC,0xECECEC,0x444400,0x646410,0x848424,0xA0A034,0xB8B840,0xD0D050,0xE8E85C,0xFCFC68,
+ 0x702800,0x844414,0x985C28,0xAC783C,0xBC8C4C,0xCCA05C,0xDCB468,0xECC878,0x841800,0x983418,0xAC5030,0xC06848,0xD0805C,0xE09470,0xECA880,0xFCBC94,
+ 0x880000,0x9C2020,0xB03C3C,0xC05858,0xD07070,0xE08888,0xECA0A0,0xFCB4B4,0x78005C,0x8C2074,0xA03C88,0xB0589C,0xC070B0,0xD084C0,0xDC9CD0,0xECB0E0,
+ 0x480078,0x602090,0x783CA4,0x8C58B8,0xA070CC,0xB484DC,0xC49CEC,0xD4B0FC,0x140084,0x302098,0x4C3CAC,0x6858C0,0x7C70D0,0x9488E0,0xA8A0EC,0xBCB4FC,
+ 0x000088,0x1C209C,0x3840B0,0x505CC0,0x6874D0,0x7C8CE0,0x90A4EC,0xA4B8FC,0x00187C,0x1C3890,0x3854A8,0x5070BC,0x6888CC,0x7C9CDC,0x90B4EC,0xA4C8FC,
+ 0x002C5C,0x1C4C78,0x386890,0x5084AC,0x689CC0,0x7CB4D4,0x90CCE8,0xA4E0FC,0x003C2C,0x1C5C48,0x387C64,0x509C80,0x68B494,0x7CD0AC,0x90E4C0,0xA4FCD4,
+ 0x003C00,0x205C20,0x407C40,0x5C9C5C,0x74B474,0x8CD08C,0xA4E4A4,0xB8FCB8,0x143800,0x345C1C,0x507C38,0x6C9850,0x84B468,0x9CCC7C,0xB4E490,0xC8FCA4,
+ 0x2C3000,0x4C501C,0x687034,0x848C4C,0x9CA864,0xB4C078,0xCCD488,0xE0EC9C,0x442800,0x644818,0x846830,0xA08444,0xB89C58,0xD0B46C,0xE8CC7C,0xFCE08C},
+ .gtia_pal={0x000000,0x111111,0x222222,0x333333,0x444444,0x555555,0x666666,0x777777,0x888888,0x999999,0xaaaaaa,0xbbbbbb,0xcccccc,0xdddddd,0xeeeeee,0xffffff,
+ 0x091900,0x192806,0x29370d,0x3a4714,0x4a561b,0x5a6522,0x6b7529,0x7b8430,0x8c9336,0x9ca33d,0xacb244,0xbdc14b,0xcdd152,0xdee059,0xeeef60,0xffff67,
+ 0x300000,0x3d1108,0x4b2211,0x593319,0x674422,0x75552a,0x826633,0x90773b,0x9e8844,0xac994c,0xbaaa55,0xc7bb5d,0xd5cc66,0xe3dd6e,0xf1ee77,0xffff80,
+ 0x4b0000,0x570f0c,0x631e18,0x6f2e24,0x7a3d30,0x874d3c,0x935c49,0x9f6b55,0xab7b61,0xb68a6d,0xc39a79,0xcfa986,0xdbb892,0xe6c89e,0xf3d7aa,0xffe7b7,
+ 0x550000,0x600e10,0x6b1c21,0x772a32,0x823843,0x8d4654,0x995465,0xa46276,0xaf7187,0xbb7f98,0xc68da9,0xd19bba,0xdda9cb,0xe8b7dc,0xf3c5ed,0xffd4fe,
+ 0x4c0047,0x570d53,0x631b5f,0x6f286b,0x7b3678,0x874384,0x935190,0x9f5e9c,0xab6ca9,0xb779b5,0xc387c1,0xcf94cd,0xdba2da,0xe7afe6,0xf3bdf2,0xffcbff,
+ 0x30007e,0x3b0b85,0x49198d,0x572796,0x65349f,0x7242a7,0x8050b0,0x8e5db8,0x9c6bc1,0xa979c9,0xb786d2,0xc594db,0xd3a2e3,0xe0afec,0xeebdf4,0xfccbfd,
+ 0x0a0097,0x1a0e9d,0x2a1da4,0x3b2cab,0x4b3ab2,0x5b49b9,0x6c58c0,0x7c67c7,0x8c75ce,0x9c84d5,0xad93dc,0xbda2e3,0xceb0ea,0xdebff1,0xeecef8,0xffddff,
+ 0x00008e,0x0c0d94,0x1b1e9c,0x2a2ea3,0x393eab,0x484eb2,0x575eba,0x666ec1,0x747ec9,0x838fd0,0x929fd8,0xa1afdf,0xb0bfe6,0xbfcfee,0xcedff5,0xddeffd,
+ 0x000e64,0x0c1e6e,0x192e78,0x263e83,0x324e8d,0x3f5e97,0x4c6ea2,0x587eac,0x658eb6,0x729ec1,0x7eaecb,0x8bbed5,0x98cee0,0xa4deea,0xb1eef4,0xbeffff,
+ 0x002422,0x09302e,0x153f3d,0x204d4c,0x2c5c5a,0x376a69,0x427978,0x4e8786,0x599695,0x65a4a4,0x70b3b2,0x7cc1c1,0x87d0d0,0x92dfde,0x9eeded,0xa9fcfc,
+ 0x003200,0x0b3f0e,0x164d1c,0x225b2b,0x2d6839,0x397648,0x448456,0x509164,0x5b9f73,0x67ad81,0x72ba90,0x7ec89e,0x89d6ac,0x95e3bb,0xa0f1c9,0xacffd8,
+ 0x003400,0x0c410a,0x194f14,0x265c1e,0x336a28,0x407732,0x4c853c,0x599246,0x66a050,0x73ad5a,0x80bb64,0x8cc86e,0x99d678,0xa6e382,0xb3f18c,0xc0ff97,
+ 0x002a00,0x0f3807,0x1e460e,0x2d5416,0x3c621d,0x4b7124,0x5a7f2c,0x698d33,0x799b3b,0x88a942,0x97b849,0xa6c651,0xb5d458,0xc4e260,0xd3f067,0xe3ff6f,
+ 0x0d1700,0x1d2606,0x2d350d,0x3d4514,0x4d541b,0x5d6422,0x6d7329,0x7d8330,0x8e9237,0x9ea23e,0xaeb145,0xbec14c,0xced053,0xdee05a,0xeeef61,0xffff68,
+ 0x330000,0x401008,0x4e2111,0x5b321a,0x694323,0x77542c,0x846535,0x92763e,0x9f8646,0xad974f,0xbba858,0xc8b961,0xd6ca6a,0xe3db73,0xf1ec7c,0xfffd85}};
diff --git a/software/sys_controller/src/menu.c b/software/sys_controller/src/menu.c
index d31ed3b..899e47f 100644
--- a/software/sys_controller/src/menu.c
+++ b/software/sys_controller/src/menu.c
@@ -82,6 +82,7 @@ static const char* const mask_color_desc[] = { "Black", "Blue", "Green", "Cyan",
static const char* const av3_alt_rgb_desc[] = { "Off", "AV1", "AV2" };
static const char* const shmask_mode_desc[] = { "Off", "A-Grille", "TV", "PVM" };
static const char* const lumacode_mode_desc[] = { "Off", "C64", "Spectrum", "Coleco/MSX", "NES", "Atari GTIA", "Atari VCS" };
+static const char* const lumacode_pal_desc[] = { "PAL" };
static const char* const adc_pll_bw_desc[] = { "High", "Medium", "Low", "Ultra low" };
static const char* const fpga_pll_bw_desc[] = { "High", "Low" };
@@ -159,6 +160,7 @@ MENU(menu_vinputproc, P99_PROTECT({ \
{ "ALC V filter", OPT_AVCONFIG_NUMVALUE, { .num = { &tc.alc_v_filter, OPT_NOWRAP, 0, ALC_V_FILTER_MAX, alc_v_filter_disp } } },
{ "ALC H filter", OPT_AVCONFIG_NUMVALUE, { .num = { &tc.alc_h_filter, OPT_NOWRAP, 0, ALC_H_FILTER_MAX, alc_h_filter_disp } } },
{ "Lumacode", OPT_AVCONFIG_SELECTION, { .sel = { &tc.lumacode_mode, OPT_WRAP, SETTING_ITEM(lumacode_mode_desc) } } },
+ { "Lc palette set", OPT_AVCONFIG_SELECTION, { .sel = { &tc.lumacode_pal, OPT_WRAP, SETTING_ITEM(lumacode_pal_desc) } } },
}))
MENU(menu_sampling, P99_PROTECT({ \
diff --git a/sys.qsys b/sys.qsys
index c40bc28..48edd83 100644
--- a/sys.qsys
+++ b/sys.qsys
@@ -430,6 +430,11 @@
internal="clk_27.clk_in_reset"
type="reset"
dir="end" />
+
-
+
+
+
+
+
@@ -884,30 +893,30 @@
-
-
-
+ start="ibex_0.fast_irq"
+ end="i2c_opencores_1.interrupt_sender">
+
+
+
-
+
-
+
java.lang.Integer
- 1746263054
+ 1750097061
false
true
false
@@ -2249,15 +2249,55 @@ the requested settings for a module instance. -->
true
true
-
+
java.math.BigInteger
- 15
+ 0
false
true
false
true
INTERRUPTS_USED
- interrupt_receiver
+ software_irq
+
+
+ java.math.BigInteger
+ 1
+ false
+ true
+ false
+ true
+ INTERRUPTS_USED
+ timer_irq
+
+
+ java.math.BigInteger
+ 0
+ false
+ true
+ false
+ true
+ INTERRUPTS_USED
+ external_irq
+
+
+ java.math.BigInteger
+ 7
+ false
+ true
+ false
+ true
+ INTERRUPTS_USED
+ fast_irq
+
+
+ java.math.BigInteger
+ 0
+ false
+ true
+ false
+ true
+ INTERRUPTS_USED
+ not_maskable_irq
java.lang.String
@@ -2512,7 +2552,221 @@ parameters are a RESULT of the module parameters. -->
core_sleep_o
-
+
+
+
+ com.altera.entityinterfaces.IConnectionPoint
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ clk_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+ reset_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+
+ false
+ true
+ false
+ true
+
+
+ com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme
+ INDIVIDUAL_REQUESTS
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ interrupt
+ true
+
+ irq_software_i
+ Input
+ 1
+ irq
+
+
+
+
+
+ com.altera.entityinterfaces.IConnectionPoint
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ clk_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+ reset_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+
+ false
+ true
+ false
+ true
+
+
+ com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme
+ INDIVIDUAL_REQUESTS
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ interrupt
+ true
+
+ irq_timer_i
+ Input
+ 1
+ irq
+
+
+ false
+ timer_0
+ irq
+ timer_0.irq
+ 0
+
+
+
+
+
+ com.altera.entityinterfaces.IConnectionPoint
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ clk_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+ reset_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+
+ false
+ true
+ false
+ true
+
+
+ com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme
+ INDIVIDUAL_REQUESTS
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ interrupt
+ true
+
+ irq_external_i
+ Input
+ 1
+ irq
+
+
+
@@ -2580,13 +2834,6 @@ parameters are a RESULT of the module parameters. -->
15
irq
-
- false
- i2c_opencores_1
- interrupt_sender
- i2c_opencores_1.interrupt_sender
- 0
-
false
i2c_opencores_0
@@ -2596,19 +2843,88 @@ parameters are a RESULT of the module parameters. -->
false
- jtag_uart_0
- irq
- jtag_uart_0.irq
+ i2c_opencores_1
+ interrupt_sender
+ i2c_opencores_1.interrupt_sender
2
false
- timer_0
+ jtag_uart_0
irq
- timer_0.irq
- 3
+ jtag_uart_0.irq
+ 0
+
+
+
+ com.altera.entityinterfaces.IConnectionPoint
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ clk_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+ reset_sink
+ false
+ true
+ false
+ true
+
+
+ java.lang.String
+
+ false
+ true
+ false
+ true
+
+
+ com.altera.sopcmodel.interrupt.InterruptConnectionPoint$EIrqScheme
+ INDIVIDUAL_REQUESTS
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ interrupt
+ true
+
+ irq_nm_i
+ Input
+ 1
+ irq
+
+
avalon_s
sc_config_0.avalon_s
139264
- 64
+ 2048
false
@@ -11558,7 +11874,7 @@ parameters are a RESULT of the module parameters. -->
java.math.BigInteger
- 64
+ 2048
true
true
false
@@ -11857,7 +12173,7 @@ parameters are a RESULT of the module parameters. -->
avalon_s_address
Input
- 4
+ 9
address
@@ -12032,6 +12348,69 @@ parameters are a RESULT of the module parameters. -->
sl_config3_o
+
+
+
+ java.lang.String
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ conduit
+ false
+
+ lumacode_clk_i
+ Input
+ 1
+ lumacode_clk_i
+
+
+ lumacode_addr_i
+ Input
+ 9
+ lumacode_addr_i
+
+
+ lumacode_rden_i
+ Input
+ 1
+ lumacode_rden_i
+
+
+ lumacode_data_o
+ Output
+ 32
+ lumacode_data_o
+
+
clock_sink
-
- int
- 0
- false
- true
- true
- true
-
-
- java.lang.String
- UNKNOWN
- false
- true
- true
- true
-
-
- boolean
- false
- false
- true
- true
- true
-
- ibex_0
- interrupt_receiver
- i2c_opencores_1
- interrupt_sender
-
-
int
@@ -14439,16 +14783,16 @@ parameters are a RESULT of the module parameters. -->
true
ibex_0
- interrupt_receiver
+ fast_irq
i2c_opencores_0
interrupt_sender
+ start="ibex_0.fast_irq"
+ end="i2c_opencores_1.interrupt_sender">
int
2
@@ -14474,19 +14818,19 @@ parameters are a RESULT of the module parameters. -->
true
ibex_0
- interrupt_receiver
- jtag_uart_0
- irq
+ fast_irq
+ i2c_opencores_1
+ interrupt_sender
+ start="ibex_0.fast_irq"
+ end="jtag_uart_0.irq">
int
- 3
+ 0
false
true
true
@@ -14509,7 +14853,42 @@ parameters are a RESULT of the module parameters. -->
true
ibex_0
- interrupt_receiver
+ fast_irq
+ jtag_uart_0
+ irq
+
+
+
+ int
+ 0
+ false
+ true
+ true
+ true
+
+
+ java.lang.String
+ UNKNOWN
+ false
+ true
+ true
+ true
+
+
+ boolean
+ false
+ false
+ true
+ true
+ true
+
+ ibex_0
+ timer_irq
timer_0
irq
@@ -15026,7 +15405,7 @@ parameters are a RESULT of the module parameters. -->
17.1
- 9
+ 10
conduit_end
com.altera.entityinterfaces.IElementClass
com.altera.entityinterfaces.IMutableConnectionPoint
@@ -15050,7 +15429,7 @@ parameters are a RESULT of the module parameters. -->
1.0
- 1
+ 5
interrupt_receiver
com.altera.entityinterfaces.IElementClass
com.altera.entityinterfaces.IMutableConnectionPoint