nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 03:45



Reply to topic  [ 235 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16
а не замутить ли нам недосимулятр? 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr, можешь дать исходники какого-то типового не сильно сложного проца (или сложной логики) и я попробую её прицепить к чему-то самописному?

_________________
:dj: https://mastodon.social/@Shaos


17 Feb 2023 23:11
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr, можешь дать исходники какого-то типового не сильно сложного проца (или сложной логики) и я попробую её прицепить к чему-то самописному?

Это немного непонятно... процы у нас в *.dll, логика в форматах Протеуса. Как её сюда "дать"? :roll:

_________________
iLavr


17 Feb 2023 23:32
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Lavr, можешь дать исходники какого-то типового не сильно сложного проца (или сложной логики) и я попробую её прицепить к чему-то самописному?

Это немного непонятно... процы у нас в *.dll, логика в форматах Протеуса. Как её сюда "дать"? :roll:

Ну тот кто писал *.dll имеет сырцы так? Вот мне надо поглядеть на эти сырцы :)

А в протэусе нету апи на обход нетлиста? ;)
Либо просто сохранения в нетлист.
Дай хотя бы такой нетлист поглядеть...

_________________
:dj: https://mastodon.social/@Shaos


17 Feb 2023 23:34
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Ну тот кто писал *.dll имеет сырцы так? Вот мне надо поглядеть на эти сырцы :)

Так я ж сказал, что PVV процы писал... некоторые исходники есть здесь:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=19632

_________________
iLavr


17 Feb 2023 23:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
А в протэусе нету апи на обход нетлиста? ;)
Либо просто сохранения в нетлист.
Дай хотя бы такой нетлист поглядеть...

Я такого в АПИ не видел. Документация по АПИ и как оно работает - ссылки здесь:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=10110

Это скорее всего в самом Протеусе запрятано, потому как в библиотеках мы только читаем уровни
с пинов устройства и по какой-то логике выставляем уровни на выходные пины.
Даже задержка по пинам в Протеусе групповая - прикладывается на всю модель, в зависимости от
того как модель "пометили" ТТЛ, КМОП и т.п. хотя при желании изменить задержку можно.

_________________
iLavr


