场景:
节点1(发送方)具有本地时钟(40.000 MHz),并将此时钟信号作为连续比特流(01010101...)发送。在到节点2(接收器)的串行(即光纤)链路上。
节点2具有它自己的(本地或全局,例如41.000 MHz)时钟,并且必须使用它从节点1接收的(时钟)数据来确定节点1的本地时钟相对于它自己的时钟的相位和频率。
或者,我可以考虑节点1以明确定义的40.000 MHz的频率向节点2发送单独的消息。同样,节点2(具有其自己的本地或全局41.000 MHz时钟)必须使用从节点1接收的消息的到达定时来确定节点1的本地时钟相对于其自身时钟的相位和频率
问:我如何在OMNet++中实现这两个场景?
发布于 2018-11-20 01:05:44
我不知道OMNet++,但如果你有两个时钟的滴答声,你会
the_other_clocks_freq = the_other_clocks_ticks*your_own_freq/your_own_ticks工作来获取频率吗?示例:
#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";
}输出
0.00075s
0.00075s
41000000 Node2 base
40000000 Node1 base在这种速度下,你可能需要比uint64_t更大的东西来存储滴答…我不知道在这种情况下是什么阶段。
https://stackoverflow.com/questions/53378750
复制相似问题