Initial latency tester implementation

This commit is contained in:
marqs 2017-10-22 22:45:29 +03:00
parent a8d1fad24a
commit 1bf279b2a7
15 changed files with 2230 additions and 1196 deletions

View File

@ -229,98 +229,18 @@ set_global_assignment -name SDC_FILE ossc.sdc
set_global_assignment -name QSYS_FILE sys.qsys
set_global_assignment -name VERILOG_FILE rtl/ossc.v
set_global_assignment -name VERILOG_FILE rtl/scanconverter.v
set_global_assignment -name VERILOG_FILE rtl/lat_tester.v
set_global_assignment -name QIP_FILE rtl/linebuf.qip
set_global_assignment -name QIP_FILE rtl/pll_2x.qip
set_global_assignment -name QIP_FILE rtl/pll_3x.qip
set_global_assignment -name CDF_FILE output_files/Chain1.cdf
set_global_assignment -name SIGNALTAP_FILE output_files/ossc_la.stp
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to B_in[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to btn
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to btn[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to btn[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to clk27
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FID_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to G_in[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_BD[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_BD[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_BD[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_BD[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_DE
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_GD[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_GD[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_HS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_INT_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_MODE
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_PCLK
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_RD[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_RD[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_RD[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to HDMI_TX_RD[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HDMI_TX_VS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HSYNC_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to ir_rx
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_BL
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_CS_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_RS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to PCLK_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to reset_n
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to R_in[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to scl
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to sda
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_CLK
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_CMD
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to VSYNC_in
set_global_assignment -name FITTER_EFFORT "AUTO FIT"
set_global_assignment -name SEED 6
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

73
rtl/lat_tester.v Normal file
View File

@ -0,0 +1,73 @@
//
// Copyright (C) 2017 Markus Hiienkari <mhiienka@niksula.hut.fi>
//
// This file is part of Open Source Scan Converter project.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
module lat_tester (
input clk27,
input active,
input armed,
input sensor,
input trigger,
input VSYNC_in,
input [1:0] mode_in,
output reg [2:0] mode_synced,
output reg [15:0] result
);
reg VSYNC_in_L, VSYNC_in_LL, VSYNC_in_LLL;
reg running;
reg [8:0] clk27_ctr;
always @(posedge clk27) begin
VSYNC_in_L <= VSYNC_in;
VSYNC_in_LL <= VSYNC_in_L;
VSYNC_in_LLL <= VSYNC_in_LL;
end
always @(posedge clk27) begin
if (VSYNC_in_LLL && !VSYNC_in_LL)
mode_synced <= mode_in;
end
always @(posedge clk27) begin
if (!active) begin
running <= 0;
end else begin
if ((result==0) && (clk27_ctr==0) && armed && trigger) begin
running <= 1;
end else if (running && ((sensor==0) || (result==16'hffff))) begin
running <= 0;
end
end
end
always @(posedge clk27) begin
if (!active || !armed) begin
result <= 0;
clk27_ctr <= 0;
end else if (running) begin
if (clk27_ctr == 270-1) begin
clk27_ctr <= 0;
result <= result + 1'b1;
end else begin
clk27_ctr <= clk27_ctr + 1'b1;
end
end
end
endmodule

View File

@ -87,6 +87,12 @@ reg HSYNC_in_L, VSYNC_in_L, FID_in_L;
reg [1:0] btn_L, btn_LL;
reg ir_rx_L, ir_rx_LL, HDMI_TX_INT_N_L, HDMI_TX_INT_N_LL, HDMI_TX_MODE_L, HDMI_TX_MODE_LL;
wire lt_active = extra_info[31];
wire lt_armed = extra_info[30];
wire [1:0] lt_mode = extra_info[29:28];
wire [1:0] lt_mode_synced;
wire [15:0] lt_result;
// Latch inputs from TVP7002 (synchronized to PCLK_in)
always @(posedge PCLK_in or negedge reset_n)
begin
@ -193,7 +199,8 @@ sys sys_inst(
.pio_3_h_info_out_export (h_info),
.pio_4_h_info2_out_export (h_info2),
.pio_5_v_info_out_export (v_info),
.pio_6_extra_info_out_export (extra_info)
.pio_6_extra_info_out_export (extra_info),
.pio_7_lt_results_in_export ({16'h0000, lt_result})
);
scanconverter scanconverter_inst (
@ -234,10 +241,24 @@ ir_rcv ir0 (
.ir_code_cnt (ir_code_cnt)
);
lat_tester lt0 (
.clk27 (clk27),
.active (lt_active),
.armed (lt_armed),
.sensor (btn_LL[1]),
.trigger (HDMI_TX_DE & HDMI_TX_RD[0]),
.VSYNC_in (HDMI_TX_VS),
.mode_in (extra_info[29:28]),
.mode_synced (lt_mode_synced),
.result (lt_result)
);
`ifdef VIDEOGEN
videogen vg0 (
.clk27 (clk27),
.reset_n (cpu_reset_n & videogen_sel),
.lt_active (lt_active),
.lt_mode (lt_mode_synced),
.R_out (R_out_videogen),
.G_out (G_out_videogen),
.B_out (B_out_videogen),

View File

@ -17,9 +17,18 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
`define LT_POS_NONE 2'b00
`define LT_POS_TOPLEFT 2'b01
`define LT_POS_CENTER 2'b10
`define LT_POS_BOTTOMRIGHT 2'b11
`define LT_WIDTH 100
`define LT_HEIGHT 100
module videogen (
input clk27,
input reset_n,
input lt_active,
input [1:0] lt_mode,
output [7:0] R_out,
output [7:0] G_out,
output [7:0] B_out,
@ -114,12 +123,29 @@ begin
V_gen <= 8'h00;
ENABLE_out <= 1'b0;
end else begin
if ((h_cnt < X_START+H_OVERSCAN) || (h_cnt >= X_START+H_OVERSCAN+H_AREA) || (v_cnt < Y_START+V_OVERSCAN) || (v_cnt >= Y_START+V_OVERSCAN+V_AREA))
V_gen <= (h_cnt[0] ^ v_cnt[0]) ? 8'hff : 8'h00;
else if ((h_cnt < X_START+H_OVERSCAN+H_BORDER) || (h_cnt >= X_START+H_OVERSCAN+H_AREA-H_BORDER) || (v_cnt < Y_START+V_OVERSCAN+V_BORDER) || (v_cnt >= Y_START+V_OVERSCAN+V_AREA-V_BORDER))
V_gen <= 8'h50;
else
V_gen <= (h_cnt - (X_START+H_OVERSCAN+H_BORDER)) >> 1;
if (lt_active) begin
case (lt_mode)
default: begin
V_gen <= 8'h00;
end
`LT_POS_TOPLEFT: begin
V_gen <= ((h_cnt < (X_START+`LT_WIDTH)) && (v_cnt < (Y_START+`LT_HEIGHT))) ? 8'hff : 8'h00;
end
`LT_POS_CENTER: begin
V_gen <= ((h_cnt >= (X_START+(H_ACTIVE/2)-(`LT_WIDTH/2))) && (h_cnt < (X_START+(H_ACTIVE/2)+(`LT_WIDTH/2))) && (v_cnt >= (Y_START+(V_ACTIVE/2)-(`LT_HEIGHT/2))) && (v_cnt < (Y_START+(V_ACTIVE/2)+(`LT_HEIGHT/2)))) ? 8'hff : 8'h00;
end
`LT_POS_BOTTOMRIGHT: begin
V_gen <= ((h_cnt >= (X_START+H_ACTIVE-`LT_WIDTH)) && (v_cnt >= (Y_START+V_ACTIVE-`LT_HEIGHT))) ? 8'hff : 8'h00;
end
endcase
end else begin
if ((h_cnt < X_START+H_OVERSCAN) || (h_cnt >= X_START+H_OVERSCAN+H_AREA) || (v_cnt < Y_START+V_OVERSCAN) || (v_cnt >= Y_START+V_OVERSCAN+V_AREA))
V_gen <= (h_cnt[0] ^ v_cnt[0]) ? 8'hff : 8'h00;
else if ((h_cnt < X_START+H_OVERSCAN+H_BORDER) || (h_cnt >= X_START+H_OVERSCAN+H_AREA-H_BORDER) || (v_cnt < Y_START+V_OVERSCAN+V_BORDER) || (v_cnt >= Y_START+V_OVERSCAN+V_AREA-V_BORDER))
V_gen <= 8'h50;
else
V_gen <= (h_cnt - (X_START+H_OVERSCAN+H_BORDER)) >> 1;
end
ENABLE_out <= (h_cnt >= X_START && h_cnt < X_START + H_ACTIVE && v_cnt >= Y_START && v_cnt < Y_START + V_ACTIVE);
end

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ alt_u8 target_type;
alt_u8 stable_frames;
alt_u8 update_cur_vm;
alt_u8 vm_sel, vm_edit, profile_sel;
alt_u8 vm_sel, vm_edit, profile_sel, lt_sel;
alt_u16 tc_h_samplerate, tc_h_synclen, tc_h_bporch, tc_h_active, tc_v_synclen, tc_v_bporch, tc_v_active;
char row1[LCD_ROW_LEN+1], row2[LCD_ROW_LEN+1], menu_row1[LCD_ROW_LEN+1], menu_row2[LCD_ROW_LEN+1];
@ -537,79 +537,33 @@ void program_mode()
}
}
void load_profile_disp(alt_u8 code) {
int load_profile() {
int retval;
switch ((menucode_id)code) {
case VAL_MINUS:
profile_sel = (profile_sel > 0) ? profile_sel-1 : profile_sel;
break;
case VAL_PLUS:
profile_sel = (profile_sel < MAX_PROFILE) ? profile_sel+1 : profile_sel;
break;
case OPT_SELECT:
retval = read_userdata(profile_sel);
sniprintf(menu_row2, LCD_ROW_LEN+1, "%s", (retval==0) ? "Loaded" : "Load failed");
lcd_write_menu();
if (retval == 0)
write_userdata(INIT_CONFIG_SLOT);
usleep(500000);
break;
case NO_ACTION:
default:
sniprintf(menu_row2, LCD_ROW_LEN+1, "Slot %u", profile_sel);
break;
}
retval = read_userdata(profile_sel);
if (retval == 0)
write_userdata(INIT_CONFIG_SLOT);
return retval;
}
void save_profile_disp(alt_u8 code) {
int save_profile() {
int retval;
switch ((menucode_id)code) {
case VAL_MINUS:
profile_sel = (profile_sel > 0) ? profile_sel-1 : profile_sel;
break;
case VAL_PLUS:
profile_sel = (profile_sel < MAX_PROFILE) ? profile_sel+1 : profile_sel;
break;
case OPT_SELECT:
retval = write_userdata(profile_sel);
sniprintf(menu_row2, LCD_ROW_LEN+1, "%s", (retval==0) ? "Saved" : "Save failed");
lcd_write_menu();
if (retval == 0)
write_userdata(INIT_CONFIG_SLOT);
usleep(500000);
break;
case NO_ACTION:
default:
sniprintf(menu_row2, LCD_ROW_LEN+1, "Slot %u", profile_sel);
break;
}
retval = write_userdata(profile_sel);
if (retval == 0)
write_userdata(INIT_CONFIG_SLOT);
return retval;
}
void vm_display(alt_u8 code) {
switch ((menucode_id)code) {
case VAL_MINUS:
vm_sel = (vm_sel > 0) ? vm_sel-1 : vm_sel;
break;
case VAL_PLUS:
vm_sel = (vm_sel < VIDEO_MODES_CNT-1) ? vm_sel+1 : vm_sel;
break;
case OPT_SELECT:
vm_edit = vm_sel;
tc_h_samplerate = video_modes[vm_edit].h_total;
tc_h_synclen = (alt_u16)video_modes[vm_edit].h_synclen;
tc_h_bporch = (alt_u16)video_modes[vm_edit].h_backporch;
tc_h_active = video_modes[vm_edit].h_active;
tc_v_synclen = (alt_u16)video_modes[vm_edit].v_synclen;
tc_v_bporch = (alt_u16)video_modes[vm_edit].v_backporch;
tc_v_active = video_modes[vm_edit].v_active;
break;
case NO_ACTION:
default:
strncpy(menu_row2, video_modes[vm_sel].name, LCD_ROW_LEN+1);
break;
}
void vm_select() {
vm_edit = vm_sel;
tc_h_samplerate = video_modes[vm_edit].h_total;
tc_h_synclen = (alt_u16)video_modes[vm_edit].h_synclen;
tc_h_bporch = (alt_u16)video_modes[vm_edit].h_backporch;
tc_h_active = video_modes[vm_edit].h_active;
tc_v_synclen = (alt_u16)video_modes[vm_edit].v_synclen;
tc_v_bporch = (alt_u16)video_modes[vm_edit].v_backporch;
tc_v_active = video_modes[vm_edit].v_active;
}
void vm_tweak(alt_u16 v) {
@ -716,6 +670,49 @@ int init_hw()
return 0;
}
int latency_test() {
alt_u32 base_val, btn_vec, btn_vec_prev=1;
alt_u8 position = lt_sel+1;
alt_u16 latency_x100ms;
base_val = IORD_ALTERA_AVALON_PIO_DATA(PIO_6_BASE) & 0xff;
base_val |= (1<<31);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, base_val|(position<<28));
sniprintf(menu_row2, LCD_ROW_LEN+1, "OK to init");
lcd_write_menu();
while (1) {
btn_vec = IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE) & RC_MASK;
if ((btn_vec_prev == 0) && (btn_vec != 0)) {
if (btn_vec == rc_keymap[RC_OK]) {
IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, base_val);
menu_row2[0] = 0;
lcd_write_menu();
usleep(200000);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, base_val|(position<<28)|(1<<30));
while (IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE) & PB1_BIT) {}
latency_x100ms = IORD_ALTERA_AVALON_PIO_DATA(PIO_7_BASE) & 0xffff;
sniprintf(menu_row2, LCD_ROW_LEN+1, "lat: %u.%.2ums", latency_x100ms/100, latency_x100ms%100);
lcd_write_menu();
} else if (btn_vec == rc_keymap[RC_BACK]) {
break;
}
IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, base_val|(position<<28));
}
btn_vec_prev = btn_vec;
usleep(WAITLOOP_SLEEP_US);
}
base_val &= 0xff;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, base_val);
return 0;
}
// Enable chip outputs
void enable_outputs()
{

View File

@ -108,9 +108,11 @@ typedef struct {
inline void lcd_write_menu();
inline void lcd_write_status();
void vm_display(alt_u8 code);
void vm_select();
void vm_tweak(alt_u16 v);
void load_profile_disp(alt_u8 code);
void save_profile_disp(alt_u8 code);
int load_profile();
int save_profile();
int latency_test();
#endif

View File

@ -211,7 +211,7 @@ void parse_control()
if (i <= RC_BTN0) {
profile_sel = (i+1)%10;
load_profile_disp(OPT_SELECT);
load_profile();
break;
} else if (i == RC_BACK) {
break;

View File

@ -37,9 +37,11 @@
extern char row1[LCD_ROW_LEN+1], row2[LCD_ROW_LEN+1], menu_row1[LCD_ROW_LEN+1], menu_row2[LCD_ROW_LEN+1];
extern avconfig_t tc;
extern mode_data_t video_modes[];
extern alt_u16 tc_h_samplerate, tc_h_synclen, tc_h_bporch, tc_h_active, tc_v_synclen, tc_v_bporch, tc_v_active;
extern alt_u32 remote_code;
extern alt_u16 rc_keymap[REMOTE_MAX_KEYS];
extern alt_u8 vm_sel, profile_sel, lt_sel;
alt_u8 menu_active;
@ -61,6 +63,7 @@ static const char *sl_mode_desc[] = { LNG("Off","オフ"), LNG("Auto","オート
static const char *sl_type_desc[] = { LNG("Horizontal","ヨコ"), LNG("Vertical","タテ"), LNG("Alternating","コウゴ") };
static const char *sl_id_desc[] = { LNG("Top","ウエ"), LNG("Bottom","シタ") };
static const char *audio_dw_sampl_desc[] = { LNG("Off (fs = 96kHz)","オフ (fs = 96kHz)"), "2x (fs = 48kHz)" };
static const char *lt_desc[] = { "Top-left", "Center", "Bottom-right" };
static void sampler_phase_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, LNG("%d deg","%d ド"), (v*1125)/100); }
static void sync_vth_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, "%d mV", (v*1127)/100); }
@ -70,6 +73,13 @@ static void sl_str_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, "%u%%",
static void lines_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, LNG("%u lines","%u ライン"), v); }
static void pixels_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, LNG("%u pixels","%u ドット"), v); }
static void value_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, " %u", v); }
static void lt_disp(alt_u8 v) { strncpy(menu_row2, lt_desc[v], LCD_ROW_LEN+1); }
static void vm_display_name (alt_u8 v) { strncpy(menu_row2, video_modes[v].name, LCD_ROW_LEN+1); }
static const arg_info_t vm_arg_info = {&vm_sel, VIDEO_MODES_CNT-1, vm_display_name};
static const arg_info_t profile_arg_info = {&profile_sel, MAX_PROFILE, value_disp};
static const arg_info_t lt_arg_info = {&lt_sel, (sizeof(lt_desc)/sizeof(char*))-1, lt_disp};
MENU(menu_advtiming, P99_PROTECT({ \
{ LNG("H. samplerate","H. サンプルレート"), OPT_AVCONFIG_NUMVAL_U16,{ .num_u16 = { &tc_h_samplerate, H_TOTAL_MIN, H_TOTAL_MAX, vm_tweak } } },
@ -98,7 +108,7 @@ MENU(menu_sampling, P99_PROTECT({ \
{ LNG("480p in sampler","サンプラーデ480p"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.s480p_mode, OPT_WRAP, SETTING_ITEM(s480p_mode_desc) } } },
{ LNG("Allow TVP HPLL2x","TVP HPLL2xキョヨウ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.tvp_hpll2x, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
{ LNG("Allow upsample2x","アップサンプル2xキョヨウ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.upsample2x, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
{ LNG("<Adv. timing >","<カクシュタイミング>"), OPT_SUBMENU, { .sub = { &menu_advtiming, vm_display } } },
{ LNG("<Adv. timing >","<カクシュタイミング>"), OPT_SUBMENU, { .sub = { &menu_advtiming, &vm_arg_info, vm_select } } },
}))
MENU(menu_sync, P99_PROTECT({ \
@ -132,10 +142,11 @@ MENU(menu_postproc, P99_PROTECT({ \
{ LNG("Scanline str.","スキャンラインツヨサ"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.sl_str, OPT_NOWRAP, 0, SCANLINESTR_MAX, sl_str_disp } } },
{ LNG("Scanline type","スキャンラインルイ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_type, OPT_WRAP, SETTING_ITEM(sl_type_desc) } } },
{ LNG("Scanline alignm.","スキャンラインポジション"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_id, OPT_WRAP, SETTING_ITEM(sl_id_desc) } } },
{ LNG("Horizontal mask","スイヘイマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.h_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } },
{ LNG("Vertical mask","スイチョクマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.v_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } },
{ LNG("Mask brightness","マスクアカルサ"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.mask_br, OPT_NOWRAP, 0, HV_MASK_MAX_BR, value_disp } } },
{ "Reverse LPF", OPT_AVCONFIG_NUMVALUE, { .num = { &tc.reverse_lpf, OPT_NOWRAP, 0, REVERSE_LPF_MAX, value_disp } } },
{ LNG("Horizontal mask","スイヘイマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.h_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } },
{ LNG("Vertical mask","スイチョクマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.v_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } },
{ LNG("Mask brightness","マスクアカルサ"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.mask_br, OPT_NOWRAP, 0, HV_MASK_MAX_BR, value_disp } } },
{ "Reverse LPF", OPT_AVCONFIG_NUMVALUE, { .num = { &tc.reverse_lpf, OPT_NOWRAP, 0, REVERSE_LPF_MAX, value_disp } } },
{ "<DIY lat. test>", OPT_FUNC_CALL, { .fun = { latency_test, &lt_arg_info } } },
}))
MENU(menu_compatibility, P99_PROTECT({ \
@ -148,24 +159,24 @@ MENU(menu_audio, P99_PROTECT({ \
{ LNG("Down-sampling","ダウンサンプリング"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.audio_dw_sampl, OPT_WRAP, SETTING_ITEM(audio_dw_sampl_desc) } } },
{ LNG("Swap left/right","ヒダリ/ミギスワップ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.audio_swap_lr, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
}))
#define AUDIO_MENU { LNG("Audio options >","オーディオオプション >"), OPT_SUBMENU, { .sub = { &menu_audio, NULL } } },
#define AUDIO_MENU { LNG("Audio options >","オーディオオプション >"), OPT_SUBMENU, { .sub = { &menu_audio, NULL, NULL } } },
#else
#define AUDIO_MENU
#endif
MENU(menu_main, P99_PROTECT({ \
{ LNG("Video in proc >","タイオウエイゾウ >"), OPT_SUBMENU, { .sub = { &menu_vinputproc, NULL } } },
{ LNG("Sampling opt. >","サンプリングオプション>"), OPT_SUBMENU, { .sub = { &menu_sampling, NULL } } },
{ LNG("Sync opt. >","ドウキオプション >"), OPT_SUBMENU, { .sub = { &menu_sync, NULL } } },
{ LNG("Output opt. >","シュツリョクオプション >"), OPT_SUBMENU, { .sub = { &menu_output, NULL } } },
{ LNG("Post-proc. >","アトショリ >"), OPT_SUBMENU, { .sub = { &menu_postproc, NULL } } },
{ LNG("Compatibility >","ゴカンセイ >"), OPT_SUBMENU, { .sub = { &menu_compatibility, NULL } } },
{ LNG("Video in proc >","タイオウエイゾウ >"), OPT_SUBMENU, { .sub = { &menu_vinputproc, NULL, NULL } } },
{ LNG("Sampling opt. >","サンプリングオプション>"), OPT_SUBMENU, { .sub = { &menu_sampling, NULL, NULL } } },
{ LNG("Sync opt. >","ドウキオプション >"), OPT_SUBMENU, { .sub = { &menu_sync, NULL, NULL } } },
{ LNG("Output opt. >","シュツリョクオプション >"), OPT_SUBMENU, { .sub = { &menu_output, NULL, NULL } } },
{ LNG("Post-proc. >","アトショリ >"), OPT_SUBMENU, { .sub = { &menu_postproc, NULL, NULL } } },
{ LNG("Compatibility >","ゴカンセイ >"), OPT_SUBMENU, { .sub = { &menu_compatibility, NULL, NULL } } },
AUDIO_MENU
{ LNG("<Load profile >","<プロファイルロード >"), OPT_SUBMENU, { .sub = { NULL, load_profile_disp } } },
{ LNG("<Save profile >","<プロファイルセーブ >"), OPT_SUBMENU, { .sub = { NULL, save_profile_disp } } },
{ LNG("<Reset settings>","<セッテイオショキカ >"), OPT_FUNC_CALL, { .fun = { set_default_avconfig, LNG("Reset done","ショキカスミ"), "" } } },
{ LNG("<Fw. update >","<ファームウェアアップデート>"), OPT_FUNC_CALL, { .fun = { fw_update, LNG("OK - pls restart","OK - サイキドウシテクダサイ"), LNG("failed","シッパイ") } } },
{ LNG("<Load profile >","<プロファイルロード >"), OPT_FUNC_CALL, { .fun = { load_profile, &profile_arg_info } } },
{ LNG("<Save profile >","<プロファイルセーブ >"), OPT_FUNC_CALL, { .fun = { save_profile, &profile_arg_info } } },
{ LNG("<Reset settings>","<セッテイオショキカ >"), OPT_FUNC_CALL, { .fun = { set_default_avconfig, NULL } } },
{ LNG("<Fw. update >","<ファームウェアアップデート>"), OPT_FUNC_CALL, { .fun = { fw_update, NULL } } },
}))
// Max 3 levels currently
@ -214,13 +225,13 @@ void display_menu(alt_u8 forcedisp)
switch (navi[navlvl].m->items[navi[navlvl].mp].type) {
case OPT_SUBMENU:
if (navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f)
navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f(code);
if (navi[navlvl].m->items[navi[navlvl].mp].sub.menu) {
if (navi[navlvl+1].m != navi[navlvl].m->items[navi[navlvl].mp].sub.menu)
navi[navlvl+1].mp = 0;
navi[navlvl+1].m = navi[navlvl].m->items[navi[navlvl].mp].sub.menu;
navlvl++;
}
navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f();
if (navi[navlvl+1].m != navi[navlvl].m->items[navi[navlvl].mp].sub.menu)
navi[navlvl+1].mp = 0;
navi[navlvl+1].m = navi[navlvl].m->items[navi[navlvl].mp].sub.menu;
navlvl++;
break;
case OPT_FUNC_CALL:
retval = navi[navlvl].m->items[navi[navlvl].mp].fun.f();
@ -252,8 +263,26 @@ void display_menu(alt_u8 forcedisp)
*val_u16 = (*val_u16 < navi[navlvl].m->items[navi[navlvl].mp].num_u16.max) ? (*val_u16+1) : *val_u16;
break;
case OPT_SUBMENU:
if (navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f)
navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f(code);
val = navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info->data;
val_max = navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info->max;
if (navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info) {
if (code == VAL_MINUS)
*val = (*val > 0) ? (*val-1) : 0;
else
*val = (*val < val_max) ? (*val+1) : val_max;
}
break;
case OPT_FUNC_CALL:
val = navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info->data;
val_max = navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info->max;
if (navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info) {
if (code == VAL_MINUS)
*val = (*val > 0) ? (*val-1) : 0;
else
*val = (*val < val_max) ? (*val+1) : val_max;
}
break;
default:
break;
@ -277,14 +306,16 @@ void display_menu(alt_u8 forcedisp)
navi[navlvl].m->items[navi[navlvl].mp].num_u16.df(*(navi[navlvl].m->items[navi[navlvl].mp].num_u16.data));
break;
case OPT_SUBMENU:
if (navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f)
navi[navlvl].m->items[navi[navlvl].mp].sub.arg_f(NO_ACTION);
if (navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info)
navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info->df(*navi[navlvl].m->items[navi[navlvl].mp].sub.arg_info->data);
else
menu_row2[0] = 0;
break;
case OPT_FUNC_CALL:
if (code == OPT_SELECT)
sniprintf(menu_row2, LCD_ROW_LEN+1, "%s", (retval==0) ? navi[navlvl].m->items[navi[navlvl].mp].fun.text_success : navi[navlvl].m->items[navi[navlvl].mp].fun.text_failure);
sniprintf(menu_row2, LCD_ROW_LEN+1, "%s", (retval==0) ? "Done" : "Failed");
else if (navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info)
navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info->df(*navi[navlvl].m->items[navi[navlvl].mp].fun.arg_info->data);
else
menu_row2[0] = 0;
break;

View File

@ -32,9 +32,15 @@ typedef enum {
} menuitem_type;
typedef int (*func_call)(void);
typedef void (*arg_func)(void);
typedef void (*disp_func)(alt_u8);
typedef void (*disp_func_u16)(alt_u16);
typedef struct {
alt_u8 *data;
alt_u8 max;
disp_func df;
} arg_info_t;
typedef struct {
alt_u8 *data;
@ -61,15 +67,15 @@ typedef struct {
typedef struct {
func_call f;
const char *text_success;
const char *text_failure;
const arg_info_t *arg_info;
} opt_func_call;
typedef struct menustruct menu_t;
typedef struct {
const menu_t *menu;
disp_func arg_f;
const arg_info_t *arg_info;
arg_func arg_f;
} opt_submenu;
typedef struct {

View File

@ -2,8 +2,8 @@
<sch:Settings xmlns:sch="http://www.altera.com/embeddedsw/bsp/schema">
<BspType>hal</BspType>
<BspVersion>default</BspVersion>
<BspGeneratedTimeStamp>Oct 12, 2017 1:47:54 AM</BspGeneratedTimeStamp>
<BspGeneratedUnixTimeStamp>1507762074640</BspGeneratedUnixTimeStamp>
<BspGeneratedTimeStamp>Oct 22, 2017 8:54:19 PM</BspGeneratedTimeStamp>
<BspGeneratedUnixTimeStamp>1508694859052</BspGeneratedUnixTimeStamp>
<BspGeneratedLocation>./</BspGeneratedLocation>
<BspSettingsFile>settings.bsp</BspSettingsFile>
<SopcDesignFile>../../sys.sopcinfo</SopcDesignFile>
@ -935,50 +935,56 @@
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_6</slaveDescriptor>
<slaveDescriptor>pio_7</slaveDescriptor>
<addressRange>0x00821080 - 0x0082108F</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_5</slaveDescriptor>
<slaveDescriptor>pio_6</slaveDescriptor>
<addressRange>0x00821090 - 0x0082109F</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_4</slaveDescriptor>
<slaveDescriptor>pio_5</slaveDescriptor>
<addressRange>0x008210A0 - 0x008210AF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_3</slaveDescriptor>
<slaveDescriptor>pio_4</slaveDescriptor>
<addressRange>0x008210B0 - 0x008210BF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_2</slaveDescriptor>
<slaveDescriptor>pio_3</slaveDescriptor>
<addressRange>0x008210C0 - 0x008210CF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_1</slaveDescriptor>
<slaveDescriptor>pio_2</slaveDescriptor>
<addressRange>0x008210D0 - 0x008210DF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_0</slaveDescriptor>
<slaveDescriptor>pio_1</slaveDescriptor>
<addressRange>0x008210E0 - 0x008210EF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>pio_0</slaveDescriptor>
<addressRange>0x008210F0 - 0x008210FF</addressRange>
<addressSpan>16</addressSpan>
<attributes/>
</MemoryMap>
<MemoryMap>
<slaveDescriptor>jtag_uart_0</slaveDescriptor>
<addressRange>0x008210F0 - 0x008210F7</addressRange>
<addressRange>0x00821100 - 0x00821107</addressRange>
<addressSpan>8</addressSpan>
<attributes>printable</attributes>
</MemoryMap>

View File

@ -4,7 +4,7 @@
* Machine generated for CPU 'nios2_qsys_0' in SOPC Builder design 'sys'
* SOPC Builder design path: ../../sys.sopcinfo
*
* Generated: Tue May 16 19:45:17 EEST 2017
* Generated: Sun Oct 22 20:42:22 EEST 2017
*/
/*
@ -175,19 +175,19 @@
#define ALT_NUM_INTERNAL_INTERRUPT_CONTROLLERS 1
#define ALT_NUM_INTERRUPT_CONTROLLERS 1
#define ALT_STDERR "/dev/jtag_uart_0"
#define ALT_STDERR_BASE 0x8210f0
#define ALT_STDERR_BASE 0x821100
#define ALT_STDERR_DEV jtag_uart_0
#define ALT_STDERR_IS_JTAG_UART
#define ALT_STDERR_PRESENT
#define ALT_STDERR_TYPE "altera_avalon_jtag_uart"
#define ALT_STDIN "/dev/jtag_uart_0"
#define ALT_STDIN_BASE 0x8210f0
#define ALT_STDIN_BASE 0x821100
#define ALT_STDIN_DEV jtag_uart_0
#define ALT_STDIN_IS_JTAG_UART
#define ALT_STDIN_PRESENT
#define ALT_STDIN_TYPE "altera_avalon_jtag_uart"
#define ALT_STDOUT "/dev/jtag_uart_0"
#define ALT_STDOUT_BASE 0x8210f0
#define ALT_STDOUT_BASE 0x821100
#define ALT_STDOUT_DEV jtag_uart_0
#define ALT_STDOUT_IS_JTAG_UART
#define ALT_STDOUT_PRESENT
@ -279,7 +279,7 @@
*/
#define ALT_MODULE_CLASS_jtag_uart_0 altera_avalon_jtag_uart
#define JTAG_UART_0_BASE 0x8210f0
#define JTAG_UART_0_BASE 0x821100
#define JTAG_UART_0_IRQ 1
#define JTAG_UART_0_IRQ_INTERRUPT_CONTROLLER_ID 0
#define JTAG_UART_0_NAME "/dev/jtag_uart_0"
@ -326,7 +326,7 @@
*/
#define ALT_MODULE_CLASS_pio_0 altera_avalon_pio
#define PIO_0_BASE 0x8210e0
#define PIO_0_BASE 0x8210f0
#define PIO_0_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_0_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_0_CAPTURE 0
@ -353,7 +353,7 @@
*/
#define ALT_MODULE_CLASS_pio_1 altera_avalon_pio
#define PIO_1_BASE 0x8210d0
#define PIO_1_BASE 0x8210e0
#define PIO_1_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_1_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_1_CAPTURE 0
@ -380,7 +380,7 @@
*/
#define ALT_MODULE_CLASS_pio_2 altera_avalon_pio
#define PIO_2_BASE 0x8210c0
#define PIO_2_BASE 0x8210d0
#define PIO_2_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_2_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_2_CAPTURE 0
@ -407,7 +407,7 @@
*/
#define ALT_MODULE_CLASS_pio_3 altera_avalon_pio
#define PIO_3_BASE 0x8210b0
#define PIO_3_BASE 0x8210c0
#define PIO_3_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_3_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_3_CAPTURE 0
@ -434,7 +434,7 @@
*/
#define ALT_MODULE_CLASS_pio_4 altera_avalon_pio
#define PIO_4_BASE 0x8210a0
#define PIO_4_BASE 0x8210b0
#define PIO_4_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_4_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_4_CAPTURE 0
@ -461,7 +461,7 @@
*/
#define ALT_MODULE_CLASS_pio_5 altera_avalon_pio
#define PIO_5_BASE 0x821090
#define PIO_5_BASE 0x8210a0
#define PIO_5_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_5_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_5_CAPTURE 0
@ -488,7 +488,7 @@
*/
#define ALT_MODULE_CLASS_pio_6 altera_avalon_pio
#define PIO_6_BASE 0x821080
#define PIO_6_BASE 0x821090
#define PIO_6_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_6_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_6_CAPTURE 0
@ -509,6 +509,33 @@
#define PIO_6_TYPE "altera_avalon_pio"
/*
* pio_7 configuration
*
*/
#define ALT_MODULE_CLASS_pio_7 altera_avalon_pio
#define PIO_7_BASE 0x821080
#define PIO_7_BIT_CLEARING_EDGE_REGISTER 0
#define PIO_7_BIT_MODIFYING_OUTPUT_REGISTER 0
#define PIO_7_CAPTURE 0
#define PIO_7_DATA_WIDTH 32
#define PIO_7_DO_TEST_BENCH_WIRING 0
#define PIO_7_DRIVEN_SIM_VALUE 0
#define PIO_7_EDGE_TYPE "NONE"
#define PIO_7_FREQ 27000000
#define PIO_7_HAS_IN 1
#define PIO_7_HAS_OUT 0
#define PIO_7_HAS_TRI 0
#define PIO_7_IRQ -1
#define PIO_7_IRQ_INTERRUPT_CONTROLLER_ID -1
#define PIO_7_IRQ_TYPE "NONE"
#define PIO_7_NAME "/dev/pio_7"
#define PIO_7_RESET_VALUE 0
#define PIO_7_SPAN 16
#define PIO_7_TYPE "altera_avalon_pio"
/*
* timer_0 configuration
*

View File

@ -85,7 +85,7 @@
{
datum baseAddress
{
value = "8524016";
value = "8524032";
type = "String";
}
}
@ -157,7 +157,7 @@
{
datum baseAddress
{
value = "8524000";
value = "8524016";
type = "String";
}
}
@ -173,7 +173,7 @@
{
datum baseAddress
{
value = "8523984";
value = "8524000";
type = "String";
}
}
@ -189,7 +189,7 @@
{
datum baseAddress
{
value = "8523968";
value = "8523984";
type = "String";
}
}
@ -205,7 +205,7 @@
{
datum baseAddress
{
value = "8523952";
value = "8523968";
type = "String";
}
}
@ -221,7 +221,7 @@
{
datum baseAddress
{
value = "8523936";
value = "8523952";
type = "String";
}
}
@ -237,7 +237,7 @@
{
datum baseAddress
{
value = "8523920";
value = "8523936";
type = "String";
}
}
@ -250,6 +250,22 @@
}
}
element pio_6.s1
{
datum baseAddress
{
value = "8523920";
type = "String";
}
}
element pio_7
{
datum _sortIndex
{
value = "18";
type = "int";
}
}
element pio_7.s1
{
datum baseAddress
{
@ -340,6 +356,11 @@
internal="pio_6.external_connection"
type="conduit"
dir="end" />
<interface
name="pio_7_lt_results_in"
internal="pio_7.external_connection"
type="conduit"
dir="end" />
<interface name="reset" internal="clk_27.clk_in_reset" type="reset" dir="end" />
<module name="clk_27" kind="clock_source" version="17.0" enabled="1">
<parameter name="clockFrequency" value="27000000" />
@ -429,7 +450,7 @@
<parameter name="dataAddrWidth" value="24" />
<parameter name="dataMasterHighPerformanceAddrWidth" value="1" />
<parameter name="dataMasterHighPerformanceMapParam" value="" />
<parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='epcq_controller_0.avl_mem' start='0x0' end='0x800000' type='altera_epcq_controller_mod.avl_mem' /><slave name='onchip_memory2_0.s1' start='0x810000' end='0x81A000' type='altera_avalon_onchip_memory2.s1' /><slave name='nios2_qsys_0.debug_mem_slave' start='0x820800' end='0x821000' type='altera_nios2_gen2.debug_mem_slave' /><slave name='timer_0.s1' start='0x821000' end='0x821020' type='altera_avalon_timer.s1' /><slave name='epcq_controller_0.avl_csr' start='0x821020' end='0x821040' type='altera_epcq_controller_mod.avl_csr' /><slave name='i2c_opencores_1.avalon_slave_0' start='0x821040' end='0x821060' type='i2c_opencores.avalon_slave_0' /><slave name='i2c_opencores_0.avalon_slave_0' start='0x821060' end='0x821080' type='i2c_opencores.avalon_slave_0' /><slave name='pio_6.s1' start='0x821080' end='0x821090' type='altera_avalon_pio.s1' /><slave name='pio_5.s1' start='0x821090' end='0x8210A0' type='altera_avalon_pio.s1' /><slave name='pio_4.s1' start='0x8210A0' end='0x8210B0' type='altera_avalon_pio.s1' /><slave name='pio_3.s1' start='0x8210B0' end='0x8210C0' type='altera_avalon_pio.s1' /><slave name='pio_2.s1' start='0x8210C0' end='0x8210D0' type='altera_avalon_pio.s1' /><slave name='pio_1.s1' start='0x8210D0' end='0x8210E0' type='altera_avalon_pio.s1' /><slave name='pio_0.s1' start='0x8210E0' end='0x8210F0' type='altera_avalon_pio.s1' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x8210F0' end='0x8210F8' type='altera_avalon_jtag_uart.avalon_jtag_slave' /></address-map>]]></parameter>
<parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='epcq_controller_0.avl_mem' start='0x0' end='0x800000' type='altera_epcq_controller_mod.avl_mem' /><slave name='onchip_memory2_0.s1' start='0x810000' end='0x81A000' type='altera_avalon_onchip_memory2.s1' /><slave name='nios2_qsys_0.debug_mem_slave' start='0x820800' end='0x821000' type='altera_nios2_gen2.debug_mem_slave' /><slave name='timer_0.s1' start='0x821000' end='0x821020' type='altera_avalon_timer.s1' /><slave name='epcq_controller_0.avl_csr' start='0x821020' end='0x821040' type='altera_epcq_controller_mod.avl_csr' /><slave name='i2c_opencores_1.avalon_slave_0' start='0x821040' end='0x821060' type='i2c_opencores.avalon_slave_0' /><slave name='i2c_opencores_0.avalon_slave_0' start='0x821060' end='0x821080' type='i2c_opencores.avalon_slave_0' /><slave name='pio_7.s1' start='0x821080' end='0x821090' type='altera_avalon_pio.s1' /><slave name='pio_6.s1' start='0x821090' end='0x8210A0' type='altera_avalon_pio.s1' /><slave name='pio_5.s1' start='0x8210A0' end='0x8210B0' type='altera_avalon_pio.s1' /><slave name='pio_4.s1' start='0x8210B0' end='0x8210C0' type='altera_avalon_pio.s1' /><slave name='pio_3.s1' start='0x8210C0' end='0x8210D0' type='altera_avalon_pio.s1' /><slave name='pio_2.s1' start='0x8210D0' end='0x8210E0' type='altera_avalon_pio.s1' /><slave name='pio_1.s1' start='0x8210E0' end='0x8210F0' type='altera_avalon_pio.s1' /><slave name='pio_0.s1' start='0x8210F0' end='0x821100' type='altera_avalon_pio.s1' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x821100' end='0x821108' type='altera_avalon_jtag_uart.avalon_jtag_slave' /></address-map>]]></parameter>
<parameter name="data_master_high_performance_paddr_base" value="0" />
<parameter name="data_master_high_performance_paddr_size" value="0" />
<parameter name="data_master_paddr_base" value="0" />
@ -729,6 +750,20 @@
<parameter name="simDrivenValue" value="0" />
<parameter name="width" value="32" />
</module>
<module name="pio_7" kind="altera_avalon_pio" version="17.0" enabled="1">
<parameter name="bitClearingEdgeCapReg" value="false" />
<parameter name="bitModifyingOutReg" value="false" />
<parameter name="captureEdge" value="false" />
<parameter name="clockRate" value="27000000" />
<parameter name="direction" value="Input" />
<parameter name="edgeType" value="RISING" />
<parameter name="generateIRQ" value="false" />
<parameter name="irqType" value="LEVEL" />
<parameter name="resetValue" value="0" />
<parameter name="simDoTestBenchWiring" value="false" />
<parameter name="simDrivenValue" value="0" />
<parameter name="width" value="32" />
</module>
<module name="timer_0" kind="altera_avalon_timer" version="17.0" enabled="1">
<parameter name="alwaysRun" value="false" />
<parameter name="counterSize" value="32" />
@ -747,7 +782,7 @@
start="nios2_qsys_0.data_master"
end="jtag_uart_0.avalon_jtag_slave">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210f0" />
<parameter name="baseAddress" value="0x00821100" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -810,7 +845,7 @@
start="nios2_qsys_0.data_master"
end="pio_0.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210e0" />
<parameter name="baseAddress" value="0x008210f0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -819,7 +854,7 @@
start="nios2_qsys_0.data_master"
end="pio_1.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210d0" />
<parameter name="baseAddress" value="0x008210e0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -828,7 +863,7 @@
start="nios2_qsys_0.data_master"
end="pio_2.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210c0" />
<parameter name="baseAddress" value="0x008210d0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -837,7 +872,7 @@
start="nios2_qsys_0.data_master"
end="pio_3.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210b0" />
<parameter name="baseAddress" value="0x008210c0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -846,7 +881,7 @@
start="nios2_qsys_0.data_master"
end="pio_4.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x008210a0" />
<parameter name="baseAddress" value="0x008210b0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -864,7 +899,7 @@
start="nios2_qsys_0.data_master"
end="pio_5.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x00821090" />
<parameter name="baseAddress" value="0x008210a0" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
@ -873,6 +908,15 @@
start="nios2_qsys_0.data_master"
end="pio_6.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x00821090" />
<parameter name="defaultConnection" value="false" />
</connection>
<connection
kind="avalon"
version="17.0"
start="nios2_qsys_0.data_master"
end="pio_7.s1">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x00821080" />
<parameter name="defaultConnection" value="false" />
</connection>
@ -904,6 +948,7 @@
<connection kind="clock" version="17.0" start="clk_27.clk" end="timer_0.clk" />
<connection kind="clock" version="17.0" start="clk_27.clk" end="pio_5.clk" />
<connection kind="clock" version="17.0" start="clk_27.clk" end="pio_6.clk" />
<connection kind="clock" version="17.0" start="clk_27.clk" end="pio_7.clk" />
<connection
kind="clock"
version="17.0"
@ -1051,6 +1096,11 @@
version="17.0"
start="clk_27.clk_reset"
end="pio_6.reset" />
<connection
kind="reset"
version="17.0"
start="clk_27.clk_reset"
end="pio_7.reset" />
<connection
kind="reset"
version="17.0"

File diff suppressed because it is too large Load Diff