Modeling Digital to Analog Converters
The basic approach to modeling DACs is to simply multiply the integer input by a real scale factor to determine the output signal level. Here is this basic approach implemented in Verilog-AMS with an electrical output:
module dac (out_p, out_n, in, clock, enable, vdda, gnda);
output out_p, out_n; electrical out_p, out_n;
input signed [7:0] in
input clock, enable;
input vdda; electrical vdda;
input gnda; electrical gnda;
parameter real tt = 100n from (0:inf);
real value;
always @(posedge clock) begin
if (enable)
value = in/256.0;
else
value = 0
end
always @(negedge enable)
value = 0
analog begin
// drive the differential output
V(out_p) <+ V(vdda)/2 + transition(value, 0, tt);
V(out_n) <+ V(vdda)/2 - transition(value, 0, tt);
end
endmodule
And here is the same model with a wreal output:
module dac (out_p, out_n, in, clock, enable, vdda, gnda);
output out_p, out_n; wreal out_p, out_n;
input signed [7:0] in
input clock, enable;
input vdda; wreal vdda;
input gnda;
parameter real tt = 100n from (0:inf);
real value;
always @(posedge clock) begin
if (enable)
value = in/256.0;
else
value = 0
end
always @(negedge enable)
value = 0
// drive the differential output
assign out_p = vdda + value;
assign out_n = vdda - value;
endmodule
Things are a bit more tricky if you are limited to using Verilog-A, but such a model is demonstrated here.