nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 13 Dec 2018 13:47



Reply to topic  [ 24 posts ]  Go to page Previous  1, 2
32-битный персональный компьютер nedoPC-5 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Добил почти все тесты на совместимость - один никак не поддаётся :(
Code:
Check         I-ADD-01 ... OK
Check        I-ADDI-01 ... OK
Check         I-AND-01 ... OK
Check        I-ANDI-01 ... OK
Check       I-AUIPC-01 ... OK
Check         I-BEQ-01 ... OK
Check         I-BGE-01 ... OK
Check        I-BGEU-01 ... OK
Check         I-BLT-01 ... OK
Check        I-BLTU-01 ... OK
Check         I-BNE-01 ... OK
Check       I-CSRRC-01 ... OK
Check      I-CSRRCI-01 ... OK
Check       I-CSRRS-01 ... OK
Check      I-CSRRSI-01 ... OK
Check       I-CSRRW-01 ... OK
Check      I-CSRRWI-01 ... OK
Check I-DELAY_SLOTS-01 ... OK
Check      I-EBREAK-01 ... OK
Check       I-ECALL-01 ... OK
Check   I-ENDIANESS-01 ... OK
Check     I-FENCE.I-01 ... OK
Check             I-IO ... OK
Check         I-JAL-01 ... OK
Check        I-JALR-01 ... OK
Check          I-LB-01 ... OK
Check         I-LBU-01 ... OK
Check          I-LH-01 ... OK
Check         I-LHU-01 ... OK
Check         I-LUI-01 ... OK
Check          I-LW-01 ... OK
Check I-MISALIGN_JMP-01 ... FAIL
Check I-MISALIGN_LDST-01 ... OK
Check         I-NOP-01 ... OK
Check          I-OR-01 ... OK
Check         I-ORI-01 ... OK
Check     I-RF_size-01 ... OK
Check    I-RF_width-01 ... OK
Check       I-RF_x0-01 ... OK
Check          I-SB-01 ... OK
Check          I-SH-01 ... OK
Check         I-SLL-01 ... OK
Check        I-SLLI-01 ... OK
Check         I-SLT-01 ... OK
Check        I-SLTI-01 ... OK
Check       I-SLTIU-01 ... OK
Check        I-SLTU-01 ... OK
Check         I-SRA-01 ... OK
Check        I-SRAI-01 ... OK
Check         I-SRL-01 ... OK
Check        I-SRLI-01 ... OK
Check         I-SUB-01 ... OK
Check          I-SW-01 ... OK
Check         I-XOR-01 ... OK
Check        I-XORI-01 ... OK
--------------------------------
FAIL: 1/55

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2018 01:41
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Shaos wrote:
UPDATE 22-NOV-2018: Первую версию компьютера (альфа) nedoPC-5-A планирую сделать вот на этой платке, что чуть ниже, которая имеет на борту FPGA iCE40 5K (с 5 тыщами лутов и 1 мегабитом блочной памяти), и назвать сей продукт "IceAge" :mrgreen:
Для FPGA надо будет написать на "Вырвиглотке" свою реализацию RISC-V (как минимум подсистемы RV32I) и назвать её скажем Retro-V, т.к. она будет давать людям возможность работать с этой платкой, как старым добрым микропроцессором - у платки будет внешняя шина адреса (16 бит) и данных (8 бит) с некоторым количеством управляющих сигналов (внутренняя память тоже возможно будет задействована, но там будет скажем подпрограммы для имитации команд работы с плавающей точкой RV32F и RV32D, которые будут вызываться по исключительному состоянию нелегального опкода ну и например графическая подсистема : )


Надо попробовать сделать шину данных у FPGA как ввод-вывод (чтобы на настоящий микропроцессор больше походило) вот по этому рецепту:

https://electronics.stackexchange.com/questions/22220/how-to-assign-value-to-bidirectional-port-in-verilog

Code:
module test (value, var);
  inout value;
  output reg var;

  assign value = (condition) ? <some value / expression> : 'bz;

  always @(<event>)
    var = value;

endmodule

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2018 17:42
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Shaos wrote:
Получил бесплатно платку UPDuino v2.0 для экспериментов ;)

