A/D Converter Control

Preview:

DESCRIPTION

A/D Converter Control. Discussion D8.6 Rev. B – 3/14/2006. Analog-to-Digital Converters. Converts analog signals to digital signals 8-bit: 0 – 255 10-bit: 0 – 1023 12-bit: 0 – 4095 Successive Approximation. Method of Successive Approximation. Implementing Successive Approximation. - PowerPoint PPT Presentation

Citation preview

A/D ConverterControl

Discussion D8.6

Rev. B – 3/14/2006

Analog-to-Digital Converters

• Converts analog signals to digital signals– 8-bit: 0 – 255– 10-bit: 0 – 1023– 12-bit: 0 – 4095

• Successive Approximation

Method of Successive Approximation

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

Control

D/A Converter

V

V

in

DA

Binary OutputC+

-

Implementing Successive Approximation

Control

D/A Converter

V

V

in

DA

Binary OutputC+

-

Implementing Successive Approximation

2R

2R

2R

2R

2R

R

R

R

VB3

B2

B1

B0

ControlUnit Datapath

sarCPLD

Vin

gt

adstart

adflg adreg

Analog in

Digital out

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

2R

2R

2R

2R

2R

R

R

R

VB3

B2

B1

B0

ControlUnit Datapath

sarCPLD

Vin

gt

adstart

adflg adreg

Analog in

Digital out

A/D CPLD Control

DatapathControl Unit

done

clr clk reset clk

sarld

adreg[3:0]

sar[3:0]

adld

sh

adstart

gt

msel

adflg

Use Mealy Machine

Inputs to C1:adstart, gt, done

Outputs from C2:sarald, sh, adld, msel, adflg

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

egis

ter

C1

C2

DatapathControl Unit

done

clr clk reset clk

sarld

adreg[3:0]

sar[3:0]

adld

sh

adstart

gt

msel

adflg

2R

2R

2R

2R

2R

R

R

R

VB3

B2

B1

B0

ControlUnit Datapath

sarCPLD

Vin

gt

adstart

adflg adreg

Analog in

Digital out

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

A/D Control Unit

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

Why won't this work?

sarReg

adReg

Done

clk

msel

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

mux1

sarin

sarmask

A B

0 1

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

sarReg

adReg

Done

clk

msel

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

mux1

sarin

sar

mask

A B

0 1

Note: sar must be1000 on reset so that gt can be set properly.

Now we don't need the mux or the AND gates!

sarReg

adReg

Done

clk

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

sar

sar

mask

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

sarld sarReg maskR sar gt 0 0000 1000 1000 1 1 1000 0100 1100 0 0 1000 0010 1010 1 1 1010 0001 1011 0 0 1010 0000 1010

A Mealy state machine

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

eg

iste

r

C1

C2

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

ADctl

sarReg

adReg

Done

clk

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

sar

sar

mask

DatapathControl Unit

done

clr clk reset clk

sarld

adreg[3:0]

sar[3:0]

adld

sh

adstart

gt

adflg

A Mealy state machine

Use one-hot encoding: one flip-flop per state

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

egis

ter

C1

C2

module DFF (D, clk, clr, Q);

input clk, clr ;wire clk, clr ;input D ;wire D ;

output Q ;reg Q ;

always @(posedge clk or posedge clr)if(clr == 1)

Q <= 0;else

Q <= D;endmodule

CLK

D Q

~Qclk

D Q

clr

DFF

module DFF1 (D, clk, reset, Q);

input clk, reset;wire clk, reset ;input D ;wire D ;

output Q ;reg Q ;

always @(posedge clk or posedge reset)if(reset == 1)

Q <= 1;else

Q <= D;endmodule

CLK

D Q

~Qclk

D Q

reset

DFF1

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

eg

iste

r

C1

C2

// adconv controlmodule ADctrl(Clk, Clear, gt, adstart, done, sarld, sh, adld, adflg); input Clk, Clear, gt, adstart, done;

output sarld, sh, adld, adflg;wire msel, sarld, sh, adld, adflg;

wire start, keep, remove; wire startD, keepD, removeD;

assign startD = start & ~adstart | keep & done | remove & done;assign keepD = start & adstart & gt | keep & gt & ~done

| remove & gt & ~done;assign removeD = start & adstart & ~gt | keep & ~gt & ~done

| remove & ~gt & ~done;

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

