Display testpoint values on screen. It helped me to find deadlock bug on the UDP comm system.
Project files can be found on
https://github.com/hdl4fpga/hdl4fpga/tree/2a0e459e2c5e06b068ccb8dec8f681b24327e238
library/basic/base.vhd library/basic/dpram.vhd library/video/videopkg.vhd library/video/tmds_encoder.vhd library/video/cgafonts.vhd library/video/cga_rom.vhd library/video/cga_adapter.vhd library/video/fonts/bcdfonts.vhd library/video/fonts/cp850x8x8x0to127.vhd library/video/fonts/cp850x8x8x128to255.vhd library/video/fonts/cp850x8x16x0to127.vhd library/video/fonts/cp850x8x16x128to255.vhd library/basic/latency.vhd library/basic/rom.vhd library/video/video.vhd library/video/dvi.vhd library/basic/serlzr.vhd library/basic/barrel.vhd library/sdram/phy_iofifo.vhd library/apps/app_profiles.vhd library/apps/ecp5_profiles.vhd library/apps/ecp5_videopll.vhd library/basic/fifo.vhd library/basic/sync_transfer.vhd library/basic/adder.vhd library/basic/txn_buffer.vhd library/apps/display_tp.vhd
Example of usage
library ieee; use ieee.std_logic_1164.all; entity ulx3s is generic ( debug : boolean := false); port ( clk_25mhz : in std_logic; ftdi_rxd : out std_logic; ftdi_txd : in std_logic := 'U'; ftdi_nrts : inout std_logic := 'U'; ftdi_ndtr : inout std_logic := 'U'; ftdi_txden : inout std_logic := 'U'; btn_pwr_n : in std_logic := 'U'; fire1 : in std_logic := 'U'; fire2 : in std_logic := 'U'; up : in std_logic := 'U'; down : in std_logic := 'U'; left : in std_logic := 'U'; right : in std_logic := 'U'; led : out std_logic_vector(8-1 downto 0); sw : in std_logic_vector(4-1 downto 0) := (others => 'U'); oled_clk : out std_logic; oled_mosi : out std_logic; oled_dc : out std_logic; oled_resn : out std_logic; oled_csn : out std_logic; --flash_csn : out std_logic; --flash_clk : out std_logic; --flash_mosi : out std_logic; --flash_miso : in std_logic; --flash_holdn : out std_logic; --flash_wpn : out std_logic; sd_clk : in std_logic := '-'; sd_cmd : out std_logic; -- sd_cmd=MOSI (out) sd_d : inout std_logic_vector(4-1 downto 0) := (others => 'U'); -- sd_d(0)=MISO (in), sd_d(3)=CSn (out) sd_wp : in std_logic := '-'; sd_cdn : in std_logic := '-'; -- card detect not connected adc_csn : out std_logic; adc_mosi : out std_logic; adc_miso : in std_logic := '-'; adc_sclk : out std_logic; audio_l : out std_logic_vector(4-1 downto 0); audio_r : out std_logic_vector(4-1 downto 0); audio_v : out std_logic_vector(4-1 downto 0); wifi_en : out std_logic := '1'; -- '0' disables ESP32 wifi_rxd : out std_logic; wifi_txd : in std_logic := '-'; wifi_gpio0 : out std_logic := '1'; -- '0' requests ESP32 to upload "passthru" bitstream wifi_gpio5 : inout std_logic := '-'; wifi_gpio16 : inout std_logic := '-'; wifi_gpio17 : inout std_logic := '-'; ant_433mhz : out std_logic; usb_fpga_dp : inout std_logic := 'U'; usb_fpga_dn : inout std_logic := 'U'; usb_fpga_bd_dp : inout std_logic := 'U'; usb_fpga_bd_dn : inout std_logic := 'U'; usb_fpga_pu_dp : inout std_logic := 'U'; usb_fpga_pu_dn : inout std_logic := 'U'; sdram_clk : inout std_logic; sdram_cke : out std_logic; sdram_csn : out std_logic; sdram_wen : out std_logic; sdram_rasn : out std_logic; sdram_casn : out std_logic; sdram_a : out std_logic_vector(13-1 downto 0); sdram_ba : out std_logic_vector(2-1 downto 0); sdram_dqm : inout std_logic_vector(2-1 downto 0) := (others => 'U'); sdram_d : inout std_logic_vector(16-1 downto 0) := (others => 'U'); gpdi_d : out std_logic_vector(4-1 downto 0); gpdi_dn : out std_logic_vector(4-1 downto 0); gpdi_cec : inout std_logic := '-'; gpdi_sda : inout std_logic := '-'; gpdi_scl : inout std_logic := '-'; gp : inout std_logic_vector(28-1 downto 0) := (others => 'Z'); gn : inout std_logic_vector(28-1 downto 0) := (others => 'Z'); gp_i : in std_logic_vector(12 downto 9); user_programn : out std_logic := '1'; -- '0' loads next bitstream from SPI FLASH (e.g. bootloader) shutdown : out std_logic := '0'); -- '1' power off the board, 10uA sleep alias rmii_tx_en : std_logic is gn(10); alias rmii_tx0 : std_logic is gp(10); alias rmii_tx1 : std_logic is gn(9); alias rmii_rx0 : std_logic is gn(11); alias rmii_rx1 : std_logic is gp(11); alias rmii_crsdv : std_logic is gp(12); alias rmii_nintclk : std_logic is gn(12); alias rmii_mdio : std_logic is gn(13); alias rmii_mdc : std_logic is gp(13); alias hdmi0_blue : std_logic is gpdi_d(0); alias hdmi0_green : std_logic is gpdi_d(1); alias hdmi0_red : std_logic is gpdi_d(2); alias hdmi0_clock : std_logic is gpdi_d(3); constant clk25mhz_freq : real := 25.0e6; end; library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library hdl4fpga; use hdl4fpga.base.all; use hdl4fpga.videopkg.all; use hdl4fpga.ipoepkg.all; use hdl4fpga.app_profiles.all; use hdl4fpga.ecp5_profiles.all; library ecp5u; use ecp5u.components.all; architecture display_tp of ulx3s is constant video_mode : video_modes := mode600p24bpp; constant video_param : video_record := videoparam(video_mode); signal video_pixel : std_logic_vector(0 to setif( video_param.pixel=rgb565, 16, setif( video_param.pixel=rgb888, 32, 0))-1); signal sys_rst : std_logic; signal sys_clk : std_logic; signal videoio_clk : std_logic; signal video_clk : std_logic; signal video_shift_clk : std_logic; signal video_lck : std_logic; signal video_hzsync : std_logic; signal video_vtsync : std_logic; signal dvid_crgb : std_logic_vector(7 downto 0); signal tp : std_logic_vector(0 to 6-1); begin sys_rst <= '0'; videopll_e : entity hdl4fpga.ecp5_videopll generic map ( clkref_freq => clk25mhz_freq, default_gear => 2, video_param => video_param) port map ( clk_ref => clk_25mhz, videoio_clk => videoio_clk, video_clk => video_clk, video_shift_clk => video_shift_clk, video_lck => video_lck); tp <= (fire1, fire2, up, down, left, right); displaytp_e : entity hdl4fpga.display_tp generic map ( timing_id => video_param.timing, video_gear => 2, num_of_cols => 1, field_widths => (15,10,3), labels => "fire1" & NUL & "fire2" & NUL & "up" & NUL & "down" & NUL & "left" & NUL & "right" & NUL) port map ( sweep_clk => video_clk, tp => tp, video_clk => video_clk, video_shift_clk => video_shift_clk, video_hs => video_hzsync, video_vs => video_vtsync, video_pixel => video_pixel, dvid_crgb => dvid_crgb); ddr_g : for i in gpdi_d'range generate signal q : std_logic; begin oddr_i : oddrx1f port map( sclk => video_shift_clk, rst => '0', d0 => dvid_crgb(2*i), d1 => dvid_crgb(2*i+1), q => q); olvds_i : olvds port map( a => q, z => gpdi_d(i), zn => gpdi_dn(i)); end generate; end;
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.