mirror of
https://github.com/marqs85/ossc.git
synced 2025-02-28 11:29:12 +00:00
Initial latency tester implementation
This commit is contained in:
parent
a8d1fad24a
commit
1bf279b2a7
86
ossc.qsf
86
ossc.qsf
@ -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
73
rtl/lat_tester.v
Normal 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
|
23
rtl/ossc.v
23
rtl/ossc.v
@ -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),
|
||||
|
@ -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
@ -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()
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 = {<_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, <_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;
|
||||
|
@ -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 {
|
||||
|
Binary file not shown.
@ -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>
|
||||
|
@ -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
|
||||
*
|
||||
|
80
sys.qsys
80
sys.qsys
@ -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"
|
||||
|
927
sys.sopcinfo
927
sys.sopcinfo
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user