973 Send Receive

973 : Send Receive

Design render
  • Author: Michael Ogata, Nelson Hastings, Samson Melamed
  • Description: A dual use project where you can set a project to either a sender or receiver and send bits
  • GitHub repository
  • Clock: 0 Hz

How it works

Send Recieve Project Description

A simple 4-value send/receive chip

This project realizes a very simple 4-value sender and receiver chip. The mode of the chip is determined by input 7: sender low, receiver high. Currently, the protocol only supports 1 sender and 1 receiver.

Sender Mode

Sender mode is enabled when Input[7] is set low. In sender mode, the chip looks for a rising value on bits 0:4 of the input bus. This can be achieved through the use of a 4-button PMOD module, or by toggling the corresponding DIP switch on the carrier board.

Sender Mode Input:

# Input Description
0 input[0] bit[0] to send
1 input[1] bit[1] to send
2 input[2] bit[2] to send
3 input[3] bit[3] to send
4 unused N/A
5 unused N/A
6 unused N/A
7 input[7] Sender/Receiver indicator

To send data, the sender pulls Output[0] high and relays the corresponding input bit (i) on Output[i+1] (Note: currently only one bit can be sent at a time). The Sender also sets Output[7] to indicate to the connected chip that it should operate in receiver mode.

Finally, The sender keeps Output[0] high long enough to prevent the receiver's debounce filtering from masking the signal before setting it low again.

Sender Mode Output:

# Output Description
0 Transmit Signal receiver to read data
1 x_bit[0] Transmit bit[0]
2 x_bit[1] Transmit bit[1]
3 x_bit[2] Transmit bit[2]
4 x_bit[3] Transmit bit[3]
5 unused N/A
6 unused N/A
7 Mode_of_connected_chip Sender/Receiver indicator

Receiver Mode

Receiver mode is enabled when Input[7] is set high. In receiver mode, the chip listens on Input[0:5]. It waits until the positive edge of Input[0] before registering an input.

Receiver Mode Input:

# Input Description
0 Read Read input bits
1 input[0] recv_ bit[0]
2 input[1] recv_ bit[1]
3 input[2] recv_ bit[2]
4 input[3] recv_ bit[3]
5 unused N/A
6 unused N/A
7 input[7] Sender/Receiver indicator

The chip utilizes the carrier chip's 7 segment display to echo a value corresponding to the input data:

Input[1:4] Output Value Display Value
1000 0000_0110 1
0100 0101_1011 2
0010 0110_0110 4
0001 0111_1111 8

The receiver initially displays zero (on the 7-segment display) until it receives the read signal from the sender. The receiver then displays the value received or an E when the value is not 1, 2, 4, and 8. The last value received, or E is displayed until the receives gets the signal to read the next value.

How to test

