1 个不稳定版本
0.3.0 | 2021年8月14日 |
---|
#3 in #pal
78KB
2K SLoC
蛋糕:21世纪的GAL汇编器
蛋糕是一个与galasm兼容的GAL汇编器,它接受一组方程,并生成一个适合输入到GAL编程器的JEDEC文件。
用法
输入文件格式是GALasm格式的略微放宽的修改版本。差异包括
- 在.pld文件末尾的“DESCRIPTION”部分现在是可选的。
- 实际上不需要包含任何方程!所有输出都是未驱动的。
- 可以使用长的引脚名称,唯一的缺点是它会使输出文件失去对齐。
- 三态使能等不再需要在主要输出定义之后定义(只要该定义存在)。
- 换行符很重要。
- 我们假设每行一个方程。
- 引脚列表必须平均分配到两行。
- 这比galasm更少自由形式,但希望这会使理解语法错误更容易。
- 也许我会改变主意!
galette --help
会给你一个(与GALasm兼容的)命令行选项的摘要。
更多文档
有关更多文档,请参阅 galasm 的文档。我已经决定不将它们包含在这个仓库中,以简化许可情况。
背景
当我提到“21世纪的GAL汇编器”时,我的舌头紧紧地夹在嘴里。现在没有人真的需要GAL汇编器。这是过时的技术。:)
GALasm 是20世纪末Galer的更新,Galer是一个90年代初为Amiga编写的开源GAL汇编器。它用C编写,风格属于另一个时代。
我试图编程GAL,遇到一些问题。最终,发现是我的电源有问题,但在过程中我发现GALasm中有几个错误,并且总体感觉它需要彻底翻新。我一直试图学习Rust,因此逐步将其移植到内存安全语言,并在途中重构结构,这似乎是一个有趣的项目。
这就是结果。这是一个yak-shaving的绝佳例子。
源组织
从最低层依赖到最高层运行,我们有
- errors.rs 供所有其他东西使用错误代码。
- chips.rs 不同GAL类型的抽象层。
- gal.rs 包含使用熔丝数据编程的GAL结构。
- parser.rs 解析输入文件格式。
- blueprint.rs 将输入转换为标准化形式,以构建熔丝。
- gal_builder.rs 根据蓝图填充GAL结构。
- writer.rs 写出生成的GAL结构。
- lib.rs 顶级粘合剂。
- main.rs 薄命令行包装器。
测试
因为我一直在尝试保持galasm的行为,所以我专注于端到端测试(输入文件,查看输出结果)而不是单元测试,这允许我在不需要保持任何特定内部结构的情况下重构程序,只要输出结果相同。
所以,如果你想知道为什么没有单元测试,那就是原因。
要运行测试,./run_tests.sh
。
许可
我正在MIT许可下发布我的代码。虽然galette基于galasm,但这是在不同语言中重新实现了功能,结构完全不同。
我认为在这里有一个干净的断裂是有用的,因为galasm的许可情况并不特别清楚,有一个明确的开源许可的GAL汇编器是很有帮助的。
当然,我仍然非常感激Alessandro Zummo和Christian Habermann为galasm提供的起点。
待办事项
一些我希望能够完成的事情
- 为与galasm有意的不同情况进行测试。
- 特别是,长引脚名称,没有方程式,没有DESCRIPTION,辅助方程在主方程之前。
- 添加覆盖率测试。
依赖项
~1.4–2MB
~34K SLoC