Attachment:
The attachment UPDuino2.jpg is no longer available


Quote:
A low cost, minimalistic Arduino-like breakout board with Lattice Ultraplus FPGA and a USB programming device

Gnarly Grey UPDuino v2.0 Board Features:
  • Lattice UltraPlus FPGA
  • 5.3K LUTs, 1Mb SPRAM, 120Kb DPRAM, 8 Multipliers
  • FTDI FT232H USB to SPI Device for FPGA programming
  • 12Mhz Crystal Oscillator Clock Source
  • 34 GPIO on 0.1” headers
  • SPI Flash, RGB LED, 3.3V and 1.2V Regulators
  • Open source PCB design in Eagle and Programming Instructions


P.S. Она опенсорц даже: https://github.com/gtjennings1/UPDuino_v2_0

Ещё приобрёл UPDuino v1.0 - она всего за $7.99 продаётся т.к. без USB и с ошибками - как минимум надо 3 микрофарадных конденсатора припаять - 2 с лицевой стороны (как на фотке) и ещё один сзади на второй регулятор напряжения:

Attachment:
upduino_caps.jpg
upduino_caps.jpg [ 33.01 KiB | Viewed 221 times ]

Источник: https://www.eevblog.com/forum/microcontrollers/8$-ice40-developer-board/100/

_________________
:eugeek: https://twitter.com/Shaos1973


