Рубрика «logisim»

Предисловие

Это вторая часть попытки создания TTA процессора в программе Logisim. В процессе создания появилась нужда в дополнительной памяти, в которой могли бы храниться некоторые промежуточные значения, а для этой памяти появилась нужда в изменении управляющего устройства.Читать полностью »

Проектирование процессора (CPU Design) RAM-машина - 1
Часть I
Часть II
Часть III
Часть IV
Часть V

На Хабре уже была опубликована статья, посвящённая RAM-машине.
Вообще, статья про RAM-машину есть на Википедии.

RAM-машина, которая упоминается в книге «Построение и анализ вычислительных алгоритмов» -авторы: Ахо, Хопкрофт, Ульман — имеет ограниченный набор арифметических команд, у нас же из арифметических команд будут только «сложение» и «вычитание». Кроме арифметических доступны также команды ввода-вывода, косвенной адресации и команды ветвления.

Отличием LIttle Man Computer'а (который я описывал в предыдущих частях цикла) от RAM-машины является механизм, обеспечивающий косвенную адресацию (возможность работать с числом, хранящемся в памяти, как с адресом).

Для того, чтобы работать с числом, хранящимся в памяти, как с адресом, подключим к адресному входу Памяти Данных мультиплексор MUX, осуществляющий выборку между, собственно, адресом (поступающим из Памяти Команд) и числом, представляющем адрес и хранящемся в Памяти Данных.
Проектирование процессора (CPU Design) RAM-машина - 2
Читать полностью »

Проектирование процессора (CPU Design) LMC - 1
Часть I
Часть II
Часть III

Это полная версия предыдущей статьи.

Спроектируем Little Man Computer на языке Verilog.

Статья про LMC была на Хабре.

Online симулятор этого компьютера здесь.

Напишем модуль оперативной памяти (ОЗУ), состоящий из четырех (ADDR_WIDTH=2) четырёхбитных (DATA_WIDTH=4) слов. Данные загружаются в ОЗУ из data_in по адресу adr при поступлении тактового сигнала clk.

module R0 #(parameter ADDR_WIDTH = 2, DATA_WIDTH = 4)
(
    input clk, //тактовый сигнал
    input [ADDR_WIDTH-1:0] adr, //адрес
    input [DATA_WIDTH-1:0] data_in, //порт ввода данных
    output [DATA_WIDTH-1:0] RAM_out //порт вывода данных
);
    reg [DATA_WIDTH-1:0] mem [2**ADDR_WIDTH-1:0]; //объявляем массив mem
 
    always @(posedge clk) //при поступлении тактового сигнала clk 
        mem [adr] <= data_in; //загружаем данные в ОЗУ из data_in 
    
    assign RAM_out = mem[adr]; //назначаем RAM_out портом вывода данных
endmodule

Читать полностью »

Часть I
Часть II

Спроектируем Little Man Computer на языке Verilog.

Статья про LMC была на Хабре.
Online симулятор этого компьютера здесь.

Напишем модуль оперативной памяти (ОЗУ), состоящий из четырех (N=2) четырёхбитных (M=4) слов. Данные загружаются в ОЗУ из data_in по адресу adr при поступлении тактового сигнала clk.

module R0 #(parameter N = 2, M = 4)
(
input clk, //тактовый сигнал
input [N-1:0] adr, //адрес
input [M-1:0] data_in, //порт ввода данных
output [M-1:0] RAM_out //порт вывода данных
);
reg [M-1:0] mem [2**N-1:0]; //объявляем массив mem
always @(posedge clk) //при поступлении тактового сигнала clk
mem [adr] <= data_in; //загружаем данные в ОЗУ из data_in 
assign RAM_out = mem[adr]; //назначаем RAM_out портом вывода данных
endmodule

Читать полностью »

Спроектируем Little Man Computer на языке Verilog.

Статья про LMC была на Хабре.

