Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
mOleg писал(а): P.S. возможно учет разрядности уберу, т.к. числа могут быть записаны еще и в обычном виде ( в моем случае приходится всегда писать хотя бы так: '12 , чтобы число было в нужном формате (пока не напрягает, так как, код для верилога я пишу сам). Кстати, раз уж сам пишешь для верилога, можно и наоборот: не читать из верилога, а наоборот генерировать из форта верилог-файлы.
[quote="mOleg"]P.S. возможно учет разрядности уберу, т.к. числа могут быть записаны еще и в обычном виде ( в моем случае приходится всегда писать хотя бы так: '12 , чтобы число было в нужном формате (пока не напрягает, так как, код для верилога я пишу сам).[/quote] Кстати, раз уж сам пишешь для верилога, можно и наоборот: не читать из верилога, а наоборот генерировать из форта верилог-файлы.
|
|
|
 |
Добавлено: Пн июл 18, 2022 16:46 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
mOleg писал(а): SystemVerilog в квартусе, вроде как 64 бита, 32 требуется, больше - implementation-dependent. Под 64-битными компиляторами часто 64 бита и реализуют.
[quote="mOleg"]SystemVerilog в квартусе, вроде как 64 бита,[/quote] 32 требуется, больше - implementation-dependent. Под 64-битными компиляторами часто 64 бита и реализуют.
|
|
|
 |
Добавлено: Пн июл 18, 2022 00:20 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
Hishnik писал(а): А зачем в программном проекте спецификатор размера из Verilog? ну, не особо нужен, просто сделал на всякий случай. Hishnik писал(а): При этом integer в Verilog имеет 32 разряда.
SystemVerilog в квартусе, вроде как 64 бита, но, с числами двойной длины проще получается распознавалка, т.к. >number 64-битный, как и вывод: <# # #S #> P.S. возможно учет разрядности уберу, т.к. числа могут быть записаны еще и в обычном виде ( в моем случае приходится всегда писать хотя бы так: '12 , чтобы число было в нужном формате (пока не напрягает, так как, код для верилога я пишу сам).
[quote="Hishnik"]А зачем в программном проекте спецификатор размера из Verilog?[/quote] ну, не особо нужен, просто сделал на всякий случай.
[quote="Hishnik"]При этом integer в Verilog имеет 32 разряда. [/quote]
SystemVerilog в квартусе, вроде как 64 бита, но, с числами двойной длины проще получается распознавалка, т.к. >number 64-битный, как и вывод: <# # #S #>
P.S. возможно учет разрядности уберу, т.к. числа могут быть записаны еще и в обычном виде ( в моем случае приходится всегда писать хотя бы так: '12 , чтобы число было в нужном формате (пока не напрягает, так как, код для верилога я пишу сам).
|
|
|
 |
Добавлено: Вс июл 17, 2022 23:52 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
А зачем в программном проекте спецификатор размера из Verilog? Он нужен для моделирования цепей, у которых разрядность физически не 32, и поэтому использование обычных переменных может дать некорректный результат. При этом integer в Verilog имеет 32 разряда.
А зачем в программном проекте спецификатор размера из Verilog? Он нужен для моделирования цепей, у которых разрядность физически не 32, и поэтому использование обычных переменных может дать некорректный результат. При этом integer в Verilog имеет 32 разряда.
|
|
|
 |
Добавлено: Пн июл 11, 2022 18:55 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
KPG писал(а): mOleg Этот пример сделан в рамках запуска под твоим SPF4-fork? И есть ли какая то разница в его реализации в оригинальном SPF4 vs SPF4-fork с методологической точки рассмотрения? и в связи с этим попутный вопрос, а есть ли отдельный код для совмещения запуска этого примера в SPF4? да на форке, я к СПФу не прикасался уж лет 10. форк- полностью переписанный СПФ4, в нем практически от СПФа ничего не осталось, поэтому без переделки не получится. Тем более, в данном примере числа распознает словарь VERILOG , который добавляется в контекст когда нужно, в СПФ4 такого механизма просто нет (там есть NOTFOUND , но он неуправляем) Hishnik писал(а): Вот нормальный несложный КА здесь поедет очень даже хорошо. Главное, будет видно, что и где делается. тут не так оно и сложно, КА выигрыша особого не даст, собственно, вот это делать через автомат (?): \ преобразовать строку asc # в записи VERILOG в значение числа ud и битовую длину числа ud# : PosNumber ( asc # --> ud# ud ) ?Long ?Base ?Numb countDBits CheckLong ;
[quote="KPG"]mOleg Этот пример сделан в рамках запуска под твоим SPF4-fork? И есть ли какая то разница в его реализации в оригинальном SPF4 vs SPF4-fork с методологической точки рассмотрения? и в связи с этим попутный вопрос, а есть ли отдельный код для совмещения запуска этого примера в SPF4?[/quote] да на форке, я к СПФу не прикасался уж лет 10. форк- полностью переписанный СПФ4, в нем практически от СПФа ничего не осталось, поэтому без переделки не получится. Тем более, в данном примере числа распознает словарь VERILOG , который добавляется в контекст когда нужно, в СПФ4 такого механизма просто нет (там есть NOTFOUND , но он неуправляем)
[quote="Hishnik"]Вот нормальный несложный КА здесь поедет очень даже хорошо. Главное, будет видно, что и где делается.[/quote] тут не так оно и сложно, КА выигрыша особого не даст, собственно, вот это делать через автомат (?): \ преобразовать строку asc # в записи VERILOG в значение числа ud и битовую длину числа ud# : PosNumber ( asc # --> ud# ud ) ?Long ?Base ?Numb countDBits CheckLong ;
|
|
|
 |
Добавлено: Пн июл 11, 2022 17:04 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
Total Vacuum писал(а): А, кстати, если не секрет, куда ехать? Неужели пожирать описания схем на veriloge и рожать "прошивки"? в проекте часто бывают всякие параметры, типа адресов регистров, специфичных констант и прочего, что просто лень дублировать в программе. выглядит это либо как: `define something 16'h0FED впрочем, тут могут быть и выражения, но без выражений можно обойтись, либо: parameter something= 10'b100101010; (параметры могут перечисляться через запятую) Особенность чисел в верилоге в том, что можно в явном виде задавать длину числа в битах, в последнем примере 10' это и есть длина числа, а после ' может стоять модификатор системы счисления. кстати можно делать и так: `define DW 12 parameter one= `DW'h10, `DW'd123, `DW'b1000101; в общем, подключаем файл из проекта верилога и с ним работаем.
[quote="Total Vacuum"]А, кстати, если не секрет, куда ехать? Неужели пожирать описания схем на veriloge и рожать "прошивки"?[/quote]
в проекте часто бывают всякие параметры, типа адресов регистров, специфичных констант и прочего, что просто лень дублировать в программе. выглядит это либо как:
`define something 16'h0FED
впрочем, тут могут быть и выражения, но без выражений можно обойтись, либо:
parameter something= 10'b100101010; (параметры могут перечисляться через запятую)
Особенность чисел в верилоге в том, что можно в явном виде задавать длину числа в битах, в последнем примере 10' это и есть длина числа, а после ' может стоять модификатор системы счисления.
кстати можно делать и так:
`define DW 12 parameter one= `DW'h10, `DW'd123, `DW'b1000101;
в общем, подключаем файл из проекта верилога и с ним работаем.
|
|
|
 |
Добавлено: Пн июл 11, 2022 16:54 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
mOleg Этот пример сделан в рамках запуска под твоим SPF4-fork? И есть ли какая то разница в его реализации в оригинальном SPF4 vs SPF4-fork с методологической точки рассмотрения? и в связи с этим попутный вопрос, а есть ли отдельный код для совмещения запуска этого примера в SPF4?
[b]mOleg[/b] Этот пример сделан в рамках запуска под твоим SPF4-fork? И есть ли какая то разница в его реализации в оригинальном SPF4 vs SPF4-fork с методологической точки рассмотрения? и в связи с этим попутный вопрос, а есть ли отдельный код для совмещения запуска этого примера в SPF4?
|
|
|
 |
Добавлено: Пн июл 11, 2022 14:08 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
А, кстати, если не секрет, куда ехать? Неужели пожирать описания схем на veriloge и рожать "прошивки"?
А, кстати, если не секрет, куда ехать? Неужели пожирать описания схем на veriloge и рожать "прошивки"?
|
|
|
 |
Добавлено: Пн июл 11, 2022 10:38 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
Вот нормальный несложный КА здесь поедет очень даже хорошо. Главное, будет видно, что и где делается.
Вот нормальный несложный КА здесь поедет очень даже хорошо. Главное, будет видно, что и где делается.
|
|
|
 |
Добавлено: Вс июл 10, 2022 22:35 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
Hishnik писал(а): Что-то я попробовал увидеть тут КА или регулярные выражения, и не увидел. а мне шашечки не нужны, мне ехать 8) числа распознаются, сохраняются, компилируются
[quote="Hishnik"]Что-то я попробовал увидеть тут КА или регулярные выражения, и не увидел.[/quote] а мне шашечки не нужны, мне ехать 8) числа распознаются, сохраняются, компилируются
|
|
|
 |
Добавлено: Вс июл 10, 2022 21:33 |
|
|
 |
|
|
Заголовок сообщения: |
Re: распознавалка чисел в формате языка verilog |
 |
|
Что-то я попробовал увидеть тут КА или регулярные выражения, и не увидел.
Что-то я попробовал увидеть тут КА или регулярные выражения, и не увидел.
|
|
|
 |
Добавлено: Вс июл 10, 2022 18:54 |
|
|
 |
|
|
Заголовок сообщения: |
распознавалка чисел в формате языка verilog |
 |
|
source file: verilog.fts \ 02.06.2022 ~mOleg \ Copyright [C] 2022 mOleg mOlegg@ya.ru \ преобразование строкового представления чисел вида 3'b00101 или 10'h1AF или 7'd23 или '123
branch/ case.fts math/ double.fts
\ разделить строку по указанному символу char \ возвращается остаток строки asch и его длина #, начало и длина строки до разделителя \ если разделитель не встретился, длина #h будет равна 0 : split ( asc # char --> asch #h ascl #l ) >L DDUP BOUNDS BEGIN DDUP > WHILE DUP C@ L@ = WHILENOT C+ REPEAT THEN TUCK - DUP >L DSWAP L> - LDROP ;
\ поиск определенного через `define имени : Defined ( asc # --> ud asc # ) [CHAR] ' split SFIND \ искать необходимо либо не в словаре VERILOG, либо только по цепочке слов !! иначе будет рекурсия IF EXECUTE DROP DSWAP ELSE >STDERR ERROR" - invalid name" THEN ;
\ определить битовую длину числа : ?Long ( asc # --> ud asc # ) OVER C@ DUP [CHAR] ` = IF DROP Defined ;THEN 0x0A DIGIT IFNOT 0:0 DSWAP ;THEN DROP \ если битовая длина числа не задана 0:0 DSWAP 0x0A >number DOVER 0:0 D= ABORT" Can't be zero lenght number!" ;
\ распознать число asc #, как число в системе счисления base : ?Numb ( asc # base --> ud ) >L 0:0 DSWAP L> >number ABORT" Invalid verilog number" DROP ;
\ выбрать систему счисления для преобразования значения числа : SelBASE ( asc # --> asc # base ) OVER C@ CASE [CHAR] b OF SKIP1 2 ENDOF [CHAR] d OF SKIP1 0x0A ENDOF [CHAR] h OF SKIP1 0x10 ENDOF DROP 0x0A \ когда система счисления явно не задана используется десятичная ENDCASE ;
\ определить систему счисления : ?Base ( asc # --> asc # base ) OVER C@ [CHAR] ' = IF SKIP1 SelBASE ;THEN ERROR" Invalid verilog number!" ;
\ по номеру бита # получить установленный бит в указанной позиции числа ud : DBIT ( # --> ud ) 32 OVER > IF BIT 0 ELSE 32 - BIT 0 SWAP THEN ;
\ маска ud для указанного младших бит № числа ud : DMASK ( # --> ud ) DBIT 0:1 D- ;
\ инвертировать число двойной длины d : DINVERT ( d --> ~d ) INVERT SWAP INVERT SWAP ;
\ логарифм по основанию 2 для чисел двойной длины : DLG2 ( d --> u ) -IF DABS 1 \ д.б. на один бит длиннее, т.к. надо где-то хранить знаковый бит ELSE 0 THEN >L BEGIN DDUP OR WHILE \ медленно, но заморачиваться не хочется D2/ 1 L+ REPEAT DDROP L> ;
\ определить количество действительных бит # в числе двойной длины d : DBITS ( d --> # ) 0x80000000:0 DOVER D= IF DDROP 64 ;THEN \ DNEGATE не работает нормально, если выставлен только старший бит числа! DLG2 ;
\ определить действительное количество бит числа двойной длины : countDBits ( ud# ud --> ud# ud ) DOVER OR ?EXIT DNIP DDUP DBITS S>D DSWAP ;
\ проверка, влазит ли число ud в указанное количество бит ud#, \ лишние старшие значащие биты обрезаются : CheckLong ( ud# ud --> ud# ud ) DOVER D>S DMASK DOVER DOVER DINVERT DAND OR IF STRING" warning: high bit's of verilog number truncated!" >STDERR THEN DAND ;
\ преобразовать строку asc # в записи VERILOG в значение числа ud и битовую длину числа ud# : PosNumber ( asc # --> ud# ud ) ?Long ?Base ?Numb countDBits CheckLong ;
\ преобразовать число asc # , записанное в виде -ux'uy :> 'VerilogNumber ( asc # --> ud # ) ?SIGN IF PosNumber DNEGATE ELSE PosNumber THEN DSWAP D>S ;
ALSO HIDDEN
\ ячейка для хранения последнего распознанного VERILOG числа USER-CREATE last-ver-number 3 CELLS USER-ALLOT
\ извлечь verilog число из addr : V@ ( addr --> d # ) DUP D@ ROT 2 CELLS + @ ;
\ сохранить verilog число в addr : V! ( d # addr --> ) TUCK 2 CELLS + ! D! ;
\ компилировать литерал verilog числа d # : VLIT, ( d # --> ) COMPILE (BOX) HERE A>L 0 , >L D, L> , HERE AL@ - AL> ! COMPILE V@ ;
\ литерал для verilog чисел d # : Vliteral ( d # --> ) state IF VLIT, THEN ;
\ метод работы с verilog числами для словаря : (VerLit) ( --> d # ) last-ver-number V@ Vliteral ; IMMEDIATE
\ попытка распознать число, заданное строкой: asc # \ как verilog число :> 'sVerLfa ( asc # vid --> lfa | 0 ) DROP \ vid словаря не нужен 'VerilogNumber CATCH IF DDROP 0 ;THEN last-ver-number V! LFA (VerLit) ;
ALSO HIDDEN
init: VOCABULARY \ создание словаря VOC-LIST A@ >L \ wordlist 'sVerLfa L@ off_quest A! ['] (mount) L@ off_mount A! ['] no-umount L@ off_umount A! &vinit L> off_vflags B! ;stop VERILOG PREVIOUS PREVIOUS
\ преобразовать указанное количество цифр числа ud : ##S ( ud # --> ud ) BEGIN DUP WHILE >L # L> 1 - REPEAT DROP ;
\ отобразить верилог число d # в текущей системе счисления : .vn ( d # --> ) OVER >L DUP >L S>D DSWAP DABS <# BASE@ CASE 2 OF L> ##S DDROP [CHAR] b ENDOF 10 OF LDROP #S DDROP [CHAR] d ENDOF \ количество цифр считать влом! 16 OF L> 4 /MOD SWAP IF 1 + THEN ##S DDROP [CHAR] h ENDOF ERROR" undefined base for verilog number!" ENDCASE HOLD [CHAR] ' HOLD 0x0A TO BASE@ #S L> SIGN #> TYPE ;
\ отобразить verilog число d # в шестнадцатиричной системе счисления : .vh ( d # --> ) OVER >L DUP >L S>D DSWAP DABS 0x10 {# L> 4 /MOD SWAP IF 1 + THEN ##S DDROP s" 'h" HOLDS 0x0A TO BASE@ #S L> SIGN #> TYPE ;
\ отобразить verilog число d # в десятичной системе счисления : .vd ( d # --> ) OVER >L S>D DSWAP DABS 0x0A {# #S DDROP s" 'd" HOLDS #S L> SIGN #> TYPE ;
\ отобразить verilog число d # в двоичной системе счисления : .vb ( d # --> ) OVER >L DUP >L S>D DSWAP DABS 0x02 {# L> ##S DDROP s" 'b" HOLDS 0x0A TO BASE@ #S L> SIGN #> TYPE ;
ALSO VERILOG UNDER Ну, и примеры использования (просто набираем в консоли): '123 .vn 'd123 .vn 'h1A3E .vn 10'd333 .vn -12'b11100101010111 .vn и т.д.
[pre]source file: verilog.fts [b][color=#808080]\ 02.06.2022 ~mOleg[/color] [color=#808080]\ Copyright [C] 2022 mOleg mOlegg@ya.ru[/color] [color=#808080]\ преобразование строкового представления чисел вида 3'b00101 или 10'h1AF или 7'd23 или '123[/color]
[color=#00F000]branch/ case.fts[/color] [color=#00F000]math/ double.fts[/color]
[color=#808080]\ разделить строку по указанному символу char[/color] [color=#808080]\ возвращается остаток строки asch и его длина #, начало и длина строки до разделителя[/color] [color=#808080]\ если разделитель не встретился, длина #h будет равна 0[/color] [color=#FF8000]: split[/color] [color=#0080C0]( asc # char --> asch #h ascl #l )[/color] >L DDUP BOUNDS [color=#00A0A0]BEGIN[/color] DDUP > [color=#00A0A0]WHILE[/color] DUP C@ L@ = [color=#00A0A0]WHILENOT[/color] C+ [color=#00A0A0]REPEAT[/color] [color=#00A0A0]THEN[/color] TUCK - DUP >L DSWAP L> - LDROP [color=#FF8000];[/color]
[color=#808080]\ поиск определенного через `define имени[/color] [color=#FF8000]: Defined[/color] [color=#0080C0]( asc # --> ud asc # )[/color] [color=#00F000][CHAR] '[/color] split SFIND [color=#808080]\ искать необходимо либо не в словаре VERILOG, либо только по цепочке слов !! иначе будет рекурсия[/color] [color=#00A0A0]IF[/color] [color=#C00000]EXECUTE[/color] DROP DSWAP [color=#00A0A0]ELSE[/color] >STDERR [color=#C00000]ERROR" - invalid name"[/color] [color=#00A0A0]THEN[/color] [color=#FF8000];[/color]
[color=#808080]\ определить битовую длину числа[/color] [color=#FF8000]: ?Long[/color] [color=#0080C0]( asc # --> ud asc # )[/color] OVER C@ DUP [color=#00F000][CHAR] `[/color] = [color=#00A0A0]IF[/color] DROP Defined [color=#FF8000];THEN[/color] [color=#00F000]0x0A[/color] DIGIT [color=#00A0A0]IFNOT[/color] [color=#00F000]0:0[/color] DSWAP [color=#FF8000];THEN[/color] DROP [color=#808080]\ если битовая длина числа не задана[/color] [color=#00F000]0:0[/color] DSWAP [color=#00F000]0x0A[/color] >number DOVER [color=#00F000]0:0[/color] D= [color=#C00000]ABORT" Can't be zero lenght number!"[/color] [color=#FF8000];[/color]
[color=#808080]\ распознать число asc #, как число в системе счисления base[/color] [color=#FF8000]: ?Numb[/color] [color=#0080C0]( asc # base --> ud )[/color] >L [color=#00F000]0:0[/color] DSWAP L> >number [color=#C00000]ABORT" Invalid verilog number"[/color] DROP [color=#FF8000];[/color]
[color=#808080]\ выбрать систему счисления для преобразования значения числа[/color] [color=#FF8000]: SelBASE[/color] [color=#0080C0]( asc # --> asc # base )[/color] OVER C@ CASE [color=#00F000][CHAR] b[/color] OF SKIP1 [color=#00F000]2[/color] ENDOF [color=#00F000][CHAR] d[/color] OF SKIP1 [color=#00F000]0x0A[/color] ENDOF [color=#00F000][CHAR] h[/color] OF SKIP1 [color=#00F000]0x10[/color] ENDOF DROP [color=#00F000]0x0A[/color] [color=#808080]\ когда система счисления явно не задана используется десятичная[/color] ENDCASE [color=#FF8000];[/color]
[color=#808080]\ определить систему счисления[/color] [color=#FF8000]: ?Base[/color] [color=#0080C0]( asc # --> asc # base )[/color] OVER C@ [color=#00F000][CHAR] '[/color] = [color=#00A0A0]IF[/color] SKIP1 SelBASE [color=#FF8000];THEN[/color] [color=#C00000]ERROR" Invalid verilog number!"[/color] [color=#FF8000];[/color]
[color=#808080]\ по номеру бита # получить установленный бит в указанной позиции числа ud[/color] [color=#FF8000]: DBIT[/color] [color=#0080C0]( # --> ud )[/color] [color=#00F000]32[/color] OVER > [color=#00A0A0]IF[/color] BIT [color=#00F000]0[/color] [color=#00A0A0]ELSE[/color] [color=#00F000]32[/color] - BIT [color=#00F000]0[/color] SWAP [color=#00A0A0]THEN[/color] [color=#FF8000];[/color]
[color=#808080]\ маска ud для указанного младших бит № числа ud[/color] [color=#FF8000]: DMASK[/color] [color=#0080C0]( # --> ud )[/color] DBIT [color=#00F000]0:1[/color] D- [color=#FF8000];[/color]
[color=#808080]\ инвертировать число двойной длины d[/color] [color=#FF8000]: DINVERT[/color] [color=#0080C0]( d --> ~d )[/color] INVERT SWAP INVERT SWAP [color=#FF8000];[/color]
[color=#808080]\ логарифм по основанию 2 для чисел двойной длины[/color] [color=#FF8000]: DLG2[/color] [color=#0080C0]( d --> u )[/color] [color=#00A0A0]-IF[/color] DABS [color=#00F000]1[/color] [color=#808080]\ д.б. на один бит длиннее, т.к. надо где-то хранить знаковый бит[/color] [color=#00A0A0]ELSE[/color] [color=#00F000]0[/color] [color=#00A0A0]THEN[/color] >L [color=#00A0A0]BEGIN[/color] DDUP OR [color=#00A0A0]WHILE[/color] [color=#808080]\ медленно, но заморачиваться не хочется[/color] D2/ [color=#00F000]1[/color] L+ [color=#00A0A0]REPEAT[/color] DDROP L> [color=#FF8000];[/color]
[color=#808080]\ определить количество действительных бит # в числе двойной длины d[/color] [color=#FF8000]: DBITS[/color] [color=#0080C0]( d --> # )[/color] [color=#00F000]0x80000000:0[/color] DOVER D= [color=#00A0A0]IF[/color] DDROP [color=#00F000]64[/color] [color=#FF8000];THEN[/color] [color=#808080]\ DNEGATE не работает нормально, если выставлен только старший бит числа![/color] DLG2 [color=#FF8000];[/color]
[color=#808080]\ определить действительное количество бит числа двойной длины[/color] [color=#FF8000]: countDBits[/color] [color=#0080C0]( ud# ud --> ud# ud )[/color] DOVER OR ?EXIT DNIP DDUP DBITS S>D DSWAP [color=#FF8000];[/color]
[color=#808080]\ проверка, влазит ли число ud в указанное количество бит ud#,[/color] [color=#808080]\ лишние старшие значащие биты обрезаются[/color] [color=#FF8000]: CheckLong[/color] [color=#0080C0]( ud# ud --> ud# ud )[/color] DOVER D>S DMASK DOVER DOVER DINVERT DAND OR [color=#00A0A0]IF[/color] STRING" [color=#FF8000]warning: high[/color] bit's of verilog number truncated!" >STDERR [color=#00A0A0]THEN[/color] DAND [color=#FF8000];[/color]
[color=#808080]\ преобразовать строку asc # в записи VERILOG в значение числа ud и битовую длину числа ud#[/color] [color=#FF8000]: PosNumber[/color] [color=#0080C0]( asc # --> ud# ud )[/color] ?Long ?Base ?Numb countDBits CheckLong [color=#FF8000];[/color]
[color=#808080]\ преобразовать число asc # , записанное в виде -ux'uy[/color] [color=#FF8000]:> 'VerilogNumber[/color] [color=#0080C0]( asc # --> ud # )[/color] ?SIGN [color=#00A0A0]IF[/color] PosNumber DNEGATE [color=#00A0A0]ELSE[/color] PosNumber [color=#00A0A0]THEN[/color] DSWAP D>S [color=#FF8000];[/color]
[color=#FF00FF]ALSO[/color] [color=#FF00FF]HIDDEN[/color]
[color=#808080]\ ячейка для хранения последнего распознанного VERILOG числа[/color] USER-CREATE last-ver-number [color=#00F000]3[/color] CELLS USER-ALLOT
[color=#808080]\ извлечь verilog число из addr[/color] [color=#FF8000]: V@[/color] [color=#0080C0]( addr --> d # )[/color] DUP D@ ROT [color=#00F000]2[/color] CELLS + @ [color=#FF8000];[/color]
[color=#808080]\ сохранить verilog число в addr[/color] [color=#FF8000]: V![/color] [color=#0080C0]( d # addr --> )[/color] TUCK [color=#00F000]2[/color] CELLS + ! D! [color=#FF8000];[/color]
[color=#808080]\ компилировать литерал verilog числа d #[/color] [color=#FF8000]: VLIT,[/color] [color=#0080C0]( d # --> )[/color] [color=#00F000]COMPILE (BOX)[/color] HERE A>L [color=#00F000]0[/color] , >L D, L> , HERE AL@ - AL> ! [color=#00F000]COMPILE V@[/color] [color=#FF8000];[/color]
[color=#808080]\ литерал для verilog чисел d #[/color] [color=#FF8000]: Vliteral[/color] [color=#0080C0]( d # --> )[/color] state [color=#00A0A0]IF[/color] VLIT, [color=#00A0A0]THEN[/color] [color=#FF8000];[/color]
[color=#808080]\ метод работы с verilog числами для словаря[/color] [color=#FF8000]: (VerLit)[/color] [color=#0080C0]( --> d # )[/color] last-ver-number V@ Vliteral [color=#FF8000];[/color] [color=#C00000]IMMEDIATE[/color]
[color=#808080]\ попытка распознать число, заданное строкой: asc #[/color] [color=#808080]\ как verilog число[/color] [color=#FF8000]:> 'sVerLfa[/color] [color=#0080C0]( asc # vid --> lfa | 0 )[/color] DROP [color=#808080]\ vid словаря не нужен[/color] 'VerilogNumber CATCH [color=#00A0A0]IF[/color] DDROP [color=#00F000]0[/color] [color=#FF8000];THEN[/color] last-ver-number V! LFA (VerLit) [color=#FF8000];[/color]
[color=#FF00FF]ALSO[/color] [color=#FF00FF]HIDDEN[/color]
[color=#FF8000]init: VOCABULARY[/color] [color=#808080]\ создание словаря[/color] VOC-LIST A@ >L [color=#808080]\ wordlist[/color] 'sVerLfa L@ off_quest A! [color=#00F000]['] (mount)[/color] L@ off_mount A! [color=#00F000]['] no-umount[/color] L@ off_umount A! &vinit L> off_vflags B! [color=#FF8000];stop[/color] VERILOG [color=#FF00FF]PREVIOUS[/color] [color=#FF00FF]PREVIOUS[/color]
[color=#808080]\ преобразовать указанное количество цифр числа ud[/color] [color=#FF8000]: ##S[/color] [color=#0080C0]( ud # --> ud )[/color] [color=#00A0A0]BEGIN[/color] DUP [color=#00A0A0]WHILE[/color] >L [color=#0000F0]#[/color] L> [color=#00F000]1[/color] - [color=#00A0A0]REPEAT[/color] DROP [color=#FF8000];[/color]
[color=#808080]\ отобразить верилог число d # в текущей системе счисления[/color] [color=#FF8000]: .vn[/color] [color=#0080C0]( d # --> )[/color] OVER >L DUP >L S>D DSWAP DABS [color=#0000F0]<#[/color] BASE@ CASE [color=#00F000]2[/color] OF L> ##S DDROP [color=#00F000][CHAR] b[/color] ENDOF [color=#00F000]10[/color] OF LDROP #S DDROP [color=#00F000][CHAR] d[/color] ENDOF [color=#808080]\ количество цифр считать влом![/color] [color=#00F000]16[/color] OF L> [color=#00F000]4[/color] /MOD SWAP [color=#00A0A0]IF[/color] [color=#00F000]1[/color] + [color=#00A0A0]THEN[/color] ##S DDROP [color=#00F000][CHAR] h[/color] ENDOF [color=#C00000]ERROR" undefined base for verilog number!"[/color] ENDCASE [color=#0000F0]HOLD[/color] [color=#00F000][CHAR] '[/color] [color=#0000F0]HOLD[/color] [color=#00F000]0x0A[/color] TO BASE@ #S L> SIGN [color=#0000F0]#>[/color] TYPE [color=#FF8000];[/color]
[color=#808080]\ отобразить verilog число d # в шестнадцатиричной системе счисления[/color] [color=#FF8000]: .vh[/color] [color=#0080C0]( d # --> )[/color] OVER >L DUP >L S>D DSWAP DABS [color=#00F000]0x10[/color] [color=#0000F0]{#[/color] L> [color=#00F000]4[/color] /MOD SWAP [color=#00A0A0]IF[/color] [color=#00F000]1[/color] + [color=#00A0A0]THEN[/color] ##S DDROP [color=#00F000]s" 'h"[/color] [color=#0000F0]HOLDS[/color] [color=#00F000]0x0A[/color] TO BASE@ #S L> SIGN [color=#0000F0]#>[/color] TYPE [color=#FF8000];[/color]
[color=#808080]\ отобразить verilog число d # в десятичной системе счисления[/color] [color=#FF8000]: .vd[/color] [color=#0080C0]( d # --> )[/color] OVER >L S>D DSWAP DABS [color=#00F000]0x0A[/color] [color=#0000F0]{#[/color] #S DDROP [color=#00F000]s" 'd"[/color] [color=#0000F0]HOLDS[/color] #S L> SIGN [color=#0000F0]#>[/color] TYPE [color=#FF8000];[/color]
[color=#808080]\ отобразить verilog число d # в двоичной системе счисления[/color] [color=#FF8000]: .vb[/color] [color=#0080C0]( d # --> )[/color] OVER >L DUP >L S>D DSWAP DABS [color=#00F000]0x02[/color] [color=#0000F0]{#[/color] L> ##S DDROP [color=#00F000]s" 'b"[/color] [color=#0000F0]HOLDS[/color] [color=#00F000]0x0A[/color] TO BASE@ #S L> SIGN [color=#0000F0]#>[/color] TYPE [color=#FF8000];[/color]
[color=#FF00FF]ALSO[/color] VERILOG UNDER[/b][/pre]
Ну, и примеры использования (просто набираем в консоли): '123 .vn 'd123 .vn 'h1A3E .vn 10'd333 .vn -12'b11100101010111 .vn и т.д.
|
|
|
 |
Добавлено: Сб июл 09, 2022 01:19 |
|
|
 |
|