init repo
56
README.md
Normal file
@ -0,0 +1,56 @@
|
||||
# Sprinter 97
|
||||
|
||||
## Прототип
|
||||
|
||||
Начало эпохи спринтера было положено в 1995-1996 годах. До наших дней дошла одна единственная фотография прототипа.
|
||||
|
||||
<img src="photos/sp_proto.jpg" width="600" /><br>
|
||||
|
||||
Возможно именно это было представлено на фестивале [Enlight'96](https://www.enlight.ru/enlight/) в Санкт-Петербурге, но это доподлинно неизвестно. К сожалению, в фотоотчетах Enlight нет ни одной фотографии, хоть как-то свидельствующих о том, что Спринтер там вообще был. Остается только на правдивость статьи в журнале [ZX-News #32](https://zxpress.ru/article.php?id=2923):
|
||||
|
||||
```
|
||||
Первое знакомство "пишущих" людей - кодеров и мьюзикмейкеров (извините за такую англификацию :) с компьютером Peters'ов произошло в августе прошлого года, когда в Санкт-Петербурге проходило всем известное мероприятие Enlight-96. Тогда был представлен Scorpion'оподобный компьютер, тогда у него был реализован лишь один режим расширенной графики.
|
||||
```
|
||||
|
||||
## Ранняя версия 1997 года
|
||||
|
||||
<img src="photos/sp97_top.jpg" width="300" /> <img src="photos/sp97_bot.jpg" width="300" /><br>
|
||||
|
||||
Ни одного живого экземпляра на сегодняшний день не было обнаружено, однако печатные платы очень редко еще встречаются в продаже.
|
||||
Это настолько редкое и удивительное явление, что на момент создания [SprinterTeam сообщества](https://t.me/zx_sprinter) в 2020 году только один раз за 5 лет эта плата живьем [появилась](https://zx-pk.com/forum/viewtopic.php?f=4&t=24329) в продаже. Однако сканы этой платы уже были доступны в архивах.
|
||||
|
||||
Плата очень сильно отличается от классических версий. Видео модуль состоит из дополнительных микросхем, возможно буферов типа 555АП6.
|
||||
Расположение периферийной ПЛИС Altera MAX прямо возле процессора, слева от разъема simm модуля памяти.
|
||||
|
||||
Схемы нет. Ни в сканах, ни в ФИДО переписках, ни в упоминаниях. Возможно её еще и не существовало, а появилась она начиная с классической версии.
|
||||
Печатной платы в файлах каких либо КАДах так же не обнаружено.
|
||||
|
||||
## Классическая версия 1998 года
|
||||
|
||||
Наибольшее распространение получила плата с небольшим количеством навесных исправлений.
|
||||
|
||||
<img src="photos/sp98_top.jpg" width="300" /> <img src="photos/sp98_bot.jpg" width="300" /> <img src="photos/sp98_mont.jpg" width="300" /><br>
|
||||
|
||||
Хоть эти фотографии и называются sp97 во всех [мастер-архивах](https://winglion.sprinter.ru/), это все же больше похоже именно на версию 1998 года. Это так же подтверждает файл sp98_mont.bmp из тех же архивов. На этой монтажке указаны все доработки, которые требуется сделать на классической плате. А так как название "Sprinter 97" к этому времени уже закрепилось за этим компьютером, то и файлы именовались так же. Именно эту версию все еще можно встретить на барахолках.
|
||||
|
||||
Схема была отрисована в OrCAD 2.10, там же была разработана и плата. Однако оркадовского файла схемы не сохранилось, а картинка со схемой, опубликованная авторами еще во времена ФИДО, получилась крайне низкого разрешения, что породило массу шуток (Nothing to see!). А возможно это было сделано Иваном Мак намеренно, что бы не отдавать общественности схему своего детища.
|
||||
|
||||
<img src="pcb/sp97-sch-v1.jpg" width="600" /><br>
|
||||
|
||||
Попытка применить современные нейронные сети для восстановления данных не улучшила ситуацию. К сожалению, можно констатировать что схема утеряна навсегда, нужно отрисовывать всё заново.
|
||||
|
||||
## Версия 1999 года
|
||||
|
||||
В [мастер-архивах](https://winglion.sprinter.ru/) есть файл SPRINT05.PCB - это файл печатной платы, которая выполнена в старом OrCAD 2.10 еще для MS-DOS. Открыть этот файл и что-либо сделать с этим файлом в наше время не так просто. Можно перерыть весь Интернет и все равно не найти нужную версию OrCAD. Вроде бы версия 4.40 должна была открыть файл, но она не смогла, чем окончательно запутала, чем же вообще этот файл открывать.
|
||||
|
||||
<img src="photos/orcad440.jpg" width="300" /> <img src="photos/orcad440of.jpg" width="300" /><br>
|
||||
|
||||
В [какой-то момент](https://t.me/zx_sprinter/237164) было принято решение просто разобрать формат этого файла путем реверс-инжиниринга и написать конвертор в более современные CAD системы. Можно отследить все этапы реверса по телеграм чату, на странице Sprinter Reverse Team [создан раздел](https://reverse.sprinter.ru/orcad210) с подробным разбором формата и онлайн парсером.
|
||||
|
||||
Используя результаты работы парсера теперь необходимо сгенерировать файл печатной платы для более современных КАД систем. Был выбран формат p-cad ascii format 7.5, который понимает и множество других программ. Генератор выдал результат, который потом без проблем прочитался современным Altium Designer v21.
|
||||
|
||||
<img src="pcb/parsed/sprint05_pcad_fixed_top.png" width="300" /> <img src="pcb/parsed/sprint05_pcad_fixed_bot.png" width="300" /> <img src="photos/altium.jpg" width="300" /><br>
|
||||
|
||||
Похоже, что это плата одна из самых последних версий, от 18 августа 1999 года и скорее всего никогда не производилась. На плате видны изменения, они касаются навесных исправлений, которые делались для классической платы 1998 года.
|
||||
|
||||
Таким образом получена точная конверсия печатной платы из старого OrCAD формата в современный и теперь можно попробовать воссоздать Sprinter 97 в железе, как это было в оригинале.
|
BIN
docs/Аппаратные возможности.pdf
Normal file
BIN
docs/Архитектура компьютера Sprinter.pdf
Normal file
BIN
docs/Буклет по Sprinter-97.pdf
Normal file
BIN
docs/Техническое описание и руководство по сборке.pdf
Normal file
BIN
fw/bios/sp97-1996-01-26.BIN
Normal file
BIN
fw/bios/sp97-1998-05-15.BIN
Normal file
BIN
fw/bios/sp97-1998-07-07.BIN
Normal file
BIN
fw/bios/sp97-1999-03-05.BIN
Normal file
BIN
fw/bios/sp97-1999-10-05.BIN
Normal file
BIN
fw/bios/sp97-2000-07-10.BIN
Normal file
BIN
fw/bios/sp97-2000-08-01.BIN
Normal file
BIN
fw/bios/sp97-2000-08-06.BIN
Normal file
BIN
fw/bios/sp97-2000-08-18.BIN
Normal file
BIN
fw/bios/sp97-2000-08-20.BIN
Normal file
BIN
fw/bios/sp97-2001-04-19.BIN
Normal file
BIN
fw/protect/SPRINT03.BIN
Normal file
BIN
fw/protect/SPRINT03.BIN.protected
Normal file
BIN
fw/protect/SPRINT03.BIN.protected.decoded
Normal file
BIN
fw/protect/SPRINT03._PR
Normal file
163
fw/protect/protect05.dpr
Normal file
@ -0,0 +1,163 @@
|
||||
program protect05;
|
||||
{$R-}
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
Classes,
|
||||
SysUtils;
|
||||
|
||||
function GetFileSize(const FileName: String): Cardinal;
|
||||
var
|
||||
AFile: File of Byte;
|
||||
begin
|
||||
AssignFile(AFile, FileName);
|
||||
Reset(AFile);
|
||||
try
|
||||
Result := System.FileSize(AFile);
|
||||
finally
|
||||
CloseFile(AFile);
|
||||
end;
|
||||
end;
|
||||
procedure help;
|
||||
begin
|
||||
writeln('Usage:');
|
||||
writeln(' protect05.exe <INPUT FILE>');
|
||||
writeln;
|
||||
end;
|
||||
function bit(const aValue: Cardinal; const BitPos: Byte): byte;
|
||||
begin
|
||||
if ((aValue and (1 shl BitPos)) <> 0) then
|
||||
result:= 1
|
||||
else
|
||||
result:= 0;
|
||||
end;
|
||||
|
||||
const
|
||||
MAX_BUF_SIZE = 1024 * 15;
|
||||
|
||||
var
|
||||
data_len: longint;
|
||||
o_file_name, i_file_name: string;
|
||||
o_file, i_file: file of byte;
|
||||
b,i, readed: longint;
|
||||
buf_in, buf_out: array of byte;
|
||||
CODE, D, D0_in, D0_out, todo: byte;
|
||||
unprotected: boolean;
|
||||
|
||||
begin
|
||||
writeln('PROTECT05: Sprinter-97 FW bitstream protector/decoder');
|
||||
writeln('Copyright (c) 2024 Sprinter Team');
|
||||
|
||||
// check incoming values
|
||||
if ParamCount < 1 then
|
||||
begin
|
||||
help;
|
||||
exit;
|
||||
end;
|
||||
|
||||
i_file_name:= ParamStr(1);
|
||||
if trim(i_file_name) = '' then
|
||||
begin
|
||||
writeln('ERROR: input file name is not specified');
|
||||
exit;
|
||||
end;
|
||||
|
||||
// check buffer size
|
||||
data_len:= GetFileSize(i_file_name);
|
||||
if (data_len > MAX_BUF_SIZE) then
|
||||
begin
|
||||
writeln('ERROR: DATA_LENGTH='+inttostr(data_len)+', MAX_BUF_SIZE='+inttostr(MAX_BUF_SIZE));
|
||||
exit;
|
||||
end;
|
||||
|
||||
// create buffers
|
||||
SetLength(buf_in, MAX_BUF_SIZE);
|
||||
FillChar(buf_in[0], length(buf_in), 0);
|
||||
|
||||
SetLength(buf_out, MAX_BUF_SIZE);
|
||||
FillChar(buf_out[0], length(buf_out), 0);
|
||||
|
||||
// load src file
|
||||
{$I-}
|
||||
FileMode:= fmOpenRead;
|
||||
AssignFile(i_file, i_file_name);
|
||||
reset(i_file);
|
||||
seek(i_file, 0);
|
||||
BlockRead(i_file, buf_in[0], length(buf_in), readed);
|
||||
CloseFile(i_file);
|
||||
{$I+}
|
||||
i:= IOResult;
|
||||
if (i > 0) then
|
||||
begin
|
||||
writeln('ERROR: IOResult='+inttostr(i)+' during loading input file. Readed '+inttostr(readed));
|
||||
exit;
|
||||
end;
|
||||
writeln('readed '+inttostr(readed)+' bytes');
|
||||
|
||||
data_len:= readed;
|
||||
unprotected:= false;
|
||||
if (buf_in[0] = $FF) and (buf_in[1] = $FF) and (buf_in[2] = $62) and (buf_in[3] = $7B) then
|
||||
unprotected:= true;
|
||||
|
||||
|
||||
// protect / unprotect
|
||||
CODE:= 0;
|
||||
|
||||
if unprotected then
|
||||
writeln('protecting ...')
|
||||
else
|
||||
writeln('decoding ...');
|
||||
|
||||
for b:= 0 to data_len-1 do
|
||||
begin
|
||||
D:= buf_in[b];
|
||||
|
||||
for i:= 0 to 7 do
|
||||
begin
|
||||
D0_in:= bit(D, i);
|
||||
|
||||
D0_out:= bit(CODE,4) xor D0_in;
|
||||
buf_out[b]:= buf_out[b] or (D0_out shl i);
|
||||
|
||||
if unprotected then
|
||||
todo:= D0_in // protect
|
||||
else
|
||||
todo:= D0_out; // unprotect
|
||||
|
||||
CODE:= (CODE shl 1) or (bit(CODE,2) xor todo);
|
||||
|
||||
end;
|
||||
|
||||
// just header output
|
||||
if b < 8 then
|
||||
write(inttohex(buf_out[b])+' ');
|
||||
|
||||
end;
|
||||
writeln;
|
||||
|
||||
// write buffer to output file
|
||||
if unprotected then
|
||||
o_file_name:= ParamStr(1)+'.protected'
|
||||
else
|
||||
o_file_name:= ParamStr(1)+'.decoded';
|
||||
|
||||
{$I-}
|
||||
FileMode:= fmOpenReadWrite;
|
||||
AssignFile(o_file, o_file_name);
|
||||
reset(o_file);
|
||||
if IOResult <> 0 then
|
||||
rewrite(o_file);
|
||||
seek(o_file, 0);
|
||||
BlockWrite(o_file, buf_out[0], data_len);
|
||||
CloseFile(o_file);
|
||||
{$I+}
|
||||
i:= IOResult;
|
||||
if (i > 0) then
|
||||
begin
|
||||
writeln('ERROR: IOResult='+inttostr(i)+' during writing to output file');
|
||||
exit;
|
||||
end;
|
||||
|
||||
// finish
|
||||
writeln('');
|
||||
end.
|
BIN
fw/protect/protect05.exe
Normal file
BIN
fw/protect/protect05.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
4
fw/protect/readme.txt
Normal file
@ -0,0 +1,4 @@
|
||||
у sprinter-97 битстрим алтеры шифровался.
|
||||
декодирование производилось аппаратно во время его загрузки из ПЗУ.
|
||||
|
||||
алгоритм разобран, написана новая универсальная утилита для шифрования и расшифровывания.
|
167
fw/src/flex/KBD_INI2.MIF
Normal file
@ -0,0 +1,167 @@
|
||||
DEPTH = 256; % Memory depth and width are required %
|
||||
WIDTH = 8; % Enter a decimal number %
|
||||
|
||||
ADDRESS_RADIX = HEX; % Address and value radixes are optional %
|
||||
DATA_RADIX = BIN; % Enter BIN, DEC, HEX, or OCT; unless %
|
||||
% otherwise specified, radixes = HEX %
|
||||
|
||||
-- Specify values for addresses, which can be single address or range
|
||||
|
||||
CONTENT
|
||||
BEGIN
|
||||
[0..FF] : 11111111;
|
||||
0 :
|
||||
11111111 % .. %
|
||||
00100001 % F9 %
|
||||
11111111 % .. %
|
||||
00011100 % F5 %
|
||||
00011010 % F3 %
|
||||
00011000 % F1 %
|
||||
00011001 % F2 %
|
||||
11111111 % F12 %
|
||||
11111111 % .. %
|
||||
00100000 % F10 %
|
||||
|
||||
00100010 % F8 %
|
||||
00100100 % F6 %
|
||||
00011011 % F4 %
|
||||
01011000 % Tab %
|
||||
10001000 % ~` %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
01111001 % Alt %
|
||||
11000000 % Left Shift %
|
||||
11111111 % .. %
|
||||
|
||||
11111001 % Ctrl %
|
||||
11010000 % 'Q' %
|
||||
11011000 % '1' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11000001 % 'Z' %
|
||||
11001001 % 'S' %
|
||||
11001000 % 'A' %
|
||||
11010001 % 'W' %
|
||||
|
||||
11011001 % '2' %
|
||||
01110000 % left WIN %
|
||||
11111111 % .. %
|
||||
11000011 % 'C' %
|
||||
11000010 % 'X' %
|
||||
11001010 % 'D' %
|
||||
11010010 % 'E' %
|
||||
11011011 % '4' %
|
||||
11011010 % '3' %
|
||||
10110000 % Right WIN %
|
||||
|
||||
11111111 % .. %
|
||||
11111000 % ' ' %
|
||||
11000100 % 'V' %
|
||||
11001011 % 'F' %
|
||||
11010100 % 'T' %
|
||||
11010011 % 'R' %
|
||||
11011100 % '5' %
|
||||
10111000 % Right Mouse %
|
||||
11111111 % .. %
|
||||
11111011 % 'N' %
|
||||
|
||||
11111100 % 'B' %
|
||||
11110100 % 'H' %
|
||||
11001100 % 'G' %
|
||||
11101100 % 'Y' %
|
||||
11100100 % '6' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111010 % 'M' %
|
||||
11110011 % 'J' %
|
||||
|
||||
11101011 % 'U' %
|
||||
11100011 % '7' %
|
||||
11100010 % '8' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
10111011 % ',' %
|
||||
11110010 % 'K' %
|
||||
11101010 % 'I' %
|
||||
11101001 % 'O' %
|
||||
11100000 % '0' %
|
||||
|
||||
11100001 % '9' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
10111010 % '.' %
|
||||
10000100 % '/' %
|
||||
11110001 % 'L' %
|
||||
10101001 % ';' %
|
||||
11101000 % 'P' %
|
||||
10110011 % '-' %
|
||||
11111111 % .. %
|
||||
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
10101000 % "'" %
|
||||
11111111 % .. %
|
||||
10101100 % '[' %
|
||||
10110001 % '=' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
01011001 % Caps Lock %
|
||||
11000000 % Right SHIFT %
|
||||
|
||||
11110000 % ENTER %
|
||||
10101011 % ']' %
|
||||
11111111 % .. %
|
||||
10001010 % '\' %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
01100000 % Back %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
10010010 % End %
|
||||
11111111 % .. %
|
||||
01011100 % <- %
|
||||
10010000 % Home %
|
||||
11111111 % .. %
|
||||
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
10010001 % ins %
|
||||
01100001 % DEL %
|
||||
01100100 % Dn %
|
||||
10101010 % grey 5 ; ctrl + I %
|
||||
01100010 % -> %
|
||||
01100011 % Up %
|
||||
01111000 % ESC %
|
||||
00111111 % Num %
|
||||
|
||||
11111111 % F11 %
|
||||
10110010 % G+ %
|
||||
01011011 % PDn ; caps + 4 %
|
||||
10110011 % G- %
|
||||
10111100 % G* %
|
||||
01011010 % PUp ; caps + 3 %
|
||||
00000000 % Scrol Lock %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
11111111 % .. %
|
||||
|
||||
11111111 % .. %
|
||||
00100011 % F7 % ;
|
||||
% !! DATA FOR CAPS !! %
|
||||
C0 :
|
||||
11111101 % Function shift %
|
||||
11000000 % Left Shift %
|
||||
11111001 % Ctrl %
|
||||
11111111 ; % no shift %
|
||||
END ;
|
||||
|
||||
|
60
fw/src/flex/PGA_INI4.MIF
Normal file
@ -0,0 +1,60 @@
|
||||
DEPTH = 256; % Memory depth and width are required %
|
||||
WIDTH = 8; % Enter a decimal number %
|
||||
|
||||
ADDRESS_RADIX = HEX; % Address and value radixes are optional %
|
||||
DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless %
|
||||
% otherwise specified, radixes = HEX %
|
||||
|
||||
-- Specify values for addresses, which can be single address or range
|
||||
|
||||
CONTENT
|
||||
BEGIN
|
||||
[0..FF] : 0;
|
||||
|
||||
0 : 40 % DCP PAGE %;
|
||||
|
||||
10 :
|
||||
C0 % WG93 1F,0F %
|
||||
C2 % WG93 3F %
|
||||
C4 % WG93 5F %
|
||||
C6 % WG93 7F %
|
||||
80 % WR_PDOS FF %
|
||||
9F % RD_KEYS/ WR_A20 %;
|
||||
18 :
|
||||
B0 % CMOS_DAT %
|
||||
B2 % CMOS_ADR %
|
||||
B4 % CMOS_XX1 %
|
||||
B6 % CMOS_XX1 %
|
||||
B8
|
||||
BA
|
||||
BC
|
||||
BE;
|
||||
20 :
|
||||
A0 % HD_CS1 ports %
|
||||
A2
|
||||
A4
|
||||
A6
|
||||
A8
|
||||
AA
|
||||
AC
|
||||
AE
|
||||
AD % HD_CS3 3F6 port %
|
||||
AF % HD_CS3 3F7 port %;
|
||||
30 :
|
||||
D0 % slot 1 mem %
|
||||
D2 % slot 2 mem %
|
||||
D4 % slot 1 ports %
|
||||
D6 % slot 2 ports %
|
||||
;
|
||||
|
||||
-- 40 : FF % kb read %;
|
||||
-- 80 : 7F 7F 7F 7F 7F 7F 7F 7F % KBD_DAT %;
|
||||
-- 90 : 7F % PORT FF %;
|
||||
|
||||
C0 : 00 00 00 00 % SYS PORTS COPYES %;
|
||||
|
||||
D0 : 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F; % RAM PAGES %
|
||||
E0 : E0 E2 E4 E6 E8 EA EC EE 00 05 02 E0 F0 00 00 E8; % ROM PAGES %
|
||||
F0 : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F; % RAM PAGES %
|
||||
|
||||
END ;
|
50
fw/src/flex/PGA_INI5.MIF
Normal file
@ -0,0 +1,50 @@
|
||||
DEPTH = 256; % Memory depth and width are required %
|
||||
WIDTH = 8; % Enter a decimal number %
|
||||
|
||||
ADDRESS_RADIX = HEX; % Address and value radixes are optional %
|
||||
DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless %
|
||||
% otherwise specified, radixes = HEX %
|
||||
|
||||
-- Specify values for addresses, which can be single address or range
|
||||
|
||||
CONTENT
|
||||
BEGIN
|
||||
[0..FF] : 0;
|
||||
|
||||
0 : 40 % DCP PAGE %;
|
||||
|
||||
10 :
|
||||
C0 % WG93 1F,0F %
|
||||
C2 % WG93 3F %
|
||||
C4 % WG93 5F %
|
||||
C6 % WG93 7F %
|
||||
80 % WR_PDOS FF %
|
||||
9F % RD_KEYS/ WR_A20 %;
|
||||
18 :
|
||||
B0 % CMOS_DAT %
|
||||
B2 % CMOS_ADR %
|
||||
B4 % CMOS_XX1 %
|
||||
B6 % CMOS_XX1 %;
|
||||
20 :
|
||||
A0 % HD_CS1 ports %
|
||||
A2
|
||||
A4
|
||||
A6
|
||||
A8
|
||||
AA
|
||||
AC
|
||||
AE
|
||||
AD % HD_CS3 3F6 port %
|
||||
AF % HD_CS3 3F7 port %;
|
||||
-- 40 : FF % kb read %;
|
||||
-- 80 : 7F 7F 7F 7F 7F 7F 7F 7F % KBD_DAT %;
|
||||
-- 90 : 7F % PORT FF %;
|
||||
|
||||
C0 : 00 00 00 00 % SYS PORTS COPYES %;
|
||||
|
||||
|
||||
E0 : E0 E2 E4 E6 E8 EA EC EE 00 05 02 10 00 00 00 11; % ROM PAGES %
|
||||
F0 : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F; % RAM PAGES %
|
||||
|
||||
END ;
|
||||
|
28
fw/src/flex/SND_INI.MIF
Normal file
@ -0,0 +1,28 @@
|
||||
DEPTH = 256; % Memory depth and width are required %
|
||||
WIDTH = 8; % Enter a decimal number %
|
||||
|
||||
ADDRESS_RADIX = HEX; % Address and value radixes are optional %
|
||||
DATA_RADIX = HEX; % Enter BIN, DEC, HEX, or OCT; unless %
|
||||
% otherwise specified, radixes = HEX %
|
||||
|
||||
-- Specify values for addresses, which can be single address or range
|
||||
|
||||
CONTENT
|
||||
BEGIN
|
||||
[0..FF] : 00;
|
||||
00 : 80 00 04 06;
|
||||
04 : 00 00 04 06;
|
||||
08 : 80 40 00 06;
|
||||
0C : 00 40 00 06;
|
||||
|
||||
40 : 00 00 00 88;
|
||||
44 : 00 00 00 88;
|
||||
48 : 00 00 00 88;
|
||||
4C : 00 00 00 88;
|
||||
|
||||
-- D0 : 00 80 40 C0 20 A0 60 E0 10 90 50 D0 30 B0 70 F0;
|
||||
-- E0 : 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0;
|
||||
-- F0 : 00 10 30 50 70 90 B0 C0 C0 B0 90 70 50 30 10 00;
|
||||
|
||||
END ;
|
||||
|
792
fw/src/flex/SPRINT08.ACF
Normal file
@ -0,0 +1,792 @@
|
||||
--
|
||||
-- Copyright (C) 1988-1998 Altera Corporation
|
||||
-- Any megafunction design, and related net list (encrypted or decrypted),
|
||||
-- support information, device programming or simulation file, and any other
|
||||
-- associated documentation or information provided by Altera or a partner
|
||||
-- under Altera's Megafunction Partnership Program may be used only to
|
||||
-- program PLD devices (but not masked PLD devices) from Altera. Any other
|
||||
-- use of such megafunction design, net list, support information, device
|
||||
-- programming or simulation file, or any other related documentation or
|
||||
-- information is prohibited for any other purpose, including, but not
|
||||
-- limited to modification, reverse engineering, de-compiling, or use with
|
||||
-- any other silicon devices, unless such use is explicitly licensed under
|
||||
-- a separate agreement with Altera or a megafunction partner. Title to
|
||||
-- the intellectual property, including patents, copyrights, trademarks,
|
||||
-- trade secrets, or maskworks, embodied in any such megafunction design,
|
||||
-- net list, support information, device programming or simulation file, or
|
||||
-- any other related documentation or information provided by Altera or a
|
||||
-- megafunction partner, remains with Altera, the megafunction partner, or
|
||||
-- their respective licensors. No other licenses, including any licenses
|
||||
-- needed under any third party's intellectual property, are provided herein.
|
||||
--
|
||||
CHIP sprint08
|
||||
BEGIN
|
||||
DEVICE = EPF10K10QC208-4;
|
||||
|SINC_H : OUTPUT_PIN = 175;
|
||||
|KBD_CLK : BIDIR_PIN = 193;
|
||||
|KBD_DAT : BIDIR_PIN = 196;
|
||||
|BEEPER : OUTPUT_PIN = 192;
|
||||
|/WAIT : BIDIR_PIN = 16;
|
||||
|/INT : BIDIR_PIN = 197;
|
||||
|/NMI : BIDIR_PIN = 195;
|
||||
|MXA10 : BIDIR_PIN = 200;
|
||||
|MXA9 : BIDIR_PIN = 199;
|
||||
|MXA8 : BIDIR_PIN = 198;
|
||||
|MXA7 : BIDIR_PIN = 187;
|
||||
|MXA6 : BIDIR_PIN = 174;
|
||||
|MXA5 : BIDIR_PIN = 172;
|
||||
|MXA4 : BIDIR_PIN = 170;
|
||||
|MXA3 : BIDIR_PIN = 169;
|
||||
|MXA2 : BIDIR_PIN = 168;
|
||||
|MXA1 : BIDIR_PIN = 167;
|
||||
|MXA0 : BIDIR_PIN = 166;
|
||||
|/WE : OUTPUT_PIN = 208;
|
||||
|CAS_3 : OUTPUT_PIN = 207;
|
||||
|CAS_2 : OUTPUT_PIN = 205;
|
||||
|CAS_1 : OUTPUT_PIN = 206;
|
||||
|CAS_0 : OUTPUT_PIN = 204;
|
||||
|RAS_0 : OUTPUT_PIN = 203;
|
||||
|RAS_1 : OUTPUT_PIN = 202;
|
||||
|MS_MOUSE : INPUT_PIN = 191;
|
||||
|TAPE_OUT : OUTPUT_PIN = 190;
|
||||
|TURBO_LED : OUTPUT_PIN = 189;
|
||||
|SND_R1 : OUTPUT_PIN = 176;
|
||||
|MD0 : BIDIR_PIN = 186;
|
||||
|TAPE_IN : INPUT_PIN = 182;
|
||||
|MD1 : BIDIR_PIN = 180;
|
||||
|MD2 : BIDIR_PIN = 179;
|
||||
|MD3 : BIDIR_PIN = 177;
|
||||
|SINC : OUTPUT_PIN = 173;
|
||||
|MD4 : BIDIR_PIN = 164;
|
||||
|MD5 : BIDIR_PIN = 163;
|
||||
|MD6 : BIDIR_PIN = 162;
|
||||
|MD7 : BIDIR_PIN = 161;
|
||||
|SND_L1 : OUTPUT_PIN = 160;
|
||||
|SND_R0 : OUTPUT_PIN = 159;
|
||||
|SND_L0 : OUTPUT_PIN = 158;
|
||||
|CLK_PIX : OUTPUT_PIN = 157;
|
||||
|VA0 : OUTPUT_PIN = 133;
|
||||
|VA1 : OUTPUT_PIN = 128;
|
||||
|V_CS0 : OUTPUT_PIN = 127;
|
||||
|VA2 : OUTPUT_PIN = 121;
|
||||
|VA10 : OUTPUT_PIN = 120;
|
||||
|VA3 : OUTPUT_PIN = 116;
|
||||
|VA4 : OUTPUT_PIN = 112;
|
||||
|VA11 : OUTPUT_PIN = 111;
|
||||
|VA5 : OUTPUT_PIN = 104;
|
||||
|VA9 : OUTPUT_PIN = 102;
|
||||
|VA6 : OUTPUT_PIN = 100;
|
||||
|VA8 : OUTPUT_PIN = 99;
|
||||
|VA7 : OUTPUT_PIN = 96;
|
||||
|VA13 : OUTPUT_PIN = 95;
|
||||
|V_WR3 : OUTPUT_PIN = 94;
|
||||
|VA12 : OUTPUT_PIN = 93;
|
||||
|V_WR0 : OUTPUT_PIN = 92;
|
||||
|V_WR1 : OUTPUT_PIN = 90;
|
||||
|V_WR2 : OUTPUT_PIN = 89;
|
||||
|VA14 : OUTPUT_PIN = 88;
|
||||
|VA15 : OUTPUT_PIN = 86;
|
||||
|/MR : INPUT_PIN = 184;
|
||||
|TG42 : INPUT_PIN = 183;
|
||||
|VD03 : BIDIR_PIN = 150;
|
||||
|VD13 : BIDIR_PIN = 149;
|
||||
|VD02 : BIDIR_PIN = 148;
|
||||
|VD04 : BIDIR_PIN = 147;
|
||||
|VD14 : BIDIR_PIN = 144;
|
||||
|VD01 : BIDIR_PIN = 143;
|
||||
|VD05 : BIDIR_PIN = 142;
|
||||
|VD15 : BIDIR_PIN = 141;
|
||||
|VD00 : BIDIR_PIN = 136;
|
||||
|VD06 : BIDIR_PIN = 135;
|
||||
|VD16 : BIDIR_PIN = 134;
|
||||
|VD07 : BIDIR_PIN = 132;
|
||||
|VD17 : BIDIR_PIN = 131;
|
||||
|VD12 : BIDIR_PIN = 122;
|
||||
|VD11 : BIDIR_PIN = 119;
|
||||
|VD10 : BIDIR_PIN = 115;
|
||||
|VD22 : BIDIR_PIN = 103;
|
||||
|VD21 : BIDIR_PIN = 101;
|
||||
|VD20 : BIDIR_PIN = 97;
|
||||
|VD23 : BIDIR_PIN = 87;
|
||||
|VD24 : BIDIR_PIN = 85;
|
||||
|VD30 : BIDIR_PIN = 83;
|
||||
|/WR : INPUT_PIN = 79;
|
||||
|/RD : INPUT_PIN = 80;
|
||||
|/IO : INPUT_PIN = 78;
|
||||
|VD37 : BIDIR_PIN = 75;
|
||||
|VD25 : BIDIR_PIN = 74;
|
||||
|VD27 : BIDIR_PIN = 73;
|
||||
|VD36 : BIDIR_PIN = 71;
|
||||
|VD26 : BIDIR_PIN = 70;
|
||||
|VD31 : BIDIR_PIN = 69;
|
||||
|VD35 : BIDIR_PIN = 68;
|
||||
|VD32 : BIDIR_PIN = 67;
|
||||
|VD34 : BIDIR_PIN = 65;
|
||||
|VD33 : BIDIR_PIN = 64;
|
||||
|V_CS1 : OUTPUT_PIN = 63;
|
||||
|CLKZ1 : OUTPUT_PIN = 62;
|
||||
|D7 : BIDIR_PIN = 61;
|
||||
|D6 : BIDIR_PIN = 60;
|
||||
|D5 : BIDIR_PIN = 58;
|
||||
|D4 : BIDIR_PIN = 57;
|
||||
|D3 : BIDIR_PIN = 56;
|
||||
|D2 : BIDIR_PIN = 55;
|
||||
|D1 : BIDIR_PIN = 54;
|
||||
|D0 : BIDIR_PIN = 53;
|
||||
|A15 : BIDIR_PIN = 47;
|
||||
|A14 : BIDIR_PIN = 46;
|
||||
|A13 : BIDIR_PIN = 45;
|
||||
|A12 : BIDIR_PIN = 44;
|
||||
|A11 : BIDIR_PIN = 41;
|
||||
|A10 : BIDIR_PIN = 40;
|
||||
|A9 : BIDIR_PIN = 39;
|
||||
|A8 : BIDIR_PIN = 38;
|
||||
|A7 : BIDIR_PIN = 31;
|
||||
|A6 : BIDIR_PIN = 30;
|
||||
|A5 : BIDIR_PIN = 29;
|
||||
|A4 : BIDIR_PIN = 28;
|
||||
|A3 : BIDIR_PIN = 27;
|
||||
|A2 : BIDIR_PIN = 26;
|
||||
|A1 : BIDIR_PIN = 25;
|
||||
|A0 : BIDIR_PIN = 24;
|
||||
|/RF : INPUT_PIN = 19;
|
||||
|/M1 : INPUT_PIN = 18;
|
||||
|/RESET : BIDIR_PIN = 17;
|
||||
|XA2 : OUTPUT_PIN = 12;
|
||||
|XA1 : OUTPUT_PIN = 11;
|
||||
|XA0 : OUTPUT_PIN = 10;
|
||||
|XACS : OUTPUT_PIN = 13;
|
||||
END;
|
||||
|
||||
DEFAULT_DEVICES
|
||||
BEGIN
|
||||
AUTO_DEVICE = EPF10K50GC403;
|
||||
AUTO_DEVICE = EPF10K50GC403ES;
|
||||
AUTO_DEVICE = EPF10K50RC240;
|
||||
AUTO_DEVICE = EPF10K30RC240;
|
||||
AUTO_DEVICE = EPF10K10QC208;
|
||||
ASK_BEFORE_ADDING_EXTRA_DEVICES = ON;
|
||||
END;
|
||||
|
||||
TIMING_POINT
|
||||
BEGIN
|
||||
DEVICE_FOR_TIMING_SYNTHESIS = EPF10K10QC208-4;
|
||||
CUT_ALL_CLEAR_PRESET = ON;
|
||||
CUT_ALL_BIDIR = ON;
|
||||
MAINTAIN_STABLE_SYNTHESIS = OFF;
|
||||
END;
|
||||
|
||||
IGNORED_ASSIGNMENTS
|
||||
BEGIN
|
||||
IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF;
|
||||
IGNORE_CHIP_ASSIGNMENTS = OFF;
|
||||
DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF;
|
||||
IGNORE_DEVICE_ASSIGNMENTS = OFF;
|
||||
IGNORE_LC_ASSIGNMENTS = OFF;
|
||||
IGNORE_PIN_ASSIGNMENTS = OFF;
|
||||
IGNORE_TIMING_ASSIGNMENTS = OFF;
|
||||
IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF;
|
||||
IGNORE_CLIQUE_ASSIGNMENTS = OFF;
|
||||
END;
|
||||
|
||||
LOGIC_OPTIONS
|
||||
BEGIN
|
||||
|ALU0 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU1 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU2 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU3 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU4 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU5 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU6 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU7 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU8 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU9 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU10 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU11 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU12 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU13 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU14 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|ALU15 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q10 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q11 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q13 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q12 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q20 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q21 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q22 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q23 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q30 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q31 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q32 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|AY_Q33 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MXA0 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA1 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA4 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA3 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA2 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA6 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA5 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA8 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA7 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA9 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|MXA10 : IGNORE_SOFT_BUFFERS = ON;
|
||||
|SVA10 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA11 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA12 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|V_WR0 : SLOW_SLEW_RATE = OFF;
|
||||
|V_WR1 : SLOW_SLEW_RATE = OFF;
|
||||
|V_WR2 : SLOW_SLEW_RATE = OFF;
|
||||
|V_WR3 : SLOW_SLEW_RATE = OFF;
|
||||
|VA0 : SLOW_SLEW_RATE = OFF;
|
||||
|VA1 : SLOW_SLEW_RATE = OFF;
|
||||
|VA2 : SLOW_SLEW_RATE = OFF;
|
||||
|VA3 : SLOW_SLEW_RATE = OFF;
|
||||
|VA4 : SLOW_SLEW_RATE = OFF;
|
||||
|VA5 : SLOW_SLEW_RATE = OFF;
|
||||
|VA6 : SLOW_SLEW_RATE = OFF;
|
||||
|VA7 : SLOW_SLEW_RATE = OFF;
|
||||
|VA8 : SLOW_SLEW_RATE = OFF;
|
||||
|VA9 : SLOW_SLEW_RATE = OFF;
|
||||
|VA10 : SLOW_SLEW_RATE = OFF;
|
||||
|VA11 : SLOW_SLEW_RATE = OFF;
|
||||
|VA12 : SLOW_SLEW_RATE = OFF;
|
||||
|VA13 : SLOW_SLEW_RATE = OFF;
|
||||
|VA14 : SLOW_SLEW_RATE = OFF;
|
||||
|VA15 : SLOW_SLEW_RATE = OFF;
|
||||
|SVA2 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|RA18 : IMPLEMENT_IN_EAB = ON;
|
||||
|RA19 : IMPLEMENT_IN_EAB = ON;
|
||||
|RA20 : IMPLEMENT_IN_EAB = ON;
|
||||
|RA21 : IMPLEMENT_IN_EAB = ON;
|
||||
|VA0 : FAST_IO = ON;
|
||||
|VA1 : FAST_IO = ON;
|
||||
|VA2 : FAST_IO = ON;
|
||||
|VA4 : FAST_IO = ON;
|
||||
|VA3 : FAST_IO = ON;
|
||||
|VA6 : FAST_IO = ON;
|
||||
|VA5 : FAST_IO = ON;
|
||||
|VA8 : FAST_IO = ON;
|
||||
|VA7 : FAST_IO = ON;
|
||||
|VA10 : FAST_IO = ON;
|
||||
|VA9 : FAST_IO = ON;
|
||||
|VA12 : FAST_IO = ON;
|
||||
|VA11 : FAST_IO = ON;
|
||||
|VA13 : FAST_IO = ON;
|
||||
|VA14 : FAST_IO = ON;
|
||||
|VA15 : FAST_IO = ON;
|
||||
|VXA0 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA1 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA2 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA3 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA4 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA5 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA6 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA7 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA8 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA9 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA10 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA11 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA12 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA13 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA14 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA15 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA16 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|VXA17 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA0 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA1 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA3 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA4 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|SVA5 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MPGS0 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MPGS1 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MPGS2 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MPGS3 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
|MPGS4 : IMPLEMENT_AS_OUTPUT_OF_LOGIC_CELL = ON;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_DEVICE_OPTIONS
|
||||
BEGIN
|
||||
FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON;
|
||||
FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX6000_ENABLE_JTAG = OFF;
|
||||
CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL;
|
||||
LOW_VOLTAGE_IO = OFF;
|
||||
nCEO = UNRESERVED;
|
||||
CONFIG_SCHEME_10K = PASSIVE_SERIAL;
|
||||
FLEX10K_ENABLE_LOCK_OUTPUT = OFF;
|
||||
CONFIG_SCHEME = PASSIVE_PARALLEL_SYNCHRONOUS;
|
||||
DISABLE_TIME_OUT = ON;
|
||||
RELEASE_CLEARS = ON;
|
||||
AUTO_RESTART = ON;
|
||||
SDOUT = UNRESERVED;
|
||||
DATA0 = UNRESERVED;
|
||||
MAX7000S_USER_CODE = FFFF;
|
||||
FLEX10K_JTAG_USER_CODE = 7F;
|
||||
ENABLE_INIT_DONE_OUTPUT = OFF;
|
||||
ENABLE_CHIP_WIDE_OE = OFF;
|
||||
ENABLE_CHIP_WIDE_RESET = OFF;
|
||||
CLKUSR = UNRESERVED;
|
||||
ADD17 = UNRESERVED;
|
||||
ADD16 = UNRESERVED;
|
||||
ADD15 = UNRESERVED;
|
||||
ADD14 = UNRESERVED;
|
||||
ADD13 = UNRESERVED;
|
||||
ADD0_TO_ADD12 = UNRESERVED;
|
||||
RDCLK = UNRESERVED;
|
||||
RDYnBUSY = UNRESERVED;
|
||||
nWS_nRS_nCS_CS = UNRESERVED;
|
||||
DATA1_TO_DATA7 = UNRESERVED;
|
||||
FLEX8000_ENABLE_JTAG = OFF;
|
||||
MAX7000S_ENABLE_JTAG = OFF;
|
||||
ENABLE_DCLK_OUTPUT = OFF;
|
||||
USER_CLOCK = OFF;
|
||||
SECURITY_BIT = OFF;
|
||||
RESERVED_PINS_PERCENT = 0;
|
||||
RESERVED_LCELLS_PERCENT = 0;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS
|
||||
BEGIN
|
||||
OPTIMIZE_FOR_SPEED = 0;
|
||||
AUTO_REGISTER_PACKING = OFF;
|
||||
AUTO_FAST_IO = ON;
|
||||
AUTO_GLOBAL_OE = ON;
|
||||
AUTO_GLOBAL_PRESET = ON;
|
||||
AUTO_GLOBAL_CLEAR = ON;
|
||||
AUTO_GLOBAL_CLOCK = ON;
|
||||
AUTO_IMPLEMENT_IN_EAB = OFF;
|
||||
AUTO_OPEN_DRAIN_PINS = ON;
|
||||
DEVICE_FAMILY = FLEX10K;
|
||||
ONE_HOT_STATE_MACHINE_ENCODING = OFF;
|
||||
STYLE = NORMAL;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX9000 = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_PROCESSING_CONFIGURATION
|
||||
BEGIN
|
||||
FITTER_SETTINGS = ADVANCED;
|
||||
SMART_RECOMPILE = ON;
|
||||
GENERATE_AHDL_TDO_FILE = OFF;
|
||||
TIMING_SNF_EXTRACTOR = OFF;
|
||||
OPTIMIZE_TIMING_SNF = OFF;
|
||||
PRESERVE_ALL_NODE_NAME_SYNONYMS = ON;
|
||||
RPT_FILE_USER_ASSIGNMENTS = ON;
|
||||
RPT_FILE_LCELL_INTERCONNECT = ON;
|
||||
RPT_FILE_HIERARCHY = ON;
|
||||
RPT_FILE_EQUATIONS = ON;
|
||||
LINKED_SNF_EXTRACTOR = OFF;
|
||||
FUNCTIONAL_SNF_EXTRACTOR = OFF;
|
||||
DESIGN_DOCTOR_RULES = EPLD;
|
||||
DESIGN_DOCTOR = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_INTERFACES_CONFIGURATION
|
||||
BEGIN
|
||||
VHDL_FLATTEN_BUS = OFF;
|
||||
VERILOG_FLATTEN_BUS = OFF;
|
||||
EDIF_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VHDL_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
EDIF_BUS_DELIMITERS = [];
|
||||
EDIF_FLATTEN_BUS = OFF;
|
||||
VHDL_WRITER_VERSION = VHDL87;
|
||||
VHDL_READER_VERSION = VHDL87;
|
||||
SYNOPSYS_MAPPING_EFFORT = MEDIUM;
|
||||
SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF;
|
||||
SYNOPSYS_HIERARCHICAL_COMPILATION = ON;
|
||||
SYNOPSYS_DESIGNWARE = OFF;
|
||||
SYNOPSYS_COMPILER = DESIGN;
|
||||
USE_SYNOPSYS_SYNTHESIS = OFF;
|
||||
NETLIST_OUTPUT_TIME_SCALE = 0.1ns;
|
||||
EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF;
|
||||
EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF;
|
||||
EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF;
|
||||
EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE;
|
||||
EDIF_OUTPUT_USE_EDC = OFF;
|
||||
EDIF_INPUT_USE_LMF2 = OFF;
|
||||
EDIF_INPUT_USE_LMF1 = OFF;
|
||||
EDIF_OUTPUT_GND = GND;
|
||||
EDIF_OUTPUT_VCC = VCC;
|
||||
EDIF_INPUT_GND = GND;
|
||||
EDIF_INPUT_VCC = VCC;
|
||||
EDIF_OUTPUT_EDC_FILE = *.edc;
|
||||
EDIF_INPUT_LMF2 = *.lmf;
|
||||
EDIF_INPUT_LMF1 = *.lmf;
|
||||
VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF;
|
||||
VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE;
|
||||
VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE;
|
||||
VHDL_NETLIST_WRITER = OFF;
|
||||
VERILOG_NETLIST_WRITER = OFF;
|
||||
XNF_GENERATE_AHDL_TDX_FILE = ON;
|
||||
XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON;
|
||||
XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC;
|
||||
EDIF_OUTPUT_VERSION = 200;
|
||||
EDIF_NETLIST_WRITER = OFF;
|
||||
END;
|
||||
|
||||
CUSTOM_DESIGN_DOCTOR_RULES
|
||||
BEGIN
|
||||
MASTER_RESET = OFF;
|
||||
EXPANDER_NETWORKS = ON;
|
||||
RACE_CONDITIONS = ON;
|
||||
DELAY_CHAINS = ON;
|
||||
ASYNCHRONOUS_INPUTS = ON;
|
||||
PRESET_CLEAR_NETWORKS = ON;
|
||||
STATIC_HAZARDS_AFTER_SYNTHESIS = OFF;
|
||||
STATIC_HAZARDS_BEFORE_SYNTHESIS = ON;
|
||||
MULTI_CLOCK_NETWORKS = ON;
|
||||
MULTI_LEVEL_CLOCKS = ON;
|
||||
GATED_CLOCKS = ON;
|
||||
RIPPLE_CLOCKS = ON;
|
||||
END;
|
||||
|
||||
SIMULATOR_CONFIGURATION
|
||||
BEGIN
|
||||
END_TIME = 0.0ns;
|
||||
START_TIME = 0.0ns;
|
||||
GLITCH_TIME = 0.0ns;
|
||||
GLITCH = OFF;
|
||||
OSCILLATION_TIME = 0.0ns;
|
||||
OSCILLATION = OFF;
|
||||
CHECK_OUTPUTS = OFF;
|
||||
SETUP_HOLD = OFF;
|
||||
USE_DEVICE = OFF;
|
||||
END;
|
||||
|
||||
TIMING_ANALYZER_CONFIGURATION
|
||||
BEGIN
|
||||
REGISTERED_PERFORMANCE_OPTIONS = FREQUENCY_OF_PATHS;
|
||||
LIST_PATH_FREQUENCY = 42.01MHz;
|
||||
LIST_PATH_COUNT = 10;
|
||||
INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms;
|
||||
INCLUDE_PATHS_LESS_THAN = OFF;
|
||||
INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns;
|
||||
INCLUDE_PATHS_GREATER_THAN = OFF;
|
||||
DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS;
|
||||
CELL_WIDTH = 18;
|
||||
LIST_ONLY_LONGEST_PATH = ON;
|
||||
CUT_OFF_CLEAR_AND_PRESET_PATHS = ON;
|
||||
CUT_OFF_IO_PIN_FEEDBACK = ON;
|
||||
AUTO_RECALCULATE = OFF;
|
||||
ANALYSIS_MODE = DELAY_MATRIX;
|
||||
END;
|
||||
|
||||
OTHER_CONFIGURATION
|
||||
BEGIN
|
||||
ROW_PINS_PERCENT = 95;
|
||||
CARRY_OUT_PINS_LCELL_INSERT = OFF;
|
||||
LAST_MAXPLUS2_VERSION = 8.2;
|
||||
LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100;
|
||||
ROW_PINS_LCELL_INSERT = ON;
|
||||
NORMAL_LCELL_INSERT = ON;
|
||||
COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,0,0,1,1,1";
|
||||
FLEX_10K_52_COLUMNS = 40;
|
||||
EXPLICIT_FAMILY = 1;
|
||||
DEFAULT_9K_EXP_PER_LCELL = 1/2;
|
||||
LCELLS_PER_ROW_PERCENT = 100;
|
||||
FAN_IN_PER_LCELL_PERCENT = 100;
|
||||
EXP_PER_LCELL_PERCENT = 100;
|
||||
ORIGINAL_MAXPLUS2_VERSION = 6.0;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
MINIMIZATION = FULL;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
MINIMIZATION = FULL;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
MINIMIZATION = FULL;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000
|
||||
BEGIN
|
||||
CARRY_CHAIN = AUTO;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
SLOW_SLEW_RATE = ON;
|
||||
CASCADE_CHAIN = AUTO;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
MINIMIZATION = FULL;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = ON;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = AUTO;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = AUTO;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC
|
||||
BEGIN
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = MANUAL;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = MANUAL;
|
||||
END;
|
||||
|
3584
fw/src/flex/SPRINT08.TDF
Normal file
BIN
fw/src/flex/sprint08.pof
Normal file
5763
fw/src/flex/sprint08.rpt
Normal file
BIN
fw/src/flex/sprint08.sof
Normal file
620
fw/src/max/SP037032.ACF
Normal file
@ -0,0 +1,620 @@
|
||||
--
|
||||
-- Copyright (C) 1988-2000 Altera Corporation
|
||||
-- Any megafunction design, and related net list (encrypted or decrypted),
|
||||
-- support information, device programming or simulation file, and any other
|
||||
-- associated documentation or information provided by Altera or a partner
|
||||
-- under Altera's Megafunction Partnership Program may be used only to
|
||||
-- program PLD devices (but not masked PLD devices) from Altera. Any other
|
||||
-- use of such megafunction design, net list, support information, device
|
||||
-- programming or simulation file, or any other related documentation or
|
||||
-- information is prohibited for any other purpose, including, but not
|
||||
-- limited to modification, reverse engineering, de-compiling, or use with
|
||||
-- any other silicon devices, unless such use is explicitly licensed under
|
||||
-- a separate agreement with Altera or a megafunction partner. Title to
|
||||
-- the intellectual property, including patents, copyrights, trademarks,
|
||||
-- trade secrets, or maskworks, embodied in any such megafunction design,
|
||||
-- net list, support information, device programming or simulation file, or
|
||||
-- any other related documentation or information provided by Altera or a
|
||||
-- megafunction partner, remains with Altera, the megafunction partner, or
|
||||
-- their respective licensors. No other licenses, including any licenses
|
||||
-- needed under any third party's intellectual property, are provided herein.
|
||||
--
|
||||
CHIP sp037032
|
||||
BEGIN
|
||||
|CLK_WG : OUTPUT_PIN = 33;
|
||||
|HD_CS2 : OUTPUT_PIN = 37;
|
||||
|/RD : INPUT_PIN = 2;
|
||||
DEVICE = EPM7064SLC44-10;
|
||||
|/WRH : OUTPUT_PIN = 24;
|
||||
|MA7 : INPUT_PIN = 36;
|
||||
|CLK_PRC : OUTPUT_PIN = 27;
|
||||
|/DTRB : INPUT_PIN = 34;
|
||||
|RDAT : OUTPUT_PIN = 16;
|
||||
|RDATA : INPUT_PIN = 17;
|
||||
|MA0 : INPUT_PIN = 39;
|
||||
|TG42_IN : INPUT_PIN = 43;
|
||||
|TG42_OUT : OUTPUT_PIN = 41;
|
||||
|/CONFIG : OUTPUT_PIN = 40;
|
||||
|CLKZZ : OUTPUT_PIN = 31;
|
||||
|/MR : INPUT_PIN = 28;
|
||||
|/IO : INPUT_PIN = 29;
|
||||
|HDD_CS : INPUT_PIN = 26;
|
||||
|/WR : INPUT_PIN = 25;
|
||||
|RSTB : INPUT_PIN = 21;
|
||||
|WSTB : INPUT_PIN = 20;
|
||||
|STE : INPUT_PIN = 19;
|
||||
|QDAT : OUTPUT_PIN = 14;
|
||||
|HD_CSS2 : OUTPUT_PIN = 12;
|
||||
|HD_CSS1 : OUTPUT_PIN = 11;
|
||||
|HD_OE1 : OUTPUT_PIN = 8;
|
||||
|HD_CS1 : OUTPUT_PIN = 9;
|
||||
|HD_WE1 : OUTPUT_PIN = 6;
|
||||
|HD_OE2 : OUTPUT_PIN = 5;
|
||||
|HD_WE2 : OUTPUT_PIN = 4;
|
||||
|D0 : INPUT_PIN = 18;
|
||||
|EPM_RES : INPUT_PIN = 1;
|
||||
|CNF_ON : INPUT_PIN = 44;
|
||||
END;
|
||||
|
||||
DEFAULT_DEVICES
|
||||
BEGIN
|
||||
AUTO_DEVICE = EPM7256SQC208-7;
|
||||
AUTO_DEVICE = EPM7256SRC208-7;
|
||||
AUTO_DEVICE = EPM7192SQC160-7;
|
||||
AUTO_DEVICE = EPM7160SQC160-7;
|
||||
AUTO_DEVICE = EPM7160STC100-7;
|
||||
AUTO_DEVICE = EPM7160SLC84-7;
|
||||
AUTO_DEVICE = EPM7128SQC160-6;
|
||||
AUTO_DEVICE = EPM7128STC100-6;
|
||||
AUTO_DEVICE = EPM7128SQC100-6;
|
||||
AUTO_DEVICE = EPM7128SLC84-6;
|
||||
AUTO_DEVICE = EPM7064STC100-5;
|
||||
AUTO_DEVICE = EPM7064SLC84-5;
|
||||
AUTO_DEVICE = EPM7064STC44-5;
|
||||
AUTO_DEVICE = EPM7064SLC44-5;
|
||||
AUTO_DEVICE = EPM7032STC44-7;
|
||||
AUTO_DEVICE = EPM7032SLC44-7;
|
||||
ASK_BEFORE_ADDING_EXTRA_DEVICES = ON;
|
||||
END;
|
||||
|
||||
TIMING_POINT
|
||||
BEGIN
|
||||
DEVICE_FOR_TIMING_SYNTHESIS = EPM7064SLC44-10;
|
||||
MAINTAIN_STABLE_SYNTHESIS = OFF;
|
||||
CUT_ALL_CLEAR_PRESET = ON;
|
||||
CUT_ALL_BIDIR = ON;
|
||||
END;
|
||||
|
||||
IGNORED_ASSIGNMENTS
|
||||
BEGIN
|
||||
FIT_IGNORE_TIMING = OFF;
|
||||
IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF;
|
||||
DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF;
|
||||
IGNORE_DEVICE_ASSIGNMENTS = OFF;
|
||||
IGNORE_LC_ASSIGNMENTS = OFF;
|
||||
IGNORE_PIN_ASSIGNMENTS = OFF;
|
||||
IGNORE_CHIP_ASSIGNMENTS = OFF;
|
||||
IGNORE_TIMING_ASSIGNMENTS = OFF;
|
||||
IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF;
|
||||
IGNORE_CLIQUE_ASSIGNMENTS = OFF;
|
||||
END;
|
||||
|
||||
LOGIC_OPTIONS
|
||||
BEGIN
|
||||
|/WRH : TURBO_BIT = OFF;
|
||||
|10K_CLK : TURBO_BIT = OFF;
|
||||
|10K_D0 : TURBO_BIT = OFF;
|
||||
|/CONFIG : TURBO_BIT = OFF;
|
||||
|HD_CSS1 : TURBO_BIT = OFF;
|
||||
|HD_CSS2 : TURBO_BIT = OFF;
|
||||
|HD_CS1 : TURBO_BIT = OFF;
|
||||
|HD_CS2 : TURBO_BIT = OFF;
|
||||
|HD_OE1 : TURBO_BIT = OFF;
|
||||
|HD_OE2 : TURBO_BIT = OFF;
|
||||
|HD_WE1 : TURBO_BIT = OFF;
|
||||
|HD_WE2 : TURBO_BIT = OFF;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_DEVICE_OPTIONS
|
||||
BEGIN
|
||||
MAX7000B_ENABLE_VREFB = OFF;
|
||||
MAX7000B_ENABLE_VREFA = OFF;
|
||||
MAX7000B_VCCIO_IOBANK2 = 3.3V;
|
||||
MAX7000B_VCCIO_IOBANK1 = 3.3V;
|
||||
CONFIG_EPROM_PULLUP_RESISTOR = ON;
|
||||
CONFIG_EPROM_USER_CODE = FFFFFFFF;
|
||||
FLEX_CONFIGURATION_EPROM = AUTO;
|
||||
MAX7000AE_ENABLE_JTAG = ON;
|
||||
MAX7000AE_USER_CODE = FFFFFFFF;
|
||||
SECURITY_BIT = ON;
|
||||
FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON;
|
||||
FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX6000_ENABLE_JTAG = OFF;
|
||||
CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL;
|
||||
MULTIVOLT_IO = OFF;
|
||||
nCEO = UNRESERVED;
|
||||
MAX7000S_ENABLE_JTAG = ON;
|
||||
FLEX10K_ENABLE_LOCK_OUTPUT = OFF;
|
||||
MAX7000S_USER_CODE = FFFF;
|
||||
CONFIG_SCHEME_10K = PASSIVE_SERIAL;
|
||||
FLEX10K_JTAG_USER_CODE = 7F;
|
||||
ENABLE_INIT_DONE_OUTPUT = OFF;
|
||||
ENABLE_CHIP_WIDE_OE = OFF;
|
||||
ENABLE_CHIP_WIDE_RESET = OFF;
|
||||
CLKUSR = UNRESERVED;
|
||||
ADD17 = UNRESERVED;
|
||||
ADD16 = UNRESERVED;
|
||||
ADD15 = UNRESERVED;
|
||||
ADD14 = UNRESERVED;
|
||||
ADD13 = UNRESERVED;
|
||||
ADD0_TO_ADD12 = UNRESERVED;
|
||||
SDOUT = RESERVED_DRIVES_OUT;
|
||||
RDCLK = UNRESERVED;
|
||||
RDYnBUSY = UNRESERVED;
|
||||
nWS_nRS_nCS_CS = UNRESERVED;
|
||||
DATA1_TO_DATA7 = UNRESERVED;
|
||||
DATA0 = RESERVED_TRI_STATED;
|
||||
FLEX8000_ENABLE_JTAG = OFF;
|
||||
CONFIG_SCHEME = ACTIVE_SERIAL;
|
||||
DISABLE_TIME_OUT = OFF;
|
||||
ENABLE_DCLK_OUTPUT = OFF;
|
||||
RELEASE_CLEARS = OFF;
|
||||
AUTO_RESTART = OFF;
|
||||
USER_CLOCK = OFF;
|
||||
RESERVED_PINS_PERCENT = 0;
|
||||
RESERVED_LCELLS_PERCENT = 0;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS
|
||||
BEGIN
|
||||
DEVICE_FAMILY = MAX7000S;
|
||||
AUTO_GLOBAL_OE = OFF;
|
||||
AUTO_GLOBAL_PRESET = OFF;
|
||||
AUTO_GLOBAL_CLEAR = OFF;
|
||||
AUTO_GLOBAL_CLOCK = OFF;
|
||||
OPTIMIZE_FOR_SPEED = 0;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX9000 = ON;
|
||||
AUTO_IMPLEMENT_IN_EAB = OFF;
|
||||
AUTO_OPEN_DRAIN_PINS = ON;
|
||||
ONE_HOT_STATE_MACHINE_ENCODING = OFF;
|
||||
AUTO_REGISTER_PACKING = OFF;
|
||||
STYLE = NORMAL;
|
||||
AUTO_FAST_IO = OFF;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_PROCESSING_CONFIGURATION
|
||||
BEGIN
|
||||
FITTER_SETTINGS = ADVANCED;
|
||||
SMART_RECOMPILE = ON;
|
||||
PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF;
|
||||
GENERATE_AHDL_TDO_FILE = OFF;
|
||||
RPT_FILE_USER_ASSIGNMENTS = ON;
|
||||
RPT_FILE_LCELL_INTERCONNECT = ON;
|
||||
RPT_FILE_HIERARCHY = ON;
|
||||
RPT_FILE_EQUATIONS = ON;
|
||||
LINKED_SNF_EXTRACTOR = OFF;
|
||||
OPTIMIZE_TIMING_SNF = OFF;
|
||||
TIMING_SNF_EXTRACTOR = ON;
|
||||
FUNCTIONAL_SNF_EXTRACTOR = OFF;
|
||||
DESIGN_DOCTOR_RULES = EPLD;
|
||||
DESIGN_DOCTOR = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_INTERFACES_CONFIGURATION
|
||||
BEGIN
|
||||
VHDL_FLATTEN_BUS = OFF;
|
||||
VERILOG_FLATTEN_BUS = OFF;
|
||||
NETLIST_OUTPUT_TIME_SCALE = 0.1ns;
|
||||
EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF;
|
||||
EDIF_BUS_DELIMITERS = [];
|
||||
EDIF_FLATTEN_BUS = OFF;
|
||||
EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF;
|
||||
EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF;
|
||||
EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE;
|
||||
EDIF_OUTPUT_USE_EDC = OFF;
|
||||
EDIF_INPUT_USE_LMF2 = OFF;
|
||||
EDIF_INPUT_USE_LMF1 = OFF;
|
||||
EDIF_OUTPUT_GND = GND;
|
||||
EDIF_OUTPUT_VCC = VCC;
|
||||
EDIF_INPUT_GND = GND;
|
||||
EDIF_INPUT_VCC = VCC;
|
||||
EDIF_OUTPUT_EDC_FILE = *.edc;
|
||||
EDIF_INPUT_LMF2 = *.lmf;
|
||||
EDIF_INPUT_LMF1 = *.lmf;
|
||||
VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF;
|
||||
VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE;
|
||||
VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE;
|
||||
EDIF_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VHDL_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
VHDL_WRITER_VERSION = VHDL87;
|
||||
VHDL_READER_VERSION = VHDL87;
|
||||
SYNOPSYS_MAPPING_EFFORT = MEDIUM;
|
||||
SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF;
|
||||
SYNOPSYS_HIERARCHICAL_COMPILATION = ON;
|
||||
SYNOPSYS_DESIGNWARE = OFF;
|
||||
SYNOPSYS_COMPILER = DESIGN;
|
||||
USE_SYNOPSYS_SYNTHESIS = OFF;
|
||||
VHDL_NETLIST_WRITER = OFF;
|
||||
VERILOG_NETLIST_WRITER = OFF;
|
||||
XNF_GENERATE_AHDL_TDX_FILE = ON;
|
||||
XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON;
|
||||
XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC;
|
||||
EDIF_OUTPUT_VERSION = 200;
|
||||
EDIF_NETLIST_WRITER = OFF;
|
||||
END;
|
||||
|
||||
CUSTOM_DESIGN_DOCTOR_RULES
|
||||
BEGIN
|
||||
MASTER_RESET = OFF;
|
||||
EXPANDER_NETWORKS = ON;
|
||||
RACE_CONDITIONS = ON;
|
||||
DELAY_CHAINS = ON;
|
||||
ASYNCHRONOUS_INPUTS = ON;
|
||||
PRESET_CLEAR_NETWORKS = ON;
|
||||
STATIC_HAZARDS_AFTER_SYNTHESIS = OFF;
|
||||
STATIC_HAZARDS_BEFORE_SYNTHESIS = ON;
|
||||
MULTI_CLOCK_NETWORKS = ON;
|
||||
MULTI_LEVEL_CLOCKS = ON;
|
||||
GATED_CLOCKS = ON;
|
||||
RIPPLE_CLOCKS = ON;
|
||||
END;
|
||||
|
||||
SIMULATOR_CONFIGURATION
|
||||
BEGIN
|
||||
BIDIR_PIN = STRONG;
|
||||
END_TIME = 0.0ns;
|
||||
START_TIME = 0.0ns;
|
||||
GLITCH_TIME = 0.0ns;
|
||||
GLITCH = OFF;
|
||||
OSCILLATION_TIME = 0.0ns;
|
||||
OSCILLATION = OFF;
|
||||
CHECK_OUTPUTS = OFF;
|
||||
SETUP_HOLD = OFF;
|
||||
USE_DEVICE = OFF;
|
||||
END;
|
||||
|
||||
TIMING_ANALYZER_CONFIGURATION
|
||||
BEGIN
|
||||
CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF;
|
||||
LIST_PATH_FREQUENCY = 10MHz;
|
||||
LIST_PATH_COUNT = 10;
|
||||
REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS;
|
||||
INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms;
|
||||
INCLUDE_PATHS_LESS_THAN = OFF;
|
||||
INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns;
|
||||
INCLUDE_PATHS_GREATER_THAN = OFF;
|
||||
DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS;
|
||||
CELL_WIDTH = 18;
|
||||
LIST_ONLY_LONGEST_PATH = ON;
|
||||
CUT_OFF_CLEAR_AND_PRESET_PATHS = ON;
|
||||
CUT_OFF_IO_PIN_FEEDBACK = ON;
|
||||
AUTO_RECALCULATE = OFF;
|
||||
ANALYSIS_MODE = DELAY_MATRIX;
|
||||
END;
|
||||
|
||||
OTHER_CONFIGURATION
|
||||
BEGIN
|
||||
LAST_MAXPLUS2_VERSION = 10.0;
|
||||
ROW_PINS_LCELL_INSERT = ON;
|
||||
CARRY_OUT_PINS_LCELL_INSERT = OFF;
|
||||
NORMAL_LCELL_INSERT = ON;
|
||||
EXPLICIT_FAMILY = 1;
|
||||
ORIGINAL_MAXPLUS2_VERSION = 8.0;
|
||||
LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100;
|
||||
FLEX_10K_52_COLUMNS = 40;
|
||||
DEFAULT_9K_EXP_PER_LCELL = 1/2;
|
||||
LCELLS_PER_ROW_PERCENT = 100;
|
||||
FAN_IN_PER_LCELL_PERCENT = 100;
|
||||
EXP_PER_LCELL_PERCENT = 100;
|
||||
ROW_PINS_PERCENT = 50;
|
||||
COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1";
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000
|
||||
BEGIN
|
||||
TURBO_BIT = ON;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = ON;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = AUTO;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = AUTO;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = MANUAL;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = MANUAL;
|
||||
END;
|
||||
|
288
fw/src/max/SP037032.TDF
Normal file
@ -0,0 +1,288 @@
|
||||
TITLE "SINC_controller";
|
||||
|
||||
Constant HDD_TYPE = 1;
|
||||
|
||||
SUBDESIGN SP037032
|
||||
(
|
||||
EPM_RES : INPUT;
|
||||
HD_WE[2..1] : OUTPUT;
|
||||
HD_OE[2..1] : OUTPUT;
|
||||
HD_CS[2..1] : OUTPUT;
|
||||
HD_CSS[2..1]: OUTPUT;
|
||||
|
||||
CLK_WG : OUTPUT;
|
||||
RDATA : INPUT;
|
||||
QDAT : OUTPUT;
|
||||
RDAT : OUTPUT;
|
||||
|
||||
D0 : INPUT;
|
||||
MA0 : INPUT;
|
||||
STE : INPUT;
|
||||
WSTB,RSTB : INPUT;
|
||||
|
||||
/WR : INPUT;
|
||||
/RD : INPUT;
|
||||
HDD_CS : INPUT;
|
||||
|
||||
/MR,/IO : INPUT;
|
||||
CLKZZ : OUTPUT;
|
||||
|
||||
-- /RTSB,
|
||||
/DTRB : INPUT;
|
||||
|
||||
-- 10K_D0 : OUTPUT;
|
||||
-- 10K_CLK : OUTPUT;
|
||||
/CONFIG : OUTPUT;
|
||||
CNF_ON : INPUT;
|
||||
TG42_OUT : OUTPUT;
|
||||
TG42_IN : INPUT;
|
||||
|
||||
CLK_PRC : OUTPUT;
|
||||
|
||||
MA7 : INPUT;
|
||||
|
||||
-- /WRH : INPUT;
|
||||
/WRH : OUTPUT;
|
||||
|
||||
-- /RDH : OUTPUT; -> NA HD_CS1
|
||||
|
||||
)
|
||||
VARIABLE
|
||||
|
||||
CT[2..0] : DFF;
|
||||
CLKZZ1 : NODE;
|
||||
STWG[2..0] : DFF;
|
||||
WGR[4..0] : DFF;
|
||||
CT_WG : NODE;
|
||||
CT_WG1 : NODE;
|
||||
TB_WG : NODE;
|
||||
CODE[4..0] : DFF;
|
||||
TURBING : NODE;
|
||||
RDAT_X : NODE;
|
||||
HD_CS_CLK : NODE;
|
||||
MXX : NODE;
|
||||
10K_D0 : NODE;
|
||||
10K_CLK : NODE;
|
||||
BEGIN
|
||||
|
||||
-- ====== Oscillator ==========
|
||||
TG42_OUT = EXP(TG42_IN);
|
||||
-- TG42_OUT = !(TG42_IN);
|
||||
|
||||
-- tG42_OUT = LCELL(EXP(TG42_IN));
|
||||
-- ============================
|
||||
|
||||
-- ====== FLEX Loading ========
|
||||
|
||||
10K_CLK = LCELL((/MR or /WR or CNF_ON) &
|
||||
-- (/IO or /WR or HDD_CS or !CNF_ON) &
|
||||
(/MR or /RD or HDD_CS or !CNF_ON));
|
||||
CODE[].clk = 10K_CLK;
|
||||
CODE[].clrn = /CONFIG & (/IO or /RD);
|
||||
|
||||
IF !CNF_ON THEN
|
||||
CODE[].d = (CODE[3..0],(CODE2 xor 10K_D0));
|
||||
ELSE
|
||||
CODE[].d = (CODE[3..0],!CODE0);
|
||||
END IF;
|
||||
|
||||
10K_D0 = LCELL(CODE4 xor D0);
|
||||
|
||||
-- ============================
|
||||
|
||||
-- ======= CP FRQ =============
|
||||
|
||||
CT[].clk = (TG42_IN xor !CT1);
|
||||
CT[].d = CT[] + 1;
|
||||
|
||||
-- IF CT[] == 2 THEN
|
||||
-- CT[].d = GND;
|
||||
-- ELSE
|
||||
-- CT[].d = CT[] + 1;
|
||||
-- END IF;
|
||||
|
||||
CLKZZ = TRI(CT1,!CNF_ON);
|
||||
|
||||
-- ============================
|
||||
|
||||
-- ======== FDD controller ==================
|
||||
|
||||
TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & !/DTRB);
|
||||
-- TURBING = GND;
|
||||
-- TB_WG = /DTRB or TURBING;
|
||||
TB_WG = /DTRB;
|
||||
|
||||
-- CT_WG = TFF(VCC,(CT1 xor (CT_WG & (/DTRB or TURBING))),,);
|
||||
CT_WG = TFF(VCC,(CT1 xor (CT_WG & TURBING)),,);
|
||||
|
||||
CT_WG1 = TFF(VCC,(CT1 xor (CT_WG1 & /DTRB)),,);
|
||||
-- STWG[].clk = LCELL(CT_WG xor STWG2);
|
||||
|
||||
STWG[].clk = (CT_WG xor STWG2);
|
||||
STWG[].d = STWG[] + 1;
|
||||
CLK_WG = STWG2;
|
||||
|
||||
CLK_PRC = STWG0;
|
||||
-- CLK_PRC = STWG1;
|
||||
|
||||
WGR[].clk = CT_WG1;
|
||||
IF !RDAT THEN
|
||||
TABLE WGR[3..0] => WGR[3..0].d;
|
||||
0 => 4; 1 => 5; 2 => 4; 3 => 5;
|
||||
4 => 6; 5 => 7; 6 => 8; 7 => 8;
|
||||
8 => 9; 9 => 9; 10 => 10; 11 => 11;
|
||||
12 => 12; 13 => 13; 14 => 14; 15 => 15;
|
||||
END TABLE;
|
||||
WGR4.d = WGR4;
|
||||
|
||||
-- IF WGR[3..0] == 0 THEN
|
||||
-- WGR[3..0].d = 3;
|
||||
-- WGR4.d = WGR4;
|
||||
-- ELSE
|
||||
-- WGR[].d = WGR[] + 1;
|
||||
-- END IF;
|
||||
ELSE
|
||||
IF WGR[3..0] == 0 THEN
|
||||
WGR[3..0].d = 3;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
WGR[].d = WGR[] + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
|
||||
-- RDAT_X = DFF(RDATA,CT_WG1,,);
|
||||
RDAT_X = EXP(EXP(RDAT_X & EXP(!RDATA & !CT_WG1)) & EXP(RDATA & !CT_WG1));
|
||||
|
||||
IF !CNF_ON THEN
|
||||
QDAT = 10K_CLK;
|
||||
RDAT = 10K_D0;
|
||||
ELSE
|
||||
QDAT = WGR4;
|
||||
RDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,);
|
||||
END IF;
|
||||
|
||||
-- ==============================================
|
||||
|
||||
-- ========= HDD Controller =========
|
||||
|
||||
IF HDD_TYPE == 0 THEN
|
||||
|
||||
MXX = CODE0;
|
||||
|
||||
HD_CS2 = LCELL(HDD_CS or EXP(!HDD_CS));
|
||||
|
||||
HD_CS_CLK = HD_CS2 or EXP(EXP(EXP(EXP(EXP(!HD_CS2)))));
|
||||
|
||||
HD_CSS1 = HDD_CS or MA7;
|
||||
HD_CSS2 = HDD_CS or !MA7;
|
||||
|
||||
|
||||
HD_CS1 = (/RD or MA0 or HD_CS_CLK or /IO) &
|
||||
(/RD or CODE0 or HDD_CS or /MR) ; % /RDH %
|
||||
|
||||
/WRH = (/WR or !MA0 or HD_CS_CLK or /IO); % /WRH %
|
||||
|
||||
|
||||
HD_OE1 = (HDD_CS or /RD or !MA0 or /IO) &
|
||||
(HDD_CS or /RD or !CODE0 or /MR);
|
||||
|
||||
HD_WE1 = HDD_CS or /RD or (/IO & /MR);
|
||||
|
||||
|
||||
HD_OE2 = HDD_CS or /WR or !MA0;
|
||||
|
||||
|
||||
HD_WE2 = HDD_CS or /WR or MA0 or /IO;
|
||||
|
||||
-- ======= RECONFIG =========
|
||||
|
||||
/CONFIG = LCELL(EPM_RES & (HDD_CS or /MR or /WR));
|
||||
|
||||
ELSE
|
||||
|
||||
MXX = CODE0;
|
||||
|
||||
HD_CS2 = LCELL(HDD_CS or EXP(!HDD_CS) or /WRH);
|
||||
|
||||
HD_CS_CLK = HDD_CS or EXP(EXP(EXP(EXP(EXP(!HDD_CS)))));
|
||||
|
||||
HD_CSS1 = HDD_CS or MA7;
|
||||
HD_CSS2 = HDD_CS or !MA7;
|
||||
|
||||
HD_CS1 = HDD_CS or /WR;
|
||||
|
||||
HD_OE1 = (HD_CS_CLK or /RD or !MA0 or /IO) &
|
||||
(HD_CS_CLK or /WR or !/WRH or !MA0 or /IO) &
|
||||
(HDD_CS or /RD or !CODE0 or /MR);
|
||||
|
||||
HD_WE1 = (HDD_CS or (/RD & /WR) or /IO);
|
||||
|
||||
|
||||
-- HD_OE1 = (HDD_CS or /RD or !MA0) or (HDD_CS or /RD or );
|
||||
|
||||
-- HD_WE1 = (HDD_CS or /RD or MA0 or /IO);
|
||||
|
||||
|
||||
HD_WE2 = (/WR or !MA0 or HD_CS_CLK or /IO); % /WRH %
|
||||
|
||||
HD_OE2 = (/RD or MA0 or HD_CS_CLK or /IO) &
|
||||
(/RD or CODE0 or HDD_CS or /MR) ; % /RDH %
|
||||
|
||||
|
||||
/WRH = DFF((/WRH or !MA0),(/IO or /WR or HDD_CS),(/IO or /RD),);
|
||||
|
||||
%
|
||||
HD_CS2 = LCELL(HDD_CS or EXP(!HDD_CS));
|
||||
|
||||
HD_CS_CLK = EXP(EXP(EXP(EXP(EXP(!HD_CS2)))));
|
||||
|
||||
HD_CS1 = VCC;
|
||||
|
||||
HD_CSS1 = HDD_CS or MA7;
|
||||
HD_CSS2 = HDD_CS or !MA7;
|
||||
|
||||
HD_OE1 = VCC;
|
||||
HD_WE1 = VCC;
|
||||
|
||||
HD_OE2 = (/RD or HD_CS_CLK or /IO);
|
||||
HD_WE2 = (/WR or HD_CS_CLK or /IO);
|
||||
%
|
||||
|
||||
%
|
||||
TABLE
|
||||
|
||||
(HDD_CS,/RD,/WR,/IO,/MR,MA7,MXX) => (HD_CS[] ,HD_CSS[] ,HD_OE[], HD_WE[]);
|
||||
(VCC ,X ,X ,X ,X ,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,X ,X ,VCC,VCC,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,X ,X ,GND,GND,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,VCC,VCC,GND,VCC,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,GND,GND,GND,VCC,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,VCC,VCC,VCC,GND,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
(GND ,GND,GND,VCC,GND,X ,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
|
||||
(GND ,X ,X ,VCC,GND,GND,X ) => (VCC,VCC ,VCC,VCC ,VCC,VCC, VCC,VCC);
|
||||
|
||||
(GND ,GND,VCC,GND,VCC,VCC,X ) => (GND,VCC ,GND,VCC ,GND,VCC, VCC,VCC);
|
||||
(GND ,VCC,GND,GND,VCC,VCC,X ) => (GND,VCC ,GND,VCC ,VCC,VCC, GND,VCC);
|
||||
|
||||
(GND ,GND,VCC,GND,VCC,GND,X ) => (GND,VCC ,VCC,GND ,GND,VCC, VCC,VCC);
|
||||
(GND ,VCC,GND,GND,VCC,GND,X ) => (GND,VCC ,VCC,GND ,VCC,VCC, GND,VCC);
|
||||
|
||||
(GND ,GND,VCC,VCC,GND,VCC,GND) => (GND,VCC ,VCC,GND ,GND,VCC, VCC,GND);
|
||||
(GND ,GND,VCC,VCC,GND,VCC,VCC) => (GND,VCC ,VCC,VCC ,VCC,GND, VCC,VCC);
|
||||
|
||||
(GND ,VCC,GND,VCC,GND,VCC,GND) => (VCC,GND ,VCC,VCC ,VCC,VCC, VCC,GND);
|
||||
(GND ,VCC,GND,VCC,GND,VCC,VCC) => (VCC,GND ,VCC,GND ,VCC,GND, GND,VCC);
|
||||
|
||||
END TABLE;
|
||||
%
|
||||
-- ======= RECONFIG =========
|
||||
|
||||
/CONFIG = LCELL(EPM_RES & (HDD_CS or /MR or MA7 or /WR));
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
END;
|
||||
|
620
fw/src/max/SP047032.ACF
Normal file
@ -0,0 +1,620 @@
|
||||
--
|
||||
-- Copyright (C) 1988-2000 Altera Corporation
|
||||
-- Any megafunction design, and related net list (encrypted or decrypted),
|
||||
-- support information, device programming or simulation file, and any other
|
||||
-- associated documentation or information provided by Altera or a partner
|
||||
-- under Altera's Megafunction Partnership Program may be used only to
|
||||
-- program PLD devices (but not masked PLD devices) from Altera. Any other
|
||||
-- use of such megafunction design, net list, support information, device
|
||||
-- programming or simulation file, or any other related documentation or
|
||||
-- information is prohibited for any other purpose, including, but not
|
||||
-- limited to modification, reverse engineering, de-compiling, or use with
|
||||
-- any other silicon devices, unless such use is explicitly licensed under
|
||||
-- a separate agreement with Altera or a megafunction partner. Title to
|
||||
-- the intellectual property, including patents, copyrights, trademarks,
|
||||
-- trade secrets, or maskworks, embodied in any such megafunction design,
|
||||
-- net list, support information, device programming or simulation file, or
|
||||
-- any other related documentation or information provided by Altera or a
|
||||
-- megafunction partner, remains with Altera, the megafunction partner, or
|
||||
-- their respective licensors. No other licenses, including any licenses
|
||||
-- needed under any third party's intellectual property, are provided herein.
|
||||
--
|
||||
CHIP sp047032
|
||||
BEGIN
|
||||
DEVICE = EPM7032LC44-12;
|
||||
|/WRH : OUTPUT_PIN = 24;
|
||||
|/RD : PIN = 32;
|
||||
|MA7 : INPUT_PIN = 36;
|
||||
|/RTSB : INPUT_PIN = 33;
|
||||
|CLK_PRC : OUTPUT_PIN = 27;
|
||||
|/DTRB : INPUT_PIN = 34;
|
||||
|RDAT : OUTPUT_PIN = 16;
|
||||
|RDATA : INPUT_PIN = 17;
|
||||
|MA0 : INPUT_PIN = 39;
|
||||
|TG42_IN : INPUT_PIN = 43;
|
||||
|TG42_OUT : OUTPUT_PIN = 41;
|
||||
|/CONFIG : OUTPUT_PIN = 40;
|
||||
|10K_CLK : OUTPUT_PIN = 38;
|
||||
|10K_D0 : OUTPUT_PIN = 37;
|
||||
|CLKZZ : OUTPUT_PIN = 31;
|
||||
|/MR : INPUT_PIN = 28;
|
||||
|/IO : INPUT_PIN = 29;
|
||||
|HDD_CS : INPUT_PIN = 26;
|
||||
|/WR : INPUT_PIN = 25;
|
||||
|RSTB : INPUT_PIN = 21;
|
||||
|WSTB : INPUT_PIN = 20;
|
||||
|STE : INPUT_PIN = 19;
|
||||
|QDAT : OUTPUT_PIN = 14;
|
||||
|CLK_WG : OUTPUT_PIN = 13;
|
||||
|HD_CSS2 : OUTPUT_PIN = 12;
|
||||
|HD_CSS1 : OUTPUT_PIN = 11;
|
||||
|HD_OE1 : OUTPUT_PIN = 8;
|
||||
|HD_CS1 : OUTPUT_PIN = 9;
|
||||
|HD_CS2 : OUTPUT_PIN = 7;
|
||||
|HD_WE1 : OUTPUT_PIN = 6;
|
||||
|HD_OE2 : OUTPUT_PIN = 5;
|
||||
|HD_WE2 : OUTPUT_PIN = 4;
|
||||
|D0 : INPUT_PIN = 18;
|
||||
|EPM_RES : INPUT_PIN = 1;
|
||||
|CNF_ON : INPUT_PIN = 44;
|
||||
END;
|
||||
|
||||
DEFAULT_DEVICES
|
||||
BEGIN
|
||||
AUTO_DEVICE = EPM7096QC100-7;
|
||||
AUTO_DEVICE = EPM7096LC84-7;
|
||||
AUTO_DEVICE = EPM7096LC68-7;
|
||||
AUTO_DEVICE = EPM7064QC100-7;
|
||||
AUTO_DEVICE = EPM7064LC84-7;
|
||||
AUTO_DEVICE = EPM7064LC68-7;
|
||||
AUTO_DEVICE = EPM7064TC44-7;
|
||||
AUTO_DEVICE = EPM7064LC44-7;
|
||||
AUTO_DEVICE = EPM7032VTC44-12;
|
||||
AUTO_DEVICE = EPM7032VLC44-12;
|
||||
AUTO_DEVICE = EPM7032TC44-6;
|
||||
AUTO_DEVICE = EPM7032QC44-7;
|
||||
AUTO_DEVICE = EPM7032LC44-6;
|
||||
ASK_BEFORE_ADDING_EXTRA_DEVICES = ON;
|
||||
END;
|
||||
|
||||
TIMING_POINT
|
||||
BEGIN
|
||||
DEVICE_FOR_TIMING_SYNTHESIS = EPM7032LC44-12;
|
||||
MAINTAIN_STABLE_SYNTHESIS = OFF;
|
||||
CUT_ALL_CLEAR_PRESET = ON;
|
||||
CUT_ALL_BIDIR = ON;
|
||||
END;
|
||||
|
||||
IGNORED_ASSIGNMENTS
|
||||
BEGIN
|
||||
FIT_IGNORE_TIMING = OFF;
|
||||
DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF;
|
||||
IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF;
|
||||
IGNORE_DEVICE_ASSIGNMENTS = OFF;
|
||||
IGNORE_LC_ASSIGNMENTS = OFF;
|
||||
IGNORE_PIN_ASSIGNMENTS = OFF;
|
||||
IGNORE_CHIP_ASSIGNMENTS = OFF;
|
||||
IGNORE_TIMING_ASSIGNMENTS = OFF;
|
||||
IGNORE_LOGIC_OPTION_ASSIGNMENTS = OFF;
|
||||
IGNORE_CLIQUE_ASSIGNMENTS = OFF;
|
||||
END;
|
||||
|
||||
LOGIC_OPTIONS
|
||||
BEGIN
|
||||
|/WRH : TURBO_BIT = OFF;
|
||||
|10K_CLK : TURBO_BIT = OFF;
|
||||
|10K_D0 : TURBO_BIT = OFF;
|
||||
|/CONFIG : TURBO_BIT = OFF;
|
||||
|HD_CSS1 : TURBO_BIT = OFF;
|
||||
|HD_CSS2 : TURBO_BIT = OFF;
|
||||
|HD_CS1 : TURBO_BIT = OFF;
|
||||
|HD_CS2 : TURBO_BIT = OFF;
|
||||
|HD_OE1 : TURBO_BIT = OFF;
|
||||
|HD_OE2 : TURBO_BIT = OFF;
|
||||
|HD_WE1 : TURBO_BIT = OFF;
|
||||
|HD_WE2 : TURBO_BIT = OFF;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_DEVICE_OPTIONS
|
||||
BEGIN
|
||||
MAX7000B_ENABLE_VREFB = OFF;
|
||||
MAX7000B_ENABLE_VREFA = OFF;
|
||||
MAX7000B_VCCIO_IOBANK2 = 3.3V;
|
||||
MAX7000B_VCCIO_IOBANK1 = 3.3V;
|
||||
CONFIG_EPROM_PULLUP_RESISTOR = ON;
|
||||
CONFIG_EPROM_USER_CODE = FFFFFFFF;
|
||||
FLEX_CONFIGURATION_EPROM = AUTO;
|
||||
MAX7000AE_ENABLE_JTAG = ON;
|
||||
MAX7000AE_USER_CODE = FFFFFFFF;
|
||||
SECURITY_BIT = ON;
|
||||
FLEX6000_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX10KA_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = ON;
|
||||
FLEX10K_USE_LOW_VOLTAGE_CONFIGURATION_EPROM = OFF;
|
||||
FLEX6000_ENABLE_JTAG = OFF;
|
||||
CONFIG_SCHEME_FLEX_6000 = PASSIVE_SERIAL;
|
||||
MULTIVOLT_IO = OFF;
|
||||
MAX7000S_ENABLE_JTAG = ON;
|
||||
FLEX10K_ENABLE_LOCK_OUTPUT = OFF;
|
||||
MAX7000S_USER_CODE = FFFF;
|
||||
CONFIG_SCHEME_10K = PASSIVE_SERIAL;
|
||||
FLEX10K_JTAG_USER_CODE = 7F;
|
||||
ENABLE_INIT_DONE_OUTPUT = OFF;
|
||||
ENABLE_CHIP_WIDE_OE = OFF;
|
||||
ENABLE_CHIP_WIDE_RESET = OFF;
|
||||
nCEO = UNRESERVED;
|
||||
CLKUSR = UNRESERVED;
|
||||
ADD17 = UNRESERVED;
|
||||
ADD16 = UNRESERVED;
|
||||
ADD15 = UNRESERVED;
|
||||
ADD14 = UNRESERVED;
|
||||
ADD13 = UNRESERVED;
|
||||
ADD0_TO_ADD12 = UNRESERVED;
|
||||
SDOUT = RESERVED_DRIVES_OUT;
|
||||
RDCLK = UNRESERVED;
|
||||
RDYnBUSY = UNRESERVED;
|
||||
nWS_nRS_nCS_CS = UNRESERVED;
|
||||
DATA1_TO_DATA7 = UNRESERVED;
|
||||
DATA0 = RESERVED_TRI_STATED;
|
||||
FLEX8000_ENABLE_JTAG = OFF;
|
||||
CONFIG_SCHEME = ACTIVE_SERIAL;
|
||||
DISABLE_TIME_OUT = OFF;
|
||||
ENABLE_DCLK_OUTPUT = OFF;
|
||||
RELEASE_CLEARS = OFF;
|
||||
AUTO_RESTART = OFF;
|
||||
USER_CLOCK = OFF;
|
||||
RESERVED_PINS_PERCENT = 0;
|
||||
RESERVED_LCELLS_PERCENT = 0;
|
||||
END;
|
||||
|
||||
GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS
|
||||
BEGIN
|
||||
AUTO_GLOBAL_OE = OFF;
|
||||
AUTO_GLOBAL_PRESET = OFF;
|
||||
AUTO_GLOBAL_CLEAR = OFF;
|
||||
AUTO_GLOBAL_CLOCK = OFF;
|
||||
OPTIMIZE_FOR_SPEED = 0;
|
||||
DEVICE_FAMILY = MAX7000;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX9000 = ON;
|
||||
AUTO_IMPLEMENT_IN_EAB = OFF;
|
||||
AUTO_OPEN_DRAIN_PINS = ON;
|
||||
ONE_HOT_STATE_MACHINE_ENCODING = OFF;
|
||||
AUTO_REGISTER_PACKING = OFF;
|
||||
STYLE = NORMAL;
|
||||
AUTO_FAST_IO = OFF;
|
||||
MULTI_LEVEL_SYNTHESIS_MAX5000_7000 = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_PROCESSING_CONFIGURATION
|
||||
BEGIN
|
||||
FITTER_SETTINGS = ADVANCED;
|
||||
SMART_RECOMPILE = ON;
|
||||
PRESERVE_ALL_NODE_NAME_SYNONYMS = OFF;
|
||||
GENERATE_AHDL_TDO_FILE = OFF;
|
||||
RPT_FILE_USER_ASSIGNMENTS = ON;
|
||||
RPT_FILE_LCELL_INTERCONNECT = ON;
|
||||
RPT_FILE_HIERARCHY = ON;
|
||||
RPT_FILE_EQUATIONS = ON;
|
||||
LINKED_SNF_EXTRACTOR = OFF;
|
||||
OPTIMIZE_TIMING_SNF = OFF;
|
||||
TIMING_SNF_EXTRACTOR = ON;
|
||||
FUNCTIONAL_SNF_EXTRACTOR = OFF;
|
||||
DESIGN_DOCTOR_RULES = EPLD;
|
||||
DESIGN_DOCTOR = OFF;
|
||||
END;
|
||||
|
||||
COMPILER_INTERFACES_CONFIGURATION
|
||||
BEGIN
|
||||
VHDL_FLATTEN_BUS = OFF;
|
||||
VERILOG_FLATTEN_BUS = OFF;
|
||||
NETLIST_OUTPUT_TIME_SCALE = 0.1ns;
|
||||
EDIF_INPUT_SHOW_LMF_MAPPING_MESSAGES = OFF;
|
||||
EDIF_BUS_DELIMITERS = [];
|
||||
EDIF_FLATTEN_BUS = OFF;
|
||||
EDIF_OUTPUT_FORCE_0NS_DELAYS = OFF;
|
||||
EDIF_OUTPUT_INCLUDE_SPECIAL_PRIM = OFF;
|
||||
EDIF_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
EDIF_OUTPUT_DELAY_CONSTRUCTS = EDO_FILE;
|
||||
EDIF_OUTPUT_USE_EDC = OFF;
|
||||
EDIF_INPUT_USE_LMF2 = OFF;
|
||||
EDIF_INPUT_USE_LMF1 = OFF;
|
||||
EDIF_OUTPUT_GND = GND;
|
||||
EDIF_OUTPUT_VCC = VCC;
|
||||
EDIF_INPUT_GND = GND;
|
||||
EDIF_INPUT_VCC = VCC;
|
||||
EDIF_OUTPUT_EDC_FILE = *.edc;
|
||||
EDIF_INPUT_LMF2 = *.lmf;
|
||||
EDIF_INPUT_LMF1 = *.lmf;
|
||||
VHDL_GENERATE_CONFIGURATION_DECLARATION = OFF;
|
||||
VHDL_OUTPUT_DELAY_CONSTRUCTS = VHO_FILE;
|
||||
VERILOG_OUTPUT_DELAY_CONSTRUCTS = VO_FILE;
|
||||
EDIF_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VHDL_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_TRUNCATE_HIERARCHY_PATH = OFF;
|
||||
VERILOG_OUTPUT_MAP_ILLEGAL_CHAR = OFF;
|
||||
VHDL_WRITER_VERSION = VHDL87;
|
||||
VHDL_READER_VERSION = VHDL87;
|
||||
SYNOPSYS_MAPPING_EFFORT = MEDIUM;
|
||||
SYNOPSYS_BOUNDARY_OPTIMIZATION = OFF;
|
||||
SYNOPSYS_HIERARCHICAL_COMPILATION = ON;
|
||||
SYNOPSYS_DESIGNWARE = OFF;
|
||||
SYNOPSYS_COMPILER = DESIGN;
|
||||
USE_SYNOPSYS_SYNTHESIS = OFF;
|
||||
VHDL_NETLIST_WRITER = OFF;
|
||||
VERILOG_NETLIST_WRITER = OFF;
|
||||
XNF_GENERATE_AHDL_TDX_FILE = ON;
|
||||
XNF_TRANSLATE_INTERNAL_NODE_NAMES = ON;
|
||||
XNF_EMULATE_TRI_STATE_BUSES = INTERNAL_LOGIC;
|
||||
EDIF_OUTPUT_VERSION = 200;
|
||||
EDIF_NETLIST_WRITER = OFF;
|
||||
END;
|
||||
|
||||
CUSTOM_DESIGN_DOCTOR_RULES
|
||||
BEGIN
|
||||
MASTER_RESET = OFF;
|
||||
EXPANDER_NETWORKS = ON;
|
||||
RACE_CONDITIONS = ON;
|
||||
DELAY_CHAINS = ON;
|
||||
ASYNCHRONOUS_INPUTS = ON;
|
||||
PRESET_CLEAR_NETWORKS = ON;
|
||||
STATIC_HAZARDS_AFTER_SYNTHESIS = OFF;
|
||||
STATIC_HAZARDS_BEFORE_SYNTHESIS = ON;
|
||||
MULTI_CLOCK_NETWORKS = ON;
|
||||
MULTI_LEVEL_CLOCKS = ON;
|
||||
GATED_CLOCKS = ON;
|
||||
RIPPLE_CLOCKS = ON;
|
||||
END;
|
||||
|
||||
SIMULATOR_CONFIGURATION
|
||||
BEGIN
|
||||
BIDIR_PIN = STRONG;
|
||||
END_TIME = 0.0ns;
|
||||
START_TIME = 0.0ns;
|
||||
GLITCH_TIME = 0.0ns;
|
||||
GLITCH = OFF;
|
||||
OSCILLATION_TIME = 0.0ns;
|
||||
OSCILLATION = OFF;
|
||||
CHECK_OUTPUTS = OFF;
|
||||
SETUP_HOLD = OFF;
|
||||
USE_DEVICE = OFF;
|
||||
END;
|
||||
|
||||
TIMING_ANALYZER_CONFIGURATION
|
||||
BEGIN
|
||||
CUT_OFF_RAM_REGISTERED_WE_PATHS = OFF;
|
||||
LIST_PATH_FREQUENCY = 10MHz;
|
||||
LIST_PATH_COUNT = 10;
|
||||
REGISTERED_PERFORMANCE_OPTIONS = NUMBER_OF_PATHS;
|
||||
INCLUDE_PATHS_LESS_THAN_VALUE = 214.7483647ms;
|
||||
INCLUDE_PATHS_LESS_THAN = OFF;
|
||||
INCLUDE_PATHS_GREATER_THAN_VALUE = 0.0ns;
|
||||
INCLUDE_PATHS_GREATER_THAN = OFF;
|
||||
DELAY_MATRIX_OPTIONS = SHOW_ALL_PATHS;
|
||||
CELL_WIDTH = 18;
|
||||
LIST_ONLY_LONGEST_PATH = ON;
|
||||
CUT_OFF_CLEAR_AND_PRESET_PATHS = ON;
|
||||
CUT_OFF_IO_PIN_FEEDBACK = ON;
|
||||
AUTO_RECALCULATE = OFF;
|
||||
ANALYSIS_MODE = DELAY_MATRIX;
|
||||
END;
|
||||
|
||||
OTHER_CONFIGURATION
|
||||
BEGIN
|
||||
LAST_MAXPLUS2_VERSION = 10.0;
|
||||
LOCAL_INTERCONNECT_PER_LAB_PERCENT = 100;
|
||||
ROW_PINS_LCELL_INSERT = ON;
|
||||
CARRY_OUT_PINS_LCELL_INSERT = OFF;
|
||||
NORMAL_LCELL_INSERT = ON;
|
||||
EXPLICIT_FAMILY = 1;
|
||||
FLEX_10K_52_COLUMNS = 40;
|
||||
DEFAULT_9K_EXP_PER_LCELL = 1/2;
|
||||
LCELLS_PER_ROW_PERCENT = 100;
|
||||
FAN_IN_PER_LCELL_PERCENT = 100;
|
||||
EXP_PER_LCELL_PERCENT = 100;
|
||||
ROW_PINS_PERCENT = 50;
|
||||
ORIGINAL_MAXPLUS2_VERSION = 8.0;
|
||||
COMPILER_DATA = "1,1,0,1,0,0,0,1,1,1,1,0,1,1,1";
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.MAX7000
|
||||
BEGIN
|
||||
TURBO_BIT = ON;
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE NORMAL.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = ON;
|
||||
REFACTORIZATION = ON;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = ON;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.MAX7000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = ON;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = ON;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE FAST.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = ON;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = ON;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = ON;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = FULL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = AUTO;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = AUTO;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX5000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.MAX7000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.CLASSIC
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = ON;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = ON;
|
||||
SOFT_BUFFER_INSERTION = OFF;
|
||||
FAST_IO = OFF;
|
||||
IGNORE_SOFT_BUFFERS = OFF;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = ON;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = -1;
|
||||
CARRY_CHAIN = IGNORE;
|
||||
CASCADE_CHAIN_LENGTH = -1;
|
||||
CASCADE_CHAIN = IGNORE;
|
||||
END;
|
||||
|
||||
DEFINE_LOGIC_SYNTHESIS_STYLE WYSIWYG.FLEX8000
|
||||
BEGIN
|
||||
REGISTER_OPTIMIZATION = OFF;
|
||||
USE_LPM_FOR_AHDL_OPERATORS = OFF;
|
||||
RESYNTHESIZE_NETWORK = OFF;
|
||||
MULTI_LEVEL_FACTORING = OFF;
|
||||
SUBFACTOR_EXTRACTION = OFF;
|
||||
REFACTORIZATION = OFF;
|
||||
NOT_GATE_PUSH_BACK = ON;
|
||||
DUPLICATE_LOGIC_EXTRACTION = OFF;
|
||||
REDUCE_LOGIC = OFF;
|
||||
DECOMPOSE_GATES = OFF;
|
||||
SOFT_BUFFER_INSERTION = ON;
|
||||
IGNORE_SOFT_BUFFERS = ON;
|
||||
PARALLEL_EXPANDERS = OFF;
|
||||
TURBO_BIT = OFF;
|
||||
XOR_SYNTHESIS = OFF;
|
||||
SLOW_SLEW_RATE = OFF;
|
||||
MINIMIZATION = PARTIAL;
|
||||
CARRY_CHAIN_LENGTH = 32;
|
||||
CARRY_CHAIN = MANUAL;
|
||||
CASCADE_CHAIN_LENGTH = 2;
|
||||
CASCADE_CHAIN = MANUAL;
|
||||
END;
|
||||
|
233
fw/src/max/SP047032.TDF
Normal file
@ -0,0 +1,233 @@
|
||||
TITLE "SINC_controller";
|
||||
|
||||
Constant HDD_TYPE = 1;
|
||||
|
||||
SUBDESIGN SP047032
|
||||
(
|
||||
EPM_RES : INPUT;
|
||||
HD_WE[2..1] : OUTPUT;
|
||||
HD_OE[2..1] : OUTPUT;
|
||||
HD_CS[2..1] : OUTPUT;
|
||||
HD_CSS[2..1]: OUTPUT;
|
||||
|
||||
CLK_WG : OUTPUT;
|
||||
RDATA : INPUT;
|
||||
QDAT : OUTPUT;
|
||||
RDAT : OUTPUT;
|
||||
|
||||
D0 : INPUT;
|
||||
MA0 : INPUT;
|
||||
STE : INPUT;
|
||||
WSTB,RSTB : INPUT;
|
||||
|
||||
/WR : INPUT;
|
||||
/RD : INPUT;
|
||||
HDD_CS : INPUT;
|
||||
|
||||
/MR,/IO : INPUT;
|
||||
CLKZZ : OUTPUT;
|
||||
|
||||
/RTSB,/DTRB : INPUT;
|
||||
|
||||
10K_D0 : OUTPUT;
|
||||
10K_CLK : OUTPUT;
|
||||
/CONFIG : OUTPUT;
|
||||
CNF_ON : INPUT;
|
||||
TG42_OUT : OUTPUT;
|
||||
TG42_IN : INPUT;
|
||||
|
||||
CLK_PRC : OUTPUT;
|
||||
|
||||
MA7 : INPUT;
|
||||
|
||||
-- /WRH : INPUT;
|
||||
/WRH : OUTPUT;
|
||||
|
||||
-- /RDH : OUTPUT; -> NA HD_CS1
|
||||
|
||||
)
|
||||
VARIABLE
|
||||
|
||||
CT[2..0] : DFF;
|
||||
CLKZZ1 : NODE;
|
||||
STWG[2..0] : DFF;
|
||||
WGR[4..0] : DFF;
|
||||
CT_WG : NODE;
|
||||
CT_WG1 : NODE;
|
||||
TB_WG : NODE;
|
||||
CODE[4..0] : DFF;
|
||||
TURBING : NODE;
|
||||
RDAT_X : NODE;
|
||||
HD_CS_CLK : NODE;
|
||||
MXX : NODE;
|
||||
|
||||
BEGIN
|
||||
|
||||
-- ====== Oscillator ==========
|
||||
TG42_OUT = EXP(TG42_IN);
|
||||
-- TG42_OUT = !(TG42_IN);
|
||||
|
||||
-- tG42_OUT = LCELL(EXP(TG42_IN));
|
||||
-- ============================
|
||||
|
||||
-- ====== FLEX Loading ========
|
||||
|
||||
10K_CLK = LCELL((/MR or /WR or CNF_ON) &
|
||||
-- (/IO or /WR or HDD_CS or !CNF_ON) &
|
||||
(/MR or /RD or HDD_CS or !CNF_ON));
|
||||
CODE[].clk = 10K_CLK;
|
||||
CODE[].clrn = /CONFIG & (/IO or /RD or HDD_CS);
|
||||
|
||||
IF !CNF_ON THEN
|
||||
CODE[].d = (CODE[3..0],(CODE2 xor 10K_D0));
|
||||
ELSE
|
||||
CODE[].d = (CODE[3..0],!CODE0);
|
||||
END IF;
|
||||
10K_D0 = LCELL(CODE4 xor D0);
|
||||
|
||||
-- ============================
|
||||
|
||||
-- ======= CP FRQ =============
|
||||
|
||||
CT[].clk = (TG42_IN xor !CT1);
|
||||
CT[].d = CT[] + 1;
|
||||
|
||||
-- IF CT[] == 2 THEN
|
||||
-- CT[].d = GND;
|
||||
-- ELSE
|
||||
-- CT[].d = CT[] + 1;
|
||||
-- END IF;
|
||||
|
||||
CLKZZ = TRI(CT1,!CNF_ON);
|
||||
|
||||
-- ============================
|
||||
|
||||
-- ======== FDD controller ==================
|
||||
|
||||
TURBING = EXP(EXP(TURBING & !WSTB & !RSTB) & !STE & !/DTRB);
|
||||
-- TURBING = GND;
|
||||
-- TB_WG = /DTRB or TURBING;
|
||||
TB_WG = /DTRB;
|
||||
|
||||
-- CT_WG = TFF(VCC,(CT1 xor (CT_WG & (/DTRB or TURBING))),,);
|
||||
CT_WG = TFF(VCC,(CT1 xor (CT_WG & TURBING)),,);
|
||||
|
||||
CT_WG1 = TFF(VCC,(CT1 xor (CT_WG1 & /DTRB)),,);
|
||||
-- STWG[].clk = LCELL(CT_WG xor STWG2);
|
||||
|
||||
STWG[].clk = (CT_WG xor STWG2);
|
||||
STWG[].d = STWG[] + 1;
|
||||
CLK_WG = STWG2;
|
||||
|
||||
CLK_PRC = STWG0;
|
||||
-- CLK_PRC = STWG1;
|
||||
|
||||
WGR[].clk = CT_WG1;
|
||||
IF !RDAT THEN
|
||||
TABLE WGR[3..0] => WGR[3..0].d;
|
||||
0 => 4; 1 => 5; 2 => 4; 3 => 5;
|
||||
4 => 6; 5 => 7; 6 => 8; 7 => 8;
|
||||
8 => 9; 9 => 9; 10 => 10; 11 => 11;
|
||||
12 => 12; 13 => 13; 14 => 14; 15 => 15;
|
||||
END TABLE;
|
||||
WGR4.d = WGR4;
|
||||
|
||||
-- IF WGR[3..0] == 0 THEN
|
||||
-- WGR[3..0].d = 3;
|
||||
-- WGR4.d = WGR4;
|
||||
-- ELSE
|
||||
-- WGR[].d = WGR[] + 1;
|
||||
-- END IF;
|
||||
ELSE
|
||||
IF WGR[3..0] == 0 THEN
|
||||
WGR[3..0].d = 3;
|
||||
WGR4.d = WGR4;
|
||||
ELSE
|
||||
WGR[].d = WGR[] + 1;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
QDAT = WGR4;
|
||||
-- RDAT_X = DFF(RDATA,CT_WG1,,);
|
||||
RDAT_X = EXP(EXP(RDAT_X & EXP(!RDATA & !CT_WG1)) & EXP(RDATA & !CT_WG1));
|
||||
RDAT = DFF((RDAT_X or !DFF(RDAT_X,CT_WG1,,)),CT_WG1,,);
|
||||
|
||||
-- ==============================================
|
||||
|
||||
-- ========= HDD Controller =========
|
||||
|
||||
IF HDD_TYPE == 0 THEN
|
||||
|
||||
MXX = CODE0;
|
||||
|
||||
HD_CS2 = LCELL(HDD_CS or EXP(!HDD_CS));
|
||||
|
||||
HD_CS_CLK = HD_CS2 or EXP(EXP(EXP(EXP(EXP(!HD_CS2)))));
|
||||
|
||||
HD_CSS1 = HDD_CS or MA7;
|
||||
HD_CSS2 = HDD_CS or !MA7;
|
||||
|
||||
|
||||
HD_CS1 = (/RD or MA0 or HD_CS_CLK or /IO) &
|
||||
(/RD or CODE0 or HDD_CS or /MR) ; % /RDH %
|
||||
|
||||
/WRH = (/WR or !MA0 or HD_CS_CLK or /IO); % /WRH %
|
||||
|
||||
|
||||
HD_OE1 = (HDD_CS or /RD or !MA0 or /IO) &
|
||||
(HDD_CS or /RD or !CODE0 or /MR);
|
||||
|
||||
HD_WE1 = HDD_CS or /RD or (/IO & /MR);
|
||||
|
||||
|
||||
HD_OE2 = HDD_CS or /WR or !MA0;
|
||||
|
||||
|
||||
HD_WE2 = HDD_CS or /WR or MA0 or /IO;
|
||||
|
||||
-- ======= RECONFIG =========
|
||||
|
||||
/CONFIG = LCELL(EPM_RES & (HDD_CS or /MR or /WR));
|
||||
|
||||
ELSE
|
||||
|
||||
MXX = CODE0;
|
||||
|
||||
HD_CS2 = LCELL(HDD_CS or EXP(!HDD_CS) or /WRH);
|
||||
|
||||
HD_CS_CLK = HDD_CS or EXP(EXP(EXP(EXP(EXP(!HDD_CS)))));
|
||||
|
||||
HD_CSS1 = HDD_CS or MA7;
|
||||
HD_CSS2 = HDD_CS or !MA7;
|
||||
|
||||
HD_CS1 = HDD_CS or /WR;
|
||||
|
||||
HD_OE1 = (HD_CS_CLK or /RD or !MA0 or /IO) &
|
||||
(HD_CS_CLK or /WR or !/WRH or !MA0 or /IO) &
|
||||
(HDD_CS or /RD or !CODE0 or /MR);
|
||||
|
||||
-- HD_WE1 = (HDD_CS or (/RD & /WR) or /IO);
|
||||
|
||||
HD_WE1 = DFF(GND,!HDD_CS,,!(/RD & /WR));
|
||||
|
||||
-- HD_OE1 = (HDD_CS or /RD or !MA0) or (HDD_CS or /RD or );
|
||||
|
||||
-- HD_WE1 = (HDD_CS or /RD or MA0 or /IO);
|
||||
|
||||
HD_WE2 = (/WR or !MA0 or HD_CS_CLK or /IO); % /WRH %
|
||||
|
||||
HD_OE2 = (/RD or MA0 or HD_CS_CLK or /IO) &
|
||||
(/RD or CODE0 or HDD_CS or /MR) ; % /RDH %
|
||||
|
||||
|
||||
/WRH = DFF((/WRH or !MA0),(/IO or /WR or HDD_CS),(/IO or /RD or HDD_CS),);
|
||||
|
||||
-- ======= RECONFIG =========
|
||||
|
||||
/CONFIG = LCELL(EPM_RES & (HDD_CS or /MR or MA7 or /WR));
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
END;
|
||||
|
BIN
fw/src/max/sp037032.pof
Normal file
910
fw/src/max/sp037032.rpt
Normal file
@ -0,0 +1,910 @@
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
|
||||
MAX+plus II Compiler Report File
|
||||
Version 10.0 9/14/2000
|
||||
Compiled: 08/05/2024 18:38:47
|
||||
|
||||
Copyright (C) 1988-2000 Altera Corporation
|
||||
Any megafunction design, and related net list (encrypted or decrypted),
|
||||
support information, device programming or simulation file, and any other
|
||||
associated documentation or information provided by Altera or a partner
|
||||
under Altera's Megafunction Partnership Program may be used only to
|
||||
program PLD devices (but not masked PLD devices) from Altera. Any other
|
||||
use of such megafunction design, net list, support information, device
|
||||
programming or simulation file, or any other related documentation or
|
||||
information is prohibited for any other purpose, including, but not
|
||||
limited to modification, reverse engineering, de-compiling, or use with
|
||||
any other silicon devices, unless such use is explicitly licensed under
|
||||
a separate agreement with Altera or a megafunction partner. Title to
|
||||
the intellectual property, including patents, copyrights, trademarks,
|
||||
trade secrets, or maskworks, embodied in any such megafunction design,
|
||||
net list, support information, device programming or simulation file, or
|
||||
any other related documentation or information provided by Altera or a
|
||||
megafunction partner, remains with Altera, the megafunction partner, or
|
||||
their respective licensors. No other licenses, including any licenses
|
||||
needed under any third party's intellectual property, are provided herein.
|
||||
|
||||
|
||||
|
||||
***** Project compilation was successful
|
||||
|
||||
|
||||
SINC_controller
|
||||
|
||||
|
||||
** DEVICE SUMMARY **
|
||||
|
||||
Chip/ Input Output Bidir Shareable
|
||||
POF Device Pins Pins Pins LCs Expanders % Utilized
|
||||
|
||||
sp037032 EPM7064SLC44-10 16 16 0 35 40 54 %
|
||||
|
||||
User Pins: 16 16 0
|
||||
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
|
||||
** PROJECT COMPILATION MESSAGES **
|
||||
|
||||
Warning: Line 63, File c:\prj\sprinter\firmware\97\max\sp037032.tdf:
|
||||
Symbolic name "MXX" was declared but never used
|
||||
Warning: Line 53, File c:\prj\sprinter\firmware\97\max\sp037032.tdf:
|
||||
Symbolic name "CLKZZ1" was declared but never used
|
||||
Warning: Line 58, File c:\prj\sprinter\firmware\97\max\sp037032.tdf:
|
||||
Symbolic name "TB_WG" was declared but never used
|
||||
Warning: Project has user pin or logic cell assignments, but has never been compiled before. For best fitting results, let the Compiler choose the first set of assignments instead.
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
|
||||
** PIN/LOCATION/CHIP ASSIGNMENTS **
|
||||
|
||||
Actual
|
||||
User Assignments
|
||||
Assignments (if different) Node Name
|
||||
|
||||
sp037032@27 CLK_PRC
|
||||
sp037032@33 CLK_WG
|
||||
sp037032@31 CLKZZ
|
||||
sp037032@44 CNF_ON
|
||||
sp037032@40 /CONFIG
|
||||
sp037032@34 /DTRB
|
||||
sp037032@18 D0
|
||||
sp037032@1 EPM_RES
|
||||
sp037032@11 HD_CSS1
|
||||
sp037032@12 HD_CSS2
|
||||
sp037032@9 HD_CS1
|
||||
sp037032@37 HD_CS2
|
||||
sp037032@26 HDD_CS
|
||||
sp037032@8 HD_OE1
|
||||
sp037032@5 HD_OE2
|
||||
sp037032@6 HD_WE1
|
||||
sp037032@4 HD_WE2
|
||||
sp037032@29 /IO
|
||||
sp037032@39 MA0
|
||||
sp037032@36 MA7
|
||||
sp037032@28 /MR
|
||||
sp037032@14 QDAT
|
||||
sp037032@2 /RD
|
||||
sp037032@16 RDAT
|
||||
sp037032@17 RDATA
|
||||
sp037032@21 RSTB
|
||||
sp037032@19 STE
|
||||
sp037032@43 TG42_IN
|
||||
sp037032@41 TG42_OUT
|
||||
sp037032@25 /WR
|
||||
sp037032@24 /WRH
|
||||
sp037032@20 WSTB
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
***** Logic for device 'sp037032' compiled without errors.
|
||||
|
||||
|
||||
|
||||
|
||||
Device: EPM7064SLC44-10
|
||||
|
||||
Device Options:
|
||||
Turbo Bit = ON
|
||||
Security Bit = ON
|
||||
Enable JTAG Support = ON
|
||||
User Code = ffff
|
||||
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** ERROR SUMMARY **
|
||||
|
||||
Info: Chip 'sp037032' in device 'EPM7064SLC44-10' has less than 20% of pins available for future logic changes -- if your project is likely to change, Altera recommends using a larger device
|
||||
T
|
||||
E T G /
|
||||
H H H P C G 4 C
|
||||
D D D M N 4 2 O
|
||||
_ _ _ _ F 2 _ N
|
||||
W O W V / R _ _ G O F
|
||||
E E E C R E O I N U I
|
||||
1 2 2 C D S N N D T G
|
||||
-----------------------------------_
|
||||
/ 6 5 4 3 2 1 44 43 42 41 40 |
|
||||
#TDI | 7 39 | MA0
|
||||
HD_OE1 | 8 38 | #TDO
|
||||
HD_CS1 | 9 37 | HD_CS2
|
||||
GND | 10 36 | MA7
|
||||
HD_CSS1 | 11 35 | VCC
|
||||
HD_CSS2 | 12 EPM7064SLC44-10 34 | /DTRB
|
||||
#TMS | 13 33 | CLK_WG
|
||||
QDAT | 14 32 | #TCK
|
||||
VCC | 15 31 | CLKZZ
|
||||
RDAT | 16 30 | GND
|
||||
RDATA | 17 29 | /IO
|
||||
|_ 18 19 20 21 22 23 24 25 26 27 28 _|
|
||||
------------------------------------
|
||||
D S W R G V / / H C /
|
||||
0 T S S N C W W D L M
|
||||
E T T D C R R D K R
|
||||
B B H _ _
|
||||
C P
|
||||
S R
|
||||
C
|
||||
|
||||
|
||||
|
||||
N.C. = No Connect. This pin has no internal connection to the device.
|
||||
VCC = Dedicated power pin, which MUST be connected to VCC.
|
||||
GND = Dedicated ground pin or unused dedicated input, which MUST be connected to GND.
|
||||
RESERVED = Unused I/O pin, which MUST be left unconnected.
|
||||
|
||||
^ = Dedicated configuration pin.
|
||||
+ = Reserved configuration pin, which is tri-stated during user mode.
|
||||
* = Reserved configuration pin, which drives out in user mode.
|
||||
PDn = Power Down pin.
|
||||
@ = Special-purpose pin.
|
||||
# = JTAG Boundary-Scan Testing/In-System Programming or Configuration Pin. The JTAG inputs TMS and TDI should be tied to VCC and TCK should be tied to GND when not in use.
|
||||
& = JTAG pin used for I/O. When used as user I/O, JTAG pins must be kept stable before and during configuration. JTAG pin stability prevents accidental loading of JTAG instructions.
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** RESOURCE USAGE **
|
||||
|
||||
Shareable External
|
||||
Logic Array Block Logic Cells I/O Pins Expanders Interconnect
|
||||
|
||||
A: LC1 - LC16 16/16(100%) 8/ 8(100%) 13/16( 81%) 22/36( 61%)
|
||||
B: LC17 - LC32 8/16( 50%) 8/ 8(100%) 16/16(100%) 15/36( 41%)
|
||||
C: LC33 - LC48 6/16( 37%) 8/ 8(100%) 13/16( 81%) 16/36( 44%)
|
||||
D: LC49 - LC64 5/16( 31%) 8/ 8(100%) 3/16( 18%) 11/36( 30%)
|
||||
|
||||
|
||||
Total dedicated input pins used: 4/4 (100%)
|
||||
Total I/O pins used: 32/32 (100%)
|
||||
Total logic cells used: 35/64 ( 54%)
|
||||
Total shareable expanders used: 40/64 ( 62%)
|
||||
Total Turbo logic cells used: 23/64 ( 35%)
|
||||
Total shareable expanders not available (n/a): 5/64 ( 7%)
|
||||
Average fan-in: 4.65
|
||||
Total fan-in: 163
|
||||
|
||||
Total input pins required: 16
|
||||
Total fast input logic cells required: 0
|
||||
Total output pins required: 16
|
||||
Total bidirectional pins required: 0
|
||||
Total reserved pins required 4
|
||||
Total logic cells required: 35
|
||||
Total flipflops required: 20
|
||||
Total product terms required: 126
|
||||
Total logic cells lending parallel expanders: 0
|
||||
Total shareable expanders in database: 38
|
||||
|
||||
Synthesized logic cells: 1/ 64 ( 1%)
|
||||
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** INPUTS **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
44 - - INPUT 0 0 0 0 0 2 8 CNF_ON
|
||||
34 (51) (D) INPUT 0 0 0 0 0 0 2 /DTRB
|
||||
18 (21) (B) INPUT 0 0 0 0 0 0 1 D0
|
||||
1 - - INPUT 0 0 0 0 0 1 0 EPM_RES
|
||||
26 (36) (C) INPUT 0 0 0 0 0 10 1 HDD_CS
|
||||
29 (41) (C) INPUT 0 0 0 0 0 5 5 /IO
|
||||
39 (57) (D) INPUT 0 0 0 0 0 4 0 MA0
|
||||
36 (52) (D) INPUT 0 0 0 0 0 3 0 MA7
|
||||
28 (40) (C) INPUT 0 0 0 0 0 3 1 /MR
|
||||
2 - - INPUT 0 0 0 0 0 4 6 /RD
|
||||
17 (24) (B) INPUT 0 0 0 0 0 0 2 RDATA
|
||||
21 (17) (B) INPUT 0 0 0 0 0 0 1 RSTB
|
||||
19 (20) (B) INPUT 0 0 0 0 0 0 1 STE
|
||||
43 - - INPUT 0 0 0 0 0 2 1 TG42_IN
|
||||
25 (35) (C) INPUT 0 0 0 0 0 6 1 /WR
|
||||
20 (19) (B) INPUT 0 0 0 0 0 0 1 WSTB
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
/ = Slow slew-rate output
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** OUTPUTS **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
27 37 C FF t 2 2 0 0 2 1 1 CLK_PRC
|
||||
33 49 D FF t 2 2 0 0 4 2 1 CLK_WG
|
||||
31 46 C TRI/FF t 2 2 0 1 2 1 3 CLKZZ
|
||||
40 62 D OUTPUT 0 0 0 5 0 0 5 /CONFIG
|
||||
11 3 A OUTPUT 0 0 0 2 0 0 0 HD_CSS1
|
||||
12 1 A OUTPUT 0 0 0 2 0 0 0 HD_CSS2
|
||||
9 4 A OUTPUT 0 0 0 2 0 0 0 HD_CS1
|
||||
37 53 D OUTPUT 0 0 0 1 1 0 0 HD_CS2
|
||||
8 5 A OUTPUT 4 4 0 6 2 0 0 HD_OE1
|
||||
5 14 A OUTPUT 4 4 0 5 1 0 0 HD_OE2
|
||||
6 11 A OUTPUT 0 0 0 4 0 0 0 HD_WE1
|
||||
4 16 A OUTPUT 4 4 0 4 0 0 0 HD_WE2
|
||||
14 30 B OUTPUT t 0 0 0 1 2 0 0 QDAT
|
||||
16 25 B OUTPUT t 0 0 0 1 2 0 0 RDAT
|
||||
41 64 D OUTPUT t 1 0 0 1 0 0 0 TG42_OUT
|
||||
24 33 C FF 1 0 0 5 1 3 0 /WRH
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
/ = Slow slew-rate output
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** BURIED LOGIC **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
- 12 A DFFE t 3 2 1 3 5 2 2 CODE0
|
||||
- 9 A DFFE t 2 2 0 2 3 0 1 CODE1
|
||||
(7) 8 A DFFE t 2 2 0 2 3 0 2 CODE2
|
||||
- 13 A DFFE t 2 2 0 2 3 0 1 CODE3
|
||||
- 15 A DFFE t 2 2 0 2 3 0 1 CODE4
|
||||
(26) 36 C TFFE t 5 0 0 4 2 2 2 CT_WG
|
||||
- 34 C TFFE t 3 0 0 1 2 0 8 CT_WG1
|
||||
(25) 35 C TFFE t 2 2 0 1 1 1 0 CT0
|
||||
(36) 52 D TFFE t 2 2 0 0 3 1 0 STWG1
|
||||
- 7 A TFFE t 1 0 1 1 7 0 5 WGR0
|
||||
(20) 19 B DFFE t 5 1 1 1 8 0 6 WGR1
|
||||
- 22 B TFFE t 8 1 0 1 7 0 6 WGR2
|
||||
- 6 A DFFE t 4 0 1 1 7 0 6 WGR3
|
||||
(21) 17 B TFFE t 0 0 0 1 7 1 0 WGR4
|
||||
- 2 A LCELL 0 0 0 5 0 1 5 10K_CLK
|
||||
- 18 B LCELL 0 0 0 1 1 1 7 10K_D0
|
||||
- 23 B DFFE t 4 4 0 1 2 1 6 :97
|
||||
(17) 24 B DFFE t 4 4 0 1 1 0 1 :98
|
||||
- 10 A SOFT s t 1 0 1 1 5 0 1 ~389~1
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
/ = Slow slew-rate output
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'A':
|
||||
|
||||
Logic cells placed in LAB 'A'
|
||||
+------------------------------- LC12 CODE0
|
||||
| +----------------------------- LC9 CODE1
|
||||
| | +--------------------------- LC8 CODE2
|
||||
| | | +------------------------- LC13 CODE3
|
||||
| | | | +----------------------- LC15 CODE4
|
||||
| | | | | +--------------------- LC3 HD_CSS1
|
||||
| | | | | | +------------------- LC1 HD_CSS2
|
||||
| | | | | | | +----------------- LC4 HD_CS1
|
||||
| | | | | | | | +--------------- LC5 HD_OE1
|
||||
| | | | | | | | | +------------- LC14 HD_OE2
|
||||
| | | | | | | | | | +----------- LC11 HD_WE1
|
||||
| | | | | | | | | | | +--------- LC16 HD_WE2
|
||||
| | | | | | | | | | | | +------- LC7 WGR0
|
||||
| | | | | | | | | | | | | +----- LC6 WGR3
|
||||
| | | | | | | | | | | | | | +--- LC2 10K_CLK
|
||||
| | | | | | | | | | | | | | | +- LC10 ~389~1
|
||||
| | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | Other LABs fed by signals
|
||||
| | | | | | | | | | | | | | | | that feed LAB 'A'
|
||||
LC | | | | | | | | | | | | | | | | | A B C D | Logic cells that feed LAB 'A':
|
||||
LC12 -> * * - - - - - - * * - - - - - - | * - - - | <-- CODE0
|
||||
LC9 -> - - * - - - - - - - - - - - - - | * - - - | <-- CODE1
|
||||
LC8 -> * - - * - - - - - - - - - - - - | * - - - | <-- CODE2
|
||||
LC13 -> - - - - * - - - - - - - - - - - | * - - - | <-- CODE3
|
||||
LC7 -> - - - - - - - - - - - - * * - - | * * - - | <-- WGR0
|
||||
LC6 -> - - - - - - - - - - - - * * - * | * * - - | <-- WGR3
|
||||
LC2 -> * * * * * - - - - - - - - - - - | * * - - | <-- 10K_CLK
|
||||
|
||||
Pin
|
||||
44 -> * - - - - - - - - - - - * * * * | * * - - | <-- CNF_ON
|
||||
1 -> - - - - - - - - - - - - - - - - | - - - * | <-- EPM_RES
|
||||
26 -> - - - - - * * * * * * * - - * - | * - * * | <-- HDD_CS
|
||||
29 -> * * * * * - - - * * * * - - - - | * - * - | <-- /IO
|
||||
39 -> - - - - - - - - * * - * - - - - | * - * - | <-- MA0
|
||||
36 -> - - - - - * * - - - - - - - - - | * - - * | <-- MA7
|
||||
28 -> - - - - - - - - * * - - - - * - | * - - * | <-- /MR
|
||||
2 -> * * * * * - - - * * * - - - * - | * - * - | <-- /RD
|
||||
43 -> - - - - - - - - - - - - - - - - | - - * * | <-- TG42_IN
|
||||
25 -> - - - - - - - * * - * * - - * - | * - * * | <-- /WR
|
||||
LC62 -> * * * * * - - - - - - - - - - - | * - - - | <-- /CONFIG
|
||||
LC34 -> - - - - - - - - - - - - * * - - | * * * - | <-- CT_WG1
|
||||
LC19 -> - - - - - - - - - - - - * * - * | * * - - | <-- WGR1
|
||||
LC22 -> - - - - - - - - - - - - * * - * | * * - - | <-- WGR2
|
||||
LC33 -> - - - - - - - - * - - - - - - - | * - * * | <-- /WRH
|
||||
LC18 -> * - - - - - - - - - - - * * - * | * * - - | <-- 10K_D0
|
||||
LC23 -> - - - - - - - - - - - - * * - * | * * - - | <-- :97
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'B':
|
||||
|
||||
Logic cells placed in LAB 'B'
|
||||
+--------------- LC30 QDAT
|
||||
| +------------- LC25 RDAT
|
||||
| | +----------- LC19 WGR1
|
||||
| | | +--------- LC22 WGR2
|
||||
| | | | +------- LC17 WGR4
|
||||
| | | | | +----- LC18 10K_D0
|
||||
| | | | | | +--- LC23 :97
|
||||
| | | | | | | +- LC24 :98
|
||||
| | | | | | | |
|
||||
| | | | | | | | Other LABs fed by signals
|
||||
| | | | | | | | that feed LAB 'B'
|
||||
LC | | | | | | | | | A B C D | Logic cells that feed LAB 'B':
|
||||
LC19 -> - - * * * - - - | * * - - | <-- WGR1
|
||||
LC22 -> - - * * * - - - | * * - - | <-- WGR2
|
||||
LC17 -> * - - - * - - - | - * - - | <-- WGR4
|
||||
LC18 -> - * * * * - - - | * * - - | <-- 10K_D0
|
||||
LC23 -> - * * * * - - - | * * - - | <-- :97
|
||||
LC24 -> - - - - - - * - | - * - - | <-- :98
|
||||
|
||||
Pin
|
||||
44 -> * * * * * - - - | * * - - | <-- CNF_ON
|
||||
18 -> - - - - - * - - | - * - - | <-- D0
|
||||
1 -> - - - - - - - - | - - - * | <-- EPM_RES
|
||||
2 -> - - - - - - - - | * - * - | <-- /RD
|
||||
17 -> - - - - - - * * | - * - - | <-- RDATA
|
||||
43 -> - - - - - - - - | - - * * | <-- TG42_IN
|
||||
LC15 -> - - - - - * - - | - * - - | <-- CODE4
|
||||
LC34 -> - - * * * - * * | * * * - | <-- CT_WG1
|
||||
LC7 -> - - * * * - - - | * * - - | <-- WGR0
|
||||
LC6 -> - - * * * - - - | * * - - | <-- WGR3
|
||||
LC2 -> * - - - - - - - | * * - - | <-- 10K_CLK
|
||||
LC10 -> - - * - - - - - | - * - - | <-- ~389~1
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'C':
|
||||
|
||||
Logic cells placed in LAB 'C'
|
||||
+----------- LC37 CLK_PRC
|
||||
| +--------- LC46 CLKZZ
|
||||
| | +------- LC36 CT_WG
|
||||
| | | +----- LC34 CT_WG1
|
||||
| | | | +--- LC35 CT0
|
||||
| | | | | +- LC33 /WRH
|
||||
| | | | | |
|
||||
| | | | | | Other LABs fed by signals
|
||||
| | | | | | that feed LAB 'C'
|
||||
LC | | | | | | | A B C D | Logic cells that feed LAB 'C':
|
||||
LC46 -> - * * * * - | - - * - | <-- CLKZZ
|
||||
LC36 -> * - * - - - | - - * * | <-- CT_WG
|
||||
LC34 -> - - - * - - | * * * - | <-- CT_WG1
|
||||
LC35 -> - * - - * - | - - * - | <-- CT0
|
||||
LC33 -> - - - - - * | * - * * | <-- /WRH
|
||||
|
||||
Pin
|
||||
44 -> - - - - - - | * * - - | <-- CNF_ON
|
||||
34 -> - - * * - - | - - * - | <-- /DTRB
|
||||
1 -> - - - - - - | - - - * | <-- EPM_RES
|
||||
26 -> - - - - - * | * - * * | <-- HDD_CS
|
||||
29 -> - - - - - * | * - * - | <-- /IO
|
||||
39 -> - - - - - * | * - * - | <-- MA0
|
||||
2 -> - - - - - * | * - * - | <-- /RD
|
||||
21 -> - - * - - - | - - * - | <-- RSTB
|
||||
19 -> - - * - - - | - - * - | <-- STE
|
||||
43 -> - * - - * - | - - * * | <-- TG42_IN
|
||||
25 -> - - - - - * | * - * * | <-- /WR
|
||||
20 -> - - * - - - | - - * - | <-- WSTB
|
||||
LC49 -> * - - - - - | - - * * | <-- CLK_WG
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'D':
|
||||
|
||||
Logic cells placed in LAB 'D'
|
||||
+--------- LC49 CLK_WG
|
||||
| +------- LC62 /CONFIG
|
||||
| | +----- LC53 HD_CS2
|
||||
| | | +--- LC52 STWG1
|
||||
| | | | +- LC64 TG42_OUT
|
||||
| | | | |
|
||||
| | | | | Other LABs fed by signals
|
||||
| | | | | that feed LAB 'D'
|
||||
LC | | | | | | A B C D | Logic cells that feed LAB 'D':
|
||||
LC49 -> * - - * - | - - * * | <-- CLK_WG
|
||||
LC52 -> * - - * - | - - - * | <-- STWG1
|
||||
|
||||
Pin
|
||||
44 -> - - - - - | * * - - | <-- CNF_ON
|
||||
1 -> - * - - - | - - - * | <-- EPM_RES
|
||||
26 -> - * * - - | * - * * | <-- HDD_CS
|
||||
36 -> - * - - - | * - - * | <-- MA7
|
||||
28 -> - * - - - | * - - * | <-- /MR
|
||||
2 -> - - - - - | * - * - | <-- /RD
|
||||
43 -> - - - - * | - - * * | <-- TG42_IN
|
||||
25 -> - * - - - | * - * * | <-- /WR
|
||||
LC37 -> * - - * - | - - - * | <-- CLK_PRC
|
||||
LC36 -> * - - * - | - - * * | <-- CT_WG
|
||||
LC33 -> - - * - - | * - * * | <-- /WRH
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
sp037032
|
||||
|
||||
** EQUATIONS **
|
||||
|
||||
CNF_ON : INPUT;
|
||||
D0 : INPUT;
|
||||
EPM_RES : INPUT;
|
||||
HDD_CS : INPUT;
|
||||
MA0 : INPUT;
|
||||
MA7 : INPUT;
|
||||
RDATA : INPUT;
|
||||
RSTB : INPUT;
|
||||
STE : INPUT;
|
||||
TG42_IN : INPUT;
|
||||
WSTB : INPUT;
|
||||
/DTRB : INPUT;
|
||||
/IO : INPUT;
|
||||
/MR : INPUT;
|
||||
/RD : INPUT;
|
||||
/WR : INPUT;
|
||||
|
||||
-- Node name is 'CLK_PRC' = 'STWG0' from file "sp037032.tdf" line 54, column 6
|
||||
-- Equation name is 'CLK_PRC', location is LC037, type is output.
|
||||
CLK_PRC = TFFE( VCC, _EQ001, VCC, VCC, VCC);
|
||||
_EQ001 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'CLK_WG' = 'STWG2' from file "sp037032.tdf" line 54, column 6
|
||||
-- Equation name is 'CLK_WG', location is LC049, type is output.
|
||||
CLK_WG = TFFE( _EQ002, _EQ003, VCC, VCC, VCC);
|
||||
_EQ002 = CLK_PRC & STWG1;
|
||||
_EQ003 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'CLKZZ' = 'CT1' from file "sp037032.tdf" line 52, column 4
|
||||
-- Equation name is 'CLKZZ', location is LC046, type is output.
|
||||
CLKZZ = TRI(CT1, !CNF_ON);
|
||||
CT1 = TFFE( CT0, _EQ004, VCC, VCC, VCC);
|
||||
_EQ004 = _X003 & _X004;
|
||||
_X003 = EXP( CT1 & !TG42_IN);
|
||||
_X004 = EXP(!CT1 & TG42_IN);
|
||||
|
||||
-- Node name is 'CODE0' from file "sp037032.tdf" line 59, column 6
|
||||
-- Equation name is 'CODE0', location is LC012, type is buried.
|
||||
CODE0 = DFFE( _EQ005 $ GND, 10K_CLK, !_EQ006, VCC, VCC);
|
||||
_EQ005 = !CNF_ON & CODE2 & !10K_D0
|
||||
# !CNF_ON & !CODE2 & 10K_D0
|
||||
# CNF_ON & !CODE0;
|
||||
_EQ006 = _X005 & _X006;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
|
||||
-- Node name is 'CODE1' from file "sp037032.tdf" line 59, column 6
|
||||
-- Equation name is 'CODE1', location is LC009, type is buried.
|
||||
CODE1 = DFFE( CODE0 $ GND, 10K_CLK, !_EQ007, VCC, VCC);
|
||||
_EQ007 = _X005 & _X006;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
|
||||
-- Node name is 'CODE2' from file "sp037032.tdf" line 59, column 6
|
||||
-- Equation name is 'CODE2', location is LC008, type is buried.
|
||||
CODE2 = DFFE( CODE1 $ GND, 10K_CLK, !_EQ008, VCC, VCC);
|
||||
_EQ008 = _X005 & _X006;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
|
||||
-- Node name is 'CODE3' from file "sp037032.tdf" line 59, column 6
|
||||
-- Equation name is 'CODE3', location is LC013, type is buried.
|
||||
CODE3 = DFFE( CODE2 $ GND, 10K_CLK, !_EQ009, VCC, VCC);
|
||||
_EQ009 = _X005 & _X006;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
|
||||
-- Node name is 'CODE4' from file "sp037032.tdf" line 59, column 6
|
||||
-- Equation name is 'CODE4', location is LC015, type is buried.
|
||||
CODE4 = DFFE( CODE3 $ GND, 10K_CLK, !_EQ010, VCC, VCC);
|
||||
_EQ010 = _X005 & _X006;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
|
||||
-- Node name is 'CT_WG' from file "sp037032.tdf" line 116, column 11
|
||||
-- Equation name is 'CT_WG', location is LC036, type is buried.
|
||||
CT_WG = TFFE( VCC, _EQ011, VCC, VCC, VCC);
|
||||
_EQ011 = _X007 & _X008 & _X009;
|
||||
_X007 = EXP(!CT_WG & !CT1);
|
||||
_X008 = EXP( CT_WG & CT1 & _X010);
|
||||
_X009 = EXP(!CT1 & !/DTRB & !STE & _X011);
|
||||
_X010 = EXP(!/DTRB & !STE & _X011);
|
||||
_X011 = EXP(!RSTB & !WSTB & _X010);
|
||||
|
||||
-- Node name is 'CT_WG1' from file "sp037032.tdf" line 118, column 12
|
||||
-- Equation name is 'CT_WG1', location is LC034, type is buried.
|
||||
CT_WG1 = TFFE( VCC, _EQ012, VCC, VCC, VCC);
|
||||
_EQ012 = _X012 & _X013 & _X014;
|
||||
_X012 = EXP(!CT_WG1 & !CT1);
|
||||
_X013 = EXP( CT_WG1 & CT1 & /DTRB);
|
||||
_X014 = EXP(!CT1 & !/DTRB);
|
||||
|
||||
-- Node name is 'CT0' from file "sp037032.tdf" line 52, column 4
|
||||
-- Equation name is 'CT0', location is LC035, type is buried.
|
||||
CT0 = TFFE( VCC, _EQ013, VCC, VCC, VCC);
|
||||
_EQ013 = _X003 & _X004;
|
||||
_X003 = EXP( CT1 & !TG42_IN);
|
||||
_X004 = EXP(!CT1 & TG42_IN);
|
||||
|
||||
-- Node name is 'HD_CSS1'
|
||||
-- Equation name is 'HD_CSS1', location is LC003, type is output.
|
||||
HD_CSS1 = LCELL( _EQ014 $ VCC);
|
||||
_EQ014 = !HDD_CS & !MA7;
|
||||
|
||||
-- Node name is 'HD_CSS2'
|
||||
-- Equation name is 'HD_CSS2', location is LC001, type is output.
|
||||
HD_CSS2 = LCELL( _EQ015 $ VCC);
|
||||
_EQ015 = !HDD_CS & MA7;
|
||||
|
||||
-- Node name is 'HD_CS1'
|
||||
-- Equation name is 'HD_CS1', location is LC004, type is output.
|
||||
HD_CS1 = LCELL( _EQ016 $ VCC);
|
||||
_EQ016 = !HDD_CS & !/WR;
|
||||
|
||||
-- Node name is 'HD_CS2' = ':107' from file "sp037032.tdf" line 206, column 12
|
||||
-- Equation name is 'HD_CS2', type is output
|
||||
HD_CS2 = LCELL( _EQ017 $ VCC);
|
||||
_EQ017 = !HDD_CS & !/WRH;
|
||||
|
||||
-- Node name is 'HD_OE1'
|
||||
-- Equation name is 'HD_OE1', location is LC005, type is output.
|
||||
HD_OE1 = LCELL( _EQ018 $ VCC);
|
||||
_EQ018 = !HDD_CS & !/IO & MA0 & !/WR & /WRH & _X015
|
||||
# !HDD_CS & !/IO & MA0 & !/RD & _X015
|
||||
# CODE0 & !HDD_CS & !/MR & !/RD;
|
||||
_X015 = EXP( _X016);
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'HD_OE2'
|
||||
-- Equation name is 'HD_OE2', location is LC014, type is output.
|
||||
HD_OE2 = LCELL( _EQ019 $ VCC);
|
||||
_EQ019 = !HDD_CS & !/IO & !MA0 & !/RD & _X015
|
||||
# !CODE0 & !HDD_CS & !/MR & !/RD;
|
||||
_X015 = EXP( _X016);
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'HD_WE1'
|
||||
-- Equation name is 'HD_WE1', location is LC011, type is output.
|
||||
HD_WE1 = LCELL( _EQ020 $ VCC);
|
||||
_EQ020 = !HDD_CS & !/IO & !/WR
|
||||
# !HDD_CS & !/IO & !/RD;
|
||||
|
||||
-- Node name is 'HD_WE2'
|
||||
-- Equation name is 'HD_WE2', location is LC016, type is output.
|
||||
HD_WE2 = LCELL( _EQ021 $ VCC);
|
||||
_EQ021 = !HDD_CS & !/IO & MA0 & !/WR & _X015;
|
||||
_X015 = EXP( _X016);
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'QDAT'
|
||||
-- Equation name is 'QDAT', location is LC030, type is output.
|
||||
QDAT = LCELL( _EQ022 $ GND);
|
||||
_EQ022 = CNF_ON & WGR4
|
||||
# !CNF_ON & 10K_CLK;
|
||||
|
||||
-- Node name is 'RDAT'
|
||||
-- Equation name is 'RDAT', location is LC025, type is output.
|
||||
RDAT = LCELL( _EQ023 $ GND);
|
||||
_EQ023 = CNF_ON & _LC023
|
||||
# !CNF_ON & 10K_D0;
|
||||
|
||||
-- Node name is 'STWG1' from file "sp037032.tdf" line 54, column 6
|
||||
-- Equation name is 'STWG1', location is LC052, type is buried.
|
||||
STWG1 = TFFE( CLK_PRC, _EQ024, VCC, VCC, VCC);
|
||||
_EQ024 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'TG42_OUT'
|
||||
-- Equation name is 'TG42_OUT', location is LC064, type is output.
|
||||
TG42_OUT = LCELL( _EQ025 $ GND);
|
||||
_EQ025 = _X019;
|
||||
_X019 = EXP( TG42_IN);
|
||||
|
||||
-- Node name is 'WGR0' from file "sp037032.tdf" line 55, column 5
|
||||
-- Equation name is 'WGR0', location is LC007, type is buried.
|
||||
WGR0 = TFFE( _EQ026, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ026 = WGR0 & WGR1 & WGR2 & !WGR3
|
||||
# !WGR0 & !WGR1 & !WGR2 & WGR3
|
||||
# CNF_ON & _LC023
|
||||
# !CNF_ON & 10K_D0;
|
||||
|
||||
-- Node name is 'WGR1' from file "sp037032.tdf" line 55, column 5
|
||||
-- Equation name is 'WGR1', location is LC019, type is buried.
|
||||
WGR1 = DFFE( _EQ027 $ _EQ028, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ027 = CNF_ON & !_LC010 & _LC023 & !WGR0 & !WGR1 & WGR2 & _X020 &
|
||||
_X021 & _X022 & _X023
|
||||
# !CNF_ON & !_LC010 & !WGR0 & !WGR1 & WGR2 & _X020 & _X021 &
|
||||
_X022 & _X023 & 10K_D0
|
||||
# CNF_ON & !_LC010 & _LC023 & WGR0 & WGR1 & _X020 & _X021 &
|
||||
_X022 & _X023;
|
||||
_X020 = EXP(!CNF_ON & WGR0 & WGR1 & 10K_D0);
|
||||
_X021 = EXP(!CNF_ON & !WGR1 & !WGR2 & !10K_D0);
|
||||
_X022 = EXP( WGR0 & WGR1 & !WGR3);
|
||||
_X023 = EXP(!WGR0 & !WGR1 & WGR3);
|
||||
_EQ028 = !_LC010 & _X020 & _X021 & _X022 & _X023;
|
||||
_X020 = EXP(!CNF_ON & WGR0 & WGR1 & 10K_D0);
|
||||
_X021 = EXP(!CNF_ON & !WGR1 & !WGR2 & !10K_D0);
|
||||
_X022 = EXP( WGR0 & WGR1 & !WGR3);
|
||||
_X023 = EXP(!WGR0 & !WGR1 & WGR3);
|
||||
|
||||
-- Node name is 'WGR2' from file "sp037032.tdf" line 55, column 5
|
||||
-- Equation name is 'WGR2', location is LC022, type is buried.
|
||||
WGR2 = TFFE(!_EQ029, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ029 = _X020 & _X024 & _X025 & _X026 & _X027 & _X028 & _X029 &
|
||||
_X030;
|
||||
_X020 = EXP(!CNF_ON & WGR0 & WGR1 & 10K_D0);
|
||||
_X024 = EXP(!CNF_ON & WGR1 & WGR2 & !WGR3 & !10K_D0);
|
||||
_X025 = EXP( CNF_ON & !_LC023 & WGR1 & WGR2 & !WGR3);
|
||||
_X026 = EXP( CNF_ON & _LC023 & WGR0 & WGR1);
|
||||
_X027 = EXP( WGR0 & WGR1 & WGR2 & !WGR3);
|
||||
_X028 = EXP( CNF_ON & !_LC023 & !WGR2 & !WGR3);
|
||||
_X029 = EXP(!_LC023 & !WGR2 & !WGR3 & !10K_D0);
|
||||
_X030 = EXP(!CNF_ON & !WGR2 & !WGR3 & !10K_D0);
|
||||
|
||||
-- Node name is 'WGR3' from file "sp037032.tdf" line 55, column 5
|
||||
-- Equation name is 'WGR3', location is LC006, type is buried.
|
||||
WGR3 = DFFE( _EQ030 $ _EQ031, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ030 = CNF_ON & _LC023 & WGR0 & WGR1 & WGR2 & WGR3 & _X031 &
|
||||
_X032 & _X033
|
||||
# !CNF_ON & WGR0 & WGR1 & WGR2 & WGR3 & _X031 & _X032 & _X033 &
|
||||
10K_D0
|
||||
# CNF_ON & _LC023 & !WGR0 & !WGR3 & _X031 & _X032 & _X033;
|
||||
_X031 = EXP(!WGR1 & !WGR3);
|
||||
_X032 = EXP(!CNF_ON & !WGR0 & !WGR3 & 10K_D0);
|
||||
_X033 = EXP(!WGR2 & !WGR3);
|
||||
_EQ031 = _X031 & _X032 & _X033;
|
||||
_X031 = EXP(!WGR1 & !WGR3);
|
||||
_X032 = EXP(!CNF_ON & !WGR0 & !WGR3 & 10K_D0);
|
||||
_X033 = EXP(!WGR2 & !WGR3);
|
||||
|
||||
-- Node name is 'WGR4' from file "sp037032.tdf" line 55, column 5
|
||||
-- Equation name is 'WGR4', location is LC017, type is buried.
|
||||
WGR4 = TFFE( _EQ032, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ032 = CNF_ON & _LC023 & WGR0 & WGR1 & WGR2 & WGR3
|
||||
# !CNF_ON & WGR0 & WGR1 & WGR2 & WGR3 & 10K_D0;
|
||||
|
||||
-- Node name is '10K_CLK' from file "sp037032.tdf" line 77, column 13
|
||||
-- Equation name is '10K_CLK', location is LC002, type is buried.
|
||||
10K_CLK = LCELL( _EQ033 $ VCC);
|
||||
_EQ033 = CNF_ON & !HDD_CS & !/MR & !/RD
|
||||
# !CNF_ON & !/MR & !/WR;
|
||||
|
||||
-- Node name is '10K_D0' from file "sp037032.tdf" line 89, column 12
|
||||
-- Equation name is '10K_D0', location is LC018, type is buried.
|
||||
10K_D0 = LCELL( CODE4 $ D0);
|
||||
|
||||
-- Node name is '/CONFIG' = ':115' from file "sp037032.tdf" line 282, column 12
|
||||
-- Equation name is '/CONFIG', type is output
|
||||
/CONFIG = LCELL( _EQ034 $ EPM_RES);
|
||||
_EQ034 = EPM_RES & !HDD_CS & !MA7 & !/MR & !/WR;
|
||||
|
||||
-- Node name is '/WRH' = ':114' from file "sp037032.tdf" line 233, column 9
|
||||
-- Equation name is '/WRH', type is output
|
||||
/WRH = DFFE( _EQ035 $ VCC, _EQ036, !_EQ037, VCC, VCC);
|
||||
_EQ035 = MA0 & !/WRH;
|
||||
_EQ036 = _X034;
|
||||
_X034 = EXP(!HDD_CS & !/IO & !/WR);
|
||||
_EQ037 = !/IO & !/RD;
|
||||
|
||||
-- Node name is ':97' from file "sp037032.tdf" line 162, column 9
|
||||
-- Equation name is '_LC023', type is buried
|
||||
_LC023 = DFFE( _EQ038 $ VCC, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ038 = _LC024 & _X035 & _X036;
|
||||
_X035 = EXP(!CT_WG1 & RDATA);
|
||||
_X036 = EXP( _X037 & _X038);
|
||||
_X037 = EXP(!CT_WG1 & !RDATA);
|
||||
_X038 = EXP( _X035 & _X036);
|
||||
|
||||
-- Node name is ':98' from file "sp037032.tdf" line 162, column 25
|
||||
-- Equation name is '_LC024', type is buried
|
||||
_LC024 = DFFE( _EQ039 $ GND, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ039 = _X038;
|
||||
_X038 = EXP( _X035 & _X036);
|
||||
_X035 = EXP(!CT_WG1 & RDATA);
|
||||
_X036 = EXP( _X037 & _X038);
|
||||
_X037 = EXP(!CT_WG1 & !RDATA);
|
||||
|
||||
-- Node name is '~389~1' from file "sp037032.tdf" line 149, column 14
|
||||
-- Equation name is '~389~1', location is LC010, type is buried.
|
||||
-- synthesized logic cell
|
||||
_LC010 = LCELL( _EQ040 $ GND);
|
||||
_EQ040 = CNF_ON & !_LC023 & WGR1 & !WGR3
|
||||
# CNF_ON & !_LC023 & !WGR1 & WGR3
|
||||
# !CNF_ON & WGR1 & !WGR3 & !10K_D0
|
||||
# CNF_ON & !_LC023 & !WGR1 & !WGR2
|
||||
# !CNF_ON & !WGR1 & WGR3 & !10K_D0;
|
||||
|
||||
|
||||
|
||||
-- Shareable expanders that are duplicated in multiple LABs:
|
||||
-- _X001 occurs in LABs C, D
|
||||
-- _X002 occurs in LABs C, D
|
||||
|
||||
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp037032.rpt
|
||||
|
||||
** COMPILATION SETTINGS & TIMES **
|
||||
|
||||
Processing Menu Commands
|
||||
------------------------
|
||||
|
||||
Design Doctor = off
|
||||
|
||||
Logic Synthesis:
|
||||
|
||||
Synthesis Type Used = Standard
|
||||
|
||||
Default Synthesis Style = NORMAL
|
||||
|
||||
Logic option settings in 'NORMAL' style for 'MAX7000S' family
|
||||
|
||||
DECOMPOSE_GATES = on
|
||||
DUPLICATE_LOGIC_EXTRACTION = on
|
||||
MINIMIZATION = full
|
||||
MULTI_LEVEL_FACTORING = on
|
||||
NOT_GATE_PUSH_BACK = on
|
||||
PARALLEL_EXPANDERS = off
|
||||
REDUCE_LOGIC = on
|
||||
REFACTORIZATION = on
|
||||
REGISTER_OPTIMIZATION = on
|
||||
RESYNTHESIZE_NETWORK = on
|
||||
SLOW_SLEW_RATE = off
|
||||
SOFT_BUFFER_INSERTION = on
|
||||
SUBFACTOR_EXTRACTION = on
|
||||
TURBO_BIT = on
|
||||
XOR_SYNTHESIS = on
|
||||
IGNORE_SOFT_BUFFERS = off
|
||||
USE_LPM_FOR_AHDL_OPERATORS = off
|
||||
|
||||
Other logic synthesis settings:
|
||||
|
||||
Automatic Global Clock = off
|
||||
Automatic Global Clear = off
|
||||
Automatic Global Preset = off
|
||||
Automatic Global Output Enable = off
|
||||
Automatic Fast I/O = off
|
||||
Automatic Register Packing = off
|
||||
Automatic Open-Drain Pins = on
|
||||
Automatic Implement in EAB = off
|
||||
One-Hot State Machine Encoding = off
|
||||
Optimize = 0
|
||||
|
||||
Default Timing Specifications: None
|
||||
|
||||
Cut All Bidir Feedback Timing Paths = on
|
||||
Cut All Clear & Preset Timing Paths = on
|
||||
|
||||
Ignore Timing Assignments = off
|
||||
|
||||
Functional SNF Extractor = off
|
||||
|
||||
Linked SNF Extractor = off
|
||||
Timing SNF Extractor = on
|
||||
Optimize Timing SNF = off
|
||||
Generate AHDL TDO File = off
|
||||
Fitter Settings = ADVANCED
|
||||
Smart Recompile = on
|
||||
Total Recompile = off
|
||||
|
||||
Interfaces Menu Commands
|
||||
------------------------
|
||||
|
||||
EDIF Netlist Writer = off
|
||||
Verilog Netlist Writer = off
|
||||
VHDL Netlist Writer = off
|
||||
|
||||
Compilation Times
|
||||
-----------------
|
||||
|
||||
Compiler Netlist Extractor 00:00:00
|
||||
Database Builder 00:00:00
|
||||
Logic Synthesizer 00:00:00
|
||||
Partitioner 00:00:00
|
||||
Fitter 00:00:00
|
||||
Timing SNF Extractor 00:00:00
|
||||
Assembler 00:00:01
|
||||
-------------------------- --------
|
||||
Total Time 00:00:01
|
||||
|
||||
|
||||
Memory Allocated
|
||||
-----------------
|
||||
|
||||
Peak memory allocated during compilation = 3,985K
|
BIN
fw/src/max/sp047032.pof
Normal file
811
fw/src/max/sp047032.rpt
Normal file
@ -0,0 +1,811 @@
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
|
||||
MAX+plus II Compiler Report File
|
||||
Version 10.0 9/14/2000
|
||||
Compiled: 08/05/2024 18:38:05
|
||||
|
||||
Copyright (C) 1988-2000 Altera Corporation
|
||||
Any megafunction design, and related net list (encrypted or decrypted),
|
||||
support information, device programming or simulation file, and any other
|
||||
associated documentation or information provided by Altera or a partner
|
||||
under Altera's Megafunction Partnership Program may be used only to
|
||||
program PLD devices (but not masked PLD devices) from Altera. Any other
|
||||
use of such megafunction design, net list, support information, device
|
||||
programming or simulation file, or any other related documentation or
|
||||
information is prohibited for any other purpose, including, but not
|
||||
limited to modification, reverse engineering, de-compiling, or use with
|
||||
any other silicon devices, unless such use is explicitly licensed under
|
||||
a separate agreement with Altera or a megafunction partner. Title to
|
||||
the intellectual property, including patents, copyrights, trademarks,
|
||||
trade secrets, or maskworks, embodied in any such megafunction design,
|
||||
net list, support information, device programming or simulation file, or
|
||||
any other related documentation or information provided by Altera or a
|
||||
megafunction partner, remains with Altera, the megafunction partner, or
|
||||
their respective licensors. No other licenses, including any licenses
|
||||
needed under any third party's intellectual property, are provided herein.
|
||||
|
||||
|
||||
|
||||
***** Project compilation was successful
|
||||
|
||||
|
||||
SINC_controller
|
||||
|
||||
|
||||
** DEVICE SUMMARY **
|
||||
|
||||
Chip/ Input Output Bidir Shareable
|
||||
POF Device Pins Pins Pins LCs Expanders % Utilized
|
||||
|
||||
sp047032 EPM7032LC44-12 17 18 0 32 27 100%
|
||||
|
||||
User Pins: 17 18 0
|
||||
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
|
||||
** PROJECT COMPILATION MESSAGES **
|
||||
|
||||
Warning: Line 62, File c:\prj\sprinter\firmware\97\max\sp047032.tdf:
|
||||
Symbolic name "MXX" was declared but never used
|
||||
Warning: Line 30, File c:\prj\sprinter\firmware\97\max\sp047032.tdf:
|
||||
Symbolic name "/RTSB" was declared but never used
|
||||
Warning: Line 52, File c:\prj\sprinter\firmware\97\max\sp047032.tdf:
|
||||
Symbolic name "CLKZZ1" was declared but never used
|
||||
Warning: Line 57, File c:\prj\sprinter\firmware\97\max\sp047032.tdf:
|
||||
Symbolic name "TB_WG" was declared but never used
|
||||
Warning: Project has user pin or logic cell assignments, but has never been compiled before. For best fitting results, let the Compiler choose the first set of assignments instead.
|
||||
Info: Reserved unused input pin '/RTSB' for future use because it has a pin assignment -- pin is tri-stated and must be connected to your board
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
|
||||
** AUTO GLOBAL SIGNALS **
|
||||
|
||||
|
||||
|
||||
INFO: Signal 'CNF_ON' chosen for auto global Output Enable
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
|
||||
** PIN/LOCATION/CHIP ASSIGNMENTS **
|
||||
|
||||
Actual
|
||||
User Assignments
|
||||
Assignments (if different) Node Name
|
||||
|
||||
sp047032@27 CLK_PRC
|
||||
sp047032@13 CLK_WG
|
||||
sp047032@31 CLKZZ
|
||||
sp047032@44 CNF_ON
|
||||
sp047032@40 /CONFIG
|
||||
sp047032@34 /DTRB
|
||||
sp047032@18 D0
|
||||
sp047032@1 EPM_RES
|
||||
sp047032@11 HD_CSS1
|
||||
sp047032@12 HD_CSS2
|
||||
sp047032@9 HD_CS1
|
||||
sp047032@7 HD_CS2
|
||||
sp047032@26 HDD_CS
|
||||
sp047032@8 HD_OE1
|
||||
sp047032@5 HD_OE2
|
||||
sp047032@6 HD_WE1
|
||||
sp047032@4 HD_WE2
|
||||
sp047032@29 /IO
|
||||
sp047032@39 MA0
|
||||
sp047032@36 MA7
|
||||
sp047032@28 /MR
|
||||
sp047032@14 QDAT
|
||||
sp047032@32 /RD
|
||||
sp047032@16 RDAT
|
||||
sp047032@17 RDATA
|
||||
sp047032@21 RSTB
|
||||
sp047032@33 /RTSB
|
||||
sp047032@19 STE
|
||||
sp047032@43 TG42_IN
|
||||
sp047032@41 TG42_OUT
|
||||
sp047032@25 /WR
|
||||
sp047032@24 /WRH
|
||||
sp047032@20 WSTB
|
||||
sp047032@38 10K_CLK
|
||||
sp047032@37 10K_D0
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
***** Logic for device 'sp047032' compiled without errors.
|
||||
|
||||
|
||||
|
||||
|
||||
Device: EPM7032LC44-12
|
||||
|
||||
Device Options:
|
||||
Turbo Bit = ON
|
||||
Security Bit = ON
|
||||
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** ERROR SUMMARY **
|
||||
|
||||
Info: Chip 'sp047032' in device 'EPM7032LC44-12' has less than 10% of logic cells available for future logic changes -- if your project is likely to change, Altera recommends using a larger device
|
||||
Info: Chip 'sp047032' in device 'EPM7032LC44-12' has less than 20% of pins available for future logic changes -- if your project is likely to change, Altera recommends using a larger device
|
||||
T
|
||||
E T G /
|
||||
H H H P C G 4 C
|
||||
D D D M N 4 2 O
|
||||
_ _ _ _ F 2 _ N
|
||||
W O W V G R _ _ G O F
|
||||
E E E C N E O I N U I
|
||||
1 2 2 C D S N N D T G
|
||||
-----------------------------------_
|
||||
/ 6 5 4 3 2 1 44 43 42 41 40 |
|
||||
HD_CS2 | 7 39 | MA0
|
||||
HD_OE1 | 8 38 | 10K_CLK
|
||||
HD_CS1 | 9 37 | 10K_D0
|
||||
GND | 10 36 | MA7
|
||||
HD_CSS1 | 11 35 | VCC
|
||||
HD_CSS2 | 12 EPM7032LC44-12 34 | /DTRB
|
||||
CLK_WG | 13 33 | /RTSB
|
||||
QDAT | 14 32 | /RD
|
||||
VCC | 15 31 | CLKZZ
|
||||
RDAT | 16 30 | GND
|
||||
RDATA | 17 29 | /IO
|
||||
|_ 18 19 20 21 22 23 24 25 26 27 28 _|
|
||||
------------------------------------
|
||||
D S W R G V / / H C /
|
||||
0 T S S N C W W D L M
|
||||
E T T D C R R D K R
|
||||
B B H _ _
|
||||
C P
|
||||
S R
|
||||
C
|
||||
|
||||
|
||||
|
||||
N.C. = No Connect. This pin has no internal connection to the device.
|
||||
VCC = Dedicated power pin, which MUST be connected to VCC.
|
||||
GND = Dedicated ground pin or unused dedicated input, which MUST be connected to GND.
|
||||
RESERVED = Unused I/O pin, which MUST be left unconnected.
|
||||
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** RESOURCE USAGE **
|
||||
|
||||
Shareable External
|
||||
Logic Array Block Logic Cells I/O Pins Expanders Interconnect
|
||||
|
||||
A: LC1 - LC16 16/16(100%) 16/16(100%) 15/16( 93%) 26/36( 72%)
|
||||
B: LC17 - LC32 16/16(100%) 16/16(100%) 14/16( 87%) 31/36( 86%)
|
||||
|
||||
|
||||
Total dedicated input pins used: 3/4 ( 75%)
|
||||
Total I/O pins used: 32/32 (100%)
|
||||
Total logic cells used: 32/32 (100%)
|
||||
Total shareable expanders used: 27/32 ( 84%)
|
||||
Total Turbo logic cells used: 20/32 ( 62%)
|
||||
Total shareable expanders not available (n/a): 2/32 ( 6%)
|
||||
Average fan-in: 4.50
|
||||
Total fan-in: 144
|
||||
|
||||
Total input pins required: 17
|
||||
Total output pins required: 18
|
||||
Total bidirectional pins required: 0
|
||||
Total logic cells required: 32
|
||||
Total flipflops required: 21
|
||||
Total product terms required: 104
|
||||
Total logic cells lending parallel expanders: 0
|
||||
Total shareable expanders in database: 25
|
||||
|
||||
Synthesized logic cells: 0/ 32 ( 0%)
|
||||
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** INPUTS **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
44 - - INPUT G 0 0 0 0 0 1 1 CNF_ON
|
||||
34 (23) (B) INPUT 0 0 0 0 0 0 2 /DTRB
|
||||
18 (13) (A) INPUT 0 0 0 0 0 1 0 D0
|
||||
1 - - INPUT 0 0 0 0 0 1 0 EPM_RES
|
||||
26 (30) (B) INPUT 0 0 0 0 0 11 5 HDD_CS
|
||||
29 (27) (B) INPUT 0 0 0 0 0 4 5 /IO
|
||||
39 (19) (B) INPUT 0 0 0 0 0 4 0 MA0
|
||||
36 (22) (B) INPUT 0 0 0 0 0 3 0 MA7
|
||||
28 (28) (B) INPUT 0 0 0 0 0 4 0 /MR
|
||||
32 (25) (B) INPUT 0 0 0 0 0 5 5 /RD
|
||||
17 (12) (A) INPUT 0 0 0 0 0 1 1 RDATA
|
||||
21 (16) (A) INPUT 0 0 0 0 0 0 1 RSTB
|
||||
33 (24) (B) INPUT 0 0 0 0 0 0 0 /RTSB
|
||||
19 (14) (A) INPUT 0 0 0 0 0 0 1 STE
|
||||
43 - - INPUT 0 0 0 0 0 2 1 TG42_IN
|
||||
25 (31) (B) INPUT 0 0 0 0 0 7 0 /WR
|
||||
20 (15) (A) INPUT 0 0 0 0 0 0 1 WSTB
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
G = Global Source. Fan-out destinations counted here do not include destinations
|
||||
that are driven using global routing resources. Refer to the Auto Global Signals,
|
||||
Clock Signals, Clear Signals, Synchronous Load Signals, and Synchronous Clear Signals
|
||||
Sections of this Report File for information on which signals' fan-outs are used as
|
||||
Clock, Clear, Preset, Output Enable, and synchronous Load signals.
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** OUTPUTS **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
27 29 B FF t 2 2 0 0 2 1 1 CLK_PRC
|
||||
13 9 A FF t 2 2 0 0 4 2 1 CLK_WG
|
||||
31 26 B TRI/FF t 2 2 0 1 2 1 3 CLKZZ
|
||||
40 18 B OUTPUT 0 0 0 5 0 0 5 /CONFIG
|
||||
11 7 A OUTPUT 0 0 0 2 0 0 0 HD_CSS1
|
||||
12 8 A OUTPUT 0 0 0 2 0 0 0 HD_CSS2
|
||||
9 6 A OUTPUT 0 0 0 2 0 0 0 HD_CS1
|
||||
7 4 A OUTPUT 0 0 0 1 1 0 0 HD_CS2
|
||||
8 5 A OUTPUT 4 4 0 6 2 0 0 HD_OE1
|
||||
5 2 A OUTPUT 4 4 0 5 1 0 0 HD_OE2
|
||||
6 3 A FF 0 0 0 3 0 0 0 HD_WE1
|
||||
4 1 A OUTPUT 4 4 0 4 0 0 0 HD_WE2
|
||||
14 10 A FF t 0 0 0 0 6 0 0 QDAT
|
||||
16 11 A FF t 4 4 0 1 2 1 4 RDAT
|
||||
41 17 B OUTPUT t 1 0 0 1 0 0 0 TG42_OUT
|
||||
24 32 B FF 1 0 0 5 1 3 0 /WRH
|
||||
38 20 B OUTPUT 0 0 0 5 0 0 5 10K_CLK
|
||||
37 21 B OUTPUT 0 0 0 1 1 0 1 10K_D0
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** BURIED LOGIC **
|
||||
|
||||
Shareable
|
||||
Expanders Fan-In Fan-Out
|
||||
Pin LC LAB Primitive Code Total Shared n/a INP FBK OUT FBK Name
|
||||
(26) 30 B DFFE t 4 3 1 4 5 2 2 CODE0
|
||||
(34) 23 B DFFE t 3 3 0 3 3 0 1 CODE1
|
||||
(36) 22 B DFFE t 3 3 0 3 3 0 2 CODE2
|
||||
(25) 31 B DFFE t 3 3 0 3 3 0 1 CODE3
|
||||
(29) 27 B DFFE t 3 3 0 3 3 1 0 CODE4
|
||||
(18) 13 A TFFE t 5 0 0 4 2 2 2 CT_WG
|
||||
(32) 25 B TFFE t 3 0 0 1 2 2 6 CT_WG1
|
||||
(28) 28 B TFFE t 2 2 0 1 1 1 0 CT0
|
||||
(19) 14 A TFFE t 2 2 0 0 3 1 0 STWG1
|
||||
(33) 24 B TFFE t 0 0 0 0 6 1 4 WGR0
|
||||
(39) 19 B TFFE t 1 0 1 0 6 1 4 WGR1
|
||||
(17) 12 A TFFE t 0 0 0 0 6 1 4 WGR2
|
||||
(20) 15 A TFFE t 0 0 0 0 6 1 4 WGR3
|
||||
(21) 16 A DFFE t 4 4 0 1 1 1 0 :99
|
||||
|
||||
|
||||
Code:
|
||||
|
||||
s = Synthesized pin or logic cell
|
||||
t = Turbo logic cell
|
||||
+ = Synchronous flipflop
|
||||
! = NOT gate push-back
|
||||
r = Fitter-inserted logic cell
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'A':
|
||||
|
||||
Logic cells placed in LAB 'A'
|
||||
+------------------------------- LC9 CLK_WG
|
||||
| +----------------------------- LC13 CT_WG
|
||||
| | +--------------------------- LC7 HD_CSS1
|
||||
| | | +------------------------- LC8 HD_CSS2
|
||||
| | | | +----------------------- LC6 HD_CS1
|
||||
| | | | | +--------------------- LC4 HD_CS2
|
||||
| | | | | | +------------------- LC5 HD_OE1
|
||||
| | | | | | | +----------------- LC2 HD_OE2
|
||||
| | | | | | | | +--------------- LC3 HD_WE1
|
||||
| | | | | | | | | +------------- LC1 HD_WE2
|
||||
| | | | | | | | | | +----------- LC10 QDAT
|
||||
| | | | | | | | | | | +--------- LC11 RDAT
|
||||
| | | | | | | | | | | | +------- LC14 STWG1
|
||||
| | | | | | | | | | | | | +----- LC12 WGR2
|
||||
| | | | | | | | | | | | | | +--- LC15 WGR3
|
||||
| | | | | | | | | | | | | | | +- LC16 :99
|
||||
| | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | Other LABs fed by signals
|
||||
| | | | | | | | | | | | | | | | that feed LAB 'A'
|
||||
LC | | | | | | | | | | | | | | | | | A B | Logic cells that feed LAB 'A':
|
||||
LC9 -> * - - - - - - - - - - - * - - - | * * | <-- CLK_WG
|
||||
LC13 -> * * - - - - - - - - - - * - - - | * * | <-- CT_WG
|
||||
LC11 -> - - - - - - - - - - * - - * * - | * * | <-- RDAT
|
||||
LC14 -> * - - - - - - - - - - - * - - - | * - | <-- STWG1
|
||||
LC12 -> - - - - - - - - - - * - - * * - | * * | <-- WGR2
|
||||
LC15 -> - - - - - - - - - - * - - * * - | * * | <-- WGR3
|
||||
LC16 -> - - - - - - - - - - - * - - - - | * - | <-- :99
|
||||
|
||||
Pin
|
||||
44 -> - - - - - - - - - - - - - - - - | - * | <-- CNF_ON
|
||||
34 -> - * - - - - - - - - - - - - - - | * * | <-- /DTRB
|
||||
1 -> - - - - - - - - - - - - - - - - | - * | <-- EPM_RES
|
||||
26 -> - - * * * * * * * * - - - - - - | * * | <-- HDD_CS
|
||||
29 -> - - - - - - * * - * - - - - - - | * * | <-- /IO
|
||||
39 -> - - - - - - * * - * - - - - - - | * * | <-- MA0
|
||||
36 -> - - * * - - - - - - - - - - - - | * * | <-- MA7
|
||||
28 -> - - - - - - * * - - - - - - - - | * * | <-- /MR
|
||||
32 -> - - - - - - * * * - - - - - - - | * * | <-- /RD
|
||||
17 -> - - - - - - - - - - - * - - - * | * - | <-- RDATA
|
||||
21 -> - * - - - - - - - - - - - - - - | * - | <-- RSTB
|
||||
19 -> - * - - - - - - - - - - - - - - | * - | <-- STE
|
||||
43 -> - - - - - - - - - - - - - - - - | - * | <-- TG42_IN
|
||||
25 -> - - - - * - * - * * - - - - - - | * * | <-- /WR
|
||||
20 -> - * - - - - - - - - - - - - - - | * - | <-- WSTB
|
||||
LC29 -> * - - - - - - - - - - - * - - - | * - | <-- CLK_PRC
|
||||
LC26 -> - * - - - - - - - - - - - - - - | * * | <-- CLKZZ
|
||||
LC30 -> - - - - - - * * - - - - - - - - | * * | <-- CODE0
|
||||
LC25 -> - - - - - - - - - - * * - * * * | * * | <-- CT_WG1
|
||||
LC24 -> - - - - - - - - - - * - - * * - | * * | <-- WGR0
|
||||
LC19 -> - - - - - - - - - - * - - * * - | * * | <-- WGR1
|
||||
LC32 -> - - - - - * * - - - - - - - - - | * * | <-- /WRH
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** LOGIC CELL INTERCONNECTIONS **
|
||||
|
||||
Logic Array Block 'B':
|
||||
|
||||
Logic cells placed in LAB 'B'
|
||||
+------------------------------- LC29 CLK_PRC
|
||||
| +----------------------------- LC26 CLKZZ
|
||||
| | +--------------------------- LC30 CODE0
|
||||
| | | +------------------------- LC23 CODE1
|
||||
| | | | +----------------------- LC22 CODE2
|
||||
| | | | | +--------------------- LC31 CODE3
|
||||
| | | | | | +------------------- LC27 CODE4
|
||||
| | | | | | | +----------------- LC18 /CONFIG
|
||||
| | | | | | | | +--------------- LC25 CT_WG1
|
||||
| | | | | | | | | +------------- LC28 CT0
|
||||
| | | | | | | | | | +----------- LC17 TG42_OUT
|
||||
| | | | | | | | | | | +--------- LC24 WGR0
|
||||
| | | | | | | | | | | | +------- LC19 WGR1
|
||||
| | | | | | | | | | | | | +----- LC32 /WRH
|
||||
| | | | | | | | | | | | | | +--- LC20 10K_CLK
|
||||
| | | | | | | | | | | | | | | +- LC21 10K_D0
|
||||
| | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | Other LABs fed by signals
|
||||
| | | | | | | | | | | | | | | | that feed LAB 'B'
|
||||
LC | | | | | | | | | | | | | | | | | A B | Logic cells that feed LAB 'B':
|
||||
LC26 -> - * - - - - - - * * - - - - - - | * * | <-- CLKZZ
|
||||
LC30 -> - - * * - - - - - - - - - - - - | * * | <-- CODE0
|
||||
LC23 -> - - - - * - - - - - - - - - - - | - * | <-- CODE1
|
||||
LC22 -> - - * - - * - - - - - - - - - - | - * | <-- CODE2
|
||||
LC31 -> - - - - - - * - - - - - - - - - | - * | <-- CODE3
|
||||
LC27 -> - - - - - - - - - - - - - - - * | - * | <-- CODE4
|
||||
LC18 -> - - * * * * * - - - - - - - - - | - * | <-- /CONFIG
|
||||
LC25 -> - - - - - - - - * - - * * - - - | * * | <-- CT_WG1
|
||||
LC28 -> - * - - - - - - - * - - - - - - | - * | <-- CT0
|
||||
LC24 -> - - - - - - - - - - - * * - - - | * * | <-- WGR0
|
||||
LC19 -> - - - - - - - - - - - * * - - - | * * | <-- WGR1
|
||||
LC32 -> - - - - - - - - - - - - - * - - | * * | <-- /WRH
|
||||
LC20 -> - - * * * * * - - - - - - - - - | - * | <-- 10K_CLK
|
||||
LC21 -> - - * - - - - - - - - - - - - - | - * | <-- 10K_D0
|
||||
|
||||
Pin
|
||||
44 -> - - * - - - - - - - - - - - * - | - * | <-- CNF_ON
|
||||
34 -> - - - - - - - - * - - - - - - - | * * | <-- /DTRB
|
||||
18 -> - - - - - - - - - - - - - - - * | - * | <-- D0
|
||||
1 -> - - - - - - - * - - - - - - - - | - * | <-- EPM_RES
|
||||
26 -> - - * * * * * * - - - - - * * - | * * | <-- HDD_CS
|
||||
29 -> - - * * * * * - - - - - - * - - | * * | <-- /IO
|
||||
39 -> - - - - - - - - - - - - - * - - | * * | <-- MA0
|
||||
36 -> - - - - - - - * - - - - - - - - | * * | <-- MA7
|
||||
28 -> - - - - - - - * - - - - - - * - | * * | <-- /MR
|
||||
32 -> - - * * * * * - - - - - - * * - | * * | <-- /RD
|
||||
43 -> - * - - - - - - - * * - - - - - | - * | <-- TG42_IN
|
||||
25 -> - - - - - - - * - - - - - * * - | * * | <-- /WR
|
||||
LC9 -> * - - - - - - - - - - - - - - - | * * | <-- CLK_WG
|
||||
LC13 -> * - - - - - - - - - - - - - - - | * * | <-- CT_WG
|
||||
LC11 -> - - - - - - - - - - - * * - - - | * * | <-- RDAT
|
||||
LC12 -> - - - - - - - - - - - * * - - - | * * | <-- WGR2
|
||||
LC15 -> - - - - - - - - - - - * * - - - | * * | <-- WGR3
|
||||
|
||||
|
||||
* = The logic cell or pin is an input to the logic cell (or LAB) through the PIA.
|
||||
- = The logic cell or pin is not an input to the logic cell (or LAB).
|
||||
|
||||
|
||||
Device-Specific Information: c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
sp047032
|
||||
|
||||
** EQUATIONS **
|
||||
|
||||
CNF_ON : INPUT;
|
||||
D0 : INPUT;
|
||||
EPM_RES : INPUT;
|
||||
HDD_CS : INPUT;
|
||||
MA0 : INPUT;
|
||||
MA7 : INPUT;
|
||||
RDATA : INPUT;
|
||||
RSTB : INPUT;
|
||||
STE : INPUT;
|
||||
TG42_IN : INPUT;
|
||||
WSTB : INPUT;
|
||||
/DTRB : INPUT;
|
||||
/IO : INPUT;
|
||||
/MR : INPUT;
|
||||
/RD : INPUT;
|
||||
/RTSB : INPUT;
|
||||
/WR : INPUT;
|
||||
|
||||
-- Node name is 'CLK_PRC' = 'STWG0' from file "sp047032.tdf" line 53, column 6
|
||||
-- Equation name is 'CLK_PRC', location is LC029, type is output.
|
||||
CLK_PRC = TFFE( VCC, _EQ001, VCC, VCC, VCC);
|
||||
_EQ001 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'CLK_WG' = 'STWG2' from file "sp047032.tdf" line 53, column 6
|
||||
-- Equation name is 'CLK_WG', location is LC009, type is output.
|
||||
CLK_WG = TFFE( _EQ002, _EQ003, VCC, VCC, VCC);
|
||||
_EQ002 = CLK_PRC & STWG1;
|
||||
_EQ003 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'CLKZZ' = 'CT1' from file "sp047032.tdf" line 51, column 4
|
||||
-- Equation name is 'CLKZZ', location is LC026, type is output.
|
||||
CLKZZ = TRI(CT1, GLOBAL(!CNF_ON));
|
||||
CT1 = TFFE( CT0, _EQ004, VCC, VCC, VCC);
|
||||
_EQ004 = _X003 & _X004;
|
||||
_X003 = EXP( CT1 & !TG42_IN);
|
||||
_X004 = EXP(!CT1 & TG42_IN);
|
||||
|
||||
-- Node name is 'CODE0' from file "sp047032.tdf" line 58, column 6
|
||||
-- Equation name is 'CODE0', location is LC030, type is buried.
|
||||
CODE0 = DFFE( _EQ005 $ GND, 10K_CLK, !_EQ006, VCC, VCC);
|
||||
_EQ005 = !CNF_ON & CODE2 & !10K_D0
|
||||
# !CNF_ON & !CODE2 & 10K_D0
|
||||
# CNF_ON & !CODE0;
|
||||
_EQ006 = _X005 & _X006 & _X007;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
_X007 = EXP( /CONFIG & HDD_CS);
|
||||
|
||||
-- Node name is 'CODE1' from file "sp047032.tdf" line 58, column 6
|
||||
-- Equation name is 'CODE1', location is LC023, type is buried.
|
||||
CODE1 = DFFE( CODE0 $ GND, 10K_CLK, !_EQ007, VCC, VCC);
|
||||
_EQ007 = _X005 & _X006 & _X007;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
_X007 = EXP( /CONFIG & HDD_CS);
|
||||
|
||||
-- Node name is 'CODE2' from file "sp047032.tdf" line 58, column 6
|
||||
-- Equation name is 'CODE2', location is LC022, type is buried.
|
||||
CODE2 = DFFE( CODE1 $ GND, 10K_CLK, !_EQ008, VCC, VCC);
|
||||
_EQ008 = _X005 & _X006 & _X007;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
_X007 = EXP( /CONFIG & HDD_CS);
|
||||
|
||||
-- Node name is 'CODE3' from file "sp047032.tdf" line 58, column 6
|
||||
-- Equation name is 'CODE3', location is LC031, type is buried.
|
||||
CODE3 = DFFE( CODE2 $ GND, 10K_CLK, !_EQ009, VCC, VCC);
|
||||
_EQ009 = _X005 & _X006 & _X007;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
_X007 = EXP( /CONFIG & HDD_CS);
|
||||
|
||||
-- Node name is 'CODE4' from file "sp047032.tdf" line 58, column 6
|
||||
-- Equation name is 'CODE4', location is LC027, type is buried.
|
||||
CODE4 = DFFE( CODE3 $ GND, 10K_CLK, !_EQ010, VCC, VCC);
|
||||
_EQ010 = _X005 & _X006 & _X007;
|
||||
_X005 = EXP( /CONFIG & /RD);
|
||||
_X006 = EXP( /CONFIG & /IO);
|
||||
_X007 = EXP( /CONFIG & HDD_CS);
|
||||
|
||||
-- Node name is 'CT_WG' from file "sp047032.tdf" line 113, column 11
|
||||
-- Equation name is 'CT_WG', location is LC013, type is buried.
|
||||
CT_WG = TFFE( VCC, _EQ011, VCC, VCC, VCC);
|
||||
_EQ011 = _X008 & _X009 & _X010;
|
||||
_X008 = EXP(!CT_WG & !CT1);
|
||||
_X009 = EXP( CT_WG & CT1 & _X011);
|
||||
_X010 = EXP(!CT1 & !/DTRB & !STE & _X012);
|
||||
_X011 = EXP(!/DTRB & !STE & _X012);
|
||||
_X012 = EXP(!RSTB & !WSTB & _X011);
|
||||
|
||||
-- Node name is 'CT_WG1' from file "sp047032.tdf" line 115, column 12
|
||||
-- Equation name is 'CT_WG1', location is LC025, type is buried.
|
||||
CT_WG1 = TFFE( VCC, _EQ012, VCC, VCC, VCC);
|
||||
_EQ012 = _X013 & _X014 & _X015;
|
||||
_X013 = EXP(!CT_WG1 & !CT1);
|
||||
_X014 = EXP( CT_WG1 & CT1 & /DTRB);
|
||||
_X015 = EXP(!CT1 & !/DTRB);
|
||||
|
||||
-- Node name is 'CT0' from file "sp047032.tdf" line 51, column 4
|
||||
-- Equation name is 'CT0', location is LC028, type is buried.
|
||||
CT0 = TFFE( VCC, _EQ013, VCC, VCC, VCC);
|
||||
_EQ013 = _X003 & _X004;
|
||||
_X003 = EXP( CT1 & !TG42_IN);
|
||||
_X004 = EXP(!CT1 & TG42_IN);
|
||||
|
||||
-- Node name is 'HD_CSS1'
|
||||
-- Equation name is 'HD_CSS1', location is LC007, type is output.
|
||||
HD_CSS1 = LCELL( _EQ014 $ VCC);
|
||||
_EQ014 = !HDD_CS & !MA7;
|
||||
|
||||
-- Node name is 'HD_CSS2'
|
||||
-- Equation name is 'HD_CSS2', location is LC008, type is output.
|
||||
HD_CSS2 = LCELL( _EQ015 $ VCC);
|
||||
_EQ015 = !HDD_CS & MA7;
|
||||
|
||||
-- Node name is 'HD_CS1'
|
||||
-- Equation name is 'HD_CS1', location is LC006, type is output.
|
||||
HD_CS1 = LCELL( _EQ016 $ VCC);
|
||||
_EQ016 = !HDD_CS & !/WR;
|
||||
|
||||
-- Node name is 'HD_CS2' = ':108' from file "sp047032.tdf" line 196, column 12
|
||||
-- Equation name is 'HD_CS2', type is output
|
||||
HD_CS2 = LCELL( _EQ017 $ VCC);
|
||||
_EQ017 = !HDD_CS & !/WRH;
|
||||
|
||||
-- Node name is 'HD_OE1'
|
||||
-- Equation name is 'HD_OE1', location is LC005, type is output.
|
||||
HD_OE1 = LCELL( _EQ018 $ VCC);
|
||||
_EQ018 = !HDD_CS & !/IO & MA0 & !/WR & /WRH & _X016
|
||||
# !HDD_CS & !/IO & MA0 & !/RD & _X016
|
||||
# CODE0 & !HDD_CS & !/MR & !/RD;
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP( _X019);
|
||||
_X019 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'HD_OE2'
|
||||
-- Equation name is 'HD_OE2', location is LC002, type is output.
|
||||
HD_OE2 = LCELL( _EQ019 $ VCC);
|
||||
_EQ019 = !HDD_CS & !/IO & !MA0 & !/RD & _X016
|
||||
# !CODE0 & !HDD_CS & !/MR & !/RD;
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP( _X019);
|
||||
_X019 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'HD_WE1' = ':115' from file "sp047032.tdf" line 211, column 12
|
||||
-- Equation name is 'HD_WE1', type is output
|
||||
HD_WE1 = DFFE( GND $ GND, !HDD_CS, VCC, !_EQ020, VCC);
|
||||
_EQ020 = /RD & /WR;
|
||||
|
||||
-- Node name is 'HD_WE2'
|
||||
-- Equation name is 'HD_WE2', location is LC001, type is output.
|
||||
HD_WE2 = LCELL( _EQ021 $ VCC);
|
||||
_EQ021 = !HDD_CS & !/IO & MA0 & !/WR & _X016;
|
||||
_X016 = EXP( _X017);
|
||||
_X017 = EXP( _X018);
|
||||
_X018 = EXP( _X019);
|
||||
_X019 = EXP(!HDD_CS);
|
||||
|
||||
-- Node name is 'QDAT' = 'WGR4' from file "sp047032.tdf" line 54, column 5
|
||||
-- Equation name is 'QDAT', location is LC010, type is output.
|
||||
QDAT = TFFE( _EQ022, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ022 = RDAT & WGR0 & WGR1 & WGR2 & WGR3;
|
||||
|
||||
-- Node name is 'RDAT' = ':98' from file "sp047032.tdf" line 153, column 9
|
||||
-- Equation name is 'RDAT', type is output
|
||||
RDAT = DFFE( _EQ023 $ VCC, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ023 = _LC016 & _X020 & _X021;
|
||||
_X020 = EXP(!CT_WG1 & RDATA);
|
||||
_X021 = EXP( _X022 & _X023);
|
||||
_X022 = EXP(!CT_WG1 & !RDATA);
|
||||
_X023 = EXP( _X020 & _X021);
|
||||
|
||||
-- Node name is 'STWG1' from file "sp047032.tdf" line 53, column 6
|
||||
-- Equation name is 'STWG1', location is LC014, type is buried.
|
||||
STWG1 = TFFE( CLK_PRC, _EQ024, VCC, VCC, VCC);
|
||||
_EQ024 = _X001 & _X002;
|
||||
_X001 = EXP(!CLK_WG & !CT_WG);
|
||||
_X002 = EXP( CLK_WG & CT_WG);
|
||||
|
||||
-- Node name is 'TG42_OUT'
|
||||
-- Equation name is 'TG42_OUT', location is LC017, type is output.
|
||||
TG42_OUT = LCELL( _EQ025 $ GND);
|
||||
_EQ025 = _X024;
|
||||
_X024 = EXP( TG42_IN);
|
||||
|
||||
-- Node name is 'WGR0' from file "sp047032.tdf" line 54, column 5
|
||||
-- Equation name is 'WGR0', location is LC024, type is buried.
|
||||
WGR0 = TFFE( _EQ026, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ026 = WGR0 & WGR1 & WGR2 & !WGR3
|
||||
# !WGR0 & !WGR1 & !WGR2 & WGR3
|
||||
# RDAT;
|
||||
|
||||
-- Node name is 'WGR1' from file "sp047032.tdf" line 54, column 5
|
||||
-- Equation name is 'WGR1', location is LC019, type is buried.
|
||||
WGR1 = TFFE( _EQ027, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ027 = RDAT & !WGR0 & !WGR1 & !WGR2 & !WGR3
|
||||
# !RDAT & !WGR1 & WGR2 & !WGR3
|
||||
# !RDAT & WGR1 & !WGR3
|
||||
# RDAT & WGR0;
|
||||
|
||||
-- Node name is 'WGR2' from file "sp047032.tdf" line 54, column 5
|
||||
-- Equation name is 'WGR2', location is LC012, type is buried.
|
||||
WGR2 = TFFE( _EQ028, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ028 = !RDAT & WGR1 & WGR2 & !WGR3
|
||||
# RDAT & WGR0 & WGR1
|
||||
# !RDAT & !WGR2 & !WGR3;
|
||||
|
||||
-- Node name is 'WGR3' from file "sp047032.tdf" line 54, column 5
|
||||
-- Equation name is 'WGR3', location is LC015, type is buried.
|
||||
WGR3 = TFFE( _EQ029, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ029 = RDAT & WGR0 & WGR1 & WGR2 & WGR3
|
||||
# WGR0 & WGR1 & WGR2 & !WGR3
|
||||
# !RDAT & WGR1 & WGR2 & !WGR3;
|
||||
|
||||
-- Node name is '10K_CLK' = ':87' from file "sp047032.tdf" line 75, column 13
|
||||
-- Equation name is '10K_CLK', type is output
|
||||
10K_CLK = LCELL( _EQ030 $ VCC);
|
||||
_EQ030 = CNF_ON & !HDD_CS & !/MR & !/RD
|
||||
# !CNF_ON & !/MR & !/WR;
|
||||
|
||||
-- Node name is '10K_D0' = ':88' from file "sp047032.tdf" line 86, column 12
|
||||
-- Equation name is '10K_D0', type is output
|
||||
10K_D0 = LCELL( CODE4 $ D0);
|
||||
|
||||
-- Node name is '/CONFIG' = ':117' from file "sp047032.tdf" line 227, column 12
|
||||
-- Equation name is '/CONFIG', type is output
|
||||
/CONFIG = LCELL( _EQ031 $ EPM_RES);
|
||||
_EQ031 = EPM_RES & !HDD_CS & !MA7 & !/MR & !/WR;
|
||||
|
||||
-- Node name is '/WRH' = ':116' from file "sp047032.tdf" line 223, column 9
|
||||
-- Equation name is '/WRH', type is output
|
||||
/WRH = DFFE( _EQ032 $ VCC, _EQ033, !_EQ034, VCC, VCC);
|
||||
_EQ032 = MA0 & !/WRH;
|
||||
_EQ033 = _X025;
|
||||
_X025 = EXP(!HDD_CS & !/IO & !/WR);
|
||||
_EQ034 = !HDD_CS & !/IO & !/RD;
|
||||
|
||||
-- Node name is ':99' from file "sp047032.tdf" line 153, column 25
|
||||
-- Equation name is '_LC016', type is buried
|
||||
_LC016 = DFFE( _EQ035 $ GND, CT_WG1, VCC, VCC, VCC);
|
||||
_EQ035 = _X023;
|
||||
_X023 = EXP( _X020 & _X021);
|
||||
_X020 = EXP(!CT_WG1 & RDATA);
|
||||
_X021 = EXP( _X022 & _X023);
|
||||
_X022 = EXP(!CT_WG1 & !RDATA);
|
||||
|
||||
|
||||
|
||||
-- Shareable expanders that are duplicated in multiple LABs:
|
||||
-- _X001 occurs in LABs A, B
|
||||
-- _X002 occurs in LABs A, B
|
||||
|
||||
|
||||
|
||||
|
||||
Project Information c:\prj\sprinter\firmware\97\max\sp047032.rpt
|
||||
|
||||
** COMPILATION SETTINGS & TIMES **
|
||||
|
||||
Processing Menu Commands
|
||||
------------------------
|
||||
|
||||
Design Doctor = off
|
||||
|
||||
Logic Synthesis:
|
||||
|
||||
Synthesis Type Used = Standard
|
||||
|
||||
Default Synthesis Style = NORMAL
|
||||
|
||||
Logic option settings in 'NORMAL' style for 'MAX7000' family
|
||||
|
||||
DECOMPOSE_GATES = on
|
||||
DUPLICATE_LOGIC_EXTRACTION = on
|
||||
MINIMIZATION = full
|
||||
MULTI_LEVEL_FACTORING = on
|
||||
NOT_GATE_PUSH_BACK = on
|
||||
PARALLEL_EXPANDERS = off
|
||||
REDUCE_LOGIC = on
|
||||
REFACTORIZATION = on
|
||||
REGISTER_OPTIMIZATION = on
|
||||
RESYNTHESIZE_NETWORK = on
|
||||
SLOW_SLEW_RATE = off
|
||||
SOFT_BUFFER_INSERTION = on
|
||||
SUBFACTOR_EXTRACTION = on
|
||||
TURBO_BIT = on
|
||||
XOR_SYNTHESIS = on
|
||||
IGNORE_SOFT_BUFFERS = off
|
||||
USE_LPM_FOR_AHDL_OPERATORS = off
|
||||
|
||||
Other logic synthesis settings:
|
||||
|
||||
Automatic Global Clock = off
|
||||
Automatic Global Clear = off
|
||||
Automatic Global Preset = off
|
||||
Automatic Global Output Enable = off
|
||||
Automatic Fast I/O = off
|
||||
Automatic Register Packing = off
|
||||
Automatic Open-Drain Pins = on
|
||||
Automatic Implement in EAB = off
|
||||
One-Hot State Machine Encoding = off
|
||||
Optimize = 0
|
||||
|
||||
Default Timing Specifications: None
|
||||
|
||||
Cut All Bidir Feedback Timing Paths = on
|
||||
Cut All Clear & Preset Timing Paths = on
|
||||
|
||||
Ignore Timing Assignments = off
|
||||
|
||||
Functional SNF Extractor = off
|
||||
|
||||
Linked SNF Extractor = off
|
||||
Timing SNF Extractor = on
|
||||
Optimize Timing SNF = off
|
||||
Generate AHDL TDO File = off
|
||||
Fitter Settings = ADVANCED
|
||||
Smart Recompile = on
|
||||
Total Recompile = off
|
||||
|
||||
Interfaces Menu Commands
|
||||
------------------------
|
||||
|
||||
EDIF Netlist Writer = off
|
||||
Verilog Netlist Writer = off
|
||||
VHDL Netlist Writer = off
|
||||
|
||||
Compilation Times
|
||||
-----------------
|
||||
|
||||
Compiler Netlist Extractor 00:00:00
|
||||
Database Builder 00:00:00
|
||||
Logic Synthesizer 00:00:00
|
||||
Partitioner 00:00:00
|
||||
Fitter 00:00:00
|
||||
Timing SNF Extractor 00:00:00
|
||||
Assembler 00:00:00
|
||||
-------------------------- --------
|
||||
Total Time 00:00:00
|
||||
|
||||
|
||||
Memory Allocated
|
||||
-----------------
|
||||
|
||||
Peak memory allocated during compilation = 3,646K
|
BIN
gerber/SPRINT05.GBR.ZIP
Normal file
BIN
master/sp97-bios-master.zip
Normal file
BIN
master/sp97-fw-master.zip
Normal file
BIN
master/sp97-pcb-master.zip
Normal file
BIN
pcb/SPRIN02.BMP
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
pcb/converted/SPRINT05.BD1
Normal file
27002
pcb/converted/SPRINT05.MIN
Normal file
BIN
pcb/converted/SPRINT05.max
Normal file
36077
pcb/converted/SPRINT05_PCAD.PCB
Normal file
38
pcb/converted/readme.txt
Normal file
@ -0,0 +1,38 @@
|
||||
SPRINT05.BD1 - файл, полученный конвертацией из оригинального SPRINT05.PCB ghb при помощи пакета OrCAD 32bit version
|
||||
SPRINT05.max - результат импорта SPRINT05.BD1 в OrCAD 7.10
|
||||
SPRINT05.MIN - файл, полученный экспортом из OrCAD 7.10 для загрузки в DipTrace
|
||||
SPRINT05_PCAD.PCB - файл, полученный экспортом из DipTrace
|
||||
|
||||
|
||||
Общий порядок "конвертации" следующий:
|
||||
|
||||
1. берем файл *.brd от orcad версии 2.xx, который в формате PCB2 (это тот который у нас)
|
||||
|
||||
2. берем версию оркада 386+, уже 32-битную. это оркад 3.хх, который несовместим ни с чем (так же как и 2.хх ни с чем).
|
||||
в нем есть утилита frompcb2.exe, которая преобразует наш 16-битный формат PCB2 в 32-битный PCB386+
|
||||
|
||||
3. 32-битный формат потом нужно сконвертировать в "современный" оркадовский *.max (в таком формате файлы от 2003 платы).
|
||||
это можно сделать утилитой tomax.exe из установленного оркада, в принципе любой версии. в оркаде 9 есть такая.
|
||||
|
||||
ну в целом через ассоциации расширений можно скормить файл в формате PCB386+ именно в orcad layout и будет то же самое.
|
||||
|
||||
4. на выходе получим окадовский *.max с сопутствующими последующими квестами, которые я описал как "Открываем оригинальные файлы схемы и платы sp2003 (https://reverse.sprinter.ru/orcad920)".
|
||||
|
||||
там, напомню, последовательность такая:
|
||||
orcad max -> текстовый MIN Interchange (который хавает только DipTrace)
|
||||
далее MIN Interchange -> DipTrace
|
||||
далее DipTrace -> текстовый pcad ascii
|
||||
|
||||
|
||||
|
||||
по факту файл оброс:
|
||||
1. на КАЖДЫЙ компонент был создан СВОЙ паттерн (о чем я говорил не так давно). база данных ессно в труху, но зато визуально все компоненты в правильной ориентации ))
|
||||
2. неправильно транслировались линии в шелке. тут та же ошибка что совершил и я — замкнуты все точки, не учитывается флаг начала линии.
|
||||
3. все эти линии раскопированы на все assy слои и еще на какие то левые.
|
||||
4. создано куча левых слоев. так то не мешают, в них почти нет никакой инфы.
|
||||
5. поехавшие (немного) шрифты. ну это фигня, это всегда.
|
||||
|
||||
|
||||
|
||||
|
||||
Всегда Ваш, RomanRom2
|
BIN
pcb/docs/PCAD_2006_ASCII.pdf
Normal file
BIN
pcb/parsed/SPRINT05.BRD
Normal file
14
pcb/parsed/readme.txt
Normal file
@ -0,0 +1,14 @@
|
||||
Файлы, полученные парсером оригинального файла OrCAD 2.00 и генератором в формат p-cad ASCII version 7.5
|
||||
|
||||
SPRINT05.BRD - оригинальный файл OrCAD 2.00
|
||||
sprint05_pcad.pcb - результат работы парсера
|
||||
sprint05_pcad_fixed.pcb - исправлено немного ошибок в ориентации некоторых компонентов
|
||||
sprint05_pcad_fixed_bot.png
|
||||
sprint05_pcad_fixed_top.png
|
||||
|
||||
sprint05_pcad_fixed.pcb - вариант, который проходит DRC. для этого тут минимальные косметические изменения, которые вы даже не заметите )
|
||||
|
||||
1. сдвинуто несколько via и несколько линий дорожек на 5-10mil, что бы уложиться в параметры DRC
|
||||
2. подвинуты надписи с той же целью
|
||||
3. раздвинуты границы платы с той же целью
|
||||
4. там где не было проложено дорожек, но сеть имелась — дорожки допроложены. в двух местах.
|
20286
pcb/parsed/sprint05_pcad.pcb
Normal file
BIN
pcb/parsed/sprint05_pcad_fixed.pcb
Normal file
BIN
pcb/parsed/sprint05_pcad_fixed_bot.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
pcb/parsed/sprint05_pcad_fixed_top.png
Normal file
After Width: | Height: | Size: 169 KiB |
113
pcb/php-builder/builder.php
Normal file
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
// builder
|
||||
// ================================================================================================
|
||||
|
||||
// library
|
||||
// - pad
|
||||
// - via
|
||||
// - text
|
||||
// - pattern
|
||||
// - component
|
||||
|
||||
// netlist
|
||||
// - component
|
||||
// - net
|
||||
|
||||
// pcb design
|
||||
// - pcbDesignHeader
|
||||
// - layerDef
|
||||
// - multiLayer
|
||||
// - via
|
||||
// - pattern
|
||||
|
||||
// - layerContents 1 - top
|
||||
// - line
|
||||
// - text
|
||||
// - layerContents 2 - bottom
|
||||
// - line
|
||||
// - text
|
||||
// - layerContents 3 - board
|
||||
// - line
|
||||
// - polygon
|
||||
|
||||
// - layersStackup
|
||||
|
||||
|
||||
|
||||
// create header
|
||||
// ================================================================================================
|
||||
$out_file = "p/" . $proj[$PROJ_ID]['dir'] . "/sprint05_pcad.pcb";
|
||||
$ascii = "SPRINT05_PCAD.PCB";
|
||||
$ts = date("Y m d H i s");
|
||||
$cr = "Copyright © 2009-".date("Y")." Sprinter Reverse Team";
|
||||
|
||||
$hdr = "ACCEL_ASCII \"$ascii\"\r\n";
|
||||
$hdr .= "\r\n";
|
||||
$hdr .= "(asciiHeader\r\n";
|
||||
$hdr .= " (asciiVersion 3 0)\r\n";
|
||||
$hdr .= " (timeStamp $ts)\r\n";
|
||||
$hdr .= " (program \"Sprinter php parser\" \"01.00.1234\")\r\n";
|
||||
$hdr .= " (copyright \"$cr\")\r\n";
|
||||
$hdr .= " (fileAuthor \"RomanRom2\")\r\n";
|
||||
$hdr .= " (headerString \"\")\r\n";
|
||||
$hdr .= " (fileUnits Mil)\r\n";
|
||||
$hdr .= " (guidString \"\")\r\n";
|
||||
$hdr .= ")\r\n";
|
||||
|
||||
file_put_contents($out_file, $hdr, LOCK_EX);
|
||||
|
||||
|
||||
|
||||
// create library
|
||||
// ================================================================================================
|
||||
|
||||
// lib begin
|
||||
$pcad_lib = "(library \"Library_1\"\r\n";
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
||||
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/lib_via.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/lib_text.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/lib_pad.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/lib_pattern.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/lib_component.php");
|
||||
|
||||
// lib end
|
||||
$pcad_lib = ")\r\n";
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
||||
|
||||
// create netlist
|
||||
// ================================================================================================
|
||||
|
||||
// netlist begin
|
||||
$pcad_net = "(netlist \"Netlist_1\"\r\n";
|
||||
file_put_contents($out_file, $pcad_net, FILE_APPEND | LOCK_EX);
|
||||
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/net.php");
|
||||
|
||||
// netlist end
|
||||
$pcad_net = ")\r\n";
|
||||
file_put_contents($out_file, $pcad_net, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
||||
|
||||
// create pcb design
|
||||
// ================================================================================================
|
||||
|
||||
// pcb begin
|
||||
$pcad_pcb = "(pcbDesign \"PcbDesign_1\"\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/pcb_header.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/pcb_layerdef.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/pcb_multilayer.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/pcb_layers.php");
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/pcb_stackup.php");
|
||||
|
||||
// pcb end
|
||||
$pcad_pcb = ")\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
42
pcb/php-builder/lib_component.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
// component
|
||||
// ================================================================================================
|
||||
echo"save components: ".$pcb->HDR['comp_count_real']['v']."<br>";
|
||||
$pcad_lib = "";
|
||||
for($i=0; $i<sizeof($pcb->PATTERN_STYLE); $i++)
|
||||
{
|
||||
$PTR = $pcb->PATTERN_STYLE[$i];
|
||||
|
||||
$pcad_lib .= " (compDef \"".$PTR['name']."_1\"\r\n";
|
||||
$pcad_lib .= " (originalName \"".$PTR['name']."\")\r\n";
|
||||
$pcad_lib .= " (compHeader\r\n";
|
||||
$pcad_lib .= " (sourceLibrary \"\")\r\n";
|
||||
$pcad_lib .= " (numPins ".$PTR['pads_count'].")\r\n";
|
||||
$pcad_lib .= " (numParts 1)\r\n";
|
||||
$pcad_lib .= " (alts (ieeeAlt True) (deMorganAlt False))\r\n";
|
||||
$pcad_lib .= " (refDesPrefix \"U\")\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
for ($j=1; $j<=$PTR['pads_count']; $j++)
|
||||
{
|
||||
$pad_des = $PTR['pad'.$j.'_des'];
|
||||
$pcad_lib .= " (compPin \"$pad_des\" (pinName \"$pad_des\") (partNum 1) (symPinNum 1) (gateEq 1) (pinEq 0) (pinType Input) )\r\n";
|
||||
}
|
||||
|
||||
$pcad_lib .= " (attachedPattern (patternNum 1) (patternName \"".$PTR['name']."\")\r\n";
|
||||
$pcad_lib .= " (numPads ".$PTR['pads_count'].")\r\n";
|
||||
$pcad_lib .= " (padPinMap\r\n";
|
||||
|
||||
for ($j=1; $j<=$PTR['pads_count']; $j++)
|
||||
{
|
||||
$pad_des = $PTR['pad'.$j.'_des'];
|
||||
$pcad_lib .= " (padNum $j) (compPinRef \"$pad_des\")\r\n";
|
||||
}
|
||||
|
||||
$pcad_lib .= " )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
96
pcb/php-builder/lib_pad.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
// pad
|
||||
// ================================================================================================
|
||||
function padGetStyle($pcb, $pad)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->PAD_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->PAD_STYLE[$i];
|
||||
if (
|
||||
($style['shape'] == $pad['shape'])
|
||||
and ($style['width'] == $pad['width'])
|
||||
and ($style['height'] == $pad['height'])
|
||||
and ($style['hole_dia'] == $pad['hole_dia'])
|
||||
and ($style['flags'] == $pad['flags'])
|
||||
)
|
||||
return $style['name'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
function padAddStyle($pcb, $pad)
|
||||
{
|
||||
$st = padGetStyle($pcb, $pad);
|
||||
if ($st)
|
||||
return false;
|
||||
|
||||
$i = sizeof($pcb->PAD_STYLE);
|
||||
$pcb->PAD_STYLE[$i]['shape'] = $pad['shape'];
|
||||
$pcb->PAD_STYLE[$i]['width'] = $pad['width'];
|
||||
$pcb->PAD_STYLE[$i]['height'] = $pad['height'];
|
||||
$pcb->PAD_STYLE[$i]['hole_dia'] = $pad['hole_dia'];
|
||||
$pcb->PAD_STYLE[$i]['flags'] = $pad['flags'];
|
||||
$pcb->PAD_STYLE[$i]['name'] = "pad".$i;
|
||||
|
||||
return $pcb->PAD_STYLE[$i]['name'];
|
||||
}
|
||||
|
||||
echo"<br>";
|
||||
echo"generate pad styles...<br>";
|
||||
for($i=0; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
|
||||
for ($j=1; $j<=$C['pads_count']['v']; $j++)
|
||||
{
|
||||
$pad['shape'] = $C['pad'.$j.'_shape']['v'];
|
||||
$pad['width'] = $C['pad'.$j.'_width']['v'];
|
||||
$pad['height'] = $C['pad'.$j.'_height']['v'];
|
||||
$pad['hole_dia'] = $C['pad'.$j.'_hole_dia']['v'];
|
||||
$pad['flags'] = $C['pad'.$j.'_flags']['v'];
|
||||
|
||||
if ($pad_style = padAddStyle($pcb, $pad))
|
||||
{
|
||||
echo"comp [$i], pad [$j], added new pad {";
|
||||
echo"shape=".$pad['shape']."";
|
||||
echo", hole_dia=".$pad['hole_dia']."";
|
||||
echo", size=".$pad['width']."x".$pad['height']."";
|
||||
echo", flags=".$pad['flags']."";
|
||||
echo"}, style=[$pad_style]<br>";
|
||||
}
|
||||
|
||||
$pcb->COMP[$i]['pad'.$j.'_style']['v'] = padGetStyle($pcb, $pad);
|
||||
}
|
||||
}
|
||||
echo"save pad styles: ".sizeof($pcb->PAD_STYLE)."<br>";
|
||||
$pcad_lib = "";
|
||||
for ($i=0; $i<sizeof($pcb->PAD_STYLE); $i++)
|
||||
{
|
||||
$pcad_lib .= " (padStyleDef \"".$pcb->PAD_STYLE[$i]['name']."\"\r\n";
|
||||
$pcad_lib .= " (holeDiam ".$pcb->PAD_STYLE[$i]['hole_dia'].")\r\n";
|
||||
$pcad_lib .= " (StartRange 1)\r\n";
|
||||
$pcad_lib .= " (EndRange 2)\r\n";
|
||||
|
||||
$s1 = "Ellipse"; if ($pcb->PAD_STYLE[$i]['shape'] == 2) $s1 = "Rect";
|
||||
$w1 = $pcb->PAD_STYLE[$i]['width'];
|
||||
$h1 = $pcb->PAD_STYLE[$i]['height'];
|
||||
|
||||
$w2 = $w1;
|
||||
$h2 = $w1;
|
||||
$s2 = $s1;
|
||||
if (!$pcb->PAD_STYLE[$i]['hole_dia'])
|
||||
{
|
||||
$w2 = "0";
|
||||
$h2 = "0";
|
||||
$s2 = "NoConnect";
|
||||
}
|
||||
$pcad_lib .= " (padShape (layerNumRef 1) (padShapeType $s1) (shapeWidth $w1) (shapeHeight $h1) )\r\n";
|
||||
$pcad_lib .= " (padShape (layerNumRef 2) (padShapeType $s2) (shapeWidth $w2) (shapeHeight $h2) )\r\n";
|
||||
$pcad_lib .= " (padShape (layerType Signal) (padShapeType $s2) (shapeWidth $w2) (shapeHeight $h2) )\r\n";
|
||||
$pcad_lib .= " (padShape (layerType Plane) (padShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " (padShape (layerType NonSignal) (padShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
162
pcb/php-builder/lib_pattern.php
Normal file
@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
// pattern
|
||||
// ================================================================================================
|
||||
function patternGetStyle($pcb, $pattern, $ind)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->PATTERN_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->PATTERN_STYLE[$i];
|
||||
|
||||
// 1. name
|
||||
$pattern_name_bool = strtoupper($style['pattern']) == strtoupper($pattern['pattern']);
|
||||
|
||||
// 2. pads count
|
||||
if ($pattern_name_bool)
|
||||
{
|
||||
$pads_count_bool = $style['pads_count'] == $pattern['pads_count'];
|
||||
if (!$pads_count_bool)
|
||||
return false;
|
||||
|
||||
// 3. pad styles
|
||||
for ($j=1; $j<=$pattern['pads_count']; $j++)
|
||||
{
|
||||
$pad_style_bool = $style['pad'.$j.'_style'] == $pattern['pad'.$j.'_style'];
|
||||
if (!$pad_style_bool)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!$pad_style_bool)
|
||||
continue;
|
||||
|
||||
return $style;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
function patternCheckName($pcb, $name)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->PATTERN_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->PATTERN_STYLE[$i];
|
||||
if ($style['name'] == $name)
|
||||
return $name."_".$i;
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
function patternAddStyle($pcb, $pattern, $ind)
|
||||
{
|
||||
$st = patternGetStyle($pcb, $pattern, $ind);
|
||||
if ($st['name'])
|
||||
return false;
|
||||
|
||||
$i = sizeof($pcb->PATTERN_STYLE);
|
||||
$pcb->PATTERN_STYLE[$i] = $pattern;
|
||||
$pcb->PATTERN_STYLE[$i]['name'] = patternCheckName($pcb, strtoupper($pattern['pattern']));
|
||||
// $pcb->PATTERN_STYLE[$i]['rotate'] = strtoupper($pattern['rotate']);
|
||||
|
||||
return $pcb->PATTERN_STYLE[$i]['name'];
|
||||
}
|
||||
|
||||
echo"<br>";
|
||||
echo"generate patterns...<br>";
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
|
||||
$pattern = array();
|
||||
$pattern['pattern'] = $C['pattern']['v'];
|
||||
$pattern['rotate'] = $C['rotate']['v'];
|
||||
$pattern['pads_count'] = $C['pads_count']['v'];
|
||||
|
||||
for ($j=1; $j<=$pattern['pads_count']; $j++)
|
||||
{
|
||||
$pattern['pad'.$j.'_num'] = $j;
|
||||
$pattern['pad'.$j.'_style'] = $C['pad'.$j.'_style']['v'];
|
||||
$pattern['pad'.$j.'_rotate'] = $C['pad'.$j.'_rotate']['v'];
|
||||
$pattern['pad'.$j.'_pos_x'] = $C['pos_x']['v'] - $C['pad'.$j.'_pos_x']['v'];
|
||||
$pattern['pad'.$j.'_pos_y'] = $C['pos_y']['v'] - $C['pad'.$j.'_pos_y']['v'];
|
||||
$pattern['pad'.$j.'_des'] = $C['pad'.$j.'_des']['v'];
|
||||
}
|
||||
|
||||
$pattern['lines_count'] = $C['lines_count']['v'];
|
||||
for ($j=1; $j<=$pattern['lines_count']; $j++)
|
||||
{
|
||||
$pattern['line'.$j.'_pos_x'] = $C['pos_x']['v'] - $C['line'.$j.'_pos_x']['v'];
|
||||
$pattern['line'.$j.'_pos_y'] = $C['pos_y']['v'] - $C['line'.$j.'_pos_y']['v'];
|
||||
$pattern['line'.$j.'_size'] = "8.0";
|
||||
$pattern['line'.$j.'_flags'] = $C['line'.$j.'_flags']['v'];
|
||||
}
|
||||
|
||||
if ($pattern_style = patternAddStyle($pcb, $pattern, $i))
|
||||
{
|
||||
echo"comp [$i], added NEW pattern {";
|
||||
echo"name=".$pattern['pattern']."";
|
||||
echo", pads=".$pattern['pads_count']."";
|
||||
echo", lines=".$pattern['lines_count']."";
|
||||
echo", style_rotate=".$pattern['rotate']."";
|
||||
echo"}, style=[$pattern_style]<br>";
|
||||
}
|
||||
|
||||
// save pattern style to component
|
||||
$st = patternGetStyle($pcb, $pattern, $i);
|
||||
$pcb->COMP[$i]['style']['v'] = $st['name'];
|
||||
$pcb->COMP[$i]['style_rotate']['v'] = $st['rotate'];
|
||||
}
|
||||
|
||||
echo"save patterns: ".sizeof($pcb->PATTERN_STYLE)."<br>";
|
||||
$pcad_lib = "";
|
||||
for($i=0; $i<sizeof($pcb->PATTERN_STYLE); $i++)
|
||||
{
|
||||
$PTR = $pcb->PATTERN_STYLE[$i];
|
||||
|
||||
// begin library pattern
|
||||
$pcad_lib .= " (patternDefExtended \"".$PTR['name']."_1\"\r\n";
|
||||
$pcad_lib .= " (originalName \"".$PTR['name']."\")\r\n";
|
||||
$pcad_lib .= " (patternGraphicsNameRef \"Primary\")\r\n";
|
||||
$pcad_lib .= " (patternGraphicsDef \r\n";
|
||||
$pcad_lib .= " (patternGraphicsNameDef \"Primary\")\r\n";
|
||||
|
||||
// multilayer, pads
|
||||
$pcad_lib .= " (multiLayer \r\n";
|
||||
for ($j=1; $j<=$PTR['pads_count']; $j++)
|
||||
{
|
||||
$rot = ($PTR['pad'.$j.'_rotate'] * 90);
|
||||
$x = $PTR['pad'.$j.'_pos_x'];
|
||||
$y = $PTR['pad'.$j.'_pos_y'];
|
||||
|
||||
$pcad_lib .= " (pad (padNum $j) (padStyleRef \"".$PTR['pad'.$j.'_style']."\") (pt $y $x) (rotation $rot) (defaultPinDes \"".$PTR['pad'.$j.'_des']."\") )\r\n";
|
||||
}
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
// layer 6 - top silk
|
||||
$pcad_lib .= " (layerContents (layerNumRef 6)\r\n";
|
||||
for ($j=1; $j<$PTR['lines_count']; $j++)
|
||||
{
|
||||
$flags2 = $PTR['line'.($j+1).'_flags'];
|
||||
if (!$flags2) continue; // next point flags = 0, begin other line
|
||||
|
||||
$x1 = $PTR['line'.$j.'_pos_x'];
|
||||
$y1 = $PTR['line'.$j.'_pos_y'];
|
||||
|
||||
$x2 = $PTR['line'.($j+1).'_pos_x'];
|
||||
$y2 = $PTR['line'.($j+1).'_pos_y'];
|
||||
|
||||
$w = $PTR['line'.$j.'_size'];
|
||||
|
||||
if ( ($x1 == $x2) and ($y1 == $y2) ) {} else // HACK !!!
|
||||
$pcad_lib .= " (line (pt $y2 $x2) (pt $y1 $x1) (width $w) )\r\n";
|
||||
}
|
||||
// $rot = ($PTR['pad'.$j.'_rotate'] * 90); //(rotation $rot)
|
||||
$pcad_lib .= " (attr \"RefDes\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
|
||||
$pcad_lib .= " (attr \"Type\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
|
||||
$pcad_lib .= " (attr \"Value\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
// end
|
||||
$pcad_lib .= " )\r\n"; // patternGraphicsDef
|
||||
$pcad_lib .= " )\r\n"; // patternDefExtended
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
102
pcb/php-builder/lib_text.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
// text
|
||||
// ================================================================================================
|
||||
function txtGetStyle($pcb, $txt)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->TXT_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->TXT_STYLE[$i];
|
||||
if ( ($style['size_v'] == $txt['size_v']) )
|
||||
return $style['name'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
function txtAddStyle($pcb, $txt)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->TXT_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->TXT_STYLE[$i];
|
||||
if ( ($style['size_v'] == $txt['size_v']) )
|
||||
return false;
|
||||
}
|
||||
|
||||
$pcb->TXT_STYLE[$i]['size_v'] = $txt['size_v'];
|
||||
$pcb->TXT_STYLE[$i]['name'] = "txt".$i;
|
||||
|
||||
return $pcb->TXT_STYLE[$i]['name'];
|
||||
}
|
||||
|
||||
echo"<br>";
|
||||
echo"generate text styles...<br>";
|
||||
for($i=1; $i<=$pcb->HDR['texts_count']['v']; $i++)
|
||||
{
|
||||
$T = $pcb->TXT[$i];
|
||||
|
||||
$txt['size_v'] = round(1.5*$T['size_v']['v']);
|
||||
|
||||
if ($txt_style = txtAddStyle($pcb, $txt))
|
||||
{
|
||||
echo"text [$i], added new text {";
|
||||
echo"size_v=".$txt['size_v']."";
|
||||
echo"}, style=[$txt_style]<br>";
|
||||
}
|
||||
|
||||
// save style to text
|
||||
$pcb->TXT[$i]['style']['v'] = txtGetStyle($pcb, $txt);
|
||||
}
|
||||
echo"save text styles: ".sizeof($pcb->TXT_STYLE)."<br>";
|
||||
|
||||
$pcad_font_stroke = " (font\r\n";
|
||||
$pcad_font_stroke .= " (fontType Stroke)\r\n";
|
||||
$pcad_font_stroke .= " (fontFamily SanSerif)\r\n";
|
||||
$pcad_font_stroke .= " (fontFace \"Quality\")\r\n";
|
||||
$pcad_font_stroke .= " (fontHeight 100)\r\n";
|
||||
$pcad_font_stroke .= " (strokeWidth 8)\r\n";
|
||||
$pcad_font_stroke .= " )\r\n";
|
||||
|
||||
$pcad_font_truetype = " (font\r\n";
|
||||
$pcad_font_truetype .= " (fontType TrueType)\r\n";
|
||||
$pcad_font_truetype .= " (fontFamily Modern)\r\n";
|
||||
$pcad_font_truetype .= " (fontFace \"Arial\")\r\n";
|
||||
$pcad_font_truetype .= " (fontHeight 100)\r\n";
|
||||
$pcad_font_truetype .= " (strokeWidth 10)\r\n";
|
||||
$pcad_font_truetype .= " (fontWeight 400)\r\n";
|
||||
$pcad_font_truetype .= " (fontCharSet 0)\r\n";
|
||||
$pcad_font_truetype .= " (fontOutPrecision 7)\r\n";
|
||||
$pcad_font_truetype .= " (fontClipPrecision 32)\r\n";
|
||||
$pcad_font_truetype .= " (fontQuality 1)\r\n";
|
||||
$pcad_font_truetype .= " (fontPitchAndFamily 6)\r\n";
|
||||
$pcad_font_truetype .= " )\r\n";
|
||||
|
||||
|
||||
$pcad_lib = " (textStyleDef \"(Default)\"\r\n";
|
||||
$pcad_lib .= $pcad_font_stroke;
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
$pcad_lib .= " (textStyleDef \"(DefaultTTF)\"\r\n";
|
||||
$pcad_lib .= $pcad_font_stroke;
|
||||
$pcad_lib .= $pcad_font_truetype;
|
||||
$pcad_lib .= " (textStyleAllowTType True)\r\n";
|
||||
$pcad_lib .= " (textStyleDisplayTType True)\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
||||
|
||||
$pcad_lib = "";
|
||||
for ($i=0; $i<sizeof($pcb->TXT_STYLE); $i++)
|
||||
{
|
||||
$pcad_lib .= " (textStyleDef \"".$pcb->TXT_STYLE[$i]['name']."\"\r\n";
|
||||
$pcad_lib .= " (font\r\n";
|
||||
$pcad_lib .= " (fontType Stroke)\r\n";
|
||||
$pcad_lib .= " (fontFamily SanSerif)\r\n";
|
||||
$pcad_lib .= " (fontFace \"Quality\")\r\n";
|
||||
$pcad_lib .= " (fontHeight ".$pcb->TXT_STYLE[$i]['size_v'].")\r\n";
|
||||
$pcad_lib .= " (strokeWidth 8)\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
$pcad_lib .= " (textStyleAllowTType False)\r\n";
|
||||
$pcad_lib .= " (textStyleDisplayTType False)\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
86
pcb/php-builder/lib_via.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
// via
|
||||
// ================================================================================================
|
||||
function viaGetStyle($pcb, $via)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->VIA_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->VIA_STYLE[$i];
|
||||
if ( ($style['shape'] == $via['shape']) and ($style['dia'] == $via['dia']) )
|
||||
return $style['name'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
function viaAddStyle($pcb, $via)
|
||||
{
|
||||
for ($i=0; $i < sizeof($pcb->VIA_STYLE); $i++)
|
||||
{
|
||||
$style = $pcb->VIA_STYLE[$i];
|
||||
if ( ($style['shape'] == $via['shape']) and ($style['dia'] == $via['dia']) )
|
||||
return false;
|
||||
}
|
||||
|
||||
$pcb->VIA_STYLE[$i]['shape'] = $via['shape'];
|
||||
$pcb->VIA_STYLE[$i]['dia'] = $via['dia'];
|
||||
$pcb->VIA_STYLE[$i]['name'] = "via".$i;
|
||||
|
||||
return $pcb->VIA_STYLE[$i]['name'];
|
||||
}
|
||||
|
||||
echo"generate via styles...<br>";
|
||||
for($i=0; $i<=$pcb->HDR['net_points_count']['v']; $i++)
|
||||
{
|
||||
$flags = hex($pcb->NETPOI[$i]['flags']['v']);
|
||||
$flags_hdr = substr($flags, 1, 1);
|
||||
|
||||
if ( ($flags_hdr == "6") or ($flags_hdr == "7") ) {} else continue;
|
||||
|
||||
$via['shape'] = $pcb->NETPOI[$i]['size']['v'];
|
||||
$via['dia'] = $via['shape'] / 2;
|
||||
|
||||
if ($via_style = viaAddStyle($pcb, $via))
|
||||
{
|
||||
echo"net point [$i], added new via {shape=".$via['shape'].", dia=".$via['dia']."}, style=[$via_style]<br>";
|
||||
}
|
||||
|
||||
$pcb->NETPOI[$i]['style']['v'] = viaGetStyle($pcb, $via);
|
||||
}
|
||||
echo"save via styles: ".sizeof($pcb->VIA_STYLE)."<br>";
|
||||
$pcad_lib = " (viaStyleDef \"(Default)\"\r\n";
|
||||
$pcad_lib .= " (holeDiam 18)\r\n";
|
||||
$pcad_lib .= " (StartRange 1)\r\n";
|
||||
$pcad_lib .= " (EndRange 2)\r\n";
|
||||
$s = "Ellipse";
|
||||
$w = "40";
|
||||
$h = "40";
|
||||
$pcad_lib .= " (viaShape (layerNumRef 1) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerNumRef 2) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType Signal) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType Plane) (viaShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType NonSignal) (viaShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
||||
|
||||
$pcad_lib = "";
|
||||
for ($i=0; $i<sizeof($pcb->VIA_STYLE); $i++)
|
||||
{
|
||||
$pcad_lib .= " (viaStyleDef \"".$pcb->VIA_STYLE[$i]['name']."\"\r\n";
|
||||
$pcad_lib .= " (holeDiam ".$pcb->VIA_STYLE[$i]['dia'].")\r\n";
|
||||
$pcad_lib .= " (StartRange 1)\r\n";
|
||||
$pcad_lib .= " (EndRange 2)\r\n";
|
||||
|
||||
$s = "Ellipse";
|
||||
$w = $pcb->VIA_STYLE[$i]['shape'];
|
||||
$h = $pcb->VIA_STYLE[$i]['shape'];
|
||||
|
||||
$pcad_lib .= " (viaShape (layerNumRef 1) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerNumRef 2) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType Signal) (viaShapeType $s) (shapeWidth $w) (shapeHeight $h) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType Plane) (viaShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " (viaShape (layerType NonSignal) (viaShapeType NoConnect) (shapeWidth 0) (shapeHeight 0) )\r\n";
|
||||
$pcad_lib .= " )\r\n";
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
|
81
pcb/php-builder/net.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
$pcad_net = "";
|
||||
|
||||
// install components
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
|
||||
$name1 = ValidateRef($C['name1_str']['v']);
|
||||
$name2 = ValidateRef($C['name2_str']['v']);
|
||||
$pattern = $C['style']['v'];
|
||||
$pcad_net .= " (compInst \"$name1\"\r\n";
|
||||
$pcad_net .= " (compRef \"".$pattern."_1\")\r\n";
|
||||
$pcad_net .= " (originalName \"$pattern\")\r\n";
|
||||
$pcad_net .= " (compValue \"$name2\")\r\n";
|
||||
$pcad_net .= " )\r\n";
|
||||
}
|
||||
file_put_contents($out_file, $pcad_net, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
||||
|
||||
echo"generate net list...<br>";
|
||||
$net_lists = array();
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
for ($j=1; $j<=$C['pads_count']['v']; $j++)
|
||||
{
|
||||
$net = $C['pad'.$j.'_net']['v'];
|
||||
if (!trim($net)) continue;
|
||||
|
||||
if (!in_array($net, $net_list))
|
||||
{
|
||||
$net_list[] = $net;
|
||||
}
|
||||
}
|
||||
}
|
||||
echo"nets from components: ".sizeof($net_list)."<br>";
|
||||
//for($n=0; $n<sizeof($net_list); $n++) echo"(".$net_list[$n].")"; echo"<br>";
|
||||
|
||||
$pcad_net = "";
|
||||
for($n=0; $n<sizeof($net_list); $n++)
|
||||
{
|
||||
$net = $net_list[$n];
|
||||
$pcad_net .= " (net \"".$net."\"\r\n";
|
||||
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
for ($j=1; $j<=$C['pads_count']['v']; $j++)
|
||||
{
|
||||
$pad_net = $C['pad'.$j.'_net']['v'];
|
||||
$pad_des = $C['pad'.$j.'_des']['v'];
|
||||
if ($net == $pad_net)
|
||||
{
|
||||
$pcad_net .= " (node \"".ValidateRef($C['name1_str']['v'])."\" \"$pad_des\")\r\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
//*/
|
||||
$pcad_net .= " )\r\n";
|
||||
|
||||
}
|
||||
file_put_contents($out_file, $pcad_net, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
||||
echo"generate netclass...<br>";
|
||||
$pcad_net = " (netClass \"DefaultNetClass\"\r\n";
|
||||
for($n=0; $n<sizeof($net_list); $n++)
|
||||
{
|
||||
$pcad_net .= " (netNameRef \"".$net_list[$n]."\")\r\n";
|
||||
}
|
||||
$pcad_net .= " (attr \"Width\" \"10\" (textStyleRef \"(Default)\"))\r\n";
|
||||
$pcad_net .= " (attr \"Clearance\" \"10\" (textStyleRef \"(Default)\"))\r\n";
|
||||
$pcad_net .= " (attr \"MaxWidth\" \"1000\" (textStyleRef \"(Default)\"))\r\n";
|
||||
$pcad_net .= " (attr \"MinWidth\" \"1\" (textStyleRef \"(Default)\"))\r\n";
|
||||
$pcad_net .= " (attr \"USE_LAYERS\" \"TOP, BOTTOM\" (textStyleRef \"(Default)\"))\r\n";
|
||||
$pcad_net .= " )\r\n";
|
||||
//file_put_contents($out_file, $pcad_net, FILE_APPEND | LOCK_EX);
|
||||
|
51
pcb/php-builder/pcb_header.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
$dt = date("d.m.Y");
|
||||
$tm = date("H:i:s");
|
||||
$work_width = 2 * $pcb->MaxPosX; // "30000";
|
||||
$work_height = 2 * $pcb->MaxPosY; // "20000";
|
||||
|
||||
$pcad_pcb = " (pcbDesignHeader \r\n";
|
||||
$pcad_pcb .= " (workspaceSize $work_width $work_height) ;; MaxX=".$pcb->MaxPosX.", MaxY=".$pcb->MaxPosY."\r\n";
|
||||
$pcad_pcb .= " (gridDfns \r\n";
|
||||
//$pcad_pcb .= " (grid \"0.05mm\")\r\n";
|
||||
//$pcad_pcb .= " (grid \"0.1mm\")\r\n";
|
||||
$pcad_pcb .= " (grid \"5.0mil\")\r\n";
|
||||
$pcad_pcb .= " (grid \"10.0mil\")\r\n";
|
||||
$pcad_pcb .= " (grid \"100.0mil\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (designInfo \r\n";
|
||||
$pcad_pcb .= " (fieldSet \"(Default)\"\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Date\" \"$dt\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Time\" \"$tm\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Author\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Revision\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Title\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Approved By\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Checked By\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Company Name\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Drawing Number\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Drawn By\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Engineer\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Variant Name\" \"\")\r\n";
|
||||
$pcad_pcb .= " (fieldDef \"Variant Description\" \"\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (solderSwell 4.0)\r\n";
|
||||
$pcad_pcb .= " (pasteSwell 0.0)\r\n";
|
||||
$pcad_pcb .= " (planeSwell 20.0)\r\n";
|
||||
$pcad_pcb .= " (refPointSize 100.0)\r\n";
|
||||
$pcad_pcb .= " (infoPointSize 100.0)\r\n";
|
||||
$pcad_pcb .= " (gluePointSize 100.0)\r\n";
|
||||
$pcad_pcb .= " (pickPointSize 100.0)\r\n";
|
||||
$pcad_pcb .= " (testPointSize 100.0)\r\n";
|
||||
$pcad_pcb .= " (refPointSizePrint 100.0)\r\n";
|
||||
$pcad_pcb .= " (infoPointSizePrint 100.0)\r\n";
|
||||
$pcad_pcb .= " (gluePointSizePrint 100.0)\r\n";
|
||||
$pcad_pcb .= " (pickPointSizePrint 100.0)\r\n";
|
||||
$pcad_pcb .= " (testPointSizePrint 100.0)\r\n";
|
||||
$pcad_pcb .= " (solderFlowDirection solderFlowTopToBottom)\r\n";
|
||||
$pcad_pcb .= " (globalCopperPourCutoutBackoffFlag False)\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
79
pcb/php-builder/pcb_layerdef.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
$pcad_pcb = "";
|
||||
|
||||
// top
|
||||
$pcad_pcb .= " (layerDef \"Top\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 1)\r\n";
|
||||
$pcad_pcb .= " (layerType Signal)\r\n";
|
||||
$pcad_pcb .= " (attr \"PadToPadClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"PadToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"LineToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToPadClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToViaClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Top Assy\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 10)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Top Silk\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 6)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Top Mask\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 4)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Top Paste\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 8)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
// bottom
|
||||
$pcad_pcb .= " (layerDef \"Bottom\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 2)\r\n";
|
||||
$pcad_pcb .= " (layerType Signal)\r\n";
|
||||
$pcad_pcb .= " (attr \"PadToPadClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"PadToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"LineToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToPadClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToLineClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (attr \"ViaToViaClearance\" \"8mil\" (textStyleRef \"(Default)\") (constraintUnits mil) )\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Bot Assy\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 11)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Bot Silk\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 7)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Bot Mask\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 5)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerDef \"Bot Paste\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 9)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
// board
|
||||
$pcad_pcb .= " (layerDef \"Board\"\r\n";
|
||||
$pcad_pcb .= " (layerNum 3)\r\n";
|
||||
$pcad_pcb .= " (layerType NonSignal)\r\n";
|
||||
$pcad_pcb .= " (fieldSetRef \"(Default)\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
161
pcb/php-builder/pcb_layers.php
Normal file
@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
// generate lines
|
||||
// ================================================================================================
|
||||
for ($i=0; $i<20; $i++)
|
||||
$LAYER[$i] = array();
|
||||
|
||||
for($i=1; $i<$pcb->HDR['net_points_count']['v']; $i++)
|
||||
{
|
||||
$flags1 = hex($pcb->NETPOI[$i]['flags']['v']);
|
||||
$flags1_layer = substr($flags1, 0, 1); // 0-bot, 1-top
|
||||
$flags1_head = substr($flags1, 1, 1); // 0-start line, 1-continue, 6,7 via
|
||||
$net1 = $pcb->NETPOI[$i]['net_id']['v'];
|
||||
$x1 = $pcb->NETPOI[$i]['pos_x']['v'];
|
||||
$y1 = $pcb->NETPOI[$i]['pos_y']['v'];
|
||||
$size = $pcb->NETPOI[$i]['size']['v'];
|
||||
|
||||
|
||||
$flags2 = hex($pcb->NETPOI[($i+1)]['flags']['v']);
|
||||
$flags2_layer = substr($flags2, 0, 1); // 0-bot, 1-top
|
||||
$flags2_head = substr($flags2, 1, 1); // 0-start line, 1-continue, 6,7 via
|
||||
$net2 = $pcb->NETPOI[($i+1)]['net_id']['v'];
|
||||
$x2 = $pcb->NETPOI[($i+1)]['pos_x']['v'];
|
||||
$y2 = $pcb->NETPOI[($i+1)]['pos_y']['v'];
|
||||
|
||||
if ($net1 != $net2) continue; // next point is from other net
|
||||
if ($flags2_head == 0) continue; // next point is start
|
||||
if ($flags2_head == 8) continue; // next point is start
|
||||
if ($flags2_layer != $flags1_layer) continue; // next point at another layer, via is here
|
||||
if (($flags1_layer == $flags2_layer) and ($flags2_head == 6)) continue;
|
||||
|
||||
|
||||
|
||||
//if ($net1 != 16521) continue; // ISA RES
|
||||
//if ($net1 != 78) continue; // GND
|
||||
//if ($net1 != 90) continue; // VCC
|
||||
//if ($net1 != 66) continue; // VCC
|
||||
|
||||
|
||||
|
||||
$line['id1'] = $i;
|
||||
$line['x1'] = $x1;
|
||||
$line['y1'] = $y1;
|
||||
$line['id2'] = $i+1;
|
||||
$line['x2'] = $x2;
|
||||
$line['y2'] = $y2;
|
||||
$line['net'] = getNetByPadOfs($pcb, $net1);
|
||||
$line['size'] = $size;
|
||||
|
||||
$LAYER[$flags1_layer][] = $line;
|
||||
}
|
||||
|
||||
for($i=1; $i<$pcb->HDR['brd_points_count']['v']; $i++)
|
||||
{
|
||||
$flags1 = hex($pcb->BRDPOI[$i]['flags']['v']);
|
||||
$flags1_head = substr($flags1, 1, 1); // 0-start line, 1-continue, 6,7 via
|
||||
$x1 = $pcb->BRDPOI[$i]['pos_x']['v'];
|
||||
$y1 = $pcb->BRDPOI[$i]['pos_y']['v'];
|
||||
|
||||
$flags2 = hex($pcb->BRDPOI[($i+1)]['flags']['v']);
|
||||
$flags2_head = substr($flags2, 1, 1); // 0-start line, 1-continue, 6,7 via
|
||||
$x2 = $pcb->BRDPOI[($i+1)]['pos_x']['v'];
|
||||
$y2 = $pcb->BRDPOI[($i+1)]['pos_y']['v'];
|
||||
|
||||
if ($flags2_head == 0) continue; // next point is start
|
||||
|
||||
$line['x1'] = $x1;
|
||||
$line['y1'] = $y1;
|
||||
$line['x2'] = $x2;
|
||||
$line['y2'] = $y2;
|
||||
$line['size'] = "8";
|
||||
|
||||
$LAYER[3][] = $line;
|
||||
}
|
||||
|
||||
function createLayerContent($pcb, $LAYER, $orcad_layer)
|
||||
{
|
||||
$pcad_pcb = "";
|
||||
for($i=1; $i<sizeof($LAYER[$orcad_layer]); $i++) // 1 - orcad top
|
||||
{
|
||||
$line = $LAYER[$orcad_layer][$i];
|
||||
$x1 = $line['x1'];
|
||||
$y1 = $line['y1'];
|
||||
$x2 = $line['x2'];
|
||||
$y2 = $line['y2'];
|
||||
$size = $line['size'];
|
||||
|
||||
$net = $line['net'];
|
||||
$netref = "";
|
||||
if ($net)
|
||||
$netref="(netNameRef \"$net\") ";
|
||||
|
||||
$pcad_pcb .= " (line (pt $y1 $x1) (pt $y2 $x2) (width $size) $netref)";
|
||||
// $pcad_pcb .= " ;; [".$line['id1']."]-[".$line['id2']."]";
|
||||
$pcad_pcb .= "\r\n";
|
||||
}
|
||||
|
||||
for($i=1; $i<=$pcb->HDR['texts_count']['v']; $i++)
|
||||
{
|
||||
$T = $pcb->TXT[$i];
|
||||
if ($T['layer']['v'] != $orcad_layer) continue; // 0-bot, 1-top
|
||||
|
||||
$style = "(DefaultTTF)";
|
||||
$style = $T['style']['v'];
|
||||
$x = $T['pos_x']['v'];
|
||||
$y = $T['pos_y']['v'];
|
||||
$s = $T['str']['v'];
|
||||
$r = ($T['rotate']['v']);
|
||||
// $r = $r - 1; // rotate -90
|
||||
if ($r<0) $r = 4 + $r;
|
||||
if ($orcad_layer == 1) // HACK FOR TOP LAYER ONLY !!!
|
||||
{
|
||||
if ($r==3) $r = 1;
|
||||
}
|
||||
$r = $r * 90;
|
||||
|
||||
$flip = "";
|
||||
$flags = hex($T['flags']['v']);
|
||||
$mirrored = substr($flags, 0, 1); // 1 - not mirrored, 0 - mirrored (why ???)
|
||||
$visible = substr($flags, 1, 1); // 1 - visible, 0 - not visible
|
||||
if ($mirrored == "0") $flip = "(isFlipped True) ";
|
||||
$pcad_pcb .= " (text (pt $y $x) \"$s\" (textStyleRef \"$style\") (rotation $r) $flip(justify Center) $ext)\r\n";
|
||||
}
|
||||
|
||||
return $pcad_pcb;
|
||||
}
|
||||
|
||||
|
||||
// layer1, pcad top
|
||||
// ================================================================================================
|
||||
$pcad_pcb = " (layerContents (layerNumRef 1)\r\n";
|
||||
$pcad_pcb .= createLayerContent($pcb, $LAYER, 1);
|
||||
$pcad_pcb .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
// layer2, pcad bottom
|
||||
// ================================================================================================
|
||||
$pcad_pcb = " (layerContents (layerNumRef 2)\r\n";
|
||||
$pcad_pcb .= createLayerContent($pcb, $LAYER, 0);
|
||||
$pcad_pcb .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
// board
|
||||
// ================================================================================================
|
||||
$pcad_pcb = " (layerContents (layerNumRef 3)\r\n";
|
||||
// - lines
|
||||
for($i=1; $i<sizeof($LAYER[3]); $i++)
|
||||
{
|
||||
$line = $LAYER[3][$i];
|
||||
$x1 = $line['x1'];
|
||||
$y1 = $line['y1'];
|
||||
$x2 = $line['x2'];
|
||||
$y2 = $line['y2'];
|
||||
$net = $line['net'];
|
||||
$size = $line['size'];
|
||||
|
||||
$pcad_pcb .= " (line (pt $y1 $x1) (pt $y2 $x2) (width $size) )\r\n";
|
||||
}
|
||||
$pcad_pcb .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
64
pcb/php-builder/pcb_multilayer.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
// multilayer begin
|
||||
$pcad_pcb = " (multiLayer\r\n";
|
||||
|
||||
// - via
|
||||
for($i=0; $i<=$pcb->HDR['net_points_count']['v']; $i++)
|
||||
{
|
||||
$net1 = $pcb->NETPOI[$i]['net_id']['v'];
|
||||
$net = getNetByPadOfs($pcb, $net1);
|
||||
$netref = "";
|
||||
if ($net) $netref = "(netNameRef \"$net\") ";
|
||||
|
||||
$flags = hex($pcb->NETPOI[$i]['flags']['v']);
|
||||
$flags_hdr = substr($flags, 1, 1);
|
||||
|
||||
if ( ($flags_hdr == "6") or ($flags_hdr == "7") ) {} else continue;
|
||||
|
||||
$st = $pcb->NETPOI[$i]['style']['v'];
|
||||
$x = $pcb->NETPOI[$i]['pos_x']['v'];
|
||||
$y = $pcb->NETPOI[$i]['pos_y']['v'];
|
||||
|
||||
$pcad_pcb .= " (via (viaStyleRef \"$st\") (pt $y $x) $netref)\r\n";
|
||||
}
|
||||
//file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
// - components
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$C = $pcb->COMP[$i];
|
||||
|
||||
$name1 = ValidateRef($C['name1_str']['v']);
|
||||
$name2 = ValidateRef($C['name2_str']['v']);
|
||||
$pattern = $C['style']['v'] . "_1";
|
||||
$x = $C['pos_x']['v'];
|
||||
$y = $C['pos_y']['v'];
|
||||
|
||||
$delta = $C['rotate']['v'] - $C['style_rotate']['v'];
|
||||
$r = (2 - $delta);
|
||||
|
||||
$comment = "";
|
||||
// $comment = ";; styleR=[".$C['style_rotate']['v']."], compR=".$C['rotate']['v'].", calcR=$r";
|
||||
|
||||
$pcad_pcb .= " (pattern (patternRef \"$pattern\") (refDesRef \"$name1\") (pt $y $x) (rotation ".($r*90).") (patternGraphicsNameRef \"Primary\")\r\n";
|
||||
$pcad_pcb .= " (patternGraphicsRef $comment\r\n";
|
||||
$pcad_pcb .= " (patternGraphicsNameRef \"Primary\")\r\n";
|
||||
|
||||
$tr = ($C['rotate']['v'] +3) %4;
|
||||
if (($tr == 1) or ($tr == 3)) $tr = ($tr +2) %4;
|
||||
|
||||
// can be experimenting
|
||||
if ($C['pads_count']['v'] > 12)
|
||||
$pcad_pcb .= " (attr \"RefDes\" \"$name1\" (rotation ".($tr*90).") (isVisible True) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
|
||||
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
//file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
|
||||
// multilayer end.
|
||||
$pcad_pcb .= " )\r\n";
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
35
pcb/php-builder/pcb_stackup.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
$pcad_pcb = "";
|
||||
|
||||
// sets
|
||||
$pcad_pcb .= " (layerSets \r\n";
|
||||
$pcad_pcb .= " (layerSet \"All Layers\" \"1\" \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \"7\" \"8\" \"9\" \"10\" \"11\")\r\n";
|
||||
$pcad_pcb .= " (layerSet \"Signal Layers\" \"1\" \"1\" \"2\")\r\n";
|
||||
$pcad_pcb .= " (layerSet \"Plane Layers\" \"-1\")\r\n";
|
||||
$pcad_pcb .= " (layerSet \"Nonsignal Layers\" \"6\" \"6\" \"3\" \"4\" \"5\" \"7\" \"8\" \"9\" \"10\" \"11\")\r\n";
|
||||
$pcad_pcb .= " (layerSet \"TOP\" \"1\" \"1\" \"6\" \"3\")\r\n";
|
||||
$pcad_pcb .= " (layerSet \"BOT\" \"2\" \"2\" \"3\" \"7\")\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
// stackup
|
||||
$pcad_pcb .= " (layersStackup \r\n";
|
||||
$pcad_pcb .= " (layerStackupData \r\n";
|
||||
$pcad_pcb .= " (layerStackupName \"Top\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupMaterial \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupThickness \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupDielectricConstant \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupDisplay True)\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " (layerStackupData \r\n";
|
||||
$pcad_pcb .= " (layerStackupName \"Bottom\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupMaterial \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupThickness \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupDielectricConstant \"\")\r\n";
|
||||
$pcad_pcb .= " (layerStackupDisplay True)\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
$pcad_pcb .= " )\r\n";
|
||||
|
||||
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
||||
|
||||
|
1
pcb/php-parser/010_template/orcad2x.bt
Normal file
486
pcb/php-parser/Class_OrCad21.php
Normal file
@ -0,0 +1,486 @@
|
||||
<?
|
||||
class orcad21
|
||||
{
|
||||
const HDR_SIZE = 48;
|
||||
|
||||
public $Error;
|
||||
public $LastErrorStr;
|
||||
|
||||
public $ParseIndex;
|
||||
|
||||
public $FileName;
|
||||
public $FileSize;
|
||||
public $BUF = array();
|
||||
public $HDR = array();
|
||||
public $COMP = array();
|
||||
public $TXT = array();
|
||||
public $BRDPOI = array();
|
||||
public $NETPOI = array();
|
||||
|
||||
public $VIA_STYLE = array();
|
||||
public $PAD_STYLE = array();
|
||||
public $TXT_STYLE = array();
|
||||
|
||||
public $PATTERN_STYLE = array();
|
||||
|
||||
|
||||
public $MinPosX;
|
||||
public $MinPosY;
|
||||
public $MaxPosX;
|
||||
public $MaxPosY;
|
||||
|
||||
// constructor
|
||||
function __construct($fn = "")
|
||||
{
|
||||
$this->FileName = $fn;
|
||||
$this->Load($this->FileName);
|
||||
|
||||
$this->MinPosX = 1000000;
|
||||
$this->MinPosY = 1000000;
|
||||
$this->MaxPosX = 0;
|
||||
$this->MaxPosY = 0;
|
||||
}
|
||||
|
||||
// private
|
||||
private function hex($int)
|
||||
{
|
||||
$h = dechex($int);
|
||||
if (strlen($h)%2 != 0)
|
||||
{
|
||||
$h = str_pad($h, strlen($h) + 1, '0', STR_PAD_LEFT);
|
||||
}
|
||||
return strtoupper($h)."h";
|
||||
}
|
||||
|
||||
private function GetStr($strl, $descr = "")
|
||||
{
|
||||
$result['ofs'] = $this->ParseIndex;
|
||||
for ($i=0; $i<$strl; $i++)
|
||||
{
|
||||
if ($i > 0) $result['buf'] .= " ";
|
||||
$result['buf'] .= $this->hex(ord($this->BUF[$this->ParseIndex + $i]));
|
||||
if ((ord($this->BUF[$this->ParseIndex + $i]) > 31) and (ord($this->BUF[$this->ParseIndex + $i]) < 128))
|
||||
{
|
||||
$result['v'] .= $this->BUF[$this->ParseIndex + $i];
|
||||
}
|
||||
}
|
||||
$result['descr'] = $descr;
|
||||
$this->ParseIndex += $strl;
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function GetByte($descr = "")
|
||||
{
|
||||
$result['ofs'] = $this->ParseIndex;
|
||||
$result['buf'] = $this->hex(ord($this->BUF[$this->ParseIndex]));
|
||||
$result['v'] = ord($this->BUF[$this->ParseIndex]);
|
||||
$result['descr'] = $descr;
|
||||
$this->ParseIndex++;
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function GetWord($descr = "")
|
||||
{
|
||||
$result['ofs'] = $this->ParseIndex;
|
||||
$result['buf'] = $this->hex(ord($this->BUF[$this->ParseIndex])) . " " . $this->hex(ord($this->BUF[$this->ParseIndex + 1]));
|
||||
$result['v'] = ord($this->BUF[$this->ParseIndex]) + 256 * ord($this->BUF[$this->ParseIndex + 1]);
|
||||
$result['descr'] = $descr;
|
||||
$this->ParseIndex += 2;
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function ParseHeader()
|
||||
{
|
||||
$this->Error = 0;
|
||||
$this->LastErrorStr = "";
|
||||
|
||||
$this->ParseIndex = 0;
|
||||
$this->HDR['file_name'] = $this->GetStr(8);
|
||||
$this->HDR['file_name']['v'] = trim($this->HDR['file_name']['v']);
|
||||
$this->HDR['unk1'] = $this->GetWord();
|
||||
$this->HDR['comp_count'] = $this->GetWord();
|
||||
$this->HDR['unk3'] = $this->GetWord();
|
||||
$this->HDR['unk4'] = $this->GetWord();
|
||||
$this->HDR['unk5'] = $this->GetWord();
|
||||
$this->HDR['unk6'] = $this->GetWord();
|
||||
$this->HDR['unk7'] = $this->GetWord();
|
||||
$this->HDR['unk8'] = $this->GetWord();
|
||||
$this->HDR['unk9'] = $this->GetWord();
|
||||
$this->HDR['unk10'] = $this->GetWord();
|
||||
$this->HDR['unk11'] = $this->GetWord();
|
||||
$this->HDR['texts_ofs'] = $this->GetWord();
|
||||
$this->HDR['texts_ofs_real']['v'] = $this->HDR['texts_ofs']['v'] * 2 + self::HDR_SIZE;
|
||||
$this->HDR['texts_size'] = $this->GetWord();
|
||||
$this->HDR['brd_points_count'] = $this->GetWord();
|
||||
$this->HDR['net_points_count'] = $this->GetWord();
|
||||
$this->HDR['unk16'] = $this->GetWord();
|
||||
$this->HDR['unk17'] = $this->GetWord();
|
||||
$this->HDR['unk18'] = $this->GetWord();
|
||||
$this->HDR['file_ext'] = $this->GetStr(4);
|
||||
$this->HDR['file_ext']['v'] = trim($this->HDR['file_ext']['v']);
|
||||
|
||||
// check range
|
||||
if ($this->ParseIndex > $this->FileSize)
|
||||
{
|
||||
$this->Error = 1;
|
||||
$this->LastErrorStr = "ParseIndex is out of FileSize during ParseHeader()";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function ParseComponent($i)
|
||||
{
|
||||
$this->COMP[$i]['ofs'] = $this->ParseIndex;
|
||||
|
||||
$this->COMP[$i]['timestamp'] = $this->GetStr(8);
|
||||
$this->COMP[$i]['unk1'] = $this->GetByte();
|
||||
$this->COMP[$i]['rotate'] = $this->GetByte("0-0, 1-90, 2-180, 3-270");
|
||||
$this->COMP[$i]['layer'] = $this->GetByte("0-bot, 1-top");
|
||||
$this->COMP[$i]['unk3'] = $this->GetByte();
|
||||
$this->COMP[$i]['unk4'] = $this->GetWord();
|
||||
$this->COMP[$i]['unk5'] = $this->GetWord();
|
||||
$this->COMP[$i]['unk6'] = $this->GetWord();
|
||||
$this->COMP[$i]['unk7'] = $this->GetWord();
|
||||
$this->COMP[$i]['pos_y'] = $this->GetWord();
|
||||
$this->COMP[$i]['pos_x'] = $this->GetWord();
|
||||
$this->COMP[$i]['unk10'] = $this->GetWord();
|
||||
$this->COMP[$i]['unk11'] = $this->GetWord();
|
||||
$this->COMP[$i]['lines_ofs'] = $this->GetWord();
|
||||
$this->COMP[$i]['names_ofs'] = $this->GetWord();
|
||||
$this->COMP[$i]['pads_ofs'] = $this->GetWord();
|
||||
$this->COMP[$i]['next_ofs1'] = $this->GetWord();
|
||||
$this->COMP[$i]['next_ofs2'] = $this->GetWord();
|
||||
$this->COMP[$i]['pattern'] = $this->GetStr(8);
|
||||
$this->COMP[$i]['pattern']['v'] = trim($this->COMP[$i]['pattern']['v']);
|
||||
$this->COMP[$i]['next_ofs3'] = $this->GetWord();
|
||||
|
||||
$this->COMP[$i]['lines_count']['v'] = ($this->COMP[$i]['names_ofs']['v'] - $this->COMP[$i]['lines_ofs']['v']) / 6;
|
||||
$this->COMP[$i]['names_count']['v'] = ($this->COMP[$i]['pads_ofs']['v'] - $this->COMP[$i]['names_ofs']['v']) / 24;
|
||||
$this->COMP[$i]['pads_count']['v'] = ($this->COMP[$i]['next_ofs1']['v'] - $this->COMP[$i]['pads_ofs']['v']) / 24;
|
||||
|
||||
// lines
|
||||
for($j=1; $j<=$this->COMP[$i]['lines_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['line'.$j.'_flags'] = $this->GetWord();
|
||||
$this->COMP[$i]['line'.$j.'_pos_y'] = $this->GetWord();
|
||||
$this->COMP[$i]['line'.$j.'_pos_x'] = $this->GetWord();
|
||||
}
|
||||
|
||||
// names
|
||||
for($j=1; $j<=$this->COMP[$i]['names_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['name'.$j.'_unk1'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_unk2'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_str'] = $this->GetStr(8);
|
||||
$this->COMP[$i]['name'.$j.'_str']['v'] = trim($this->COMP[$i]['name'.$j.'_str']['v']);
|
||||
$this->COMP[$i]['name'.$j.'_unk4'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_unk5'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_unk6'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_unk7'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_pos_y'] = $this->GetWord();
|
||||
$this->COMP[$i]['name'.$j.'_pos_x'] = $this->GetWord();
|
||||
}
|
||||
|
||||
// pads
|
||||
for($j=1; $j<=$this->COMP[$i]['pads_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['pad'.$j.'_ofs_real']['v'] = $this->ParseIndex;
|
||||
$this->COMP[$i]['pad'.$j.'_ofs']['v'] = round($this->ParseIndex / 2) - 24;
|
||||
$this->COMP[$i]['pad'.$j.'_des'] = $this->GetStr(4);
|
||||
$this->COMP[$i]['pad'.$j.'_des']['v'] = trim($this->COMP[$i]['pad'.$j.'_des']['v']);
|
||||
$this->COMP[$i]['pad'.$j.'_net'] = $this->GetStr(8);
|
||||
$this->COMP[$i]['pad'.$j.'_net']['v'] = trim($this->COMP[$i]['pad'.$j.'_net']['v']);
|
||||
$this->COMP[$i]['pad'.$j.'_shape'] = $this->GetByte("1-circ, 2-rect");
|
||||
$this->COMP[$i]['pad'.$j.'_width'] = $this->GetWord();
|
||||
$this->COMP[$i]['pad'.$j.'_height'] = $this->GetWord();
|
||||
$this->COMP[$i]['pad'.$j.'_rotate'] = $this->GetByte("0-0, 1-90, 2-180, 3-270");
|
||||
$this->COMP[$i]['pad'.$j.'_flags'] = $this->GetByte("1-smd, 3-plated");
|
||||
$this->COMP[$i]['pad'.$j.'_hole_dia'] = $this->GetByte();
|
||||
$this->COMP[$i]['pad'.$j.'_pos_y'] = $this->GetWord();
|
||||
$this->COMP[$i]['pad'.$j.'_pos_x'] = $this->GetWord();
|
||||
}
|
||||
}
|
||||
|
||||
private function ParseComponents()
|
||||
{
|
||||
$this->Error = 0;
|
||||
$this->LastErrorStr = "";
|
||||
|
||||
// 'comp_count' = 'comp_count_real' + 1,
|
||||
// so needs check 'ParseIndex' does not over 'texts_ofs_real'
|
||||
for($i=1; $i<=$this->HDR['comp_count']['v']; $i++)
|
||||
{
|
||||
$this->ParseComponent($i);
|
||||
|
||||
// check components size
|
||||
if($this->ParseIndex >= $this->HDR['texts_ofs_real']['v'])
|
||||
{
|
||||
$this->HDR['comp_count_real']['v'] = $i;
|
||||
return true;
|
||||
}
|
||||
|
||||
// check range
|
||||
if ($this->ParseIndex > $this->FileSize)
|
||||
{
|
||||
$this->Error = 1;
|
||||
$this->LastErrorStr = "ParseIndex is out of FileSize during ParseComponents(), i=" . $i;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function ParseTexts()
|
||||
{
|
||||
$this->Error = 0;
|
||||
$this->LastErrorStr = "";
|
||||
|
||||
$i = 1;
|
||||
while (1)
|
||||
{
|
||||
$this->TXT[$i]['ofs'] = $this->ParseIndex;
|
||||
|
||||
$this->TXT[$i]['unk1'] = $this->GetWord();
|
||||
$this->TXT[$i]['unk2'] = $this->GetWord();
|
||||
$this->TXT[$i]['unk3'] = $this->GetWord();
|
||||
$this->TXT[$i]['unk4'] = $this->GetWord();
|
||||
$this->TXT[$i]['unk5'] = $this->GetWord();
|
||||
$this->TXT[$i]['unk6'] = $this->GetWord();
|
||||
$this->TXT[$i]['len'] = $this->GetByte();
|
||||
$this->TXT[$i]['size_h'] = $this->GetWord();
|
||||
$this->TXT[$i]['size_v'] = $this->GetWord();
|
||||
$this->TXT[$i]['rotate'] = $this->GetByte("0-0, 1-90, 2-180, 3-270");
|
||||
$this->TXT[$i]['layer'] = $this->GetByte("0-bot, 1-top");
|
||||
$this->TXT[$i]['flags'] = $this->GetByte("(HL), H-mirrored(0-yes)");
|
||||
$this->TXT[$i]['pos_y'] = $this->GetWord();
|
||||
$this->TXT[$i]['pos_x'] = $this->GetWord();
|
||||
$this->TXT[$i]['str'] = $this->GetStr($this->TXT[$i]['len']['v']);
|
||||
|
||||
// check texts size
|
||||
if ($this->ParseIndex >= ($this->HDR['texts_ofs_real']['v'] + $this->HDR['texts_size']['v']))
|
||||
break;
|
||||
|
||||
// check range
|
||||
if ($this->ParseIndex > $this->FileSize)
|
||||
{
|
||||
$this->Error = 1;
|
||||
$this->LastErrorStr = "ParseIndex is out of FileSize during ParseTexts(), i=" . $i;
|
||||
return false;
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
$this->HDR['texts_count']['v'] = $i;
|
||||
return true;
|
||||
}
|
||||
|
||||
private function ParseBoardPoints()
|
||||
{
|
||||
$this->Error = 0;
|
||||
$this->LastErrorStr = "";
|
||||
|
||||
for($i=1; $i<=$this->HDR['brd_points_count']['v']; $i++)
|
||||
{
|
||||
|
||||
$this->BRDPOI[$i]['ofs'] = $this->ParseIndex;
|
||||
|
||||
$this->BRDPOI[$i]['flags'] = $this->GetByte();
|
||||
$this->BRDPOI[$i]['unk2'] = $this->GetByte();
|
||||
$this->BRDPOI[$i]['pos_y'] = $this->GetWord();
|
||||
$this->BRDPOI[$i]['pos_x'] = $this->GetWord();
|
||||
$this->BRDPOI[$i]['unk5'] = $this->GetByte();
|
||||
$this->BRDPOI[$i]['unk6'] = $this->GetByte();
|
||||
|
||||
if ($this->BRDPOI[$i]['pos_x']['v'] < $this->MinPosX) $this->MinPosX = $this->BRDPOI[$i]['pos_x']['v'];
|
||||
if ($this->BRDPOI[$i]['pos_y']['v'] < $this->MinPosY) $this->MinPosY = $this->BRDPOI[$i]['pos_y']['v'];
|
||||
|
||||
if ($this->BRDPOI[$i]['pos_x']['v'] > $this->MaxPosX) $this->MaxPosX = $this->BRDPOI[$i]['pos_x']['v'];
|
||||
if ($this->BRDPOI[$i]['pos_y']['v'] > $this->MaxPosY) $this->MaxPosY = $this->BRDPOI[$i]['pos_y']['v'];
|
||||
|
||||
// check range
|
||||
if ($this->ParseIndex > $this->FileSize)
|
||||
{
|
||||
$this->Error = 1;
|
||||
$this->LastErrorStr = "ParseIndex is out of FileSize during ParseBoardPoints(), i=" . $i;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function ParseNetPoints()
|
||||
{
|
||||
$this->Error = 0;
|
||||
$this->LastErrorStr = "";
|
||||
|
||||
for($i=1; $i<=$this->HDR['net_points_count']['v']; $i++)
|
||||
{
|
||||
|
||||
$this->NETPOI[$i]['ofs'] = $this->ParseIndex;
|
||||
|
||||
$this->NETPOI[$i]['flags'] = $this->GetByte("(1x)h-layer, (x1)h-head");
|
||||
$this->NETPOI[$i]['size'] = $this->GetByte();
|
||||
$this->NETPOI[$i]['pos_y'] = $this->GetWord();
|
||||
$this->NETPOI[$i]['pos_x'] = $this->GetWord();
|
||||
$this->NETPOI[$i]['net_id'] = $this->GetWord();
|
||||
|
||||
// check range
|
||||
if ($this->ParseIndex > $this->FileSize)
|
||||
{
|
||||
$this->Error = 1;
|
||||
$this->LastErrorStr = "ParseIndex is out of FileSize during ParseNetPoints(), i=" . $i;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// public
|
||||
public function Load()
|
||||
{
|
||||
$this->ParseIndex = 0;
|
||||
$this->BUF = file_get_contents($this->FileName);
|
||||
$this->FileSize = filesize($this->FileName);
|
||||
if (!$this->FileSize)
|
||||
{
|
||||
$this->FileSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public function Parse()
|
||||
{
|
||||
$this->ParseHeader();
|
||||
$this->ParseComponents();
|
||||
$this->ParseTexts();
|
||||
$this->ParseBoardPoints();
|
||||
$this->ParseNetPoints();
|
||||
|
||||
if ($this->FileSize == $this->ParseIndex)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function ChangePos($dx, $dy, $reverse_x, $reverse_y, $swap = 0)
|
||||
{
|
||||
// component
|
||||
for($i=1; $i<=sizeof($this->COMP); $i++)
|
||||
{
|
||||
if (!$this->COMP[$i]['ofs']) continue;
|
||||
|
||||
$this->COMP[$i]['pos_x']['v'] += $dx;
|
||||
$this->COMP[$i]['pos_y']['v'] += $dy;
|
||||
if ($reverse_x) $this->COMP[$i]['pos_x']['v'] = $reverse_x - $this->COMP[$i]['pos_x']['v'];
|
||||
if ($reverse_y) $this->COMP[$i]['pos_y']['v'] = $reverse_y - $this->COMP[$i]['pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->COMP[$i]['pos_x']['v'];
|
||||
$this->COMP[$i]['pos_x']['v'] = $this->COMP[$i]['pos_y']['v'];
|
||||
$this->COMP[$i]['pos_y']['v'] = $tmp;
|
||||
}
|
||||
|
||||
// lines
|
||||
for($j=1; $j<=$this->COMP[$i]['lines_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['line'.$j.'_pos_y']['v'] += $dy;
|
||||
$this->COMP[$i]['line'.$j.'_pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->COMP[$i]['line'.$j.'_pos_x']['v'] = $reverse_x - $this->COMP[$i]['line'.$j.'_pos_x']['v'];
|
||||
if ($reverse_y) $this->COMP[$i]['line'.$j.'_pos_y']['v'] = $reverse_y - $this->COMP[$i]['line'.$j.'_pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->COMP[$i]['line'.$j.'_pos_x']['v'];
|
||||
$this->COMP[$i]['line'.$j.'_pos_x']['v'] = $this->COMP[$i]['line'.$j.'_pos_y']['v'];
|
||||
$this->COMP[$i]['line'.$j.'_pos_y']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// names
|
||||
for($j=1; $j<=$this->COMP[$i]['names_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['name'.$j.'_pos_y']['v'] += $dy;
|
||||
$this->COMP[$i]['name'.$j.'_pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->COMP[$i]['name'.$j.'_pos_x']['v'] = $reverse_x - $this->COMP[$i]['name'.$j.'_pos_x']['v'];
|
||||
if ($reverse_y) $this->COMP[$i]['name'.$j.'_pos_y']['v'] = $reverse_y - $this->COMP[$i]['name'.$j.'_pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->COMP[$i]['name'.$j.'_pos_x']['v'];
|
||||
$this->COMP[$i]['name'.$j.'_pos_x']['v'] = $this->COMP[$i]['name'.$j.'_pos_y']['v'];
|
||||
$this->COMP[$i]['name'.$j.'_pos_y']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// pads
|
||||
for($j=1; $j<=$this->COMP[$i]['pads_count']['v']; $j++)
|
||||
{
|
||||
$this->COMP[$i]['pad'.$j.'_pos_y']['v'] += $dy;
|
||||
$this->COMP[$i]['pad'.$j.'_pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->COMP[$i]['pad'.$j.'_pos_x']['v'] = $reverse_x - $this->COMP[$i]['pad'.$j.'_pos_x']['v'];
|
||||
if ($reverse_y) $this->COMP[$i]['pad'.$j.'_pos_y']['v'] = $reverse_y - $this->COMP[$i]['pad'.$j.'_pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->COMP[$i]['pad'.$j.'_pos_x']['v'];
|
||||
$this->COMP[$i]['pad'.$j.'_pos_x']['v'] = $this->COMP[$i]['pad'.$j.'_pos_y']['v'];
|
||||
$this->COMP[$i]['pad'.$j.'_pos_y']['v'] = $tmp;
|
||||
|
||||
$tmp = $this->COMP[$i]['pad'.$j.'_width']['v'];
|
||||
$this->COMP[$i]['pad'.$j.'_width']['v'] = $this->COMP[$i]['pad'.$j.'_height']['v'];
|
||||
$this->COMP[$i]['pad'.$j.'_height']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// text
|
||||
for($i=1; $i<=sizeof($this->TXT); $i++)
|
||||
{
|
||||
$this->TXT[$i]['pos_y']['v'] += $dy;
|
||||
$this->TXT[$i]['pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->TXT[$i]['pos_x']['v'] = $reverse_x - $this->TXT[$i]['pos_x']['v'];
|
||||
if ($reverse_y) $this->TXT[$i]['pos_y']['v'] = $reverse_y - $this->TXT[$i]['pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->TXT[$i]['pos_x']['v'];
|
||||
$this->TXT[$i]['pos_x']['v'] = $this->TXT[$i]['pos_y']['v'];
|
||||
$this->TXT[$i]['pos_y']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// board points
|
||||
for($i=1; $i<=$this->HDR['brd_points_count']['v']; $i++)
|
||||
{
|
||||
$this->BRDPOI[$i]['pos_y']['v'] += $dy;
|
||||
$this->BRDPOI[$i]['pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->BRDPOI[$i]['pos_x']['v'] = $reverse_x - $this->BRDPOI[$i]['pos_x']['v'];
|
||||
if ($reverse_y) $this->BRDPOI[$i]['pos_y']['v'] = $reverse_y - $this->BRDPOI[$i]['pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->BRDPOI[$i]['pos_y']['v'];
|
||||
$this->BRDPOI[$i]['pos_y']['v'] = $this->BRDPOI[$i]['pos_x']['v'];
|
||||
$this->BRDPOI[$i]['pos_x']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
// net pointes
|
||||
for($i=1; $i<=$this->HDR['net_points_count']['v']; $i++)
|
||||
{
|
||||
$this->NETPOI[$i]['pos_y']['v'] += $dy;
|
||||
$this->NETPOI[$i]['pos_x']['v'] += $dx;
|
||||
if ($reverse_x) $this->NETPOI[$i]['pos_x']['v'] = $reverse_x - $this->NETPOI[$i]['pos_x']['v'];
|
||||
if ($reverse_y) $this->NETPOI[$i]['pos_y']['v'] = $reverse_y - $this->NETPOI[$i]['pos_y']['v'];
|
||||
if ($swap)
|
||||
{
|
||||
$tmp = $this->NETPOI[$i]['pos_x']['v'];
|
||||
$this->NETPOI[$i]['pos_x']['v'] = $this->NETPOI[$i]['pos_y']['v'];
|
||||
$this->NETPOI[$i]['pos_y']['v'] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
123
pcb/php-parser/parser.php
Normal file
@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
// helpers
|
||||
function hex($int)
|
||||
{
|
||||
$h = dechex($int);
|
||||
if (strlen($h)%2 != 0)
|
||||
{
|
||||
$h = str_pad($h, strlen($h) + 1, '0', STR_PAD_LEFT);
|
||||
}
|
||||
return strtoupper($h)."h";
|
||||
}
|
||||
function ValidateRef($ref)
|
||||
{
|
||||
$ref = str_replace("-", "_", $ref);
|
||||
$ref = str_replace("*", "", $ref);
|
||||
$ref = str_replace("?", "", $ref);
|
||||
$ref = str_replace(".", "", $ref);
|
||||
$ref = str_replace("+", "", $ref);
|
||||
if (!trim($ref)) $ref = "UNK";
|
||||
return $ref;
|
||||
}
|
||||
function getNetByPadOfs($pcb, $ofs)
|
||||
{
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
for ($j=1; $j<=$pcb->COMP[$i]['pads_count']['v']; $j++)
|
||||
{
|
||||
$pad_ofs = $pcb->COMP[$i]['pad'.$j.'_ofs']['v'];
|
||||
if ($pad_ofs == $ofs)
|
||||
{
|
||||
return $pcb->COMP[$i]['pad'.$j.'_net']['v'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// include class
|
||||
include("p/" . $proj[$PROJ_ID]['dir'] . "/Class_OrCad21.php");
|
||||
|
||||
// parse
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
$pcb = new orcad21("p/" . $proj[$PROJ_ID]['dir'] . "/sprint05.pcb");
|
||||
echo"file size = [".$pcb->FileSize."]<br>";
|
||||
|
||||
if (!$pcb->Parse())
|
||||
{
|
||||
echo"parser error<br>";
|
||||
return;
|
||||
}
|
||||
|
||||
// print results
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
echo"min_x = ".$pcb->MinPosX.", min_y = ".$pcb->MinPosY."<br>";
|
||||
echo"max_x = ".$pcb->MaxPosX.", max_y = ".$pcb->MaxPosY."<br>";
|
||||
|
||||
// transform all coordinates from "orcad-top-left" to "pcad-bottom-left"
|
||||
$pcb->ChangePos(0,0, 0,($pcb->MaxPosY + $pcb->MinPosY), 1);
|
||||
|
||||
// check ref duplicated
|
||||
$REF = array();
|
||||
echo"validate ref...<br>";
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$ref1 = $pcb->COMP[$i]['name1_str']['v'];
|
||||
$ref2 = ValidateRef($pcb->COMP[$i]['name1_str']['v']);
|
||||
if ($ref1 != $ref2)
|
||||
{
|
||||
echo"name [$ref1] change to [$ref2]<br>";
|
||||
$pcb->COMP[$i]['name1_str']['v'] = $ref2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo"check duplicates...<br>";
|
||||
$found = 0;
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$ref = $pcb->COMP[$i]['name1_str']['v'];
|
||||
$REF[$ref] = $REF[$ref] + 1;
|
||||
if ($REF[$ref] > 1)
|
||||
$found = 1;
|
||||
}
|
||||
if ($found)
|
||||
{
|
||||
echo"duplicate found!<br>";
|
||||
foreach ($REF as $ref => $m)
|
||||
{
|
||||
if ($REF[$ref] > 1)
|
||||
{
|
||||
echo"[$ref] = ".$REF[$ref]."<br>";
|
||||
$id = 1;
|
||||
for($i=0; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$comp_ref = $pcb->COMP[$i]['name1_str']['v'];
|
||||
if ($comp_ref == $ref)
|
||||
{
|
||||
$pcb->COMP[$i]['name1_str']['v'] = $comp_ref . "_DUP".$id;
|
||||
$id++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$REF = array();
|
||||
echo"check duplicates...<br>";
|
||||
$found = 0;
|
||||
for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
|
||||
{
|
||||
$ref = $pcb->COMP[$i]['name1_str']['v'];
|
||||
$REF[$ref] = $REF[$ref] + 1;
|
||||
if ($REF[$ref] > 1)
|
||||
$found = 1;
|
||||
}
|
||||
if ($found)
|
||||
echo"duplicate found!<br>";
|
||||
else
|
||||
echo"no duplicates now<br>";
|
||||
|
||||
echo"<br>";
|
||||
|
||||
// build ...
|
BIN
pcb/sp97-sch-v1-neiro_upscale_1.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
pcb/sp97-sch-v1-neiro_upscale_2.jpg
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
pcb/sp97-sch-v1.jpg
Normal file
After Width: | Height: | Size: 192 KiB |
BIN
photos/altium.jpg
Normal file
After Width: | Height: | Size: 281 KiB |
BIN
photos/orcad440.jpg
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
photos/orcad440of.jpg
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
photos/parser1.jpg
Normal file
After Width: | Height: | Size: 359 KiB |
BIN
photos/parser2.jpg
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
photos/sp97_bot.jpg
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
photos/sp97_top.jpg
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
photos/sp98_bot.jpg
Normal file
After Width: | Height: | Size: 605 KiB |
BIN
photos/sp98_mont.jpg
Normal file
After Width: | Height: | Size: 837 KiB |
BIN
photos/sp98_top.jpg
Normal file
After Width: | Height: | Size: 500 KiB |
BIN
photos/sp_proto.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |