Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 11:11

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 404 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 27  След.
Автор Сообщение
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Чт мар 17, 2022 13:35 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Ну наконец-то! :D Заработал UART... Как оказалось, в трех триггерах заблудился... :D
Как и предполагал, функционал RX в UART ресурсы практически не ест. Подчистил некоторые хвосты, в результате имеем:
Код:
Timing Summary:
---------------
Speed Grade: -5

   Minimum period: 15.483ns (Maximum Frequency: 64.586MHz)
   Minimum input arrival time before clock: 4.270ns
   Maximum output required time after clock: 4.134ns
   Maximum combinational path delay: No path found

Design Summary
--------------
Number of errors:      0
Number of warnings:    0
Logic Utilization:
  Number of Slice Flip Flops:           299 out of   9,312    3%
  Number of 4 input LUTs:               695 out of   9,312    7%
Logic Distribution:
  Number of occupied Slices:            416 out of   4,656    8%
    Number of Slices containing only related logic:     416 out of     416 100%
    Number of Slices containing unrelated logic:          0 out of     416   0%
      *See NOTES below for an explanation of the effects of unrelated logic.
  Total Number of 4 input LUTs:         777 out of   9,312    8%
    Number used as logic:               694
    Number used as a route-thru:         82
    Number used as Shift registers:       1

  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

  Number of bonded IOBs:                  6 out of      66    9%
  Number of RAMB16s:                      2 out of      20   10%
  Number of BUFGMUXs:                     1 out of      24    4%
  Number of DCMs:                         1 out of       4   25%
  Number of MULT18X18SIOs:                1 out of      20    5%

Average Fanout of Non-Clock Nets:                3.17

