Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded 静态或动态宽度访问计算机总线?_Embedded_Processor_Bus_Addressing_Peripherals - Fatal编程技术网

Embedded 静态或动态宽度访问计算机总线?

Embedded 静态或动态宽度访问计算机总线?,embedded,processor,bus,addressing,peripherals,Embedded,Processor,Bus,Addressing,Peripherals,假设我们有一个简单的处理器,可以是一个嵌入式系统,有一个系统总线,为了论证起见,一个32位总线 现在,如果我们有两个外围设备,例如一个名为PER0的,连接到总线上,我们可以做两件事: 允许它以固定宽度访问主总线,例如8位,这样PER0将始终以8位包与总线通信。我们可以称之为静态宽度访问 允许它有选项来选择如何与 总线通过使用信号来表示数据的大小 处理器将选择它要使用的访问模式。例如,我们 在处理器和PER0之间创建两个信号A1和A0,其 价值观会说: 00-等待 01-8比特 10-16位 11

假设我们有一个简单的处理器,可以是一个嵌入式系统,有一个系统总线,为了论证起见,一个32位总线

现在,如果我们有两个外围设备,例如一个名为PER0的,连接到总线上,我们可以做两件事:

  • 允许它以固定宽度访问主总线,例如8位,这样PER0将始终以8位包与总线通信。我们可以称之为静态宽度访问

  • 允许它有选项来选择如何与 总线通过使用信号来表示数据的大小 处理器将选择它要使用的访问模式。例如,我们 在处理器和PER0之间创建两个信号A1和A0,其 价值观会说:

    00-等待
    01-8比特
    10-16位
    11-32位

    因此,处理器将知道是否将8位数据发送到其 总线或32位数据,基于A1、A0的值。这是我们可以称之为 动态宽度访问总线

  • 问题: 根据您的经验,这两种方法中哪一种是首选的,为什么?此外,在哪些情况下应执行此操作?最后,考虑到嵌入式系统,哪种方法更广泛

    编辑:我想进一步讨论这个主题,因此我不是询问个人偏好,而是询问有关这两种方法及其在计算机系统中的应用的更多信息。因此,我认为这是一个合理的问题


    谢谢

    有多种考虑因素。当然,如果事务中有多个大小,动态宽度将允许更好地利用带宽。另一方面,如果传输大约8个字节,然后再传输下一个8个字节,则开销将是基线的两倍(一次性传输整个块,假设可以缓存它直到完全消耗)。所以基本上你需要知道你能提前知道你需要哪些块

    关于在CPU和DRAM之间使用这种动态大小事务的可能性,有一篇有趣的文章:


    在这里,您可以看到冲突,因为很难判断将来需要哪些事务,以及只带来部分数据是否会导致性能下降。他们致力于实现一个预测器,试图推测这一点。请注意,这仅适用于处理相干内存的情况。

    现代处理器总线使用字节任务或其他控件来确定哪些通道具有新数据,用于写入和读取,长度指示传输的大小/宽度。至于你的问题,这是一个意见问题,因此它确实不适合stackoverflow。你总是在CPU内存控制器中为PER0配置地址范围。如果您的外设混合使用32/16/8位寄存器,则必须始终以32位访问并屏蔽未驱动位。存储设备始终是对称的(无混合8/16/32)。您总是静态地配置它,因为额外的行将花费金钱。如果要使软件在两种不同的填充上工作,并探测设备以确定宽度,然后配置内存控制器,则可以在BOM表上添加上/下拉。您的问题高度依赖于CPU体系结构。