905 Universal Binary to Segment Decoder

905 : Universal Binary to Segment Decoder

Design render
  • Author: Rebecca G. Bettencourt
  • Description: Decodes various binary codes to various segmented displays.
  • GitHub repository
  • Clock: 0 Hz

How it works

This project is composed of four modules:

  • A BCD to seven segment decoder with a wide variety of options for customizing the appearance of digits
  • An ASCII to seven segment decoder with two different “fonts”
  • A dual BCD to Cistercian numeral decoder
  • A BCV (binary-coded vigesimal) to Kaktovik numeral decoder

BCD to seven segment decoder

This mode converts a decimal digit in BCD to its representation on a standard seven segment display. There are inputs that affect the display of the digits 6, 7, and 9, and eight different options for handling out-of-range values. These inputs allow this decoder to match the behavior of just about any other BCD to seven segment decoder, making it universal.

The signals used in this mode are:

  • /AL - Active low. If HIGH, outputs will be HIGH when lit. If LOW, outputs will be LOW when lit.
  • /BI - Blanking input. If LOW, all segments will be blank regardless of other inputs, including /LT.
  • /LT - Lamp test. When /BI is HIGH and /LT is LOW, all segments will be lit.
  • /RBI - Ripple blanking input. If the BCD value is zero and /RBI is LOW, all segments will be blank.
  • V0, V1, V2 - Selects the output when the BCD value is out of range.
  • X6 - When HIGH, the extra segment a will be lit on the digit 6.
  • X7 - When HIGH, the extra segment f will be lit on the digit 7.
  • X9 - When HIGH, the extra segment d will be lit on the digit 9.
  • A, B, C, D - BCD input from least significant bit A to most significant bit D.
  • a, b, c, d, e, f, g - Outputs for a seven segment display.
  • /RBO - Ripple blanking output. HIGH when BCD value is nonzero or /RBI is HIGH.

The pin assignments in this mode are:

Dedicated Input Dedicated Output Bidirectional
0 A Segment a Input - X6
1 B Segment b Input - X7
2 C Segment c Input - X9
3 D Segment d Input - /LT
4 V0 Segment e Input - /BI
5 V1 Segment f Input - /AL
6 V2 Segment g Input - LOW
7 /RBI /RBO Input - LOW

ASCII to seven segment decoder

This mode converts an ASCII character to a representation on a standard seven segment display. Like with the BCD decoder, there are inputs that affect the display of the digits 6, 7, and 9. There are also two choices of “font” and the option to display lowercase letters as uppercase or as lowercase.

The signals used in this mode are:

  • /AL - Active low. If HIGH, outputs will be HIGH when lit. If LOW, outputs will be LOW when lit.
  • /BI - Blanking input. If LOW, all segments will be blank regardless of other inputs.
  • FS - Font select. Selects one of two “fonts.”
  • LC - Lower case. If LOW, lowercase letters will appear as uppercase.
  • X6 - When HIGH, the extra segment a will be lit on the digit 6.
  • X7 - When HIGH, the extra segment f will be lit on the digit 7.
  • X9 - When HIGH, the extra segment d will be lit on the digit 9.
  • D0...D6 - ASCII input from least significant bit D0 to most significant bit D6.
  • a, b, c, d, e, f, g - Outputs for a seven segment display.
  • /LTR - Letter. LOW when the input is a letter (A...Z or a...z).

The pin assignments in this mode are:

Dedicated Input Dedicated Output Bidirectional
0 D0 Segment a Input - X6
1 D1 Segment b Input - X7
2 D2 Segment c Input - X9
3 D3 Segment d Input - FS
4 D4 Segment e Input - /BI
5 D5 Segment f Input - /AL
6 D6 Segment g Input - HIGH
7 LC /LTR Input - LOW

Dual BCD to Cistercian numeral decoder

This mode converts two decimal digits in BCD to their representations on the segmented display for Cistercian numerals shown below.

The patterns produced for each input value are shown below.