To connect two chips, configure them as follows:

  • Sender
    • Inputs: (Choose One)
      • None (i.e. the chip will read data from the carrier chip's DIP switches)
      • 6-pin, 4-button PMOD keypad plugged into Input[0-5] (top row)
    • Outputs:
      • Connect all 12 output pins to the inputs on the receiver
  • Receiver
    • Inputs
      • Power, ground, and all 8 data pins from the sender must be connected to the receiver's corresponding inputs. This requires the use of a specially crafted cross-over cable to ensure the correct connections.

picture of two chips connected as sender-receiver

External hardware

  • PMOD 4 button keypad

IO

#InputOutputBidirectional
0Input[0]/Message ReadyTransmit/LCD Display Value[0]
1Input[1]/recv_bit[0]input[0]/LCD Display Value[1]
2Input[2]/recv_bit[1]Input[1]/LCD Display Value[2]
3Input[3]/recv_bit[2]Input[2]/LCD Display Value[3]
4unused/recv_bit[3]Input[3]/LCD Display Value[4]
5unusedunused/LCD Display Value[5]
6unusedunused/LCD Display Value[6]
7Sender/Receiver Mode Select (0/1)Mode of connected chip//LCD Display Value[7]

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 7 Factory Test) tt_um_analog_factory_test (TT07 Analog Factory Test) tt_um_urish_charge_pump (Dickson Charge Pump) tt_um_adennen_inverter (Aron's analog buffer test) tt_um_rejunity_z80 (Zilog Z80) tt_um_kianv_bare_metal (KianV RISC-V RV32E Baremetal SoC) tt_um_macros77_subneg (SUBNEG CPU) tt_um_eater_8bit (Tiny Eater 8 Bit) tt_um_ender_clock (clock) tt_um_wokwi_397140982440144897 (7-Seg 'Tiny Tapeout' Display) tt_um_wokwi_397142450561071105 (Padlock) tt_um_Burrows_Katie (QIF Neuron) tt_um_vga_clock (VGA clock) tt_um_aidenfoxivey (CRC-8 CCITT) tt_um_PUF (Reversible logic based Ring-Oscillator Physically Unclonable Function (RO-PUF)) tt_um_devinatkin_dual_oscillator (dual oscillator) tt_um_urish_simon (Simon Says memory game) tt_um_ajstein_stopwatch (Stopwatch Project) tt_um_rnunes2311_12bit_sar_adc (12 bit SAR ADC) tt_um_DanielZhu123 (calculator) tt_um_wokwi_397268065185737729 (Mini Light Up Game) tt_um_toivoh_basilisc_2816 (Basilisc-2816) tt_um_MichaelBell_rle_vga (RLE Video Player) tt_um_wokwi_397774697322214401 (secret L) tt_um_ccattuto_charmatrix (Serial Character LED Matrix) tt_um_The_Chairman_send_receive (Send Receive) tt_um_mini_aie_2x2 (mini-aie-cgra) tt_um_twin_tee_opamp_osc (Twin Tee Sine Wave Generator) tt_um_brucemack_sb_mixer (Single Balanced Mixer) tt_um_revenantx86_tinytpu (TinyTPU) tt_um_chess (Chess) tt_um_vga_perlin (VGA Perlin Noise) tt_um_calonso88_74181 (ALU 74181) tt_um_tinytapeout_dvd_screensaver (DVD Screensaver with Tiny Tapeout Logo (Tiny VGA)) tt_um_TD4_Assy_KosugiSubaru (4bit_CPU_td4) tt_um_drburke3_top (FastMagnitudeComparator) tt_um_pongsagon_tiniest_gpu (Tiniest GPU) tt_um_jorga20j_prng (8 bit PRNG) tt_um_ejfogleman_smsdac8 (8-bit DEM R2R DAC) tt_um_ccattuto_conway (Conway's Terminal) tt_um_fp_mac (FP-8 MAC Module) tt_um_router (router) tt_um_serdes (SerDes) tt_um_rejunity_analog_dac_ay8913 (AY-8193 single channel DAC) tt_um_riscv_spi_wrapper (RISCV32I with spi wrapper) tt_um_mos_bandgap (MOS Bandgap) tt_um_shadow1229_vga_player (VGA player) tt_um_explorer (Explorer) tt_um_rtmc_top_jrpetrus (Real Time Motor Controller) tt_um_28add11_QOAdecode (QOA Decoder) tt_um_toivoh_basilisc_2816_cpu_OL2 (Basilisc-2816) tt_um_afasolino (integer to posit converter and adder ) tt_um_8bit_vector_compute_in_SRAM (8-bit Vector Compute-in-SRAM) tt_um_lfsr (LFSR) tt_um_tnt_diff_rx (TT07 Differential Receiver test) tt_um_urish_spell (SPELL) tt_um_underserved (underserved) tt_um_dpetrisko_ttdll (TTDLL) tt_um_mitssdd (co processor for precision farming) tt_um_wokwi_399192124046955521 (ECC_test1) tt_um_dusterthefirst_project (Communicate 433) tt_um_xeniarose_sha256 (tiny sha256) tt_um_njp_micro (MicroCode Multiplier) tt_um_VishalBingi_r2r_4b (4-bit R2R DAC) tt_um_lisa (LISA Microcontroller with TTLC) tt_um_template (TT7 Simple Clock) tt_um_seanyen0_SIMON (SIMON) tt_um_agurrier_mastermind (Mastermind) tt_um_KolosKoblasz_mixer (Gilbert Mixer) tt_um_Saitama225_comp (Analog comparator) tt_um_tt7_meonwara (TBD) tt_um_multiplier_mbm (Modified Booth Multiplier) tt_um_delay_line_tmng (Delay Line Time Multiplexed NAND Gate) tt_um_mandelbrot_accel (Mandelbrot Set Accelerator (32-bit IEEE 754)) tt_um_dvxf_dj8v_dac (DJ8 8-bit CPU w/ DAC) tt_um_obriensp_pll (PLL Playground) tt_um_unisnano (unisnano) tt_um_alfiero88_CurrentTrigger (Current Mode Trigger) tt_um_CktA_InstAmp (Instrumentation Amplifier for Electrocardiogram Signal Adquisition) tt_um_lcasimon_tdc (Analog TDC) tt_um_neural_network (Neural Network dinamic) tt_um_PS_PWM (Phase Shifted PWM Modulator) tt_um_litneet64_ro_puf (RO-based Physically Unclonable Function (PUF)) tt_um_wokwi_399163158804194305 (Digital Timer) tt_um_algofoogle_raybox_zero (raybox-zero TT07 edition) tt_um_wokwi_399336892246401025 (UART) tt_um_wokwi_399169514887574529 (Gaussian Blur) tt_um_maheredia (GPS signal generator) tt_um_pwm_elded (UACJ_PWM) tt_um_wokwi_399447152724198401 (8-Bit Register) tt_um_adonairc_dda (DDA solver for van der Pol oscillator) tt_um_6bitaddr (6 bit addr) tt_um_btflv_subleq (Subleq CPU with FRAM and UART) tt_um_emern_top (badGPU) tt_um_wokwi_399469995038350337 (dEFAULt 2hAC) tt_um_mixed_signal_pulse_gen (mixed_signal_pulse_gen) tt_um_maxluppe_digital_analog (All Digital DAC and Analog Comparators) tt_um_pyamnihc_dummy_counter (Dummy Counter) tt_um_wokwi_399488550855755777 (My 9-year-old son made an 8-bit counter chip) tt_um_toivoh_basilisc_2816_cpu_exp (Basilisc-2816 Experimental) tt_um_htfab_fprn (Field Programmable Resistor Network) tt_um_rejunity_ay8913 (Classic 8-bit era Programmable Sound Generator AY-3-8913) tt_um_maxluppe_NIST (Four NIST SP 800-22 tests implementation) tt_um_vga_snake (VGA Snake Game) tt_um_cm_1 (GDS counter-measures experiment 1) tt_um_nurirfansyah_alits02 (Analog Test Circuit ITS 2) tt_um_analog_rf_readout_circuit (RF_peripheral_circuits) tt_um_jleightcap (fractran-tt) tt_um_wokwi_399518371950068737 (Full-adder out of a kmap) tt_um_davidparent_hdl (PRBS Generator) tt_um_adia_psu_seq_test (Adiabatic PSU sequencer test) tt_um_spacecat_chan_john_pong_the_second (John Pong The Second) tt_um_rajum_iterativeMAC (Iterative MAC) tt_um_asinghani_tinywspr (TinyWSPR) tt_um_thatoddmailbox (DuckCPU) tt_um_rejunity_vga (VGA Checkers) tt_um_8bitadder (Ripple Carry Adder 8 bit) tt_um_vzayakov_top (Pong-VGA) tt_um_pa1mantri_cdc_fifo (Clock Domain Crossing FIFO) Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available