Binary to Thermometer decoder in Cadence

4.9/5 - (17 votes)

A binary-to-thermometer decoder digital block is created in Cadence. The VHDL code example transforms an 8-bit vector into 256 thermometer signals.

Thermometer Code

[Cuadro texto=’The thermometer code converts an N-bit number into a series of ones followed by zeroes of size 2^n’]

 

The thermometer code, also referred to unary code, is useful to transform the input vector and use it to drive several switches, as I show in this example of a digitally controlled current source. Also, it is used to perform smoother transition during the most significant bit changes, instead of the binary-code.

Example Code

In this example, an 8-bit vector is going to be transformed into a 256 output vector (thermometer-encoded).

The thermometer coder block is written in VHDL, but it could be extrapolated to Verilog:

--Libraries declaration
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_arith.all; 
use ieee.std_logic_unsigned.all;

entity thermometer is
    port
    (
        vector_in : in std_logic_vector(7 downto 0);
        vector_out : out std_logic_vector(255 downto 0)
    );
end entity;

architecture vhdlams of thermometer is
        signal salida : std_logic_vector(255 downto 0) := (others => '0');
begin
    process(vector_in)
        variable intermediate: integer range 0 to 255;
        begin
            intermediate := CONV_INTEGER((vector_in));
            salida <= (others => '0');
                for i in 0 to intermediate loop
                    salida(i) <= '1';
                end loop;
        vector_out <= salida;
    end process; 
end vhdlams;

Test Bench

The Verilog block was simulated in Cadence. For the test bench, an 8-bit counter signal is given as an input vector to the block under test.

8bit ramp used as stimuli

The output waveform:

simulation of the thermometer coder

Leave a Comment

Your email address will not be published. Required fields are marked *