The signals used in this mode are:

  • /AL - Active low. If HIGH, outputs will be HIGH when lit. If LOW, outputs will be LOW when lit.
  • /BI - Blanking input. If LOW, all segments will be blank regardless of other inputs, including /LT1 and /LT2.
  • /LT1 - Lamp test for digit 1. When /BI is HIGH and /LT1 is LOW, all segments for digit 1 will be lit.
  • /LT2 - Lamp test for digit 2. When /BI is HIGH and /LT2 is LOW, all segments for digit 2 will be lit.
  • A1, B1, C1, D1 - BCD input for digit 1 from least significant bit A1 to most significant bit D1.
  • A2, B2, C2, D2 - BCD input for digit 2 from least significant bit A2 to most significant bit D2.
  • U1, V1, W1, X1, Y1 - Outputs for digit 1 on a Cistercian segmented display.
  • U2, V2, W2, X2, Y2 - Outputs for digit 2 on a Cistercian segmented display.

The pin assignments in this mode are:

Dedicated Input Dedicated Output Bidirectional
0 A1 Segment U1 Output - Y1
1 B1 Segment U2 Output - Y2
2 C1 Segment V1 Input - /LT1
3 D1 Segment V2 Input - /LT2
4 A2 Segment W1 Input - /BI
5 B2 Segment W2 Input - /AL
6 C2 Segment X1 Input - LOW
7 D2 Segment X2 Input - HIGH

BCV to Kaktovik numeral decoder

This mode converts a vigesimal (base 20) digit in BCV (binary-coded vigesimal) to its representation on the segmented display for Kaktovik numerals shown below.

The patterns produced for each input value are shown below.

The signals used in this mode are:

  • /AL - Active low. If HIGH, outputs will be HIGH when lit. If LOW, outputs will be LOW when lit.
  • /BI - Blanking input. If LOW, all segments will be blank regardless of other inputs, including /LT.
  • /LT - Lamp test. When /BI is HIGH and /LT is LOW, all segments will be lit.
  • /RBI - Ripple blanking input. If the BCV value is zero and /RBI is LOW, all segments will be blank.
  • /VBI - Overflow blanking input. If the BCV value is out of range and /VBI is LOW, all segments will be blank.
  • A, B, C, D, E - BCV input from least significant bit A to most significant bit E.
  • a, b, c, d, e, f, g, h - Outputs for a Kaktovik segmented display.
  • /RBO - Ripple blanking output. HIGH when BCV value is nonzero or /RBI is HIGH.
  • V - Overflow. HIGH when BCV value is out of range (greater than or equal to 20).

The pin assignments in this mode are:

Dedicated Input Dedicated Output Bidirectional
0 A Segment a Output - h
1 B Segment b Output - V
2 C Segment c
3 D Segment d Input - /LT
4 E Segment e Input - /BI
5 Segment f Input - /AL
6 /VBI Segment g Input - HIGH
7 /RBI /RBO Input - HIGH

How to test

The test directory includes extensive tests for each of the four modules.

External hardware

For the BCD and ASCII modes, a standard seven-segment display is used.

For the Cistercian mode, a segmented display like the one below is used. There are design files for such a display here.

For the Kaktovik mode, a segmented display like the one below is used. There are design files for such a display here.

IO

