1.5ビットパイプラインADCのSimulink再現


https://qiita.com/qwer123123/items/208d88daf7a2a55933d3

こちらの派生 MATLAB function


```
function [digital_value, next_voltage, D1, D2] = voltage_processing(Vin, VREF, hold_clock)
    % 1.5ビット探索アルゴリズム
    
    % 出力の初期化
    digital_value = 0;
    next_voltage = 0;
    D1 = 0;
    D2 = 0;
    
    % hold_clockが1であるか確認、そうでない場合は出力は0のまま
    if hold_clock == 1
        % 条件 1: 0 < Vin < 3/8 * VREF
        if Vin > 0 && Vin < (3/8) * VREF
            digital_value = 0;  % デジタル値は00（二進数）
            next_voltage = 2 * Vin;
            D1 = 0;  % D1を0に設定
            D2 = 0;  % D2を0に設定

        % 条件 2: 3/8 * VREF <= Vin < 4/8 * VREF
        elseif Vin >= (3/8) * VREF && Vin < (4/8) * VREF
            digital_value = 1;  % デジタル値は01（二進数）
            next_voltage = 2 * Vin - VREF / 2;
            D1 = 1;  % D1を1に設定
            D2 = 0;  % D2を0に設定

        % 条件 3: 4/8 * VREF <= Vin < 5/8 * VREF
        elseif Vin >= (4/8) * VREF && Vin < (5/8) * VREF
            digital_value = 1;  % デジタル値は01（二進数）
            next_voltage = 2 * Vin - VREF / 2;
            D1 = 0;  % D1を0に設定
            D2 = 1;  % D2を1に設定

        % 条件 4: 5/8 * VREF <= Vin < VREF
        elseif Vin >= (5/8) * VREF && Vin < VREF
            digital_value = 2;  % デジタル値は10（二進数）
            next_voltage = 2 * Vin - VREF;
            D1 = 1;  % D1を1に設定
            D2 = 1;  % D2を1に設定
        end
    end
end

```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/ed68515a-44c8-c09a-c95a-a5eddcc87e90.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/0a393092-b2ac-0017-d932-220b2abc2f0a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/374c921d-ae69-bcbf-872a-da62560487a6.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/8645276b-4ea5-4b53-88b3-839f7410fb2a.png)



参考資料

https://miscellaneous.tokyo/blog/pipeline-adc/





https://www.ssc.pe.titech.ac.jp/private/publications/2004/20040714_miyahara_ppt.pdf




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/473d3e92-5048-e9fd-50ed-49896a7e3811.png)

```

% 逐次比較型ADC用MATLAB関数
function [Vout, D] = successive_approx_adc(Vin, VDD, bit_generation_clock)
    % 入力:
    %   Vin  - 入力電圧
    %   VDD  - 電源電圧
    %   bit_generation_clock    - ビット生成用のクロック (0 または 1)
    % 出力:
    %   Vout - 残差電圧
    %   D    - ビット出力 (0 または 1)
    
    % 基準電圧 VREF = VDD / 2
    VREF = VDD / 2;
    
    % クロックが0のとき出力はすべて0
    if bit_generation_clock == 0
        Vout = 0;
        D = 0;
        return; % クロックが0の場合、出力は更新されず終了
    end
    
    % クロックが1のとき、入力電圧に応じて計算
    if Vin > VREF
        Vout = 2 * (Vin - VREF); % VinがVREFより大きい場合
        D = 1;                   % ビット出力は1
    else
        Vout = 2 * Vin;          % VinがVREFより小さい場合
        D = 0;                   % ビット出力は0
    end
end

% クロックが0から1になると値を更新する関数
function y = fcn(u, VDD, bit_generation_clock)
    % fcn - クロックが0から1になるときに出力を更新する
    % 入力:
    %   u   - 入力電圧
    %   VDD - 電源電圧
    %   bit_generation_clock   - ビット生成用クロック信号 (0 または 1)
    % 出力:
    %   y   - 出力電圧 (Voutとビット出力)

    % 初期出力は全て0に設定
    persistent Vout D
    if isempty(Vout)
        Vout = 0;
        D = 0;
    end
    
    % クロックが0から1に変わったときのみ値を更新
    if bit_generation_clock == 1
        [Vout, D] = successive_approx_adc(u, VDD, bit_generation_clock);
    end
    
    % 結果を出力
    y = [Vout, D];
end


```


```


function [sum, carry] = half_adder(A, B)
    % 半加算器の入力AとB
    % A, B: 2つの入力ビット（0 または 1）

    % 和（Sum）の計算
    sum = xor(A, B);  % XOR演算によって和を求める
    
    % 繰り上がり（Carry）の計算
    carry = and(A, B);  % AND演算によって繰り上がりを求める
end

```


```
function [sum, carry] = full_adder(A, B, C_in)
    % フルアダの入力 A, B, C_in
    % A, B: 2つの入力ビット（0 または 1）
    % C_in: 前回の繰り上がりビット（0 または 1）

    % 和（Sum）の計算
    sum = xor(xor(A, B), C_in);  % (A XOR B) XOR C_in
    
    % 繰り上がり（Carry）の計算
    carry = or(and(A, B), and(C_in, xor(A, B)));  % (A AND B) OR (C_in AND (A XOR B))
end



```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/6008da84-5bc1-aa84-59fe-d59b310d1c76.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759109/bc90331f-49f5-6ece-78c5-6c3935abb8a8.png)

https://item.rakuten.co.jp/bookfan/bk-4061565451/