首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个全局可访问的子电路/信号(Logisim)

创建一个全局可访问的子电路/信号(Logisim)
EN

Stack Overflow用户
提问于 2013-11-14 13:10:38
回答 1查看 764关注 0票数 0

我正在Logisim上实现一个单周期处理器,它主要有5个子电路(所有复杂的设计都用于主电路中)。在主电路中,这5个子电路之间将有错综复杂的连接。在第三个子电路中,我使用的是RAM,这基本上意味着我访问的寄存器文件。该寄存器文件还在其他各个阶段被访问/编辑。我想知道是否有任何方法,当其中一个阶段更改RAM (寄存器文件)中的值时,它在所有子电路(以及主电路中)都会发生变化。我希望我的寄存器文件作为一个通用的RAM,以便它是一个单一的实体在整个电路。

我试着使用子电路的符号并提供不同的输入和输出,但是如果输入改变了该子电路中的RAM,则在其他子电路中它不会改变。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-14 19:42:30

VHDL中有一个特性,它提供了与您所要求的类似的功能。但是在我们讨论这一点之前,您可能应该听Brian的话,并使您的注册文件成为您设计中的一个适当的实体。这将迫使你思考这些部分是如何相互作用的,在某个时候你必须这样做。

我说的特征是全球信号。它们可以在包中声明,并且可以跨各种实体使用。公平地说,我不认为这是个好主意。这可能不会使您的设计更清晰,正如您所期望的那样;它将使您的设计更加错误。不管怎样,你可以试一试,然后告诉我们你的结论。

这里有一个小例子来说明我的意思。它不应该做任何有用的事情,但是它在ModelSim中运行ok,在Quartus 12.1中合成ok:

代码语言:javascript
复制
package register_file_pkg is
    type register_file_type is array (0 to 31) of integer range 0 to 255;
    signal register_file: register_file_type;
    alias pc is register_file(31);
end;
--------------------------------------------------------------------------------
use work.register_file_pkg.all;

entity alu is
    port (
        clock: in bit;
        zero_flag: out boolean;
        last_pc_flag: out boolean
    );
end;

architecture rtl of alu is
begin
    zero_flag <= (register_file(0) = 0);
    last_pc_flag <= (pc = 255);

    process (clock) begin
        if clock'event and clock = '1' then
            register_file(0) <= pc / 4;
        end if;
    end process;
end;
--------------------------------------------------------------------------------
library ieee;
use ieee.numeric_bit.all;
use work.register_file_pkg.all;

entity cpu is
    port (
        clock: in bit;
        address_bus: out integer;
        zero_flag: out boolean;
        last_pc_flag: out boolean
    );
end;

architecture rtl of cpu is
begin
    address_bus <= pc;

    process (clock) begin
        if clock'event and clock = '1' then
            pc <= pc + 1;
        end if;
    end process;

    cpu_alu: entity work.alu
        port map(
            clock => clock,
            zero_flag => zero_flag,
            last_pc_flag => last_pc_flag
        );
end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19978504

复制
相关文章

相似问题

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