Online симулятор этого компьютера здесь.

Напишем модуль ОЗУ на языке Verilog.

Данные загружаются в ОЗУ из data_in по тактовому сигналу clk.

module R0 #(parameter N = 2, M = 4)
(
input clk,
input [N-1:0] adr,
input [M-1:0] data_in,
output [M-1:0] RAM_out
);
reg [M-1:0] mem [2**N-1:0];
always @(posedge clk)
mem [adr] <= data_in;
assign RAM_out = mem[adr];
endmodule

Подключим счётчик к адресному входу ОЗУ

module R1 #(parameter N = 2, M = 4)
(
input Counter_clk, RAM_clk,
//input [N-1:0] adr,
input [M-1:0] data_in,
output [M-1:0] RAM_out
);
reg [1:0]counter;
always @(posedge Counter_clk)
 counter <= counter + 1; 
 wire [N-1:0] adr;
 assign adr = counter; 
reg [M-1:0] mem [2**N-1:0];
always @(posedge RAM_clk)
 mem [adr] <= data_in;
assign RAM_out = mem[adr];
endmodule

Вот так выглядит схема в RTL Viewer

Little Man Computer на языке Verilog - 1
Читать полностью »

Спроектируем Little Man Computer на языке Verilog.

Статья про LMC была на Хабре.
Online симулятор этого компьютера здесь.

Сперва создадим устройство, позволяющее производить загрузку данных в ОЗУ.
Проектирование процессора на языке Verilog - 1
Читать полностью »

Часть I
Часть II
Часть III
Спроектируем схему из предыдущей части на языке Verilog.
Заменим RAM с одним портом чтения/записи на RAM с раздельными портами чтения/записи.
Управление производится командами:
1. загрузка адреса в счётчик Counter,
2. загрузка данных в память RAM,
3. загрузка (из устройства ввода) данных в аккумулятор Acc,
4. переключение мультиплексора MUX.

Проектирование процессора (CPU Design) Часть III - 1
Подключим счетчик на адресный вход ОЗУ.
При подаче тактового сигнала значение счетчика увеличивается на 1, т.о. можно переходить от ячейки к ячейке, от младшего адреса к старшему.
Проектирование процессора (CPU Design) Часть III - 2
Читать полностью »

Часть I
Часть II
Во второй части спроектируем устройства, представленные в первой части, на микросхемах малой степени интеграции, а также в Verilog'е.
Спроектируем схему, позволяющую складывать четырехразрядные числа.
Нам понадобятся сумматор и аккумулятор.
Рассмотрим, как работает сумматор на примере микросхемы 155им3 (зарубежный аналог 7483).
Для микросхем 155-й серии условимся, что на входах есть внутренний резистор, подтягивающий к плюсу (если ножка «висит в воздухе», то на ней присутствует логическая «единица»), поэтому при подключении питания на микросхему зажгутся все 5 светодиодов, присоединенных к выходу.
image
Так выглядит модель микросхемы в Logisim.
image
Для того, чтобы в Logisim спроектировать такую микросхему, необходимо выбрать «Меню» — «Проект» — «Добавить схему».
Читать полностью »

Одна из глав книги «Код» (Автор: Чарльз Петцольд) посвящена проектированию CPU и в начале главы описывается устройство, позволяющие суммировать наборы чисел, хранящихся в памяти. Спроектируем эту схему в Logisim'е. Возьмем набор восьмиразрядных чисел и подключим его к мультиплексору, переход от одного числа к другому будем осуществлять с помощью счетчика, подключенного к выбирающему входу мультиплексора, а к выходу мультиплексора подключим сумматор и аккумулятор. В качестве тактового генератора будем использовать кнопку. Данные будут загружаться в аккумулятор при отпускании кнопки (это осуществляется с помощью элемента НЕ, подключенного к кнопке).

Проектирование процессора (CPU Design) Logisim - 1

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js