You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LS374锁存器数据验证方法正确性咨询

LS374锁存器工作状态验证方法咨询

我使用两片LS374锁存器,通过逻辑分析仪捕获了时钟信号(IOWR)触发下的锁存器输入、输出数据并保存为文本文件,编写了如下C++程序验证锁存器工作状态,但检测到部分时间段锁存数据异常,截图如下:

异常数据截图

#include <iostream>
#include <iomanip>
#include <vector>
#include <sstream>
#include <fstream>
#include <string>

using namespace std;

struct Data {
    double time;
    int latchA1, latchCS1, latchCS2;
    int D0, D1, D2, D3;
    int IOWR;
    int MPC_A1, MPC_CS1, MPC_CS2;
    int MPC_D0, MPC_D1, MPC_D2, MPC_D3;
};

// 从文本文件加载数据
vector<Data> loadData(const string& filename) {
    vector<Data> dataList;
    ifstream file(filename);

    if (!file.is_open()) {
        cerr << "打开文件失败。" << endl;
        return dataList;
    }

    string line;
    while (getline(file, line)) {
        stringstream ss(line);
        Data data;
        char comma;
        ss >> data.time >> comma
            >> data.latchA1 >> comma
            >> data.latchCS1 >> comma
            >> data.latchCS2 >> comma
            >> data.D0 >> comma
            >> data.D1 >> comma
            >> data.D2 >> comma
            >> data.D3 >> comma
            >> data.IOWR >> comma
            >> data.MPC_A1 >> comma
            >> data.MPC_CS1 >> comma
            >> data.MPC_CS2 >> comma
            >> data.MPC_D0 >> comma
            >> data.MPC_D1 >> comma
            >> data.MPC_D2 >> comma
            >> data.MPC_D3;
        dataList.push_back(data);
    }

    file.close();
    return dataList;
}

// 将锁存器输出组合为十六进制值
string combineQsToHex(const Data& data) {
    // 组合锁存器输出为8位值
    int latchOutput = (data.latchA1 << 6) | (data.latchCS1 << 5) | (data.latchCS2 << 4) | (data.D0 << 3) | (data.D1 << 2) | (data.D2 << 1) | data.D3;
    stringstream ss;
    ss << hex << setw(2) << setfill('0') << latchOutput;
    return ss.str();
}

// 将MPC输入组合为十六进制值
string combineDsToHex(const Data& data) {
    // 组合MPC输入为8位值
    int mpcInput = (data.MPC_A1 << 6) | (data.MPC_CS1 << 5) | (data.MPC_CS2 << 4) | (data.MPC_D0 << 3) | (data.MPC_D1 << 2) | (data.MPC_D2 << 1) | data.MPC_D3;
    stringstream ss;
    ss << hex << setw(2) << setfill('0') << mpcInput;
    return ss.str();
}

// 打印十六进制数据
void printHexData(const Data& data) {
    cout << "时间: " << fixed << setprecision(10) << data.time << "s\t";
    cout << "锁存器输出(十六进制): 0x" << combineQsToHex(data) << "\t";
    cout << "MPC输入(十六进制): 0x" << combineDsToHex(data) << endl;
}

// 处理锁存器数据
void processLatchData(const vector<Data>& dataList) {
    bool lastIOWRWas1 = false;
    bool transitionDetected = false;

    for (const auto& data : dataList) {
        if (data.IOWR == 0 && lastIOWRWas1 && !transitionDetected) {
            // 检测到从1到0的跳变
            transitionDetected = true;
        }
        else if (data.IOWR == 1 && transitionDetected) {
            // 检测到从0到1的跳变
            string latchHex = combineQsToHex(data);
            string mpcHex = combineDsToHex(data);
            if (latchHex == mpcHex) {
                printHexData(data);
            }
            else {
                cout << "时间 " << fixed << setprecision(10) << data.time << "s 处锁存数据异常" << endl;
                printHexData(data);
            }
            transitionDetected = false; // 重置跳变检测标志
        }
        lastIOWRWas1 = (data.IOWR == 1);
    }
}

int main() {
    string filename = "data.txt";  // 在此指定你的文件名
    vector<Data> dataList = loadData(filename);

    if (dataList.empty()) {
        cerr << "无数据可处理。" << endl;
        return 1;
    }

    processLatchData(dataList);

    return 0;
}

样本数据文件为30.07.2024 without internal lcd2.rar压缩包内的文本文件。

验证方法的问题分析

1. 触发逻辑匹配错误

LS374是上升沿触发锁存器,数据在时钟信号的上升沿(0→1)被锁存。当前代码检测的是IOWR完整的1→0→1周期后对比数据,没有捕获上升沿瞬间的输入输出状态,此时输入数据可能已经发生变化,导致对比结果不准确。

2. 数据位拼接不完整

LS374是8位锁存器,但你的combineQsToHex和combineDsToHex函数仅拼接了7位数据(从latchA1<<6到D3),缺失1位数据;同时需要确认位拼接顺序是否和硬件接线一致,若高低位颠倒也会导致数据对比异常。

3. 异常判断逻辑有局限

代码仅在IOWR完成完整高低高跳变后才检查数据,若逻辑分析仪采样点未完整覆盖跳变过程,可能遗漏真实异常或误判正常情况。

修正建议

  • 改为检测IOWR的上升沿(0→1),获取上升沿时刻的输入(MPC_)和锁存器输出(latch)数据进行对比
  • 补充缺失的第8位数据,确认硬件接线的位顺序,确保拼接逻辑与实际电路匹配
  • 增加上升沿前后的数据变化验证,确认锁存器触发后是否保持住了输入数据

内容的提问来源于stack exchange,提问作者Andre Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:30:59