Использование двоичного FPGA для реализации троичного компа

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

Обновил проверялку троичной либы VHDL, чтобы ресет явно отрабатывался и клок сделал в одну строчку:

Code: Select all

use work.ternary.all;

entity main is
  port ( a1: out FakeTrit;
         a2: out FakeTrit;
         a3: out FakeTrit
       );
end main;

architecture behaviour of main
is

  component test3
    Port ( clk : in bit;
           res : in bit;
           s1 : out FakeTrit;
           s2 : out FakeTrit;
           s3 : out FakeTrit
         );
  end component;

  constant clk_period : time := 10 ns;
  signal iclk : bit := '0';
  signal ires : bit := '0';
begin
  test: test3 port map( clk => iclk, res => ires, s1 => a1, s2 => a2, s3 => a3 );

  iclk <= not iclk after 1 ns;
  ires <= '0', '1' after 5 ns;

  clk_process: process
  begin
    wait until (ires = '1');
--    iclk <= '0';
--    wait for clk_period/2;
--    iclk <= '1';
--    wait for clk_period/2;
    wait;
  end process;
end behaviour;
За основу взял вот этот туториал: https://fpgatutorial.com/how-to-write-a-basic-testbench-using-vhdl/
Screenshot from 2025-03-28 07-15-28.png
Либа ternary.vhd тут тоже обновлённая - как на репе (там ternary_clock вытащен наружу как чужеродный хак):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

Shaos wrote: 20 Mar 2025 23:32 Так что придётся тестбенчи писать на том же самом VHDL...
Обновил репу (и архив) - теперь в ternary.vhd есть функция tostr, которая переводит трит в строку, что можно использовать для формирования отчётов при тестировании тестбенча - обновлённый пример test_mem.vhd:

Code: Select all

use work.ternary.all;

entity test_mem is
end test_mem;

architecture Behavioral of test_mem is

signal ts : FakeTrit := N;
signal tn : FakeTrit := N;
signal tp : FakeTrit := P;
signal tq : FakeTrit;

begin

mem1: ternary_mem port map( T_S => ts, T_N => tn, T_P => tp, T_Q => tq);

TEST : process is
begin
   ts <= O;
   wait for 10 ns;
   report "N->O [NP] value should still be  N => " & tostr(tq) severity note;
   ts <= P;
   wait for 10 ns;
   report "O->P [NP] value should switch to P => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "P->O [NP] value should still be  P => " & tostr(tq) severity note;
   ts <= N;
   wait for 10 ns;
   report "O->N [NP] value should switch to N => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "N->O [NP] value should still be  N => " & tostr(tq) severity note;
   tn <= P;
   tp <= N;
   wait for 10 ns;
   report "O->O [PN] value should still be  N => " & tostr(tq) severity note;
   ts <= N;
   wait for 10 ns;
   report "O->N [PN] value should switch to P => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "N->O [PN] value should still be  P => " & tostr(tq) severity note;
   ts <= P;
   wait for 10 ns;
   report "O->P [PN] value should switch to N => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "P->O [PN] value should still be  N => " & tostr(tq) severity note;
   tn <= O;
   tp <= O;
   wait for 10 ns;
   report "O->O [OO] value should still be  N => " & tostr(tq) severity note;
   ts <= P;
   wait for 10 ns;
   report "O->P [OO] value should switch to O => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "P->O [OO] value should still be  O => " & tostr(tq) severity note;
   ts <= N;
   wait for 10 ns;
   report "O->N [OO] value should still be  O => " & tostr(tq) severity note;
   ts <= O;
   wait for 10 ns;
   report "N->O [OO] value should still be  O => " & tostr(tq) severity note;

   wait;

end process;

end Behavioral;
Скрипт компиляции и запуска через GHDL:

Code: Select all

ghdl -a ternary.vhd
ghdl -a test_mem.vhd
ghdl -e test_mem
ghdl -r test_mem --stop-time=200ns
И вот что оно печатает при прогоне:

Code: Select all

test_mem.vhd:21:4:@10ns:(report note): N->O [NP] value should still be  N => N
test_mem.vhd:24:4:@20ns:(report note): O->P [NP] value should switch to P => P
test_mem.vhd:27:4:@30ns:(report note): P->O [NP] value should still be  P => P
test_mem.vhd:30:4:@40ns:(report note): O->N [NP] value should switch to N => N
test_mem.vhd:33:4:@50ns:(report note): N->O [NP] value should still be  N => N
test_mem.vhd:37:4:@60ns:(report note): O->O [PN] value should still be  N => N
test_mem.vhd:40:4:@70ns:(report note): O->N [PN] value should switch to P => P
test_mem.vhd:43:4:@80ns:(report note): N->O [PN] value should still be  P => P
test_mem.vhd:46:4:@90ns:(report note): O->P [PN] value should switch to N => N
test_mem.vhd:49:4:@100ns:(report note): P->O [PN] value should still be  N => N
test_mem.vhd:53:4:@110ns:(report note): O->O [OO] value should still be  N => N
test_mem.vhd:56:4:@120ns:(report note): O->P [OO] value should switch to O => O
test_mem.vhd:59:4:@130ns:(report note): P->O [OO] value should still be  O => O
test_mem.vhd:62:4:@140ns:(report note): O->N [OO] value should still be  O => O
test_mem.vhd:65:4:@150ns:(report note): N->O [OO] value should still be  O => O
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Использование двоичного FPGA для реализации троичного компа

Post by askfind »

Работа идёт!

Поддерживаю.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

Про троичный RISC-V перенёс в новую тему

Троичный RISC-V

Тут всё таки про троичный комп на FPGA, а не про RISC-V с тритами :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

Про написание софткорки триадора на VHDL тоже будет продолжаться в другой теме:

Микросхема троичного микроконтроллера Triador-3000

А эта тема скорее для опробования базовых троичных блоков и простых экспериментов с троичностью на FPGA...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Использование двоичного FPGA для реализации троичного компа

Post by askfind »

Shaos wrote: 06 Apr 2025 21:06 А эта тема скорее для опробования базовых троичных блоков и простых экспериментов с троичностью на FPGA...
Поддерживаю напраление темы.

Научимся "кирпичи делать" - построим полезные троичные вычислители.

Базовые троичные элементы необходимы. Желательно синтезировать синхролнные схемы.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

Обнаружилась ошибка в реализации функции MIN, которую я добавил 30 марта - обновил репу и перезалил архив, что выше, с исправленной версией :oops:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Использование двоичного FPGA для реализации троичного компа

Post by Shaos »

askfind wrote: 07 Apr 2025 01:36 Научимся "кирпичи делать" - построим полезные троичные вычислители.

Базовые троичные элементы необходимы. Желательно синтезировать синхролнные схемы.
У меня блоки памяти MEM срабатывают не по фронту, а по уровню т.е. они реализованы через "прозрачные защёлки" (transparent latches), что уже считается асинхронным дизайном т.е. в реальном железе там могут быть гонки и неправильные срабатывания - я пока надеюсь, что сойдёт и так, но если вдруг в реальности начнутся проблемы, то придётся все MEM-ы заменить на синхронные, у которых будет ещё один вход глобального клока (причём двоичного), который одновременно на всех блоках памяти будет переключать состояние по фронту...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Использование двоичного FPGA для реализации троичного компа

Post by askfind »

Shaos wrote: 10 Apr 2025 20:27 придётся все MEM-ы заменить на синхронные, у которых будет ещё один вход глобального клока (причём двоичного), который одновременно на всех блоках памяти будет переключать состояние по фронту...
Да. Необходимо сразу делать синхронные цифровые элементы.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)