diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-11-15 16:25:41 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-11-15 16:25:49 -0600 |
| commit | 044558e53d50ebd053abc76930723c9d7f606569 (patch) | |
| tree | 96dc73fe0a829579197f1887277dbb4c2b8e31f6 | |
| parent | 22ef9a701d58d5e9d965793785241ad4aab29469 (diff) | |
Replace vga_controller with streaming Altera IP
| -rw-r--r-- | conspiracion.qsf | 59 | ||||
| -rw-r--r-- | platform.qsys | 238 | ||||
| -rw-r--r-- | rtl/top/conspiracion.sv | 24 | ||||
| -rw-r--r-- | rtl/vga.sv | 3 | ||||
| -rw-r--r-- | tb/platform.sv | 18 |
5 files changed, 276 insertions, 66 deletions
diff --git a/conspiracion.qsf b/conspiracion.qsf index b667d1a..1c4a47b 100644 --- a/conspiracion.qsf +++ b/conspiracion.qsf @@ -120,35 +120,35 @@ set_location_assignment PIN_W19 -to pio_leds[5] set_location_assignment PIN_Y19 -to pio_leds[6] set_location_assignment PIN_W20 -to pio_leds[7] -set_location_assignment PIN_A11 -to vga_controller_0_dac_clk -set_location_assignment PIN_B11 -to vga_controller_0_dac_hsync -set_location_assignment PIN_D11 -to vga_controller_0_dac_vsync -set_location_assignment PIN_F10 -to vga_controller_0_dac_blank_n -set_location_assignment PIN_C10 -to vga_controller_0_dac_sync_n -set_location_assignment PIN_A13 -to vga_controller_0_dac_r[0] -set_location_assignment PIN_C13 -to vga_controller_0_dac_r[1] -set_location_assignment PIN_E13 -to vga_controller_0_dac_r[2] -set_location_assignment PIN_B12 -to vga_controller_0_dac_r[3] -set_location_assignment PIN_C12 -to vga_controller_0_dac_r[4] -set_location_assignment PIN_D12 -to vga_controller_0_dac_r[5] -set_location_assignment PIN_E12 -to vga_controller_0_dac_r[6] -set_location_assignment PIN_F13 -to vga_controller_0_dac_r[7] -set_location_assignment PIN_J9 -to vga_controller_0_dac_g[0] -set_location_assignment PIN_J10 -to vga_controller_0_dac_g[1] -set_location_assignment PIN_H12 -to vga_controller_0_dac_g[2] -set_location_assignment PIN_G10 -to vga_controller_0_dac_g[3] -set_location_assignment PIN_G11 -to vga_controller_0_dac_g[4] -set_location_assignment PIN_G12 -to vga_controller_0_dac_g[5] -set_location_assignment PIN_F11 -to vga_controller_0_dac_g[6] -set_location_assignment PIN_E11 -to vga_controller_0_dac_g[7] -set_location_assignment PIN_B13 -to vga_controller_0_dac_b[0] -set_location_assignment PIN_G13 -to vga_controller_0_dac_b[1] -set_location_assignment PIN_H13 -to vga_controller_0_dac_b[2] -set_location_assignment PIN_F14 -to vga_controller_0_dac_b[3] -set_location_assignment PIN_H14 -to vga_controller_0_dac_b[4] -set_location_assignment PIN_F15 -to vga_controller_0_dac_b[5] -set_location_assignment PIN_G15 -to vga_controller_0_dac_b[6] -set_location_assignment PIN_J14 -to vga_controller_0_dac_b[7] +set_location_assignment PIN_A11 -to vga_dac_clk +set_location_assignment PIN_B11 -to vga_dac_hsync +set_location_assignment PIN_D11 -to vga_dac_vsync +set_location_assignment PIN_F10 -to vga_dac_blank_n +set_location_assignment PIN_C10 -to vga_dac_sync_n +set_location_assignment PIN_A13 -to vga_dac_r[0] +set_location_assignment PIN_C13 -to vga_dac_r[1] +set_location_assignment PIN_E13 -to vga_dac_r[2] +set_location_assignment PIN_B12 -to vga_dac_r[3] +set_location_assignment PIN_C12 -to vga_dac_r[4] +set_location_assignment PIN_D12 -to vga_dac_r[5] +set_location_assignment PIN_E12 -to vga_dac_r[6] +set_location_assignment PIN_F13 -to vga_dac_r[7] +set_location_assignment PIN_J9 -to vga_dac_g[0] +set_location_assignment PIN_J10 -to vga_dac_g[1] +set_location_assignment PIN_H12 -to vga_dac_g[2] +set_location_assignment PIN_G10 -to vga_dac_g[3] +set_location_assignment PIN_G11 -to vga_dac_g[4] +set_location_assignment PIN_G12 -to vga_dac_g[5] +set_location_assignment PIN_F11 -to vga_dac_g[6] +set_location_assignment PIN_E11 -to vga_dac_g[7] +set_location_assignment PIN_B13 -to vga_dac_b[0] +set_location_assignment PIN_G13 -to vga_dac_b[1] +set_location_assignment PIN_H13 -to vga_dac_b[2] +set_location_assignment PIN_F14 -to vga_dac_b[3] +set_location_assignment PIN_H14 -to vga_dac_b[4] +set_location_assignment PIN_F15 -to vga_dac_b[5] +set_location_assignment PIN_G15 -to vga_dac_b[6] +set_location_assignment PIN_J14 -to vga_dac_b[7] set_location_assignment PIN_AK14 -to vram_wire_addr[0] set_location_assignment PIN_AH14 -to vram_wire_addr[1] @@ -350,4 +350,5 @@ set_global_assignment -name ENABLE_SIGNALTAP OFF set_global_assignment -name USE_SIGNALTAP_FILE bus_test.stp set_global_assignment -name SIGNALTAP_FILE bus_test.stp + set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
\ No newline at end of file diff --git a/platform.qsys b/platform.qsys index 73ef6e6..30158b8 100644 --- a/platform.qsys +++ b/platform.qsys @@ -37,7 +37,7 @@ { datum _sortIndex { - value = "10"; + value = "9"; type = "int"; } } @@ -65,6 +65,35 @@ type = "int"; } } + element pixdma + { + datum _sortIndex + { + value = "13"; + type = "int"; + } + } + element pixfifo + { + datum _sortIndex + { + value = "15"; + type = "int"; + } + } + element pixfmt + { + datum _sortIndex + { + value = "14"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } element platform { datum _originalDeviceFamily @@ -109,7 +138,7 @@ { datum _sortIndex { - value = "11"; + value = "10"; type = "int"; } } @@ -121,11 +150,24 @@ type = "int"; } } - element vga_controller_0 + element vga { datum _sortIndex { - value = "9"; + value = "12"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element video_pll_0 + { + datum _sortIndex + { + value = "11"; type = "int"; } } @@ -180,8 +222,8 @@ type="clock" dir="start" /> <interface - name="vga_controller_0_dac" - internal="vga_controller_0.dac" + name="vga_dac" + internal="vga.external_interface" type="conduit" dir="end" /> <interface name="vram_wire" internal="vram.wire" type="conduit" dir="end" /> @@ -789,6 +831,42 @@ <parameter name="simDrivenValue" value="0" /> <parameter name="width" value="8" /> </module> + <module + name="pixdma" + kind="altera_up_avalon_video_pixel_buffer_dma" + version="18.0" + enabled="1"> + <parameter name="AUTO_CLK_CLOCK_RATE" value="143000000" /> + <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone V" /> + <parameter name="addr_mode" value="Consecutive" /> + <parameter name="back_start_address" value="2097152" /> + <parameter name="color_space" value="32-bit RGBA" /> + <parameter name="image_height" value="480" /> + <parameter name="image_width" value="640" /> + <parameter name="start_address" value="0" /> + </module> + <module + name="pixfifo" + kind="altera_up_avalon_video_dual_clock_buffer" + version="18.0" + enabled="1"> + <parameter name="AUTO_CLOCK_STREAM_IN_CLOCK_RATE" value="143000000" /> + <parameter name="AUTO_CLOCK_STREAM_OUT_CLOCK_RATE" value="25000000" /> + <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone V" /> + <parameter name="color_bits" value="10" /> + <parameter name="color_planes" value="3" /> + </module> + <module + name="pixfmt" + kind="altera_up_avalon_video_rgb_resampler" + version="18.0" + enabled="1"> + <parameter name="AUTO_CLK_CLOCK_RATE" value="143000000" /> + <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone V" /> + <parameter name="alpha" value="1023" /> + <parameter name="input_type" value="32-bit RGBA" /> + <parameter name="output_type" value="30-bit RGB" /> + </module> <module name="pll_0" kind="altera_pll" version="20.1" enabled="1"> <parameter name="debug_print_output" value="false" /> <parameter name="debug_use_rbc_taf_method" value="false" /> @@ -906,7 +984,7 @@ <parameter name="gui_fractional_cout" value="32" /> <parameter name="gui_mif_generate" value="false" /> <parameter name="gui_multiply_factor" value="1" /> - <parameter name="gui_number_of_clocks" value="3" /> + <parameter name="gui_number_of_clocks" value="2" /> <parameter name="gui_operation_mode" value="direct" /> <parameter name="gui_output_clock_frequency0" value="50.0" /> <parameter name="gui_output_clock_frequency1" value="100.0" /> @@ -1021,10 +1099,33 @@ <parameter name="watchdogPulse" value="2" /> </module> <module - name="vga_controller_0" - kind="vga_controller" - version="1.0" - enabled="1" /> + name="vga" + kind="altera_up_avalon_video_vga_controller" + version="18.0" + enabled="1"> + <parameter name="AUTO_CLK_CLOCK_RATE" value="25000000" /> + <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone V" /> + <parameter name="board" value="DE1-SoC" /> + <parameter name="device" value="VGA Connector" /> + <parameter name="resolution" value="VGA 640x480" /> + <parameter name="underflow_flag" value="false" /> + </module> + <module + name="video_pll_0" + kind="altera_up_avalon_video_pll" + version="18.0" + enabled="1"> + <parameter name="AUTO_DEVICE" value="5CSEMA5F31C6" /> + <parameter name="AUTO_DEVICE_SPEEDGRADE" value="6" /> + <parameter name="camera">5MP Digital Camera (THDB_D5M)</parameter> + <parameter name="device_family" value="Cyclone V" /> + <parameter name="gui_refclk" value="50.0" /> + <parameter name="gui_resolution" value="VGA 640x480" /> + <parameter name="lcd">7" LCD on VEEK-MT and MTL/MTL2 Modules</parameter> + <parameter name="lcd_clk_en" value="false" /> + <parameter name="vga_clk_en" value="true" /> + <parameter name="video_in_clk_en" value="false" /> + </module> <module name="vram" kind="altera_avalon_new_sdram_controller" @@ -1057,10 +1158,10 @@ <connection kind="avalon" version="20.1" - start="vga_controller_0.avalon_master" - end="vram.s1"> + start="master_0.avalon_master_1_1" + end="pixdma.avalon_control_slave"> <parameter name="arbitrationPriority" value="1" /> - <parameter name="baseAddress" value="0x0000" /> + <parameter name="baseAddress" value="0x30030000" /> <parameter name="defaultConnection" value="false" /> </connection> <connection @@ -1076,6 +1177,15 @@ kind="avalon" version="20.1" start="master_0.avalon_master_1_1" + end="pixfmt.avalon_rgb_slave"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x30040000" /> + <parameter name="defaultConnection" value="false" /> + </connection> + <connection + kind="avalon" + version="20.1" + start="master_0.avalon_master_1_1" end="pio_0.s1"> <parameter name="arbitrationPriority" value="1" /> <parameter name="baseAddress" value="0x30010000" /> @@ -1111,6 +1221,15 @@ <connection kind="avalon" version="20.1" + start="pixdma.avalon_pixel_dma_master" + end="vram.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0000" /> + <parameter name="defaultConnection" value="false" /> + </connection> + <connection + kind="avalon" + version="20.1" start="address_span_extender_0.expanded_master" end="hps_0.f2h_sdram0_data"> <parameter name="arbitrationPriority" value="1" /> @@ -1121,11 +1240,29 @@ kind="avalon" version="20.1" start="jtag_dbg.master" + end="pixdma.avalon_control_slave"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x30030000" /> + <parameter name="defaultConnection" value="false" /> + </connection> + <connection + kind="avalon" + version="20.1" + start="jtag_dbg.master" end="jtag_uart_0.avalon_jtag_slave"> <parameter name="arbitrationPriority" value="1" /> <parameter name="baseAddress" value="0x30000000" /> <parameter name="defaultConnection" value="false" /> </connection> + <connection + kind="avalon" + version="20.1" + start="jtag_dbg.master" + end="pixfmt.avalon_rgb_slave"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x30040000" /> + <parameter name="defaultConnection" value="false" /> + </connection> <connection kind="avalon" version="20.1" start="jtag_dbg.master" end="pio_0.s1"> <parameter name="arbitrationPriority" value="1" /> <parameter name="baseAddress" value="0x30010000" /> @@ -1151,10 +1288,30 @@ <parameter name="defaultConnection" value="false" /> </connection> <connection + kind="avalon_streaming" + version="20.1" + start="pixfifo.avalon_dc_buffer_source" + end="vga.avalon_vga_sink" /> + <connection + kind="avalon_streaming" + version="20.1" + start="pixdma.avalon_pixel_source" + end="pixfmt.avalon_rgb_sink" /> + <connection + kind="avalon_streaming" + version="20.1" + start="pixfmt.avalon_rgb_source" + end="pixfifo.avalon_dc_buffer_sink" /> + <connection kind="clock" version="20.1" start="clk_0.clk" end="sys_sdram_pll_0.ref_clk" /> + <connection + kind="clock" + version="20.1" + start="clk_0.clk" + end="video_pll_0.ref_clk" /> <connection kind="clock" version="20.1" start="clk_0.clk" end="pll_0.refclk" /> <connection kind="clock" @@ -1182,13 +1339,29 @@ <connection kind="clock" version="20.1" - start="pll_0.outclk2" - end="vga_controller_0.clock_sink" /> + start="sys_sdram_pll_0.sys_clk" + end="vram.clk" /> <connection kind="clock" version="20.1" start="sys_sdram_pll_0.sys_clk" - end="vram.clk" /> + end="pixdma.clk" /> + <connection + kind="clock" + version="20.1" + start="sys_sdram_pll_0.sys_clk" + end="pixfmt.clk" /> + <connection + kind="clock" + version="20.1" + start="sys_sdram_pll_0.sys_clk" + end="pixfifo.clock_stream_in" /> + <connection kind="clock" version="20.1" start="video_pll_0.vga_clk" end="vga.clk" /> + <connection + kind="clock" + version="20.1" + start="video_pll_0.vga_clk" + end="pixfifo.clock_stream_out" /> <connection kind="reset" version="20.1" @@ -1203,6 +1376,11 @@ kind="reset" version="20.1" start="clk_0.clk_reset" + end="video_pll_0.ref_reset" /> + <connection + kind="reset" + version="20.1" + start="clk_0.clk_reset" end="address_span_extender_0.reset" /> <connection kind="reset" @@ -1223,13 +1401,33 @@ <connection kind="reset" version="20.1" - start="clk_0.clk_reset" - end="vga_controller_0.reset_sink" /> + start="sys_sdram_pll_0.reset_source" + end="vram.reset" /> + <connection + kind="reset" + version="20.1" + start="video_pll_0.reset_source" + end="vga.reset" /> <connection kind="reset" version="20.1" start="sys_sdram_pll_0.reset_source" - end="vram.reset" /> + end="pixdma.reset" /> + <connection + kind="reset" + version="20.1" + start="sys_sdram_pll_0.reset_source" + end="pixfmt.reset" /> + <connection + kind="reset" + version="20.1" + start="sys_sdram_pll_0.reset_source" + end="pixfifo.reset_stream_in" /> + <connection + kind="reset" + version="20.1" + start="video_pll_0.reset_source" + end="pixfifo.reset_stream_out" /> <interconnectRequirement for="$system" name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" /> <interconnectRequirement for="$system" name="qsys_mm.enableEccProtection" value="FALSE" /> <interconnectRequirement for="$system" name="qsys_mm.enableInstrumentation" value="FALSE" /> diff --git a/rtl/top/conspiracion.sv b/rtl/top/conspiracion.sv index 62eb9c1..450af54 100644 --- a/rtl/top/conspiracion.sv +++ b/rtl/top/conspiracion.sv @@ -30,14 +30,14 @@ module conspiracion output wire vram_wire_ras_n, output wire vram_wire_we_n, output wire [7:0] pio_leds, - output wire vga_controller_0_dac_clk, - output wire vga_controller_0_dac_hsync, - output wire vga_controller_0_dac_vsync, - output wire vga_controller_0_dac_blank_n, - output wire vga_controller_0_dac_sync_n, - output wire [7:0] vga_controller_0_dac_r, - output wire [7:0] vga_controller_0_dac_g, - output wire [7:0] vga_controller_0_dac_b + output wire vga_dac_clk, + output wire vga_dac_hsync, + output wire vga_dac_vsync, + output wire vga_dac_blank_n, + output wire vga_dac_sync_n, + output wire [7:0] vga_dac_r, + output wire [7:0] vga_dac_g, + output wire [7:0] vga_dac_b ); logic[29:0] addr; @@ -93,6 +93,14 @@ module conspiracion .pll_0_reset_reset(0), //TODO: reset controller, algún día .pio_0_external_connection_export(pio_leds), .sys_sdram_pll_0_sdram_clk_clk(vram_wire_clk), + .vga_dac_CLK(vga_dac_clk), + .vga_dac_HS(vga_dac_hsync), + .vga_dac_VS(vga_dac_vsync), + .vga_dac_BLANK(vga_dac_blank_n), + .vga_dac_SYNC(vga_dac_sync_n), + .vga_dac_R(vga_dac_r), + .vga_dac_G(vga_dac_g), + .vga_dac_B(vga_dac_b), .* ); @@ -120,6 +120,9 @@ module vga B: current = read_b; endcase + if(!next_active) + current = {$bits(current){1'b0}}; + if(x != H_TOTAL - 1) begin next_x = x + 1; next_y = y; diff --git a/tb/platform.sv b/tb/platform.sv index 5def85f..5fcb9f2 100644 --- a/tb/platform.sv +++ b/tb/platform.sv @@ -28,7 +28,7 @@ module platform input wire memory_oct_rzqin, // .oct_rzqin output wire [7:0] pio_0_external_connection_export, // pio_0_external_connection.export input wire pll_0_reset_reset, - output wire pll_0_outclk3_clk, // pll_0_outclk3.clk + output wire sys_sdram_pll_0_sdram_clk_clk, input wire reset_reset_n /*verilator public*/,// reset.reset_n output wire [12:0] vram_wire_addr, // vram_wire.addr output wire [1:0] vram_wire_ba, // .ba @@ -39,14 +39,14 @@ module platform output wire [1:0] vram_wire_dqm, // .dqm output wire vram_wire_ras_n, // .ras_n output wire vram_wire_we_n, // .we_n - output wire vga_controller_0_dac_clk, // vga_controller_0_dac.clk - output wire vga_controller_0_dac_hsync, // .hsync - output wire vga_controller_0_dac_vsync, // .vsync - output wire vga_controller_0_dac_blank_n, // .blank_n - output wire vga_controller_0_dac_sync_n, // .sync_n - output wire [7:0] vga_controller_0_dac_r, // .r - output wire [7:0] vga_controller_0_dac_g, // .g - output wire [7:0] vga_controller_0_dac_b // .b + output wire vga_dac_CLK, // vga_dac.CLK + output wire vga_dac_HS, // .HS + output wire vga_dac_VS, // .VS + output wire vga_dac_BLANK, // .BLANK + output wire vga_dac_SYNC, // .SYNC + output wire [7:0] vga_dac_R, // .R + output wire [7:0] vga_dac_G, // .G + output wire [7:0] vga_dac_B // .B ); logic[31:0] avl_address /*verilator public*/; |
