Repository navigation
Lace 0.2.0
0.2.0 (2026-10-05)
A 0.1.0 saiu com o nome Solar; esta é a mesma linha com o nome Lace (o
executável lace, a pasta ~/.local/share/lace, LACE_* no lugar de
SOLAR_*). O Lace não troca o Solar: quem tem o Solar 0.1.0 o desinstala e
instala o Lace (INSTALL.md, "Quem tem o Solar 0.1.0").
Lace Studio e instaladores:
- O Lace Studio, o ambiente gráfico, passa a morar neste repositório
(studio/), com a versão do Lace, e a sair no instalador como o
componentestudio, marcado na instalação Recommended. Fica no bundle
(toolchain/studio/), usa o bundle em que está e ganha atalho no menu de
aplicativos: olace-studio.desktopno Linux, oLace Studio.appem
~/Applicationsno macOS, o menu Iniciar (e, se marcado, a área de
trabalho) no Windows.lace install studioo instala depois, e o
uninstall.shtira o atalho (ADR 0013,lace_installer::desktop). - Os instaladores avisam quando falta o WebView do Studio: o webkit2gtk 4.1
no Linux, o WebView2 no Windows. - O cocotb também é componente no Windows, do bloco MSYS2 do lace-toolchain
(o Python e a VPI do Verilator compilados lá). Com isso, todo aplicativo
do bundle é selecionável nas três plataformas; só a linha de comando é
sempre instalada. - O bloco de Windows (
msys) vem do lace-toolchainucrt64-v1. - No Windows, o
lace.exe, o instalador, o Studio e o surfer-aurora levam
o runtime do Visual C++ dentro (+crt-static,.cargo/config.toml): não
pedem mais oVCRUNTIME140.dll. O Lace cria a pastatmp/do MSYS antes
do Verilator, cujomakeavisavacould not find /tmpa cada chamada. - Mínimos documentados (INSTALL.md, Requisitos): no Linux, a glibc 2.35
(Ubuntu 22.04, Debian 12, Fedora 36), porque o CI compila no
ubuntu-22.04(antes,ubuntu-24.04, que exigia a 2.39); no macOS, o 13,
comMACOSX_DEPLOYMENT_TARGET=13.0no build. - O
release.ymlpublica os pedaços do bundle na raiz da release (antes eles
ficavam emapps/e o passo das somas falhava) e confere que o Studio
tem a versão do Lace. - Windows, achados no primeiro CI com o instalador: a hierarquia (
lace hierarchy, a árvore do Studio) perdia as\dos caminhos dos arquivos (o
.vvpdo Icarus os guarda sem escapar; oiverilogda hierarquia passa a
recebê-los com/); abrir o projeto enquanto outro processo grava o.spf
falhava na troca do arquivo (Project::opencanonicaliza a pasta e tenta de
novo por alguns milissegundos, e a gravação também); odocs/schemavai em
LF no checkout. Limitação registrada: no Windows, a simulação encerrada pelo
--timeoutperde o que ainda estava no buffer de saída do simulador.
O Lace passa a cobrir o desenvolvimento em Verilog e o de processadores
SAPHO num fluxo só. Um projeto é Verilog; os processadores, quando existem,
são compilados pelo YANC antes de verificar, simular ou sintetizar. Um
projeto só de Verilog não precisa do YANC: a biblioteca SAPHO só entra
quando o projeto tem processadores (antes, entrava sempre que o YANC estava
instalado).
Comandos e opções novos:
lace add <arquivo.v>... [--tb]registra arquivos Verilog e decide pelo
conteúdo, com a regra da AURORA, se cada um é módulo ou testbench. O
arquivo que não existe é criado a partir de um modelo, e o testbench-modelo
já instancia o módulo testado. O primeiro módulo vira o topo; o primeiro
testbench, o simulado.lace remove <arquivo.v>...tira do projeto, sem apagar do disco.lace top [arquivo|módulo]mostra o topo ou o escolhe, por arquivo ou
por nome de módulo. Qualquer Verilog pode ser o topo, inclusive o
Hardware/<proc>.vque o build de um processador gerou; a exceção é o
nome de testbench (tb_<nome>.v,<nome>_tb.v,tb.v,
verilog::is_testbench_name), recusado cominvalid_name.lace add
não escolhe sozinho um arquivo com nome assim como topo.lace check <arquivo>verifica só os módulos de um arquivo;
lace check --lintacrescenta overilator --lint-only -Wall.lace sim <testbench>escolhe o testbench e simula.lace wave, sem argumento, abre a onda da simulação do projeto;
lace wave -p <proc>, a do processador.lace waveelace sim --openabrem a onda de um processador SAPHO
com o layout da AURORA: as variáveis do programa, a instrução de assembly
e a linha do C± de cada ciclo, em grupos (I/O, instruções, variáveis,
flags). As tabelas do YANC (trad_opcode.txt,trad_cmm.txt) viram
tradutores do Surfer em.lace/Temp/surfer/, sem tocar na configuração
do usuário.--no-layoutabre a onda crua. No Core,wave_layoute
prepare_wave_layout(ADR 0011).- O bundle traz o cliente web do surfer-aurora (
surfer-aurora/web/, da
mesma tag do executável), para interfaces que mostram a onda numa página;
Toolchain::surfer_web_diro acha. lace statusmostra o módulo de topo e os.vda pasta que não estão
registrados.lace move <origem>... <destino>move ou renomeia arquivos e pastas do
projeto, com os argumentos domv, e mantém o.spfem dia: os arquivos
registrados continuam registrados no lugar novo, na mesma posição, e o
topo, o testbench escolhido e o módulo de topo acompanham. O.spf, a
.lacee as pastas e o fonte dos processadores ficam no lugar; o destino
que existe não é sobrescrito (Project::move_path, erros novos
outside_project,cannot_moveepath_exists).lace hierarchy [-p <proc>]mostra a árvore de instâncias do design e de
cada testbench (os registrados e o de cada processador compilado), como o
Icarus as elabora: parâmetros resolvidos, blocosgenerateexpandidos e
as unidades da biblioteca SAPHO que o processador usa. Uma elaboração que
falha não esconde as outras. Não compila nem grava relatório
(lace_core::hierarchy,docs/schema/hierarchy.json).
Nome de projeto:
lace new(eProject::create) só aceita letras sem acento, dígitos,
_e-, começando por letra: o nome vira a pasta, o.spfe parte do
caminho de tudo que as ferramentas recebem. Antes aceitava espaço e
acento. Projetos que já existem, como os da AURORA, continuam abrindo.
validate_project_nameé pública, para uma interface avisar enquanto o
usuário digita.
Comandos e opções que saíram:
| Saiu | No lugar |
|---|---|
lace file add (--testbench, --create) |
lace add (--tb); o arquivo que não existe é criado |
lace file remove |
lace remove |
lace file top |
lace top |
lace file testbench |
lace sim <testbench> |
lace file list, lace proc list |
lace status |
lace input |
escrever <proc>/Simulation/input_<n>.txt, um valor por linha |
lace output |
lace sim -p mostra as saídas; o arquivo continua em <proc>/Simulation/output_<n>.txt |
lace config (show, path, set-compiler, unset-compiler) e o arquivo de configuração |
--compiler <DIR> ou a variável LACE_COMPILER, em qualquer comando |
--config, LACE_CONFIG |
nenhum: não há mais arquivo de configuração |
proc set --show-arrays |
proc set --arrays |
build --freq, --clocks, --show-arrays; sim --freq, --clocks |
proc set --freq, --clocks, --arrays, que gravam no .spf |
sim --simulator verilator |
sim --verilator |
sim --vcd |
a extensão do $dumpfile do testbench |
sim --jobs |
nenhum: o Verilator usa todos os núcleos |
sim --no-build, synth --no-build |
nenhum: os processadores são sempre compilados antes |
synth --no-widths |
nenhum: o esquemático sempre traz as larguras |
wave --view, wave --wait |
nenhum |
lace completions continua, mas não aparece mais na ajuda.
De qualquer pasta do projeto:
- Todo comando funciona de qualquer pasta do projeto, não só da raiz: o Lace
procura o.spfna pasta atual e nas de cima (Project::discover). Fora
de um projeto, o erro éproject_not_found. - Dentro da pasta de um processador (
soma/,soma/Software/,
soma/Simulation/),build,check,sim,wave,synthe
proc setsem nome valem para ele; no resto do projeto, para o projeto
inteiro (proc setpede o nome).lace statusmarca o processador da
pasta, e o JSON dele ganhahere. lace check -p <proc>verifica só o Verilog do processador e o testbench
gerado pelo YANC (CheckOptions::processor).
Saída em texto:
- Num terminal, uma barra mostra que cada passo está rodando (
Simulating (vvp),Compiling the model (verilator)), com o tempo decorrido. É
indeterminada, porque os simuladores não informam quanto falta, e só
aparece depois de 0,3 s. - O fim de cada operação diz o que ela fez e como terminou (
finished in 0.09 s,failed after 2 ms: cmmcomp exited with code 1), lista cada
passo (done,failed,not run) e mostra os artefatos com o papel e o
caminho:Generated, ou, numa falha,Written before it stoppedeNot generated. Quando um build falha antes,check,simesynthdizem que
a fase seguinte não rodou. Depois da simulação, a dica de abrir a onda.
Testbench dos processadores:
- O build copia o testbench que o YANC gera na pasta temporária para
<processador>/Simulation/<processador>_tb.v, como a AURORA, e a
simulação roda essa cópia. Antes ele ficava só em
.lace/Temp/<processador>/, e parecia que o YANC não o gerava.
Relatórios:
- Cada
lace build,check,simesynthgrava um relatório no
histórico do projeto (.lace/reports/run-NNNNNN/): status, comando,
máquina, ferramentas do bundle com versão e caminho, projeto, tempo de
cada fase e de cada ferramenta, estatísticas de síntese, artefatos e, numa
falha, o erro e o fim da saída do passo. É a função de relatório do
Alpha-Solar, trazida para o Core
(ADR 0010). lace reportmostra o mais novo;lace report show <ID>, um deles;
lace report list [--limit N], todos;lace report compare [ID] [--against ID] [--summary]compara as estatísticas de síntese e os tempos
de simulação de dois, com avisos quando o contexto difere.lace report cleanapaga relatórios: todos, todos menos osNmais novos
(--keep N) ou os pedidos pelo identificador. Apagar em massa pergunta
antes; sem terminal, exige--yes. O número de um relatório apagado não
volta.- A síntese grava o
stat -jsondo Yosys, e oSynthesisResulttraz as
estatísticas emstatistics. - Todo resultado de operação ganha
duration_ms, do começo ao fim; o JSON
debuild,check,simesynthganhareport, o relatório gravado.
Bundle de Windows:
- No Windows, o Icarus e o Verilator passam a vir do bloco MSYS2 UCRT64 do
repositório lace-toolchain (o pacotemsysdebundle/versions.json),
com o g++, omakee o Perl que o Verilator usa e o Python com o cocotb.
O Verilator funciona sem instalar o MSYS2, e o Lace não procura mais o
MSYS2 emC:\msys64;--compilercontinua trocando o compilador, para
desenvolvimento. O Yosys continua vindo do OSS CAD Suite. No Linux e no
macOS nada muda: tudo do OSS CAD Suite, com o compilador do sistema
(ADR 0009). lace toolsdiz se o compilador do Verilator é do bundle ou do sistema;
no--json,system_compiler.bundled.lace updatecompara o Icarus e o Verilator do Windows com as releases
do lace-toolchain.
Bundle de Linux e macOS:
- Componente novo,
cocotb, fora da Recommended: o cocotb do OSS CAD Suite
com o Python que o roda e o pytest, para testbenches em Python no Icarus
(exigido) e no Verilator. Acrescenta 115 MiB no Linux e 76 MiB no macOS
(42 e 25 MiB com o Verilator, que traz o mesmo Python). O Lace ainda não
tem fluxo de cocotb, e no Windows o componente ainda não existe. - O empacotamento segue o
$ORIGINdo RUNPATH das bibliotecas do Linux, e
aceita exceções aoexclude(keepembundle/components.json).
Instalar aplicativos do bundle:
lace installinstala aplicativos do bundle (Verilator, Yosys, ...) na
instalação, sem reinstalar o Lace. Sem nomes, abre no terminal a lista,
com os instalados travados;lace install verilatorinstala direto. Só
os pedaços dos aplicativos novos são baixados e extraídos emtoolchain/,
e uma falha no meio desfaz o que entrou.- A release passa a publicar o bundle em pedaços
(lace-<versão>-<plataforma>-<pedaço>, com o índice), conferidos pelo
SHA256SUMS: é de lá que olace installbaixa.--fromusa um
instalador no disco;LACE_RELEASE_URL, um espelho. lace-pack tui --assets <DIR>grava esses pedaços com os nomes da
release.
Atualizar:
lace updatecompara o Lace, o bundle e cada aplicativo instalado com
a última release e com a última versão upstream, e marca o que é mais
novo;--checksó mostra. Com um Lace mais novo, pergunta (--yesnão
pergunta) e reinstala pelo instalador da release, conferido pelo
SHA256SUMS, com os mesmos aplicativos, a mesma pasta e o mesmo atalho; no
Windows, abre o assistente. Ferramenta mais nova upstream não é instalada
direto: chega num bundle novo, numa release nova do Lace.
Desinstalar:
lace uninstallremove a instalação de onde ele roda, com o bundle
inteiro: no Linux e no macOS roda ouninstall.shda pasta; no Windows
abre o desinstalador. Pergunta antes;--yesnão pergunta. Apaga também o
arquivo de configuração da 0.1.0.- O
uninstall.shapaga também as sobras de uma instalação interrompida
(.instalando-*,.antigo-*), que antes deixavam a pasta para trás.
Cancelamento, prazo e saída ao vivo:
- O Ctrl+C (e o SIGTERM, e no Unix o SIGHUP) cancela a operação: o Lace
encerra a ferramenta que roda, com tudo o que ela iniciou, mostra o que
chegou a rodar e sai com o código 130. Um segundo Ctrl+C sai na hora.
Antes, o sinal matava só o Lace, e umvvpde testbench sem$finish
continuava rodando sozinho. lace sim --timeout <SEGUNDOS>encerra a simulação depois do prazo
(código de saída 1, statustimed_out), com a dica do$finish.- Em texto, o
$displaydo testbench sai enquanto a simulação roda, e não
mais só no fim. Com-v, saem o comando e toda a saída de cada passo,
também enquanto rodam. --events, opção global: o stdout tem um objeto JSON por linha, um evento
por passo que começa, por linha que as ferramentas escrevem e por passo
que termina, e na última linha{"event": "result", "result": ...}com o
mesmo objeto do--json.
Contrato do --json:
- O JSON Schema da saída de cada comando está em
docs/schema/, gerado dos
tipos e conferido por teste contra a saída real. lace proc addescreve o processador criado, o mesmo objeto de
lace proc set; antes,{message, path}.lace simescreve sempreoutputsesurfer_pid, também quando um
processador não compila.- Em
lace tools, as ferramentas detoolssaem em ordem alfabética.
Comportamento:
checkelabora todas as raízes do design, sem-s: um módulo que ninguém
instancia também é verificado, e o projeto não precisa ter topo. Depois,
elabora cada testbench registrado com o design. Antes, só elaborava a
partir do topo e deixava os testbenches de fora.checkesynthcompilam antes os processadores, como osimjá fazia.simsempre mostra a saída do testbench ($display,$monitor); antes,
só com-v.simfalha quando o testbench chama$errorou$fatal. Ovvpsai com
0 nesse caso, e antes isso passava como sucesso. Ovvproda com-n:
$stoptermina a simulação.sim -pmostra os valores de cada porta de saída e diz qual arquivo de
entrada criar quando falta um.- Num testbench sem
$dumpfile, o Lace injeta$dumpvars(0, <tb>): a onda
traz todos os sinais, inclusive os do módulo testado. Antes, o nível 1 só
trazia os do testbench. - O formato da onda segue a extensão do
$dumpfile. Antes, o Icarus gravava
FST mesmo num arquivo.vcd; agora a onda de um processador
(<nome>_tb.vcd) é VCD, e a injetada é<tb>.fstno Icarus e<tb>.vcd
no Verilator. - O módulo do testbench vem do conteúdo do arquivo, não do nome.
- Caminhos na linha de comando são relativos ao diretório atual do shell.
Antes, os delace fileeram relativos à raiz do projeto, e um caminho
relativo emlace wavenão abria. buildnum projeto sem processadores avisa e sai com 0; antes, era erro.- O log do Surfer sai de perto da onda: vai para
.lace/Temp/surfer/do
projeto (<onda>.log) ou, com a onda fora de projeto, para a pasta de
cache do usuário. Antes,<onda>.surfer.logficava ao lado da onda, na
raiz do projeto no caso da onda injetada. - Os erros de projeto sem topo, sem testbench ou vazio vêm com o comando que
resolve.
Saída em inglês:
- O que o
lace, o instalador, oinstall.she oinstall.ps1mostram
passa a ser em inglês, e toda mensagem começa com maiúscula.erro:e
aviso:viramError:eWarning:; os erros de argumento doclapsaem
do mesmo jeito. Nos diagnósticos, a gravidade continua em minúscula, como
no gcc (arquivo:linha: error: ...), porque é o que os editores
reconhecem. - As confirmações de
lace updateelace uninstallpedem[y/N]e
aceitamyouyes. - No
--jsone no--events, os textos demessageehintmudaram
junto; oscodes e as chaves continuam os mesmos. As mensagens de
LaceErrornolace-coretambém passam a ser em inglês. lace --helpficou mais curto e em inglês, junta as opções globais num
grupo só e não mostra mais o--toolchain, que é de desenvolvimento.- Os tipos de instalação se chamam Recommended e Advanced. No assistente do
Windows,/TYPE=recomendadae/TYPE=avancadacontinuam valendo.
lace-core:
Control,CancelToken,EventeStream(ADR 0007). Toda operação que
executa ferramentas recebe&Controlcomo último argumento:build,
build_processors(antes doon_result),check,simulate,
simulate_project,synthesizeerender_schematic. Com
&Control::default(), nada muda.Status::CancelledeStatus::TimedOut;Termination::Cancellede
Termination::TimedOut.SimulationOptions::timeout.- Cada passo roda num grupo de processos próprio (Unix); cancelar encerra o
grupo, ou a árvore com otaskkillno Windows. - Com quem receba os eventos, o
vvproda com-i(stdout sem buffer). O
Verilator compila o modelo com--autoflush: como a linha de comando
mudou, a primeira simulação depois da atualização pode compilar o modelo
de novo. - Os resultados derivam
schemars::JsonSchema(ADR 0008). check(toolchain, project, &CheckOptions)substituicheck_syntax;
CheckResultganhoutargets, eStepganhouLint.SimulationOptionsperdeu o campofst;waveform_pathdiz onde a
simulação grava a onda.- Módulo
lace_core::verilog:classify,modules_in,read_interfaces,
module_template,testbench_template. Project::add_verilog,remove_verilog,set_top,top_module,
testbench_module,unregistered_verilog, e o tipoAddedFile.LaceError::EmptyProject(empty_project) eModuleNotFound
(module_not_found). As mensagens deNoTopLeveleNoTestbenchnão
citam mais comandos.
Correções do teste de fogo (2026-10-04):
- Processador num caminho com acento ("Área de Trabalho") simulava "com
sucesso" sem programa nem entradas, porque ovvpnão abre nome de
arquivo com acento. Agorasimrecusa antes comnon_ascii_path, e o
aviso dovvp("contains non-printable characters") vira erro. - O esquemático falhava em qualquer projeto com acento no caminho: o
write_jsondo Yosys estraga os bytes fora do ASCII, e o Lace agora os
conserta nohierarchy.jsondepois da síntese. - O esquemático de um módulo com muitas ligações deixava o
dotrodando por
minutos e consumindo centenas de MB. Agorasynth --svgrecusa acima de
120 ligações (schematic_too_large,--no-schematic-limitdesliga) e o
dottem prazo de 60 s (SchematicOptions::max_connectionsetimeout). - Duas gravações simultâneas do
.spf(o Studio e a CLI, doislace add)
perdiam alterações. Cada mudança agora trava.lace/spf.lock, relê o
.spfe grava com um temporário de nome único. - A simulação do projeto sobrescrevia, na raiz, um arquivo do usuário com o
mesmo nome de um arquivo de dados do testbench, e com../chegava a
escrever fora da pasta do projeto. Agora não sai da raiz nem sobrescreve o
que não foi copiado pelo próprio Lace (.lace/Temp/data_copies.txt); o
que não foi copiado vira aviso. synthde arquivo.svfalhava: o Yosys agora lê com-sv.- Um testbench sem
$dumpfileque chega ao$finishno tempo 0 era
reprovado por falta da onda injetada; a onda injetada não é mais exigida.
O dump entra noendmoduledo módulo do testbench (antes, no último do
arquivo, inclusive dentro de comentário), e os diagnósticos apontam para o
testbench do usuário, não para a cópia em.lace/Temp. - Uma saída de processador com
x(divisão por zero) derrubavasim -pcom
código 2, sem resumo nem relatório. Agora a porta sai como "unreadable",
com o motivo emerrorno JSON, e o resto continua. includee$readmemrelativos: o Icarus procura oincludena pasta do
arquivo e depois na raiz (-grelative-include -I <raiz>), o Yosys recebe
-I <raiz>e roda com CWD na raiz, como a simulação. O mesmo projeto passa
a valer emcheck,sim,hierarchyesynth.- A versão mínima do Rust sobe para 1.89 (
File::lockda biblioteca padrão).
Correções médias do teste de fogo (2026-10-04):
- Caminhos no
.spf(ADR 0012, emenda a 0003). Um arquivo de fora da pasta
do projeto é gravado com..quando está no mesmo repositório git (o
rtl/do HITS), e absoluto quando não. Um absoluto de outra máquina
(C:\Users\...) é procurado pela cauda dentro da pasta, como a AURORA, e
a próxima gravação conserta o.spf. Project::issues()(eissuesnolace status --json): avisos do.spf
que não impedem de abrir, como caminho achado pela cauda,topLevelFile
fora da lista e processador com nome que não compila.- O
.spfcom tipo errado nos campos de arquivos (synthesizableFiles
objeto,topLevelFile: 42), comstructureque não é objeto, ou com
processador de nome vazio, com barra ou repetido agora é
invalid_project_file, com o campo; antes era ignorado e apagado na
gravação seguinte, ou tomava a raiz como pasta do processador. topLevelFileoutestbenchFilefora da lista, ou topo com nome de
testbench, é ignorado por todas as operações (antesstatus,top,
synthecheckdiscordavam).- Só
.ve.sventram nas listas:lace top README.mde
lace sim notas.txtrecusam sem gravar nada.lace addcom vários
arquivos confere todos antes de registrar o primeiro
(Project::check_add_verilog). Um arquivo só de`definenão vira
topo. lace top MÓDULOcom o módulo em dois arquivos éambiguous_module, com
os arquivos; a lista demodule_not_foundnão repete nomes.proc addrecusa nome que não compila (palavras do C± e do Verilog,
módulos da biblioteca SAPHO, mais de 64 caracteres;
validate_processor_name) e parâmetro fora do que o YANC compila
(invalid_parameter,NewProcessor::validate).--nubitse os outros
de C± com--lang cpprecusam; só--nbmantou--nbexpoajusta o
--nubits.proc setrecusa frequência acima de 500000 MHz e clocks
acima de 2147483647 com o motivo (antes o erro vinha depois, doasmcomp
ou do Icarus). Um processador do.spfcom nome que não compila (x-y)
abre com aviso, e obuildrecusa cominvalid_nameantes do YANC.- A verificação acha as raízes num passe por arquivo (1500 arquivos: de
1 s para milissegundos), e o título diz quantas são e nomeia cinco. Com
recursão parametrizada,checkehierarchypassam as raízes com-s
(antes: "No top level modules"). - Testbench com dois módulos e nenhum com o nome do arquivo usa o único que
o outro não instancia, emcheck,simehierarchy. - Macro indefinida no ponto de uso é erro no
checke na simulação, com a
explicação da ordem dos arquivos; antes passava com a largura errada. - O parser do Yosys reconhece
ERROR:sem espaço e o aviso de latch
(antes,unknownsem arquivo). O erroError in function f: where's the return...docmmcompvira erro com o fonte. lace hierarchymarca cada passo pelo próprio resultado (um testbench que
elaborou não aparece mais comofailed).check --lintsem o Verilator roda a verificação e avisa que o lint não
rodou; a CLI sugerelace install <componente>para todo
component_missing(o Core não cita mais o instalador).synth --svg --module Xcom X fora da árvore do topo grava o relatório e
sai commodule_not_founde os módulos sintetizados (antes
invalid_netlist, sem relatório).schematic_too_largetambém grava.- Simulação:
$dumpfile(ONDA)comlocalparam,parameterou`define
usa o nome deles; com uma expressão, o Lace não injeta outro dump (antes o
-fstdele gravava FST no.vcddo usuário).$dumpfilesem$dumpvars
dá aviso. - Simulação de processador: uma entrada que não é inteiro recusa
(invalid_data_file); arquivo vazio ou valor que não cabe em#NUBITS
dá aviso. Programa que não chega ao fim nos clocks dá aviso para subir os
clocks. - Build e simulação travam o processador (
.lace/Temp/<nome>.lock) e a
simulação do projeto trava o projeto: duas ao mesmo tempo, do Studio e da
CLI, não se quebram mais; a segunda recusa comoperation_in_progress. - A saída guardada de cada passo tem teto: 2 MiB do começo e 2 MiB do fim
(um testbench que imprime sem parar crescia sem limite na memória). - O histórico usa nomes únicos por operação também dentro do mesmo processo.
- Layout da onda: os rótulos de I/O usam o número da porta (
in_sim_2é
input 2); tabelas mais novas que a onda não são aplicadas
(WaveProcessor::outdated, e a CLI avisa para simular de novo); onda sem
processador SAPHO ganha o grupo Top-level com os sinais do testbench; a
varredura dos complexos lê em bytes, e o teto de 16384 valores está
documentado.
Correções baixas do teste de fogo (2026-10-04):
- O mesmo arquivo repetido numa lista do
.spf(também por outro caminho)
ou nas duas conta uma vez, com aviso (duplicate_file); a próxima
gravação tira as entradas que sobram. OisMarkedTestbenchlegado da
AURORA escolhe o testbench, como nela. Project::reorder_fileelace order: muda a posição de um arquivo na
lista (a ordem dos compiladores, que decide quem vê cada`define).lace new: nome até 64 caracteres (com 248, a pasta ficava vazia para
trás); nome que só difere na caixa de outro da mesma pasta recusa; projeto
dentro da pasta de outro avisa (nested_project), e o de fora não lista
mais os arquivos do de dentro como não registrados.lace movenão sobrescreve um link quebrado no destino, renomeia só a
caixa num sistema que não distingue maiúsculas, e uma origem que não
existe éinvalid_project(antes,io).- A CLI não repete a causa de um erro de I/O ("No such file or directory"
duas vezes). - Texto: síntese que falhou não diz mais "(0 modules)"; o prazo aparece
comostopped at the 3 s limit; a continuação: Padding ...do Icarus
entra no aviso anterior;*** These modules were missingvira um resumo
só; na tabela de ferramentas do relatório, o passo que estourou o prazo
aparece comoTIMEOUT, e nãoFAIL. - Simulação:
$display("ERROR: ...")do testbench fica como saída dele e
não reprova (só$errore$fatal); a linhaTime: ... Scope: ...do
$errorentra na mensagem; o programa que lê mais valores do que um
input_<n>.txttem gera aviso com o arquivo e a linha; VCD acima de
100 MB sugere FST. - Síntese: o
checkdo Yosys aponta laço combinacional e drivers em
conflito; módulo vazio (caixa-preta) sai da lista de módulos do
esquemático; um módulo que se instancia sem condição falha antes de rodar
o Yosys (que rodava sem fim), e uma queda do Yosys com recursão vem
explicada. lace report compare: a referência automática prefere uma execução que
terminou bem; relatórios de um projeto movido continuam se comparando;
dois sem parte em comum dãonot_comparable.- Layout da onda: processador em C rotulado
C; array com mais de 9999
elementos num grupo só, com o índice certo; função com_v_no nome
desfeita pelocmm_log.txt; escopo escapado com.num componente só;
delta_*real sem formato de bits; uma pasta de layout por onda (duas
pa_tb.vcdnão dividem mais a pasta).
O que o teste de fogo achou e ainda não foi corrigido está em
docs/PENDENCIAS.md.
Arquivos
9719071a1b07bceb81a0711d3e7812eca963be20be1631b8e8522803bff38db6 lace-0.2.0-darwin-arm64-c01.tar.zst
807fc13871e0d51afeb0ea3ae4a5ff5b1ee3128a19e74bb3c616deacd01333c3 lace-0.2.0-darwin-arm64-c02.tar.zst
8c10db53ef45810556b954972d4ad439415dcd13f2d3100543a158b78a0589b9 lace-0.2.0-darwin-arm64-c03.tar.zst
14ecc4c87d80e1c904f024efe2cf3548356bd80c0b99a89a4dd05a95970d4b7b lace-0.2.0-darwin-arm64-c04.tar.zst
774a518535bbe38b512ebebf0a35a6a51b165a58a81f80de52b866d880b76ae3 lace-0.2.0-darwin-arm64-c05.tar.zst
0445f74785fb16d16d28209624a22c911ce987399e2bb47cff41170f65daead0 lace-0.2.0-darwin-arm64-c06.tar.zst
8009876e14e30d181dd0643ea67b42cf141d40291f9c1f5396ff046c8f8dc3e5 lace-0.2.0-darwin-arm64-c07.tar.zst
4c1861f0f2c2e63d72b3cad7040e7b80c1044af9e2574ce768a6f6a7e60f42c4 lace-0.2.0-darwin-arm64-c08.tar.zst
ad6091e0b2d525884ec19b625a7629ee13af073412e69c21583b82082559cdca lace-0.2.0-darwin-arm64-c09.tar.zst
0c834f24050bdeee2aa24fa296d67ef468769a9d735efa7f31629ce87a63e344 lace-0.2.0-darwin-arm64-c10.tar.zst
22c4adc4a7503d6e9cdd2c4fed81e531fed4dc79916bc8cd15de0f7d61c773ad lace-0.2.0-darwin-arm64-c11.tar.zst
9be7aa9eb11124f57c1846dcc8dff2f0cb96e8fac773423f79a41fb89c681e06 lace-0.2.0-darwin-arm64-c12.tar.zst
448ef81e65d4a7fb1afb2eb9c927545bdd91357a454d8616edbe410b56d266cc lace-0.2.0-darwin-arm64-c13.tar.zst
541c52c65e6c9d4fa0e4e4096a57b37eac0f5faf43b11d140bea056ae30b1a93 lace-0.2.0-darwin-arm64-c14.tar.zst
3b9c364f96f86763f7f4670e7e26228dd2994625a6f3706314b86fe09a76117b lace-0.2.0-darwin-arm64-c15.tar.zst
c9d82a9b04d42d989adce2da3c44bf92892ff6ce009cc48cfce9ac21e383b052 lace-0.2.0-darwin-arm64-index.json
fa504654bdc54c3dd948df0846d38730af570702b2511ccb30ba4bf497e210ee lace-0.2.0-darwin-arm64-lace.tar.zst
459b86f750164304a82d636297a668810558247ecc0886fbb68276f8a9acf457 lace-0.2.0-darwin-arm64.tar.gz
714ded612bc63966fb3dcf59acee714de6f006a7214ca4f11966880297d68a3b lace-0.2.0-linux-x64-c01.tar.zst
744956a0d4b2fd26320bd79c516e12bc432b19c074741b787b911c2b0a347faf lace-0.2.0-linux-x64-c02.tar.zst
68304845a82e78fe0eada5141883d50b6e62cf7a3eec367176bf0cb8a22b3449 lace-0.2.0-linux-x64-c03.tar.zst
6681fc96521f681d591d272d0f4c73daf19fa6d70b611413cc96cff1cb4f0364 lace-0.2.0-linux-x64-c04.tar.zst
66b83e68c5182a107e8060b809ef80a171a55e6762478ce5b7db8c91d9461bf6 lace-0.2.0-linux-x64-c05.tar.zst
fdc6e8d7bb460217d883385b2d7b85c823ab7042bf128149eb82f6f32a0a34bc lace-0.2.0-linux-x64-c06.tar.zst
254f21f2496060e9f8d4bd001fc570b0cd73283edaa89d6be83fa2e580a7cacd lace-0.2.0-linux-x64-c07.tar.zst
80bd5f68c878f8eeef2dd2ef057275ec3691c597218045c82e5e7f28d9899dce lace-0.2.0-linux-x64-c08.tar.zst
e0d31eb8102847d40817a503468e665c081ba46406df832cd3399d830e740aaf lace-0.2.0-linux-x64-c09.tar.zst
6453b5cb7573b1cc3d40308ee11fe5251c8e1041dc8f587530f058d639220472 lace-0.2.0-linux-x64-c10.tar.zst
6a0cdcb31a8ab80e0a95c35fdb5667fb37b9917a352957d1486615adfa9f5a69 lace-0.2.0-linux-x64-c11.tar.zst
dcfb2ba091f239548d206b58c2c5c50883175253fff401b9a11f0a75d9e36486 lace-0.2.0-linux-x64-c12.tar.zst
82660bb13a768f4a6d42c8e5aec59dcc416e48bc4d9fb74fcf9a8289b0cb6c77 lace-0.2.0-linux-x64-c13.tar.zst
ed5efc2e9ede0caf43a1a387382478ac99445bba9b4ef314e4781bcca2d8a9d2 lace-0.2.0-linux-x64-c14.tar.zst
cc3b7e9c6ab04351bc1e12cf79fa197f4c02ee1265c464be58d6e3d7cb08a291 lace-0.2.0-linux-x64-c15.tar.zst
86b7027f3af92a2ec9c7d06bd7b8bf1112e1f62fcf8e48bc676132be1447c76b lace-0.2.0-linux-x64-index.json
2c209682adebe7e97bca46e0eb884f7845aa032670f14db65298ab5e686126d3 lace-0.2.0-linux-x64-lace.tar.zst
5db36eb20dc93de4fba1ac16252ce536286a7002c0c8ae4c53e47cc3e4c8158b lace-0.2.0-linux-x64.tar.gz
27900c9a98d742b683226ca0a5ff659e840e1796c7dbfbf0ea61fa524ae7bf6f lace-0.2.0-windows-x64-c01.tar.zst
1facf9bfbf8c3702de84ac26313c54ac8786626082934003720f947c822ec95b lace-0.2.0-windows-x64-c02.tar.zst
8865d3f5e647f7d35bfce1c90b8c8b96ee8e831e1fc12b0969cacf7558f8cf78 lace-0.2.0-windows-x64-c03.tar.zst
dc9bbbf463d981082bbb1879eb0fbda086ec55d6e1b49ca8726042afffb153cc lace-0.2.0-windows-x64-c04.tar.zst
f95881f8b0dcbc8b16498d3ba68f0795bbd6973c76d8aae51a4fe1a810d25ed0 lace-0.2.0-windows-x64-c05.tar.zst
22cbac54deeabaa94a05f2984289a24e3d3830a98951abec74ec24a48bdc8cbd lace-0.2.0-windows-x64-c06.tar.zst
e65c55f0d93f4da20fe55fcac15d42f0869b179d2fafb45c7393589e8c3b7a14 lace-0.2.0-windows-x64-c07.tar.zst
367a44681d5f8561cb10e239ed3322b41ddfe54545b5d91ec24e51e9a372889c lace-0.2.0-windows-x64-c08.tar.zst
49869157197b0292c6432d8023b7df8c17de45d1f6eb3b5c991db2ccdd5fcb32 lace-0.2.0-windows-x64-c09.tar.zst
ef5b48f39972e018a29dc822f4e47847d1fe9825ab8f2f87159dc7f392e16654 lace-0.2.0-windows-x64-c10.tar.zst
355e2f4e1400080ca963fca6f95343aac5ca0f585920f6192d762edb63d5762b lace-0.2.0-windows-x64-c11.tar.zst
7ba102af80484db3e2eaa7bb94a22146239540d542dda0ab5af98c76422ea8dc lace-0.2.0-windows-x64-index.json
2c236b63618c2145885c30045bba4f4f09959ca5fb32e58a6199fe996621476d lace-0.2.0-windows-x64-lace.tar.zst
081da8b3de41d8f7c3229486d30e05288b3e4ff51b20693cf22ac7ac64f78b9d lace-0.2.0-windows-x64-setup.exe