#InputOutputBidirectional
0A; D0; A1; ASegment a; U1; aX6; X6; Y1; h
1B; D1; B1; BSegment b; U2; bX7; X7; Y2; V
2C; D2; C1; CSegment c; V1; cX9; X9; /LT1; -
3D; D3; D1; DSegment d; V2; d/LT; FS; /LT2; /LT
4V0; D4; A2; ESegment e; W1; e/BI (blanking input)
5V1; D5; B2; -Segment f; W2; f/AL (active low)
6V2; D6; C2; /VBISegment g; X1; gM0 (mode select)
7/RBI; LC; D2; /RBI/RBO; /LTR; X2; /RBOM1 (mode select)

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (TinyTapeout 8 Factory Test) tt_um_oscillating_bones (Oscillating Bones) tt_um_urish_charge_pump (Dickson Charge Pump) tt_um_bgr_agolmanesh (Bandgap Reference) tt_um_tnt_diff_rx (TT08 Differential Receiver test) tt_um_rejunity_vga_logo (VGA Tiny Logo (1 tile)) tt_um_tommythorn_maxbw (Asynchronous Multiplier) tt_um_mattvenn_r2r_dac_3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_urish_simon (Simon Says memory game) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_mattvenn_rgb_mixer (RGB Mixer demo5) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_find_the_damn_issue (Find The Damn Issue) tt_um_brandonramos_VGA_Pong_with_NES_Controllers (VGA Pong with NES Controllers) tt_um_kb2ghz_xalu (4-bit minicomputer ALU) tt_um_rebeccargb_intercal_alu (INTERCAL ALU) tt_um_a1k0n_demo (Demo by a1k0n) tt_um_rburt16_bias_generator (Bias Generator) tt_um_zec_square1 ("SQUARE-1": VGA/audio demo) tt_um_jmack2201 (Sprite Bouncer with Looping Background Options) tt_um_ran_DanielZhu (Dice) tt_um_gfg_development_tinymandelbrot (TinyMandelbrot) tt_um_LnL_SoC (Lab and Lectures SoC) tt_um_htfab_pi_snake (Pi Snake) tt_um_tt08_aicd_playground (AICD Playground) tt_um_toivoh_demo (Sequential Shadows [TT08 demo competition]) tt_um_quarren42_demoscene_top (asic design is my passion) tt_um_crispy_vga (Crispy VGA) tt_um_MichaelBell_canon (TT08 Pachelbel's Canon demo) tt_um_shuangyu_top (Calculator) tt_um_wokwi_407306064811090945 (DDR throughput and flop aperature test) tt_um_08_sws (Sine Wave Synthesizer) tt_um_favoritohjs_scroller (VGA Scroller) tt_um_tt08_wirecube (Wirecube) tt_um_vga_glyph_mode (Glyph Mode) tt_um_a1k0n_vgadonut (VGA donut) tt_um_roy1707018 (RO) tt_um_analog_factory_test (TT08 Analog Factory Test) tt_um_sign_addsub (CMOS design of 4-bit Signed Adder Subtractor) tt_um_tinytapeout_logo_screensaver (VGA Screensaver with Tiny Tapeout Logo) tt_um_patater_demokit (Patater Demo Kit Waggling Rainbow on a Chip) tt_um_algofoogle_tt08_vga_fun (TT08 VGA FUN!) tt_um_simon_cipher (simon_cipher) tt_um_thexeno_rgbw_controller (Color Controller) tt_um_demosiine_sda (DemoSiine) tt_um_bytex64_munch (Munch) tt_um_alexjaeger_ringoscillator (5MHz Ring Oscillator) tt_um_cfib_demo (cfib Demoscene Entry) tt_um_wokwi_407852791999030273 (Simple 8 Bit ALU) tt_um_Richard28277 (4-bit ALU) tt_um_betz_morse_keyer (Morse Code Keyer) tt_um_nvious_graphics (nVious Graphics) tt_um_tiny_pll (Tiny PLL) tt_um_ezchips_calc (8-Bit Calculator) tt_um_hack_cpu (HACK CPU) tt_um_noritsuna_Vctrl_LC_oscillator (Voltage Controlled LC-Oscillator) tt_um_ring_divider (Divided Ring Oscillator) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_morningjava_r2r_from_matt (Bucket Brigade) tt_um_ephrenm_tsal (TSAL_TT) tt_um_kapilan_alarm (Alarm Clock) tt_um_stochastic_addmultiply_CL123abc (Stochastic Multiplier, Adder and Self-Multiplier) tt_um_wokwi_407760296956596225 (tt08-octal-alu) tt_um_dlfloatmac (DL float MAC) tt_um_wakki_0123_Raw_Transistors (Raw_Transistors) tt_um_faramire_rotary_ring_wrapper (Rotary Encoder WS2812B Control) tt_um_devstdin_LDO_OSC (LDO BG IREF OSC) tt_um_frequency_counter (Frequency Counter SSD1306 OLED) tt_um_rom_test (TT08 SKY130 ROM 'YOLO' Test) tt_um_i2c_peripheral_stevej (i2c peripherals: leading zero count and fnv-1a hash) tt_um_yuri_panchul_schoolriscv_cpu_with_fibonacci_program (schoolRISCV CPU with Fibonacci program) tt_um_yuri_panchul_adder_with_flow_control (Adder with Flow Control) tt_um_brailliance (Brailliance) tt_um_nyan (nyan) tt_um_MichaelBell_mandelbrot (VGA Mandelbrot) tt_um_ssp_opamp (2-stage Opamp Designs) tt_um_fountaincoder_top_ad (pulse_add) tt_um_edwintorok (Rounding error) tt_um_mac (MAC) tt_um_dpmu (DPMU) tt_um_JAC_EE_segdecode (7 Segment Decode) tt_um_wokwi_408118380088342529 (Traffic-light-sequence) tt_um_shiftreg_test (TT08 SKY130 Shift Register 'YOLO' Test) tt_um_yuri_panchul_sea_battle_vga_game (Sea Battle) tt_um_benpayne_ps2_decoder (PS2 Decoder) tt_um_meriac_play_tune (Super Mario Tune on A Piezo Speaker) tt_um_comm_ic_bhavuk (Comm_IC) tt_um_daosvik_aesinvsbox (AES Inverse S-box) tt_um_wokwi_408216451206371329 (Logic Test) tt_um_micro_tiles_container (Micro tile container) tt_um_cattuto_sr_latch (TT08 - experiments with latch-based shift registers) tt_um_rejunity_vga_test01 (VGA Drop (audio/visual demo)) tt_um_silice (Warp) tt_um_wokwi_408231820749720577 (Abacus Lock) tt_um_jayjaywong12 (mulmul) tt_um_emmyxu_obstacle_detection (Obstacle Detection) tt_um_neural_navigators (Neural Net ASIC) tt_um_a1k0n_nyancat (VGA Nyan Cat) tt_um_rebeccargb_styler (Styler) tt_um_resfuzzy (resfuzzy) tt_um_cejmu (CEJMU Beers and Adders) tt_um_16_mic_beamformer_arghunter (16 Mic Beamformer) tt_um_pdm_pitch_filter_arghunter (PDM Pitch Filter) tt_um_pdm_correlator_arghunter (PDM Correlator) tt_um_ddc_arghunter (DDC) tt_um_i2s_to_pwm_arghunter (I2S to PWM ) tt_um_georgboecherer_vco (Analog Voltage Controlled Oscillator) tt_um_supermic_arghunter (Supermic ) tt_um_dmtd_arghunter (DMTD ) tt_um_htfab_bouncy_capsule (Bouncy Capsule) tt_um_samuelm_pwm_generator (PWM generator) tt_um_mattvenn_analog_ring_osc (Ring Oscillators) tt_um_toivoh_demo_deluxe (Sequential Shadows Deluxe [TT08 demo competition]) tt_um_vga_clock (VGA clock) tt_um_z2a_rgb_mixer (RGB Mixer demo) tt_um_faramire_stopwatch (Simple Stopwatch) tt_um_micro_tiles_container_group2 (Micro tile container (group 2)) tt_um_johshoff_metaballs (Metaballs) tt_um_top (Flame demo) tt_um_NicklausThompson_SkyKing (SkyKing Demo) tt_um_Electom_cla_4bits (4-bit CLA) tt_um_vga_cbtest (Generate VGA output for Color Blindness Test) tt_um_zoom_zoom (Zoom Zoom) tt_um_dpmunit (DPM_Unit) tt_um_clock_divider_arghunter (Clock Divider ) tt_um_dlmiles_poc_fskmodem_hdlctrx (FSK Modem +HDLC +UART (PoC)) tt_um_emilian_muxpga (TinyFPGA resubmit for TT08) tt_um_pyamnihc_dummy_counter (Dummy Counter) tt_um_whynot (Why not?) tt_um_sudana_ota5t_1 (5-T OTA) tt_um_dlmiles_tt08_poc_uart (UART) tt_um_dendraws_donut (donut) tt_um_wokwi_408237988946759681 (Counter) tt_um_tmkong_rgb_mixer (RGB Mixer) Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available