2013-11-14 2 views
0

Я реализую процессор с одним циклом на Logisim, который имеет в основном 5 подсхем (все они сконструированы так, чтобы использоваться в основной цепи). Эти 5 подсхем будут иметь сложные связи между собой в основной цепи. В третьей подсхемы я использую ОЗУ, которое будет в основном означать мой файл регистра, к которому я обращаюсь. Этот файл регистров также доступен и редактируется на разных этапах. Я хочу знать, есть ли какой-либо способ, так что, когда один из этапов изменяет значение в ОЗУ (файл регистра), он изменяется во всех подсхемах (и в основной цепи). Я хочу, чтобы мой файл регистра действовал как универсальная ОЗУ, так что это единая сущность во всей цепи.Создание глобальной доступной подсхемы/сигнала (Logisim)

Я попытался использовать символ подсхемы и предоставить различные входы и выходы, но если вход изменил ОЗУ в этой подсхемы, он не изменится в других подспирах.

+0

Logisim учебники состояние «Logisim будет поддерживать различную информацию о состоянии для всех подсхем, входящих в схему, например, если схема содержит триггер, и эта схема используется в качестве подсхемы несколько раз, тогда каждый триггер каждой подсети будет иметь свое значение при моделировании более крупной схемы ». Я хочу знать, есть ли что-то в этом роде. Если все триггеры могут иметь одинаковое значение. –

+0

Вытяните эту схему и добавьте ее в дизайн верхнего уровня. Подключайте все его пользователи до него явно. Я не могу помочь с деталями, но в этом суть того, что вы должны делать. –

+0

Так нет другого пути? Если я вытащу его, моя схема проектирования верхнего уровня станет намного более перегруженной, поэтому я хотел бы другой способ. Спасибо в любом случае ... –

ответ

2

В VHDL есть функция, которая обеспечивает нечто похожее на то, что вы просите. Но прежде чем мы пойдем к этому, вы, вероятно, должны послушать Брайана и сделать свой файл регистрации подходящим сущностью в своем дизайне. Это заставит вас точно подумать о том, как части будут взаимодействовать, что вам нужно будет сделать в какой-то момент.

Функция, о которой я говорю, это глобальные сигналы. Они могут быть объявлены в пакетах и ​​использованы на разных объектах. Справедливости ради, я не думаю, что это была бы хорошая идея. Это, вероятно, не сделает ваш проект более ясным, как вы ожидаете; это сделает его более грязным. В любом случае, вы можете попробовать, а затем рассказать нам свои выводы.

Вот небольшой пример, чтобы показать, что я имею в виду. Это не должен делать что-нибудь полезное, но работает нормально в ModelSim и синтезирует нормально в Quartus 12.1:.

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; 
+0

Спасибо Рик: Я забыл об общих переменных и глобальных сигналах (глобальные сигналы - вещь VHDL-2008?), Поэтому я исправляюсь. Что касается хорошей идеи ... Я поддерживаю свой последний комментарий :-) –

+0

Этот документ http://www.eda.org/VIUF_proc/Fall96/MCKINNEY96A.PDF описывает использование глобальных сигналов именно таким образом. Автор НЕ рекомендует использовать их в коде, предназначенном для синтеза! С тех пор инструменты синтеза, несомненно, улучшились, но я по-прежнему согласен с ним! –

+0

Я сделал свой проект, используя совет Брайана, и отказался от универсальных сигналов. В любом случае, я не мог создать их в Logisim, так как я решил сделать свой проект в этом (а не в VHDL). Плюс мне нужны универсальные регистры, а не сигналы. Я буду использовать этот метод в своем следующем задании, я думаю. –

Смежные вопросы