0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Simulink_DFF

Last updated at Posted at 2024-12-16
function [Q, Q_bar] = DFF(D, CLK, ICLR)
% D Flip-Flop 動作のSimulink用関数
% 入力: D - データ, CLK - クロック, ICLR - 非同期クリア
% 出力: Q - 主出力, Q_bar - 反転出力

% 初期化状態
persistent Q_reg prev_CLK

% 初回実行時の初期化
if isempty(Q_reg)
    Q_reg = 0;      % 初回実行時にレジスタを0で初期化
    prev_CLK = 0;   % 初回実行時のクロック値
end

% 離散動作: ICLR が 1 の場合はリセット
if ICLR
    Q_reg = 0;
else
    % クロックの立ち上がりエッジで D を Q に反映
    if CLK && ~prev_CLK  % クロックが立ち上がるタイミング
        Q_reg = D;
    end
end

% クロック値を更新
prev_CLK = CLK;

% 出力
Q = Q_reg;        % 主出力
Q_bar = ~Q_reg;   % 反転出力
end
function [Q, Q_bar] = DFF(D, CLK, ICLR)
% D Flip-Flop 動作のSimulink用関数
% 入力: D - データ, CLK - クロック, ICLR - 非同期クリア
% 出力: Q - 主出力, Q_bar - 反転出力

% 初期化状態
Q = 0;

% 離散動作: ICLR が 1 の場合はリセット
if ICLR
    Q = 0;
else
    % クロックの立ち上がりエッジで D を Q に反映
    if CLK
        Q = D;
    end
end

% 反転出力
Q_bar = ~Q;
end



function [Q, Q_bar] = DFF(D, CLK, ICLR)
% D Flip-Flopの動作をシミュレートする関数
% 入力:
%   D    - データ入力
%   CLK  - クロック入力
%   ICLR - 非同期クリア入力 (1でリセット)
% 出力:
%   Q     - メイン出力
%   Q_bar - Qの反転出力

% 静的変数の定義 (前回のQを保持するため)
persistent Q_prev

% 初期化 (シミュレーションの最初にQ_prevを0に設定)
if isempty(Q_prev)
    Q_prev = 0;
end

% 非同期クリア (ICLR) が1の場合、Qをリセット
if ICLR == 1
    Q = 0;
else
    % クロックの立ち上がりエッジでDの値をQに反映
    if rising_edge(CLK)
        Q = D;
    else
        % 変化しない場合は前回の値を保持
        Q = Q_prev;
    end
end

% Qの反転出力を生成
Q_bar = ~Q;

% Q_prevを更新
Q_prev = Q;
end

% 補助関数: クロックの立ち上がりエッジ検出
function result = rising_edge(CLK)
    persistent CLK_prev
    if isempty(CLK_prev)
        CLK_prev = 0;
    end
    result = (CLK_prev == 0) && (CLK == 1);
    CLK_prev = CLK;
end

image.png
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?