DFF1 startFF(.D(startD), .clk(Clk), .reset(Clear), .Q(start));DFF keepFF(.D(keepD), .clk(Clk), .clr(Clear), .Q(keep));DFF removeFF(.D(removeD), .clk(Clk), .clr(Clear), .Q(remove));

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)S

tate

Reg

iste

r

C1

C2

// C2 Outputsassign adflg = done;assign adld = done;assign sarld = gt & keep | gt & remove | gt & adstart & start;assign sh = ~done & keep | ~done & remove | adstart & start;

endmodule

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

eg

iste

r

C1

C2

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

// Title : A/D convertermodule adconv(clock, clear, adstart, gt, adflg, sar, adreg); input clock, clear, adstart, gt; output adflg; output [3:0] sar, adreg; wire adflg, sarld, adld, sh, done; wire [3:0] sar, adreg;

ADpath adc1(.clk(clock),.reset(clear),.sh(sh),.sarld(sarld),.adld(adld),.sar(sar),.ADR(adreg),.done(done));

ADctrladc2(.Clk(clock),.Clear(clear),.gt(gt),.adstart(adstart),.done(done),.sarld(sarld),.sh(sh),.adld(adld), .adflg(adflg));

endmodule

DatapathControl Unit

done

clr clk reset clk

sarld

adreg[3:0]

sar[3:0]

adld

sh

adstart

gt

adflg

A Mealy state machine

Use binary encoding: two flip-flops

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

egis

ter

C1

C2

// adconv controlmodule ADctrl(Clk, Clear, gt, adstart, zero, msel, sarld, sh, adld, adflg); input Clk, Clear, gt, adstart, zero; output sarld, sh, adld, adflg; reg msel, sarld, sh, adld, adflg; reg[2:0] present_state, next_state; parameter start = 2'b00, keep = 2'b01, remove = 2'b11;

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

always @(posedge Clk or posedge Clear) begin if (Clear == 1) present_state <= start; else present_state <= next_state; end

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)S

tate

Re

gis

ter

C1

C2

always @(present_state or adstart or gt or done)begin case(present_state) start: if(adstart == 1)

next_state <= load; else if(gt == 1)

next_state <= keep; else next_state <= remove;

keep: if(done == 1) next_state <= start; else if(gt == 1)

next_state <= keep; else next_state <= remove;

remove: if(done == 1) next_state <= start; else if(gt == 1)

next_state <= keep; else next_state <= remove;

default next_state <= start; endcaseend

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

clear

clk

Presentstate

Nextstate

Presentinput Present

output

x(t)

s(t)

s(t+1)

z(t)

Sta

te R

eg

iste

r

C1

C2

// C2 Outputsassign adflg = done;assign adld = done;assign sarld = gt & keep | gt & remove | gt & adstart & start;assign sh = ~done & keep | ~done & remove | adstart & start;

endmodule

sarReg

adReg

Done

clk

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

sar

sar

mask

2R

2R

2R

2R

2R

R

R

R

VB3

B2

B1

B0

ControlUnit Datapath

sarCPLD

Vin

gt

adstart

adflg adreg

Analog in

Digital out

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

A/D Control Unit

start

removekeep

~adstart

adstart & ~gt

adstart & gt done

done

~done & ~gt~done & gt

~done & ~gt

~done & gt

sarReg

adReg

Done

clk

resetsarld maskR

clk

resetsh

clk

resetadld

ADR

sar

sar

mask

// Title : A/D convertermodule adconv(clock, clear, adstart, gt, adflg, sar, adreg); input clock, clear, adstart, gt; output adflg; output [3:0] sar, adreg; wire adflg, msel, sarld, adld, sh, done; wire [3:0] sar, adreg;

ADpath adc1(.clk(clock),.reset(clear),.sh(sh),.sarld(sarld),.adld(adld),.sar(sar),.ADR(adreg),.done(done));

ADctrl adc2(.Clk(clock),.Clear(clear),.gt(gt),.adstart(adstart),

.done(done),.sarld(sarld),.sh(sh),

.adld(adld), .adflg(adflg));

endmodule

DatapathControl Unit

done

clr clk reset clk

sarld

adreg[3:0]

sar[3:0]

adld

sh

adstart

gt

adflg

binbcd4 hex7seg AtoG[6:0]

AAtoGG segmentsb,c

LEDR[3:0]

P[3:0]

P[4]

adconvadreg

sar gt

To D/Aconverter

18-bit counter4 MHzclock S2

clk clr

Q[7]15.625 KHzclock

adstart

adflg

Lab 9

Recommended