И собственно сам UART:
Код:
`timescale 1 ns / 1 ps
module uart16 (
   input  wire r,
   input  wire c,
   output wire tx,
   input  wire rx,
   input  wire [15:0] a,
   input  wire [15:0] i,
   output wire [15:0] o,
   input  wire w,
   input  wire e
);
reg [15:0] data [0:2];
reg [15:0] tcount;
reg  [9:0] tdata;
reg [15:0] rcount;
reg  [7:0] rdata;
reg  [4:0] rphase;
wire [1:0] addr = a[1:0];
always @ (posedge c) begin
   if (w&e) begin
      if (addr) data[addr] <= i; else begin tdata <= {i[7:0],2'b01}; data[0] <= 1; end
   end else begin
      if (!tcount) begin tdata <= {1'b1,tdata[9:1]}; data[0] <= data[0][8:0]<<1; end
      if (!rcount) begin
         if (rphase) begin
            if (rphase == 1) data[1] <= rdata; else if (rphase[4:2] && !rphase[0]) rdata <= (rx<<7) | (rdata>>1);
            rphase <= rphase-1;
         end else if (~rx) rphase <= 19;
      end
   end
   rcount <= rcount?rcount-1:(data[2]>>1);
   tcount <= tcount?tcount-1:data[2];
end
assign o = e ? data[addr] : i;
assign tx = tdata[0];
endmodule

Ввод в UART, конечно, лучше сделать буферизованным, а не как сейчас через постоянный опрос регистра. Ну или все-таки прерывание сделать по факту прихода байта. Да, UART все еще полусырой, но уже рабочий, так что основное препятствие, мешавшее нормально экспериментировать, снято... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Чт мар 17, 2022 16:15 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Какой-то UART.. такой. А как, например, поставить ему скорость 115200?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Чт мар 17, 2022 16:29 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
UART повесил на адреса 0xAXXX. Имеется 3 регистра, через которые и происходит общение ядра с модулем UART:
0xA000 UART Tx Data & Status Register
0xA001 UART Rx Data & Status Register
0xA002 UART Baud Rate Register

Скорость настраивается программно:
Код:
173 UARTBRR ! \ clk=20MHz, 20000000/115200=173 \
или
Код:
173 0xA002 !
Здесь мы пишем число 173 по адресу 0xA002, но фактически производится запись числа 173 в регистр data[2] модуля uart16. Аналогично, 0xA000 соответствует регистру data[0], а 0xA001 - регистру data[1]...

Как раз-таки на скорости 115200 запускал UART и гонял тесты... :)

Отправка байта: жду 0 в регистре 0xA000, затем пишу байт в регистр 0xA000
Чтение байта: пишу 0x100 в регистр 0xA001, затем опрашиваю 0xA001, если бит 8 сброшен, значит получен новый байт


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Пт мар 25, 2022 15:43 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
Total Vacuum писал(а):
UART повесил на адреса 0xAXXX. Имеется 3 регистра, через которые и происходит общение ядра с модулем UART:
0xA000 UART Tx Data & Status Register
0xA001 UART Rx Data & Status Register
0xA002 UART Baud Rate Register
Как распределено адресное пространство?

_________________
Сотник. SotnikSTO@mail.ru


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб мар 26, 2022 14:29 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Sotnik писал(а):
Total Vacuum писал(а):
UART повесил на адреса 0xAXXX. Имеется 3 регистра, через которые и происходит общение ядра с модулем UART:
0xA000 UART Tx Data & Status Register
0xA001 UART Rx Data & Status Register
0xA002 UART Baud Rate Register
Как распределено адресное пространство?

Сейчас все адресное пространство разбито на 16 равных частей по 4K 16-битных слов (8Kбайт) каждая:
Код:
0x0000-0x0FFF RAM
0x1000-0x1FFF unused
...
0x7000-0x7FFF unused
0x8000-0x8FFF GPIO
0x9000-0x9FFF Timer
0xA000-0xAFFF UART
0xB000-0xBFFF unused
...
0xF000-0xFFFF unused
При этом RAM сейчас занимает только 1 блок BRAM, т.е. 1K слов/2Кбайта, а в адресном пространстве каждого из периферийных устройств задействовано лишь по 1-3 16-битных ячейки (1 регистр для GPIO и по 3 регистра для таймера и UART). Естественно, любую новую/существующую периферию можно безболезненно добавлять/перемещать в любой свободный слот, RAM всегда начинается со слота 0x0000-0x0FFF и может при необходимости занимать несколько первых слотов. Памяти программ в общем адресном пространстве нет и пока не планируется, доступа к ней, соответственно, тоже нет.
Оно так распределено просто потому, что мне так захотелось/показалось удобнее и т.д., но это не значит, что это распределение окончательное. Например, вот буквально сейчас взбрело в голову, что лучше разбить адресное пространство на 2 равные части:
Код:
0x0000-0x7FFF RAM
0x8000-0xFFFF Memory Mapped Registers
А уже вторую половину делить по братски между всеми периферийными устройствами.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб мар 26, 2022 16:46 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
Total Vacuum писал(а):
Сейчас все адресное пространство разбито на 16 равных частей по 4K 16-битных слов (8Kбайт) каждая:
Памяти программ в общем адресном пространстве нет и пока не планируется, доступа к ней, соответственно, тоже нет.
Например, вот буквально сейчас взбрело в голову, что лучше разбить адресное пространство на 2 равные части:
Код:
0x0000-0x7FFF RAM
0x8000-0xFFFF Memory Mapped Registers
А уже вторую половину делить по братски между всеми периферийными устройствами.
Понятно. Твоя игрушка, как хочу, так и играю. :)
На заре мелких ПК сегмент памяти делили на две части: 0-32К ОЗУ программ, 32к-60к периферия, 60-64к - БИОС.

Со временем, дырка 32К-60К заполнилась доп ОЗУ или сменными ПЗУ.
Потом ПЗУ с размером 128/256/512К стали впихивать через страничную адресацию, старшие адреса - номера страниц - младшие работали в привычных окнах по 30/32К.
А потом всё поделили на отдельные сегменты, но ещё цеплялись за совместимость.
В чём и проблема с x86 технологией.

Так что тебе предстоит целая эпопея. :)
Все архитектуры содержат в адресном пространстве периферии окна.

P.S. В этом сезоне более актуален будет К1810ВМ86... :)

_________________
Сотник. SotnikSTO@mail.ru


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб мар 26, 2022 17:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Сейчас все адресное пространство разбито на 16 равных частей по 4K 16-битных слов (8Kбайт) каждая

Вопрос в том, что когда это внутри одной микросхемы, все распределения адресов чисто логические. Страничное разбиение удобно тем, что можно анализировать только старшие разряды. Если речь о количестве внешних микросхем для дешифратора, то оно имеет смысл. Внутри тоже бывает удобно отдать даже одному регистру целых 64к, чтобы не анализировать младшие 16 бит. Однако же никто не мешает написать 0xA123, а потом 0x9412, и ничего такого невероятного не произойдет. Синтезируются блоки сравнения с константой, и все. Их размер будет зависеть не от значения константы, а от количества проверяемых разрядов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Сб мар 26, 2022 23:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Sotnik писал(а):
Все архитектуры содержат в адресном пространстве периферии окна.
P.S. В этом сезоне более актуален будет К1810ВМ86... :)
Пока не могу представить ситуацию, где может понадобиться окно, но и не вижу проблем, если такая необходимость появится: сделаю окно, не вопрос.
А, кстати, что интересного есть сейчас из отечественных микроконтроллеров, которые не fabless?

Hishnik писал(а):
Вопрос в том, что когда это внутри одной микросхемы, все распределения адресов чисто логические. Страничное разбиение удобно тем, что можно анализировать только старшие разряды. Если речь о количестве внешних микросхем для дешифратора, то оно имеет смысл. Внутри тоже бывает удобно отдать даже одному регистру целых 64к, чтобы не анализировать младшие 16 бит. Однако же никто не мешает написать 0xA123, а потом 0x9412, и ничего такого невероятного не произойдет. Синтезируются блоки сравнения с константой, и все. Их размер будет зависеть не от значения константы, а от количества проверяемых разрядов.
Ну у меня пока 16-битный процессор с 16-битными адресами. Так что как ни крути, 64K адресов на всех абонентов. Соответственно по 64K на каждого абонента никак не получится. Самый жирный потребитель адресов - RAM, но даже он ограничен в моем случае ресурсами ПЛИС: 20 блоков BRAM по 1K слов каждый, причем один из блоков используется в качестве памяти программ. Т.е. даже если забить под завязку, то RAM займет 5 страниц из 16. А периферийные устройства стараюсь делать примитивно простыми на пару-тройку регистров каждый, самым прожорливым будет UART, если добавить буферизованный ввод. В планах также прикрутить к процессору имеющийся в боевой прошивке FFT, но даже для такой жирной периферии с огромным запасом хватит одной страницы с 4K адресов. Как раз и делил для простоты адресное пространство на страницы, чтобы проверялось 4 старших разряда 16-битного адреса.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вс мар 27, 2022 00:31 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Так что как ни крути, 64K адресов на всех абонентов. Соответственно по 64K на каждого абонента никак не получится.

Это я для 32-разрядного пример приводил, они уже давно в голове крутятся "по умолчанию". Для 16 будет меньше, конечно, просто по принципу "сколько-то младших не проверяем". В Microblaze, например, это настраивается, можно поставить проверку хоть всех разрядов, но ресурсов больше и из-за этого чуть больше задержки.
Total Vacuum писал(а):
чтобы проверялось 4 старших разряда 16-битного адреса.

Вот так совсем интересно, LUT-то с 4 входами.
Total Vacuum писал(а):
планах также прикрутить к процессору имеющийся в боевой прошивке FFT,


Ого! Так он может быть толще всего остального. Смотря на сколько точек, конечно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вс мар 27, 2022 13:11 
Не в сети

Зарегистрирован: Пн окт 05, 2009 18:21
Сообщения: 405
Откуда: Минск SotnikSTO@mail.ru
Благодарил (а): 48 раз.
Поблагодарили: 3 раз.
Total Vacuum писал(а):
А, кстати, что интересного есть сейчас из отечественных микроконтроллеров, которые не fabless?
Основы работы отечественных МК 1986ВЕ1Т с болгарскими отладчиками OLIMEX ARM-USB-OCD-H. Часть 1 - Первый запуск (Миландр)
Последнее что прочитал по теме. :?

Последнее письмо под статьёй... ( жирным я выделил )

Получил письмо от Миландр, что примерно до конца марта остановлены продажи категории ОТК.
Lampadov11.03.2022 в 16:03 
Здравствуйте!
От лица компании Миландр сообщаю, что на сайтах компании "Миландр" milandr.ru, support.milandr.ru, forum.milandr.ru проводятся технические работы, по завершении которых сайты milandr.ru и support.milandr.ru возобновят свою работу.
Сроки возобновления работы русскоязычной версии сайта не определены, но мы прикладываем все усилия для оперативного решения данного вопроса.
Сайт forum.milandr.ru временно работать не будет
Все возникающие вопросы просим адресовать на данную электронную почту отдела технической поддержки компании Миландр support@milandr.ru.
Обратите, пожалуйста, внимание, что по телефону техническая поддержка временно осуществляться не будет. Спасибо за понимание.

P.S. Они чё, все на войну ушли???

_________________
Сотник. SotnikSTO@mail.ru


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт июн 07, 2022 00:01 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
:) Для истории:

core16.v
Код:
`timescale 1 ns / 1 ps
`define PUSH   4
`define JZ     5
`define CALL   6
`define RET    7
`define LOAD   8
`define STORE  9
`define SWAP  10
`define PICK  11
`define NAND  12
`define XOR   13
`define MLA   14
`define SHIFT 15
module core16 (
   input  wire r,
   input  wire c,
   output wire [15:0] a,
   input  wire [15:0] i,
   output wire [15:0] o,
   output wire w
);
reg [15:0] data [0:1023];
reg [3:0] code [0:4095];
reg [63:0] stack = 0;
reg [63:0] rstack = 0;
reg [15:0] pc = 0;
reg [63:0] xstack;
reg [63:0] xrstack;
reg [15:0] xpc;
reg [3:0] cmd = 0;
reg [15:0] v;
reg [15:0] m;
wire [15:0] s0 = stack[15:0];
wire [15:0] s1 = stack[31:16];
wire [15:0] s2 = stack[47:32];
wire [15:0] s3 = stack[63:48];
wire mmr = (s0[15:12] != 0);
always @* case (cmd)
   `CALL   : begin xrstack <= rstack<<16|(pc+1); xpc <= s0; end
   `RET    : begin xrstack <= rstack>>16; xpc <= rstack[15:0]; end
   default : begin xrstack <= rstack; xpc <= (cmd==`JZ)?s1?pc+1:s0:pc+1; end
endcase
always @* case (cmd)
   `PUSH   : xstack <= stack<<16;
   `JZ     : xstack <= {s3,s3,s3,s2};
   `CALL   : xstack <= stack>>16;
   `RET    : xstack <= stack;
   `LOAD   : xstack <= {s3,s2,s1,mmr?i:v};
   `STORE  : xstack <= {s3,s3,s3,s2};
   `SWAP   : xstack <= {s3,s2,s0,s1};
   `PICK   : xstack <= {s3,s2,s1,(s0==2)?s3:s0?s2:s1};
   `NAND   : xstack <= {s3,s3,s2,~(s1&s0)};
   `XOR    : xstack <= {s3,s3,s2,s1^s0};
   `MLA    : xstack <= {s3,s3,s3,m+s1};
   `SHIFT  : xstack <= stack;
   default : xstack <= {s3,s2,s1,s0[13:0],cmd[1:0]};
endcase
assign a = s0;
assign o = s1;
assign w = (cmd == `STORE);
always @ (negedge c) begin
   {stack,rstack} = {xstack,xrstack};
   pc = r?0:xpc;
   cmd = code[pc];
