From d6dba1618bc4bcda6246cf80eb0e9961c9324fe7 Mon Sep 17 00:00:00 2001 From: marqs Date: Mon, 16 Jun 2025 22:53:34 +0300 Subject: [PATCH] make Lumacode palettes CPU controlled --- ip/ibex_qsys | 2 +- ip/sc_config/inc/sc_config_regs.h | 2 + ip/sc_config/sc_config_hw.tcl | 20 +- ip/sc_config/sc_config_top.sv | 88 ++- ossc.sdc | 3 +- rtl/ossc.v | 13 +- rtl/tvp7002_frontend.v | 142 ++--- software/ossc_sw.project | 1 + software/sys_controller/av_controller.c | 10 + software/sys_controller/inc/av_controller.h | 12 + software/sys_controller/inc/avconfig.h | 1 + .../sys_controller/src/lumacode_palettes.c | 33 ++ software/sys_controller/src/menu.c | 2 + sys.qsys | 35 +- sys.sopcinfo | 525 +++++++++++++++--- 15 files changed, 695 insertions(+), 194 deletions(-) create mode 100644 software/sys_controller/src/lumacode_palettes.c 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