我正在用VHDL设计一个微控制器。我正在理解每个组件(ALU/Memory.)的角色,以及如何实现它们的一些想法。我基本上想要实现Von架构。
但我不明白的是:组件是如何通信的?我不知道怎样设计我的公共汽车。因此,我正在寻找一个简单的总线实现和协议。
我尚未解决的问题:
重点是设计的简单性(因此也是实现的简单性)。我不在乎速度。我想从头开始做每件事。没有预先制作的软核)。
我不知道这在现阶段是否重要,但它不需要运行“真正的”编译代码,而是与现有的任何东西都有任何兼容性。另外,在什么时候我开始考虑我的“程序集”指令?我想我会把它们直接装入内存中。
谢谢你的帮助。
编辑: I最终从皮卡布莱中获得了(很多)灵感,因为它是:
具体来说,我首先给它添加了一些说明。
发布于 2013-10-13 13:59:12
由于您主要关心的似乎是学习微控制器的设计,一个好的方法可能是看看一些早期的微处理器模型。例如,Z80:

为了回答你的第一个问题(单总线和多总线),这个芯片使用一条总线来处理所有的事情,而且它的设计非常简单。你可能会用到类似的东西。为了明确术语,单个系统总线可以由子总线(它们也称为总线)组成。图显示由双向数据总线(8位宽)和地址总线(16位宽)组成的系统总线。
要回答您的第二个问题(组件如何知道它们何时处于活动状态),在上面的图像中,您可以看到两个不同的信号:内存请求和I/O请求。一次只有一个是活动的,当I/O请求处于活动状态时,也就是当外围设备可能被访问时。
如果你没有很多外围设备,你不需要使用所有的16个地址行(有些Z80有一个8位的I/O空间)。每个外围设备将通过这个空间中的一些地址访问。例如,在一个非常简单的系统中:
在这个简单的例子中,您需要提供两个电路:一个是检测地址在00-03h范围内,另一个是08-0Fh。如果在每个检测器的输出和I/O请求信号之间执行逻辑“和”,那么您将有两个信号指示何时访问每个外围设备。你的外围硬件应该主要听这个信号。
最后,关于您的指令问题,微处理器内部的数据流将有几个阶段。这通常被称为处理器的数据路径。常见的做法是将阶段划分为:

来源:https://www.cs.umd.edu/class/fall2001/cmsc411/projects/DLX/proj.html
您处理单个指令的大部分工作将在解码和执行阶段完成。至于datapath控件,您将需要一个状态机,它通过五个阶段控制操作序列。这个功能块通常称为控制单元。在这里,你有几个选择:
至于实现,我建议将函数块保持为单独的实体,并确保为每个块编写一个testbench。如果你写那些遗嘱,你的工作会进展得更快。
至于代码块,Register非常容易编写。如果您对指令布局和操作代码有一个清晰的概念,那么指令解码器也是很容易的。如果您知道ALU需要执行的操作,那么ALU也是很容易的。
首先,我会为指令解码器和寄存器文件编写测试程序。然后,我会编写一个脚本来运行所有的测试工作台,并自动检查它们的结果。只有这样,我才会专注于功能块本身的实现。
发布于 2013-10-12 23:09:21
基本上,片上总线将使用并行总线进行地址和数据的输入和输出.通常会有某种仲裁者来决定哪个组件被允许写入总线。因此,一个共同的方法是:
通常,您的片上总线将使用主从概念,因此只有主程序才能访问总线。奴隶们只等待主人的请求。
我喜欢AMBA AHB/APB的设计,但这对你的应用程序来说可能有点过头了。您可以查看这个书,寻找有关如何实现总线的想法。
https://stackoverflow.com/questions/19335583
复制相似问题