17 Feb 2023 23:53
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Надо писать редактор и вызывать ngspice с подмножеством директив Xspice, для симуляции цифровой электроники:
Code:
a6 [1 2 3] 8 nand1
.model nand1 d_nand(rise_delay = 0.5e-9 fall_delay = 0.3e-9
+                              input_load = 0.5e-12

Поглядел я в описание Xspice что в составе ngspice идёт - там даже есть возможность свои event-driven модели на сях писать :o
т.е. теоретически можно попробовать прикрутить туда ваши модели процыков, что для протэуса писаны - и тогда мы завоюем мир :mrgreen:

Вот список цифровых моделей, которые уже включены в состав пакета (некоторые аргументы могут быть как единичными сигналами, так и векторами):
d_buffer (Buffer) in out
d_inverter (Inverter) in out
d_and (AND) in out
d_nand (NAND) in out
d_or (OR) in out
d_nor (NOR) in out
d_xor (XOR) in out
d_xnor (XNOR) in out
d_tristate (Tristate buffer) in enable out
d_pullup (Pull-up) out
d_pulldown (Pull-down) out
d_dff (D-flipflop) data clk set reset out Nout (parameter ic - initial state)
d_jkff (JK-flipflop) j k clk set reset out Nout
d_tff (Toggle flipflop) t clk set reset out Nout
d_srff (Set-Reset flipflop) s r clk set reset out Nout
d_dlatch (D-Latch) data enable set reset out Nout
d_srlatch (Set-Reset Latch) s r enable set reset out Nout
d_state (State Machine) in clk reset out (parameters state_file "filename.txt" and reset_state 0)
d_fdiv (Frequency Divider) freq_in freq_out (parameters div_factor, high_cycles, i_count - initial count)
d_ram (RAM) data_in data_out address write_en select (parameters select_value 1, read_delay 100e-9, ic - initial state)
d_source (Digital Source) out (parameter input_file "source.txt" with lines time value value value...)
d_lut (Look-Up Table) in out (parameter table_values "01X")
d_genlut (General LUT) in out (parameter table_values "01XZ")
ещё почти у каждой модели есть параметры rise_delay, fall_delay (оба имеют значение по умолчанию 1e-9 и минимум могут быть установлены в 1e-12) и input_load (задётся в фарадах и по умолчанию составляет 1e-12).

В качестве значений на входах и выходах вышеописанных цифровых моделей могут выступать 12 состояний:
0s,0r,0z,0u,1s,1r,1z,1u,Us,Ur,Uz,Uu
где суффиксы это s=strong, r=resistive, z=high-impedance, u=unknown и значение U это так же unknown ( т.е. Uu это неизвестное значение с неизвестной силой : )

P.S. В исходниках ещё есть модель d_osc (осциллятор) и модули для связи с аналоговой частью - adc_bridge и dac_bridge (аналоговая часть по-видимому считается классическим SPICE3 через дифуры).

P.P.S. Вот под спойлером для примера исходник модели d_and, судя по всему написанный 32 года назад:
 d_and/cfunc.mod
Code:
/*.......1.........2.........3.........4.........5.........6.........7.........8
================================================================================

FILE d_and/cfunc.mod

Public Domain

Georgia Tech Research Corporation
Atlanta, Georgia 30332
PROJECT A-8503-405
               

AUTHORS                     

    14 June 1991     Jeffrey P. Murray


MODIFICATIONS   

    27 Sept 1991    Jeffrey P. Murray
                                   

SUMMARY

    This file contains the functional description of the d_and
    code model.


INTERFACES       

    FILE                 ROUTINE CALLED     

    CMevt.c              void *cm_event_alloc()
                         void *cm_event_get_ptr()
                         


REFERENCED FILES

    Inputs from and outputs to ARGS structure.
                     

NON-STANDARD FEATURES

    NONE

===============================================================================*/

/*=== INCLUDE FILES ====================*/

#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>

                                     

/*=== CONSTANTS ========================*/




/*=== MACROS ===========================*/



 
/*=== LOCAL VARIABLES & TYPEDEFS =======*/                         


   
           
/*=== FUNCTION PROTOTYPE DEFINITIONS ===*/




                   
/*==============================================================================

FUNCTION cm_d_and()

AUTHORS                     

    14 Jun 1991     Jeffrey P. Murray

MODIFICATIONS   

    27 Sep 1991     Jeffrey P. Murray

SUMMARY

    This function implements the d_and code model.

INTERFACES       

    FILE                 ROUTINE CALLED     

    CMevt.c              void *cm_event_alloc()
                         void *cm_event_get_ptr()

RETURNED VALUE
   
    Returns inputs and outputs via ARGS structure.

GLOBAL VARIABLES
   
    NONE

NON-STANDARD FEATURES

    NONE

==============================================================================*/

/*=== CM_D_AND ROUTINE ===*/

/************************************************
*      The following is the model for the       *
*   digital AND gate for the                    *
*   ATESSE Version 2.0 system.                  *
*                                               *
*   Created 6/14/91               J.P.Murray    *
************************************************/


void cm_d_and(ARGS)

{
    int                    i,   /* generic loop counter index */
                       size;   /* number of input & output ports */
         
                       

    Digital_State_t     *out,   /* temporary output for buffers */
                    *out_old,   /* previous output for buffers  */                               
                       input;   /* temp storage for input bits  */   


    /** Retrieve size value... **/
    size = PORT_SIZE(in);

                                         

    /*** Setup required state variables ***/

    if(INIT) {  /* initial pass */

        /* allocate storage for the outputs */
        cm_event_alloc(0,sizeof(Digital_State_t));
                 
        /* set loading for inputs */
        for (i=0; i<size; i++) LOAD(in[i]) = PARAM(input_load);

        /* retrieve storage for the outputs */
        out = out_old = (Digital_State_t *) cm_event_get_ptr(0,0);

    }
    else {      /* Retrieve previous values */
                                             
        /* retrieve storage for the outputs */
        out = (Digital_State_t *) cm_event_get_ptr(0,0);
        out_old = (Digital_State_t *) cm_event_get_ptr(0,1);
    }


                                     

    /*** Calculate new output value based on inputs ***/

    *out = ONE;
    for (i=0; i<size; i++) {

        /* make sure this input isn't floating... */
        if ( FALSE == PORT_NULL(in) ) {

            /* if a 0, set *out low */
            if ( ZERO == (input = INPUT_STATE(in[i])) ) {
                *out = ZERO;
                break;
            }
            else {                   
                /* if an unknown input, set *out to unknown & break */
                if ( UNKNOWN == input ) {
                    *out = UNKNOWN;
                }
            }
        }
        else {
            /* at least one port is floating...output is unknown */
            *out = UNKNOWN;
            break;
        }
    }       



    /*** Determine analysis type and output appropriate values ***/

    if (ANALYSIS == DC) {   /** DC analysis...output w/o delays **/
                                 
        OUTPUT_STATE(out) = *out;

    }

    else {      /** Transient Analysis **/


        if ( *out != *out_old ) { /* output value is changing */

            switch ( *out ) {
                                                 
            /* fall to zero value */
            case 0: OUTPUT_STATE(out) = ZERO;
                    OUTPUT_DELAY(out) = PARAM(fall_delay);
                    break;
   
            /* rise to one value */
            case 1: OUTPUT_STATE(out) = ONE;
                    OUTPUT_DELAY(out) = PARAM(rise_delay);
                    break;
                                   
            /* unknown output */
            default:
                    OUTPUT_STATE(out) = *out = UNKNOWN;
   
                    /* based on old value, add rise or fall delay */
                    if (0 == *out_old) {  /* add rising delay */
                        OUTPUT_DELAY(out) = PARAM(rise_delay);
                    }
                    else {                /* add falling delay */
                        OUTPUT_DELAY(out) = PARAM(fall_delay);
                    }   
                    break;
            }
        }
        else {                    /* output value not changing */
            OUTPUT_CHANGED(out) = FALSE;
        }
    }

    OUTPUT_STRENGTH(out) = STRONG;

}

_________________
:dj: https://mastodon.social/@Shaos


04 Mar 2023 01:47
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ещё вырисовывается необходимость импортировать схемы не только из Logisim, но и из Wokwi и даже наверное из Verilog (упрощённый до сети гейтов) а может даже и VHDL...

_________________
:dj: https://mastodon.social/@Shaos


05 Jun 2023 11:17
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Пока суть да дело по-быстрому написал wokwi-downloader, который выгружает HTML-страничку Wokwi-проектa по ID и вытаскивает оттуда файлы проекта:

https://gitlab.com/nedopc/nedosim/-/blob/master/converters/from_wokwi/wokwi-downloader.c

Code:
./wokwi-downloader 349736284020802131

wget -O index.html https://wokwi.com/projects/349736284020802131

--2023-06-05 13:40:23--  https://wokwi.com/projects/349736284020802131
Resolving wokwi.com (wokwi.com)... 2606:4700:20::681a:da6, 2606:4700:20::681a:ca6, 2606:4700:20::ac43:4be6, ...
Connecting to wokwi.com (wokwi.com)|2606:4700:20::681a:da6|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                     [ <=>                                    ]  99.20K  --.-KB/s    in 0.03s   

2023-06-05 13:40:23 (3.78 MB/s) - ‘index.html’ saved [101584]

[0] tiny-tapeout-shaos-more-experiments
[1] tiny-tapeout-poc-new-internal-pulls.ino
[2] diagram.json
[3] input-16-pins.chip.json
[4] output-12-pins.chip.json
[5] input-16-pins.chip.c
[6] output-12-pins.chip.c
[7] mux3.chip.json
[8] mux3.chip.v
[9] cgate.chip.v
[10] cgate.chip.json

11 names retrieved

Файлы json это описание схемы (diagram.json) и пользовательских блоков (входы-выходы), а внутренности таких блоков представлены на языках C или Verilog (а внутренние библиотечные блоки наружу не торчат).

_________________
:dj: https://mastodon.social/@Shaos


06 Jun 2023 00:07
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Файлы json это описание схемы (diagram.json) и пользовательских блоков (входы-выходы), а внутренности таких блоков представлены на языках C или Verilog (а внутренние библиотечные блоки наружу не торчат).

Вот пример как на сях написать аналоговые ключи 4051 и 4052 для вставки их в свои дизайны Wokwi:

https://blog.wokwi.com/custom-chips-cd4051b-analog-multiplexer/

_________________
:dj: https://mastodon.social/@Shaos


07 Jun 2023 02:38
Profile WWW
Novelist
User avatar

Joined: 23 May 2023 23:14
Posts: 42
Reply with quote
Shaos wrote:
Shaos wrote:
Файлы json это описание схемы (diagram.json) и пользовательских блоков (входы-выходы), а внутренности таких блоков представлены на языках C или Verilog (а внутренние библиотечные блоки наружу не торчат).

Вот пример как на сях написать аналоговые ключи 4051 и 4052 для вставки их в свои дизайны Wokwi:

https://blog.wokwi.com/custom-chips-cd4051b-analog-multiplexer/

Тоже встречал эту программку, но мозга работать с ней не хватает(


27 Dec 2023 10:22
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 235 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16

Who is online

Users browsing this forum: No registered users and 18 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.