end
always @ (posedge c) begin
   if (w && !mmr) data [a] <= o;
   v <= data [a];
   m <= s2*s0;
end
always @ (posedge r) begin `include "xc3test.v16" end
endmodule


uart16.v
Код:
`timescale 1 ns / 1 ps
module uart16 (
   input  wire r,
   input  wire c,
   output wire tx,
   input  wire rx,
   input  wire [15:0] a,
   input  wire [15:0] i,
   output wire [15:0] o,
   input  wire w,
   input  wire e
);
reg [15:0] data [0:2];
reg [15:0] tcount;
reg  [9:0] tdata;
reg [15:0] rcount;
reg  [7:0] rdata;
reg  [4:0] rphase;
wire [1:0] addr = a[1:0];
always @ (posedge c) begin
   if (w&e) begin
      if (addr) data[addr] <= i; else begin tdata <= {i[7:0],2'b01}; data[0] <= 1; end
   end else begin
      if (!tcount) begin tdata <= {1'b1,tdata[9:1]}; data[0] <= data[0][8:0]<<1; end
      if (!rcount) begin
         if (rphase == 1) data[1] <= rdata;
         if (rphase[4:2] && !rphase[0]) rdata <= (rx<<7) | (rdata>>1);
         if (rphase) rphase <= rphase-1; else if (~rx) rphase <= 19;
      end
   end
   rcount <= rcount?rcount-1:(data[2]>>1);
   tcount <= tcount?tcount-1:data[2];
end
assign o = e ? data[addr] : i;
assign tx = tdata[0];
endmodule


timer16.v
Код:
`timescale 1 ns / 1 ps
module timer16 (
   input  wire r,
   input  wire c,
   input  wire [15:0] a,
   input  wire [15:0] i,
   output wire [15:0] o,
   input  wire w,
   input  wire e
);
reg [15:0] data [0:2];
assign o = e ? data[a[1:0]] : i;
always @ (posedge c) begin
   if (w&e) data[a[1:0]] <= i;
   data[0] <= data[0]?data[0]-1:data[1];
   if (data[2] && !data[0]) data[2] <= data[2]-1;
end
endmodule


gpio16.v
Код:
`timescale 1 ns / 1 ps
module gpio16 (
   input  wire r,
   input  wire c,
   output wire p0,
   output wire p1,
   output wire p2,
   input  wire [15:0] a,
   input  wire [15:0] i,
   output wire [15:0] o,
   input  wire w,
   input  wire e
);
reg [2:0] data;
assign o = e ? {13'd0,data[2:0]} : i;
assign p0 = data[0];
assign p1 = data[1];
assign p2 = data[2];
always @ (posedge c) if (w&e) data <= i[2:0];
endmodule


sel.v
Код:
`timescale 1 ns / 1 ps
module sel (
   input  wire r,
   input  wire c,
   input  wire [15:0] a,
   output wire e0,
   output wire e1,
   output wire e2,
   output wire e3,
   output wire e4,
   output wire e5,
   output wire e6,
   output wire e7,
   output wire e8,
   output wire e9,
   output wire eA,
   output wire eB,
   output wire eC,
   output wire eD,
   output wire eE,
   output wire eF
);
assign e0 = (a[15:12]==4'h0);
assign e1 = (a[15:12]==4'h1);
assign e2 = (a[15:12]==4'h2);
assign e3 = (a[15:12]==4'h3);
assign e4 = (a[15:12]==4'h4);
assign e5 = (a[15:12]==4'h5);
assign e6 = (a[15:12]==4'h6);
assign e7 = (a[15:12]==4'h7);
assign e8 = (a[15:12]==4'h8);
assign e9 = (a[15:12]==4'h9);
assign eA = (a[15:12]==4'hA);
assign eB = (a[15:12]==4'hB);
assign eC = (a[15:12]==4'hC);
assign eD = (a[15:12]==4'hD);
assign eE = (a[15:12]==4'hE);
assign eF = (a[15:12]==4'hF);
endmodule


mcu16.ucf
Код:
// vq100

NET "clk" LOC = P88;
NET "clk" IOSTANDARD = LVCMOS33;
NET "clk" TNM_NET = "clk";
TIMESPEC TS_clk = PERIOD "clk" 50 ns HIGH 50 %;

NET "led1" LOC = P32;
NET "led1" IOSTANDARD = LVCMOS33;

NET "led2" LOC = P33;
NET "led2" IOSTANDARD = LVCMOS33;

NET "led3" LOC = P34;
NET "led3" IOSTANDARD = LVCMOS33;

NET "tx" LOC = P17;
NET "tx" IOSTANDARD = LVCMOS33;

NET "rx" LOC = P18;
NET "rx" IOSTANDARD = LVCMOS33;
NET "rx" PULLUP;


mcu16.sch
Код:
<?xml version="1.0" encoding="UTF-8"?>
<drawing version="7">
    <attr value="spartan3e" name="DeviceFamilyName">
        <trait delete="all:0" />
        <trait editname="all:0" />
        <trait edittrait="all:0" />
    </attr>
    <attr value="PartialBusOnly|BaseDashIndex" name="RenameBusIO" />
    <netlist>
        <signal name="clk" />
        <signal name="XLXN_3418" />
        <signal name="XLXN_3461" />
        <signal name="XLXN_3473" />
        <signal name="tx" />
        <signal name="rx" />
        <signal name="XLXN_3481" />
        <signal name="XLXN_3488" />
        <signal name="led1" />
        <signal name="led2" />
        <signal name="led3" />
        <signal name="XLXN_3497" />
        <signal name="XLXN_3499" />
        <signal name="XLXN_3500(15:0)" />
        <signal name="XLXN_3501(15:0)" />
        <signal name="XLXN_3507" />
        <signal name="XLXN_3509(15:0)" />
        <signal name="XLXN_3510(15:0)" />
        <signal name="XLXN_3514(15:0)" />
        <signal name="XLXN_3516" />
        <signal name="XLXN_3517" />
        <signal name="XLXN_3518" />
        <port polarity="Input" name="clk" />
        <port polarity="Output" name="tx" />
        <port polarity="Input" name="rx" />
        <port polarity="Output" name="led1" />
        <port polarity="Output" name="led2" />
        <port polarity="Output" name="led3" />
        <blockdef name="res_m">
            <timestamp>2016-7-14T5:52:29</timestamp>
            <rect width="112" x="208" y="-64" height="64" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
            <line x2="144" y1="-32" y2="-32" x1="208" />
        </blockdef>
        <blockdef name="sel">
            <timestamp>2022-2-17T7:42:7</timestamp>
            <rect width="256" x="64" y="-1024" height="1024" />
            <line x2="0" y1="-992" y2="-992" x1="64" />
            <line x2="0" y1="-512" y2="-512" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <line x2="384" y1="-992" y2="-992" x1="320" />
            <line x2="384" y1="-928" y2="-928" x1="320" />
            <line x2="384" y1="-864" y2="-864" x1="320" />
            <line x2="384" y1="-800" y2="-800" x1="320" />
            <line x2="384" y1="-736" y2="-736" x1="320" />
            <line x2="384" y1="-672" y2="-672" x1="320" />
            <line x2="384" y1="-608" y2="-608" x1="320" />
            <line x2="384" y1="-544" y2="-544" x1="320" />
            <line x2="384" y1="-480" y2="-480" x1="320" />
            <line x2="384" y1="-416" y2="-416" x1="320" />
            <line x2="384" y1="-352" y2="-352" x1="320" />
            <line x2="384" y1="-288" y2="-288" x1="320" />
            <line x2="384" y1="-224" y2="-224" x1="320" />
            <line x2="384" y1="-160" y2="-160" x1="320" />
            <line x2="384" y1="-96" y2="-96" x1="320" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
        </blockdef>
        <blockdef name="core16">
            <timestamp>2022-3-1T15:21:25</timestamp>
            <rect width="256" x="64" y="-192" height="192" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <line x2="384" y1="-160" y2="-160" x1="320" />
            <rect width="64" x="320" y="-108" height="24" />
            <line x2="384" y1="-96" y2="-96" x1="320" />
            <rect width="64" x="320" y="-44" height="24" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
        </blockdef>
        <blockdef name="dcm">
            <timestamp>2022-2-24T11:40:58</timestamp>
            <rect width="336" x="64" y="-128" height="128" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <line x2="464" y1="-96" y2="-96" x1="400" />
            <line x2="464" y1="-32" y2="-32" x1="400" />
        </blockdef>
        <blockdef name="obuf">
            <timestamp>2000-1-1T10:10:10</timestamp>
            <line x2="64" y1="0" y2="-64" x1="64" />
            <line x2="64" y1="-32" y2="0" x1="128" />
            <line x2="128" y1="-64" y2="-32" x1="64" />
            <line x2="64" y1="-32" y2="-32" x1="0" />
            <line x2="128" y1="-32" y2="-32" x1="224" />
        </blockdef>
        <blockdef name="ibuf">
            <timestamp>2000-1-1T10:10:10</timestamp>
            <line x2="64" y1="0" y2="-64" x1="64" />
            <line x2="64" y1="-32" y2="0" x1="128" />
            <line x2="128" y1="-64" y2="-32" x1="64" />
            <line x2="128" y1="-32" y2="-32" x1="224" />
            <line x2="64" y1="-32" y2="-32" x1="0" />
        </blockdef>
        <blockdef name="gpio16">
            <timestamp>2022-3-3T14:19:45</timestamp>
            <rect width="256" x="64" y="-384" height="384" />
            <line x2="0" y1="-352" y2="-352" x1="64" />
            <line x2="0" y1="-288" y2="-288" x1="64" />
            <line x2="0" y1="-224" y2="-224" x1="64" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <rect width="64" x="0" y="-108" height="24" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <line x2="384" y1="-352" y2="-352" x1="320" />
            <line x2="384" y1="-256" y2="-256" x1="320" />
            <line x2="384" y1="-160" y2="-160" x1="320" />
            <rect width="64" x="320" y="-76" height="24" />
            <line x2="384" y1="-64" y2="-64" x1="320" />
        </blockdef>
        <blockdef name="timer16">
            <timestamp>2022-3-3T14:19:25</timestamp>
            <rect width="256" x="64" y="-384" height="384" />
            <line x2="0" y1="-352" y2="-352" x1="64" />
            <line x2="0" y1="-288" y2="-288" x1="64" />
            <line x2="0" y1="-224" y2="-224" x1="64" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <rect width="64" x="0" y="-108" height="24" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <rect width="64" x="320" y="-364" height="24" />
            <line x2="384" y1="-352" y2="-352" x1="320" />
        </blockdef>
        <blockdef name="uart16">
            <timestamp>2022-3-3T14:47:50</timestamp>
            <rect width="256" x="64" y="-448" height="448" />
            <line x2="0" y1="-416" y2="-416" x1="64" />
            <line x2="0" y1="-352" y2="-352" x1="64" />
            <line x2="0" y1="-288" y2="-288" x1="64" />
            <line x2="0" y1="-224" y2="-224" x1="64" />
            <line x2="0" y1="-160" y2="-160" x1="64" />
            <rect width="64" x="0" y="-108" height="24" />
            <line x2="0" y1="-96" y2="-96" x1="64" />
            <rect width="64" x="0" y="-44" height="24" />
            <line x2="0" y1="-32" y2="-32" x1="64" />
            <line x2="384" y1="-416" y2="-416" x1="320" />
            <rect width="64" x="320" y="-44" height="24" />
            <line x2="384" y1="-32" y2="-32" x1="320" />
        </blockdef>
        <block symbolname="sel" name="XLXI_632">
            <blockpin name="r" />
            <blockpin name="c" />
            <blockpin signalname="XLXN_3514(15:0)" name="a(15:0)" />
            <blockpin name="e0" />
            <blockpin name="e1" />
            <blockpin name="e2" />
            <blockpin name="e3" />
            <blockpin name="e4" />
            <blockpin name="e5" />
            <blockpin name="e6" />
            <blockpin name="e7" />
            <blockpin signalname="XLXN_3481" name="e8" />
            <blockpin signalname="XLXN_3488" name="e9" />
            <blockpin signalname="XLXN_3518" name="eA" />
            <blockpin name="eB" />
            <blockpin name="eC" />
            <blockpin name="eD" />
            <blockpin name="eE" />
            <blockpin name="eF" />
        </block>
        <block symbolname="core16" name="XLXI_633">
            <blockpin signalname="XLXN_3461" name="r" />
            <blockpin signalname="XLXN_3473" name="c" />
            <blockpin signalname="XLXN_3510(15:0)" name="i(15:0)" />
            <blockpin signalname="XLXN_3418" name="w" />
            <blockpin signalname="XLXN_3514(15:0)" name="a(15:0)" />
            <blockpin signalname="XLXN_3500(15:0)" name="o(15:0)" />
        </block>
        <block symbolname="res_m" name="XLXI_639">
            <blockpin signalname="XLXN_3461" name="res" />
            <blockpin signalname="XLXN_3473" name="clk" />
        </block>
        <block symbolname="dcm" name="XLXI_640">
            <blockpin signalname="clk" name="CLKIN_IN" />
            <blockpin signalname="XLXN_3473" name="CLKFX_OUT" />
            <blockpin name="CLKIN_IBUFG_OUT" />
        </block>
        <block symbolname="obuf" name="XLXI_644">
            <blockpin signalname="XLXN_3517" name="I" />
            <blockpin signalname="tx" name="O" />
        </block>
        <block symbolname="ibuf" name="XLXI_645">
            <blockpin signalname="rx" name="I" />
            <blockpin signalname="XLXN_3507" name="O" />
        </block>
        <block symbolname="gpio16" name="XLXI_648">
            <blockpin name="r" />
            <blockpin signalname="XLXN_3473" name="c" />
            <blockpin signalname="XLXN_3418" name="w" />
            <blockpin signalname="XLXN_3481" name="e" />
            <blockpin name="a(15:0)" />
            <blockpin signalname="XLXN_3500(15:0)" name="i(15:0)" />
            <blockpin signalname="XLXN_3497" name="p0" />
            <blockpin signalname="XLXN_3516" name="p1" />
            <blockpin signalname="XLXN_3499" name="p2" />
            <blockpin signalname="XLXN_3501(15:0)" name="o(15:0)" />
        </block>
        <block symbolname="timer16" name="XLXI_649">
            <blockpin name="r" />
            <blockpin signalname="XLXN_3473" name="c" />
            <blockpin signalname="XLXN_3418" name="w" />
            <blockpin signalname="XLXN_3488" name="e" />
            <blockpin signalname="XLXN_3514(15:0)" name="a(15:0)" />
            <blockpin signalname="XLXN_3501(15:0)" name="i(15:0)" />
            <blockpin signalname="XLXN_3509(15:0)" name="o(15:0)" />
        </block>
        <block symbolname="obuf" name="XLXI_641">
            <blockpin signalname="XLXN_3497" name="I" />
            <blockpin signalname="led1" name="O" />
        </block>
        <block symbolname="obuf" name="XLXI_642">
            <blockpin signalname="XLXN_3516" name="I" />
            <blockpin signalname="led2" name="O" />
        </block>
        <block symbolname="obuf" name="XLXI_643">
            <blockpin signalname="XLXN_3499" name="I" />
            <blockpin signalname="led3" name="O" />
        </block>
        <block symbolname="uart16" name="XLXI_656">
            <blockpin name="r" />
            <blockpin signalname="XLXN_3473" name="c" />
            <blockpin signalname="XLXN_3507" name="rx" />
            <blockpin signalname="XLXN_3418" name="w" />
            <blockpin signalname="XLXN_3518" name="e" />
            <blockpin signalname="XLXN_3514(15:0)" name="a(15:0)" />
            <blockpin signalname="XLXN_3509(15:0)" name="i(15:0)" />
            <blockpin signalname="XLXN_3517" name="tx" />
            <blockpin signalname="XLXN_3510(15:0)" name="o(15:0)" />
        </block>
    </netlist>
    <sheet sheetnum="1" width="5382" height="3801">
        <attr value="CM" name="LengthUnitName" />
        <attr value="4" name="GridsPerUnit" />
        <branch name="clk">
            <wire x2="640" y1="944" y2="944" x1="368" />
        </branch>
        <instance x="1888" y="1104" name="XLXI_633" orien="R0">
        </instance>
        <instance x="1312" y="976" name="XLXI_639" orien="R0">
        </instance>
        <branch name="XLXN_3461">
            <wire x2="1888" y1="944" y2="944" x1="1696" />
        </branch>
        <iomarker fontsize="28" x="368" y="944" name="clk" orien="R180" />
        <instance x="640" y="1040" name="XLXI_640" orien="R0">
        </instance>
        <instance x="1888" y="2320" name="XLXI_632" orien="R0">
        </instance>
        <branch name="tx">
            <wire x2="4416" y1="1952" y2="1952" x1="4400" />
            <wire x2="4688" y1="1952" y2="1952" x1="4416" />
        </branch>
        <branch name="rx">
            <wire x2="4416" y1="2048" y2="2048" x1="4400" />
            <wire x2="4688" y1="2048" y2="2048" x1="4416" />
        </branch>
        <text style="fontsize:40;fontname:Arial" x="220" y="948">88</text>
        <instance x="3296" y="1264" name="XLXI_648" orien="R0">
        </instance>
        <branch name="XLXN_3473">
            <wire x2="1408" y1="944" y2="944" x1="1104" />
            <wire x2="1456" y1="944" y2="944" x1="1408" />
            <wire x2="1408" y1="944" y2="1008" x1="1408" />
            <wire x2="1888" y1="1008" y2="1008" x1="1408" />
            <wire x2="1408" y1="1008" y2="1168" x1="1408" />
            <wire x2="2336" y1="1168" y2="1168" x1="1408" />
            <wire x2="2336" y1="1168" y2="1344" x1="2336" />
            <wire x2="2992" y1="1344" y2="1344" x1="2336" />
            <wire x2="2992" y1="1344" y2="1472" x1="2992" />
            <wire x2="3296" y1="1472" y2="1472" x1="2992" />
            <wire x2="2992" y1="1472" y2="2016" x1="2992" />
            <wire x2="3296" y1="2016" y2="2016" x1="2992" />
            <wire x2="3296" y1="976" y2="976" x1="2992" />
            <wire x2="2992" y1="976" y2="1344" x1="2992" />
        </branch>
        <branch name="XLXN_3481">
            <wire x2="2288" y1="1840" y2="1840" x1="2272" />
            <wire x2="3296" y1="1104" y2="1104" x1="2288" />
            <wire x2="2288" y1="1104" y2="1840" x1="2288" />
        </branch>
        <branch name="XLXN_3488">
            <wire x2="2784" y1="1904" y2="1904" x1="2272" />
            <wire x2="2784" y1="1600" y2="1904" x1="2784" />
            <wire x2="3296" y1="1600" y2="1600" x1="2784" />
        </branch>
        <branch name="led1">
            <wire x2="4688" y1="912" y2="912" x1="4416" />
        </branch>
        <branch name="led2">
            <wire x2="4432" y1="1008" y2="1008" x1="4416" />
            <wire x2="4688" y1="1008" y2="1008" x1="4432" />
        </branch>
        <branch name="led3">
            <wire x2="4432" y1="1104" y2="1104" x1="4416" />
            <wire x2="4688" y1="1104" y2="1104" x1="4432" />
        </branch>
        <text style="fontsize:40;fontname:Arial" x="4804" y="932">32</text>
        <instance x="4192" y="944" name="XLXI_641" orien="R0" />
        <iomarker fontsize="28" x="4688" y="912" name="led1" orien="R0" />
        <branch name="XLXN_3497">
            <wire x2="4192" y1="912" y2="912" x1="3680" />
        </branch>
        <branch name="XLXN_3499">
            <wire x2="4192" y1="1104" y2="1104" x1="3680" />
        </branch>
        <instance x="4192" y="1136" name="XLXI_643" orien="R0" />
        <instance x="4192" y="1040" name="XLXI_642" orien="R0" />
        <iomarker fontsize="28" x="4688" y="1008" name="led2" orien="R0" />
        <iomarker fontsize="28" x="4688" y="1104" name="led3" orien="R0" />
        <text style="fontsize:40;fontname:Arial" x="4800" y="1108">34</text>
        <text style="fontsize:40;fontname:Arial" x="4804" y="1008">33</text>
        <branch name="XLXN_3500(15:0)">
            <wire x2="2784" y1="1072" y2="1072" x1="2272" />
            <wire x2="2784" y1="1072" y2="1232" x1="2784" />
            <wire x2="3296" y1="1232" y2="1232" x1="2784" />
        </branch>
        <branch name="XLXN_3501(15:0)">
            <wire x2="3296" y1="1728" y2="1728" x1="3216" />
            <wire x2="3216" y1="1728" y2="1824" x1="3216" />
            <wire x2="3696" y1="1824" y2="1824" x1="3216" />
            <wire x2="3696" y1="1200" y2="1200" x1="3680" />
            <wire x2="3696" y1="1200" y2="1824" x1="3696" />
        </branch>
        <instance x="3296" y="1760" name="XLXI_649" orien="R0">
        </instance>
        <branch name="XLXN_3418">
            <wire x2="2912" y1="944" y2="944" x1="2272" />
            <wire x2="3104" y1="944" y2="944" x1="2912" />
            <wire x2="3104" y1="944" y2="1040" x1="3104" />
            <wire x2="3296" y1="1040" y2="1040" x1="3104" />
            <wire x2="2912" y1="944" y2="1536" x1="2912" />
            <wire x2="3296" y1="1536" y2="1536" x1="2912" />
            <wire x2="2912" y1="1536" y2="2144" x1="2912" />
            <wire x2="3296" y1="2144" y2="2144" x1="2912" />
        </branch>
        <instance x="3296" y="2368" name="XLXI_656" orien="R0">
        </instance>
        <branch name="XLXN_3507">
            <wire x2="3296" y1="2080" y2="2080" x1="3280" />
            <wire x2="3280" y1="2080" y2="2448" x1="3280" />
            <wire x2="3744" y1="2448" y2="2448" x1="3280" />
            <wire x2="3744" y1="2048" y2="2448" x1="3744" />
            <wire x2="4176" y1="2048" y2="2048" x1="3744" />
        </branch>
        <instance x="4176" y="1984" name="XLXI_644" orien="R0" />
        <instance x="4400" y="2016" name="XLXI_645" orien="R180" />
        <iomarker fontsize="28" x="4688" y="2048" name="rx" orien="R0" />
        <text style="fontsize:40;fontname:Arial" x="4780" y="2052">18</text>
        <iomarker fontsize="28" x="4688" y="1952" name="tx" orien="R0" />
        <text style="fontsize:40;fontname:Arial" x="4780" y="1948">17</text>
        <branch name="XLXN_3509(15:0)">
            <wire x2="3296" y1="2336" y2="2336" x1="3216" />
            <wire x2="3216" y1="2336" y2="2432" x1="3216" />
            <wire x2="3776" y1="2432" y2="2432" x1="3216" />
            <wire x2="3776" y1="1408" y2="1408" x1="3680" />
            <wire x2="3776" y1="1408" y2="2432" x1="3776" />
        </branch>
        <branch name="XLXN_3510(15:0)">
            <wire x2="1840" y1="800" y2="1072" x1="1840" />
            <wire x2="1888" y1="1072" y2="1072" x1="1840" />
            <wire x2="3760" y1="800" y2="800" x1="1840" />
            <wire x2="3760" y1="800" y2="2336" x1="3760" />
            <wire x2="3760" y1="2336" y2="2336" x1="3680" />
        </branch>
        <branch name="XLXN_3514(15:0)">
            <wire x2="1888" y1="2288" y2="2288" x1="1824" />
            <wire x2="1824" y1="2288" y2="2400" x1="1824" />
            <wire x2="2352" y1="2400" y2="2400" x1="1824" />
            <wire x2="2352" y1="1008" y2="1008" x1="2272" />
            <wire x2="2352" y1="1008" y2="2400" x1="2352" />
            <wire x2="2816" y1="1008" y2="1008" x1="2352" />
            <wire x2="2816" y1="1008" y2="1664" x1="2816" />
            <wire x2="3296" y1="1664" y2="1664" x1="2816" />
            <wire x2="2816" y1="1664" y2="2272" x1="2816" />
            <wire x2="3296" y1="2272" y2="2272" x1="2816" />
        </branch>
        <branch name="XLXN_3516">
            <wire x2="4192" y1="1008" y2="1008" x1="3680" />
        </branch>
        <branch name="XLXN_3517">
            <wire x2="4176" y1="1952" y2="1952" x1="3680" />
        </branch>
        <branch name="XLXN_3518">
            <wire x2="2784" y1="1968" y2="1968" x1="2272" />
            <wire x2="2784" y1="1968" y2="2208" x1="2784" />
            <wire x2="3296" y1="2208" y2="2208" x1="2784" />
        </branch>
    </sheet>
</drawing>


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт июн 07, 2022 00:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Для истории:

А это хоть что такое?...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт июн 07, 2022 00:50 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Total Vacuum писал(а):
Для истории:

А это хоть что такое?...

Это текущее состояние дел, чтобы тему оживить... Моё на паузе уже пару месяцев, ибо работа, отпуск, жилищные вопросы... :) Но в ближайших планах довести-таки до ума... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт июн 14, 2022 15:11 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Кстати, тут подумалось, что и 8-битный вариант самодельного процессора рано хоронить.
Если вместо
Код:
: @ ( addr -- n ) ... ;
: ! ( n addr -- ) ... ;
аппаратно будут реализованы
Код:
: @ ( page offset -- n ) ... ;
: ! ( n page offset -- ) ... ;
и т.д., да хоть 4-байтовые адреса пусть будут, если уж очень нужно...
Ну да, ну не по стандарту, зато вполне можно работать. Такой своеобразный стековый PIC получится.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как сделать форт-процессор 2022
СообщениеДобавлено: Вт июн 14, 2022 23:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да, тоже вариант. Три числа со стека снимать не при всех реализациях удобно, нужны именно регистры с мультиплексором, но в принципе оно рабочее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 404 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 27  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB