首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于在Omnet++中模拟时钟模块的问题

问关于在Omnet++中模拟时钟模块的问题
EN

Stack Overflow用户
提问于 2018-11-20 00:18:12
回答 1查看 54关注 0票数 0

场景:

节点1(发送方)具有本地时钟(40.000 MHz),并将此时钟信号作为连续比特流(01010101...)发送。在到节点2(接收器)的串行(即光纤)链路上。

节点2具有它自己的(本地或全局,例如41.000 MHz)时钟,并且必须使用它从节点1接收的(时钟)数据来确定节点1的本地时钟相对于它自己的时钟的相位和频率。

或者,我可以考虑节点1以明确定义的40.000 MHz的频率向节点2发送单独的消息。同样,节点2(具有其自己的本地或全局41.000 MHz时钟)必须使用从节点1接收的消息的到达定时来确定节点1的本地时钟相对于其自身时钟的相位和频率

问:我如何在OMNet++中实现这两个场景?

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 01:05:44

我不知道OMNet++,但如果你有两个时钟的滴答声,你会

代码语言:javascript
复制
the_other_clocks_freq = the_other_clocks_ticks*your_own_freq/your_own_ticks

工作来获取频率吗?示例:

代码语言:javascript
复制
#include <iostream>

class Clock {
    uint64_t m_freq;
    uint64_t m_ticks;
public:
    Clock(uint64_t Base) : m_freq(Base), m_ticks(0) {}
    void tick() { ++m_ticks; }
    operator double () const { return static_cast<double>(m_ticks)/static_cast<double>(m_freq); }
    uint64_t getTicks() const { return m_ticks; }
    uint64_t getOtherClockFreq(uint64_t other_ticks) {
        return (other_ticks*m_freq)/m_ticks;
    }

};
int main() {
    Clock Node1(40000000);
    Clock Node2(41000000);

    // simulate 0.00075s
    for(int i=0; i<40000*75/100; ++i) Node1.tick();
    for(int i=0; i<41000*75/100; ++i) Node2.tick();

    std::cout << Node1 << "s\n"; // 0.00075s
    std::cout << Node2 << "s\n"; // 0.00075s

    // calculate the base freq of the other clock
    std::cout << Node1.getOtherClockFreq(Node2.getTicks()) << " Node2 base\n";
    std::cout << Node2.getOtherClockFreq(Node1.getTicks()) << " Node1 base\n";
}

输出

代码语言:javascript
复制
0.00075s
0.00075s
41000000 Node2 base
40000000 Node1 base

在这种速度下,你可能需要比uint64_t更大的东西来存储滴答…我不知道在这种情况下是什么阶段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53378750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档