实现简单的逻辑和延迟模拟器
Implementing simple logic and delay simulator
我正在实现一个简单的逻辑和延迟模拟器。为此,我必须创建 2 个类,即节点和导线,它们分别对网表的节点(门、输入和输出)和节点之间的导线进行建模。节点对象拥有其输出线路 – 如果节点对象被删除,它也会删除其所有输出线路。导线连接两个节点,因此分别存储驱动节点和从动节点的指针。Wire 对象不拥有它们连接的节点 - 它们不需要在销毁时删除节点。为了测试所有这些,我需要实现完整的加法器。
下面是我写的程序。
using namespace std;
class node
{
public:
bool a;
//node();
class wire
{
//Don't know what to declare here
}
};
bool evaluate (bool x, bool y, char o)
{
bool z;
if (o == '&')
z = x & y;
else if (o == '^')
z = x ^ y;
else if (o == '|')
z = x | y;
else
cout << "Error" << endl;
return z;
}
bool evaluate (bool x) //Function overloading
{
bool inv;
inv = !x;
return inv;
}
int main()
{
vector<node> input(3);
vector<node> output(2);
vector<node> intermediate(4);
cout << "Enter a, b and C_in n";
cin >> input[0].a;
cin >> input[1].a;
cin >> input[2].a;
intermediate[0].a = evaluate(input[0].a, input[1].a, '^');
intermediate[1].a = evaluate (input[2].a, intermediate[0].a, '^');
output[0].a = intermediate[1].a;
intermediate[2].a = evaluate(intermediate[0].a, input[2].a, '&');
intermediate[3].a = evaluate(input[0].a, input[1].a, '&');
output[1].a = evaluate(intermediate[2].a, intermediate[3].a, '|');
cout << "Sum is "<< output[0].a<<endl;
cout << "Carry out is "<< output[1].a << endl;
return 0;
}
目前,我能够实现完整的加法器功能,但不使用其他类线。我还需要在我的解决方案中包含其他类。我该怎么做?
如果我理解正确,您的节点表示存储电力(由布尔值表示)并通过电线连接到其他节点的东西,当两个节点之间的评估完成时,结果应该发送到所有连接的节点。你已经实现了节点,但没有实现电线。
您可以向修改其状态(布尔值)的 node
类添加一个方法(我们称之为 set_a
),以及另一个告诉每个连线在其连接的节点上调用set_a
的方法。
更新:此外,您希望修改evaluate
以使用节点,而不是布尔值。这样你就有一个更加面向对象的问题解决方案。
根据您的规范,结构如下所示:
class Node
{
private:
std::vector<std::unique_ptr<Wire>> output;
std::vector<Wire*> inputs;
};
class Wire
{
private:
Node* from;
Node* to;
};
其中所有指针都是弱引用,但保留附加Wire
实例所有权的Node
的输出除外。
由于结构是紧密耦合的,尽管您需要自己管理某些方面,例如:
- 删除
Wire
应清除from->output
和to->input
- 删除
Node
应该循环其输入并取消绑定它们(以便Wire
是半附加的,或者如果你的要求不允许,它们应该被完全删除) - 删除
Node
将对其所有输出调用Wire::~Wire()
,这应清除对绑定节点输入的所有引用。
相关文章:
- 如何在c++中实现处理器调度模拟器
- 如何仅为一个函数添加延迟
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 询问在设计我的手臂模拟器功能表示格式1
- 以在Qt中的IF语句中设置时间延迟
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 模板化类中静态成员的延迟初始化
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 将自定义函数传递到基抽象类中以延迟执行
- 我希望改进或要求我目前的延迟/睡眠方法。C++
- 如何在 c++ 中延迟?
- 如何测量管道延迟?
- 获取毫秒延迟的错误值
- C++异常被捕获延迟,可能导致这种情况的原因是什么?
- 我的子类的属性是延迟初始化的
- 为什么有些延迟加载 DLL 会立即使用 FFMPEG 卸载?
- 代码战士的延迟
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- C++延迟后的优化器调用函数
- 实现简单的逻辑和延迟模拟器