// Decimal to Thermometer decoder // Implements two options: // Start_Bit = 0: Decimal 0 equals thermometer 0 // Start_Bit = 1: Decimal 0 equals thermometer 1 // Change therm_bits variable for your needs! // Author: A. Sidun // Source: AnalogHub.ie `include "constants.vams" `include "disciplines.vams" `define therm_bits 10 // define number of output bits here module dec2therm(out); output [`therm_bits-1:0] out; voltage [`therm_bits-1:0] out; parameter real vdd = 5; // voltage level of logic 1 (V) parameter real vss = 0; // voltage level of logic 0 (V) parameter integer Decimal_Code = 5; // input decimal code parameter integer Start_Bit = 0; // defines if thermometer starts from 0 or 1 real dout[`therm_bits-1:0]; // internal result variable genvar i; analog begin case (Start_Bit) 0: begin // Decimal 0 equals thermometer 0 for(i=1;i<`therm_bits+1;i=i+1) begin if(Decimal_Code!=i) begin dout[i-1]=vss; end else begin dout[i-1]=vdd; end end end 1: begin // Decimal 0 equals thermometer 1 for(i=0;i<`therm_bits;i=i+1) begin if(Decimal_Code!=i) begin dout[i]=vss; end else begin dout[i]=vdd; end end end endcase // Plotting outputs for (i=0; i<`therm_bits; i=i+1) V(out[i]) <+ transition(dout[i],0,0); end endmodule