28 Nov 2018 00:20
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Померял скорость в вериляторе (который компилирует верилог в си++) - получилось, что за секунду моя модель RISC-V (см. https://gitlab.com/shaos/retro-v) успевает пробежать 1.8 миллионов тактов, что я считаю ОЧЕНЬ неплохо (т.е. 1.8 МГц частота виртуального процессора - это при в 2 раза большем количестве шагов симуляции т.к. симулируется clk=1 и потом clk=0)

P.S. А на домашнем AMD64 серваке получилось аж 2.2 МГц!!! :o

P.P.S. Прогнал Dhrystone собранный для RISC-V на вериляторе через свою модель (поставив правильное значение HZ для измерения счётчика RDCYCLE, который используется в Dhrystone варианте для RISC-V):
Code:
Dhrystone Benchmark, Version C, Version 2.2
Program compiled without 'register' attribute
Using rdcycle(), HZ=500000

Trying 500 runs through Dhrystone:
Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    510
        should be:   Number_Of_Runs + 10
Ptr_Glob->
  Ptr_Comp:          -2147452480
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
  Ptr_Comp:          -2147452480
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone: 902
Dhrystones per Second:                      1108
mcycle = 225523

что есть 1108 / 1757 = 0.63 DMIPS

Если симулируется 2 МГц, то у меня получается 0.63/2=0.315 DMIPS/MHz, что в 5.5 раз меньше официального RISC-V rocket core показателя в 1.72 DMIPS/MHz (см. https://riscv.org/2014/10/about-our-dhrystone-benchmarking-methodology/), что объяснимо, т.к. там вроде как инструкция на такт (а у меня инструкция на 4 такта).

Если мы будем запускать FPGA с тактовой частотой 25 МГц (предполагаемая максимальная частота по результатам синтеза в iCEcube2), то теоретически должно получиться 0.315*25=7.87 DMIPS

_________________
:eugeek: https://twitter.com/Shaos1973


02 Dec 2018 00:21
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Сегодня исправил ошибку в картинке ниже - ногу 36 они неправильно назвали 35 т.е. на картинке как бы две ноги с именем 35 было - я полдня убил пока понял почему у меня не то этот выход показывает...


Attachments:
top_orientation.jpg
top_orientation.jpg [ 142.42 KiB | Viewed 79 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
09 Dec 2018 21:58
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
вот эту программку запускаю на реальной железяке в своей реализации RISC-V:
Code:
/*
 Frank Buss: compile like this: riscv32-unknown-elf-gcc -O3 -nostdlib test1.c -o test1
 or
 riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 -O3 -nostdlib test1.c -o test1
*/
void _start()
{
    volatile char* tx = (volatile char*) 0x40002000;
    const char* hello = "Hello RISC-V!\n";
    while (*hello) {
        *tx = *hello;
        hello++;
    }
}

которая компилируется вот в такой код:
Code:
test1:     file format elf32-littleriscv


Disassembly of section .text:

00010054 <_start>:
   10054:   000107b7             lui   a5,0x10
   10058:   07878793             addi   a5,a5,120 # 10078 <_start+0x24>
   1005c:   04800713             li   a4,72
   10060:   400026b7             lui   a3,0x40002
   10064:   00e68023             sb   a4,0(a3) # 40002000 <__global_pointer$+0x3fff0778>
   10068:   00178793             addi   a5,a5,1
   1006c:   0007c703             lbu   a4,0(a5)
   10070:   fe071ae3             bnez   a4,10064 <_start+0x10>
   10074:   00008067             ret

вроде по адресам бежит верно и где надо читает и пишет данные с шины, но пока чего-то буквы не выводятся...

P.S. наконец вывелась первая буква 'H' (0x48 или 72):


Attachments:
UPDuino2bb1.jpg
UPDuino2bb1.jpg [ 36.68 KiB | Viewed 78 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
09 Dec 2018 22:58
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Но кроме 'H' оно почему-то больше ничего не выводит :(

Теперь надо понять толи у меня LOAD неправильно работает (который читает буквы из памяти), то ли STORE (которым эти буквы пишутся в порт вывода)

P.S. т.к. 'H' через STORE таки выводится, могу предположить, что неправильно работает LOAD...

_________________
:eugeek: https://twitter.com/Shaos1973


10 Dec 2018 01:25
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
А сегодня оно почему-то взяло и стало "печатать" все буквы! :o
Code:
01001000 = 0x48 = 'H'
01100101 = 0x65 = 'e'
01101100 = 0x6C = 'l'
​01101100 = 0x6C = 'l'
​01101111 = 0x6F = 'o'
​00100000 = 0x20 = ' '
​01010010 = 0x52 = 'R'
​01001001 = 0x49 = 'I'
​01010011 = 0x53 = 'S'
​01000011 = 0x43 = 'C'
​00101101 = 0x2D = '-'
​01010110 = 0x56 = 'V'
​00100001 = 0x21 = '!'
​00001010 = 0x0A = '\n'

Выложил исходники, пока работает ;)

https://gitlab.com/shaos/retro-v/tree/m ... ube2-test1

Вот как оно всё собирается вместе:
Code:
module top(dataout,addrout,wren,REDn,BLUn,GRNn);

output [7:0] dataout;
output [15:0] addrout;
output wire wren;
output  wire        REDn,       // Red
output  wire        BLUn,       // Blue
output  wire        GRNn,       // Green

reg [27:0]  frequency_counter_i;

wire [15:0] address;
wire [7:0] data;
wire clk;

//----------------------------------------------------------------------------
//                                                                          --
//                       Internal Oscillator                                --
//                                                                          --
//----------------------------------------------------------------------------
    SB_HFOSC  u_SB_HFOSC(.CLKHFPU(1'b1), .CLKHFEN(1'b1), .CLKHF(int_osc));


//----------------------------------------------------------------------------
//                                                                          --
//                       Counter                                            --
//                                                                          --
//----------------------------------------------------------------------------
    always @(posedge int_osc) begin
       frequency_counter_i <= frequency_counter_i + 1'b1;
    end

assign clk = frequency_counter_i[23];

retro cpu (
.nres(1'b1),
.clk(clk),
.hold(1'b0),
.address(address),
.data_in(data),
.data_out(dataout),
.wren(wren)
);

assign addrout = address;

// rom #(10) prog (address[9:0],data);

rom prog (address[7:0],data);

//----------------------------------------------------------------------------
//                                                                          --
//                       Instantiate RGB primitive                          --
//                                                                          --
//----------------------------------------------------------------------------
    SB_RGBA_DRV RGB_DRIVER (
      .RGBLEDEN (1'b1),
      .RGB0PWM  (1'b0),//(frequency_counter_i[25]),//(frequency_counter_i[25]&frequency_counter_i[24]),//GREEN
      .RGB1PWM  (clk),//(frequency_counter_i[26]),//(frequency_counter_i[25]&~frequency_counter_i[24]),//BLUE
      .RGB2PWM  (wren),//(frequency_counter_i[27]),//(~frequency_counter_i[25]&frequency_counter_i[24]),//RED
      .CURREN   (1'b1),
      .RGB0     (GRNn), //Actual Hardware connection - black,green,blue,cyan,red,yellow,magenta,white
      .RGB1     (BLUn),
      .RGB2     (REDn)
    );
    defparam RGB_DRIVER.RGB0_CURRENT = "0b000001";
    defparam RGB_DRIVER.RGB1_CURRENT = "0b000001";
    defparam RGB_DRIVER.RGB2_CURRENT = "0b000001";

endmodule


Привязка ног:
Code:
# ##############################################################################
# iCEcube PCF
# Version:            2017.08.27940
# File Generated:     Dec 9 2018 21:39:48
# Family & Device:    iCE40UP5K
# Package:            SG48
# ##############################################################################

###IOSet List 9
set_io dataout[0] 2
set_io dataout[1] 46
set_io dataout[2] 47
set_io dataout[3] 45
set_io dataout[4] 48
set_io dataout[5] 3
set_io dataout[6] 4
set_io dataout[7] 44
set_io wren 6


Статистика по использованным ресурсам:
Code:
Design statistics:
------------------
    FFs:                  336
    LUTs:                 2211
    RAMs:                 4
    IOBs:                 25
    GBs:                  5
    PLLs:                 0
    Warm Boots:           0
    SPIs:                 0
    I2Cs:                 0
    HFOSCs:               1
    LFOSCs:               0
    RGBA_DRVs:            1
    LEDDA_IPs:            0
    DSPs:                 0
    SPRAMs:               0
    FILTER_50NSs:         0

Logic Resource Utilization:
---------------------------
    Total Logic Cells: 2313/5280
        Combinational Logic Cells: 1977     out of   5280      37.4432%
        Sequential Logic Cells:    336      out of   5280      6.36364%
        Logic Tiles:               342      out of   660       51.8182%
    Registers:
        Logic Registers:           336      out of   5280      6.36364%
        IO Registers:              0        out of   480       0
    Block RAMs:                    4        out of   30        13.3333%
    Warm Boots:                    0        out of   1         0%
    SPIs:                          0        out of   2         0%
    I2Cs:                          0        out of   2         0%
    HFOSCs:                        1        out of   1         100%
    LFOSCs:                        0        out of   1         0%
    RGBA_DRVs:                     1        out of   1         100%
    LEDDA_IPs:                     0        out of   1         0%
    DSPs:                          0        out of   8         0%
    SPRAMs:                        0        out of   4         0%
    FILTER_50NSs:                  0        out of   2         0%
    Pins:
        Input Pins:                0        out of   39        0%
        Output Pins:               25       out of   39        64.1026%
        InOut Pins:                0        out of   39        0%
    Global Buffers:                5        out of   8         62.5%
    PLLs:                          0        out of   1         0%

IO Bank Utilization:
--------------------
    Bank 3: 0        out of   0         0%
    Bank 1: 0        out of   0         0%
    Bank 0: 13       out of   17        76.4706%
    Bank 2: 12       out of   22        54.5455%

_________________
:eugeek: https://twitter.com/Shaos1973


12 Dec 2018 23:16
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17214
Location: Colorado
Reply with quote
Теперь надо приладить вывод в последовательный порт со скоростью 115200 например, а пока символ выводится побитно процык надо тормозить - в таком случае можно будет на максимальной скорости гнать вычисления и спать в процессе вывода на терминал...

P.S. Далее можно будет включить внутреннюю память FPGA как ОЗУ и написать небольшую программку во встроенном ПЗУ, которая бы позволяла загонять пользовательский код в ОЗУ и запускать его на исполнение - в этом случае можно сказать уже полноценный компьютер получится...

_________________
:eugeek: https://twitter.com/Shaos1973


13 Dec 2018 00:01
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 24 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.