GNU General Public License v3.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度分析 Logisim Italian Fork

项目背景与痛点

Logisim Italian Fork(简称 LIF)是意大利开发者们对 Logisim 项目的 fork,Logisim 是一款优秀的数字逻辑电路设计工具。LIF 项目主要改进和优化了 Logisim 在用户界面上以及设计流程中的不足,使得电路设计的过程更加直观、易用。对于学习数字电子学和硬件设计的学生来说,LIF 提供了友好的界面和丰富的组件库,旨在降低入门门槛,提高设计效率。在当今快节奏的开发环境中,一点细微的改进往往能大大提升用户的使用体验和工作效率。

核心技术揭秘

LIF 的核心在于其界面优化和组件管理系统。其 GUI 架构采用 Java Swing,这是其能在多种操作系统上运行的基础。LIF 的组件管理系统采用了常见的 MVC(Model-View-Controller)模式,模型负责数据的管理和状态的更新,视图负责界面展现,控制器负责数据和视图间的交互逻辑处理。这样的架构组织清晰,易于维护和扩展。

graph TD A[用户界面] --> B[控制器] B --> C{"事件处理"} C -->|"保存操作"| D[模型更新] C -->|"状态变更"| E[数据同步] D --> F[视图刷新] E --> F B --> G[组件管理] G --> H[组件加载] G --> I[状态跟踪]

该系统通过事件驱动机制来响应用户的操作,从组件参数的设置到设计的存储和加载,每个步骤都清晰明了。事件处理层负责接收用户的输入,并根据用户操作触发合适的事件处理逻辑。模型负责数据的持久化和实时更新,而视图则展示最终的状态,以确保用户能够直观响应界面变化。

功能亮点与差异

相比其他逻辑电路设计工具,LIF 在用户界面上做了较大的优化,提供了更符合现代 UI 观感的交互体验。LIF 内置了许多方便设计的功能,例如即时反馈的信号状态,以及直观的分层电路设计。通过这些功能的实现,LIF 大大缩短了电路设计的调试时间,提高了设计的成功率,降低了初学者的学习曲线。

应用场景与落地建议

LIF 适合用于教学环境中的电路设计课程,特别是电子工程专业的初学者。与传统的门电路教学不同的是,LIF 通过其丰富的组件库能够让学生在短时间内掌握基本的逻辑电路设计思想,并通过直观的反馈及时发现并修正错误。在使用 LIF 时,建议要定期备份设计文件,避免因误操作导致数据遗失。同时,对于复杂的设计,建议采用模块化的结构进行分层设计,有助于逻辑关系的梳理和组件的重复使用。

综合评价

Logisim Italian Fork 在图形界面设计、电路组件管理和用户体验等方面有显著提升,是一款非常不错的教具级数字电路设计工具。其优点在于易用性和现代感十足的 UI,适合初学者快速入门并提供深刻的理解。存在的一点遗憾是,对于高级设计,还需进一步拓展组件库和引入更丰富接口,诸如脚本语言支持等,从而满足更复杂的设计要求。不过,总体而言,LIF 是一款非常值得推荐的开源项目。

关于

GitHub 原始描述(英文)

Logisim Italian Fork

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

语言占比

Haskell
Java
templ

README

Logisim ITA

Logisim is a digital circuit simulator, originally available here.

This is an italian fork based on the original Logisim version.
DOWNLOAD AND CHANGELOG
CONTACT US
PLUGINS
USER TUTORIALS
DEVS TUTORIALS

Why you should use Logisim ITA

  • No retro-compatibility problems with old .circ files
  • A lot of new components and small changes
  • Bug fixes and optimizations
  • Constantly supported and listening to all your suggestions/reports

Changelog

  • Core Stuff:
    • Italian, Simplified Chinese and partial french translation!
    • Autoupdates!
    • Compiled with Java 14
    • Complete new movement system with mouse dragging
    • Auto center and Auto zoom when opening new files/circuits or with ctrl-0, double mouse wheel click and with the round button you’ll see on the lower-right corner
    • Almost infinite canvas, arrows will show you in what direction is the circuit if it’s outside of your view
    • Zoom in and out using mouse wheel where you’re pointing at
    • Double click with Edit Tool to label components
    • Load libraries from folder at startup (Preferences / Fork)
    • Selectable painting refresh rate, default 60Hz (Legacy was 20Hz and sometimes lagging)
    • Anti Aliasing, Look and Feel and Fill Component’s Background preference
    • Clock custom frequency
    • Press ESC or DEL to cancel “Add Tool” action, F1 opens Library Reference
    • Increased output limit in Analyze Circuit to 32
    • Analyze Circuit should calculate table/expression with any kind of component
    • Added “Clear Log” button
    • Added missing tooltips
    • Changed some default values
  • New components:
    • Wiring->Programmable Generator
    • TTL gates (7400, 7402, 7404, 7408, 7432, 7447, 7485, 7486, 74165, 74283, 747266)
    • I/O->Digital Oscilloscope
    • I/O->Switch
    • I/O->Dip Switch
    • I/O->Slider
    • I/O->RGB LED
    • I/O->Buzzer
    • Memory->PLA ROM
    • Plexers->7-Segment Display Decoder
  • Component changes:
    • New FF layout
    • The Shift Register will show you its internal bits even when set to serial load
    • Right click on Pin, Edit Contents and set its value typing the decimal number
    • Added Sel pin in Register
    • Added Preset pin in Register and Counter
    • TTY and Keyboard components can use 16-bit values (UTF-16)
  • New Attributes:
    • Controlled Buffer / Inverter: Negate Control Input attribute
    • Added Sel Active Level attribute in components with Sel pin
    • Priority Plexer “No Input” attribute
    • Joystick “Facing” attribute
    • Bit Selector “Select location” attribute
    • Added Label Color attribute for each component with Label attribute and Text Tool
    • Added Label for RAM, ROM and PLA ROM
    • FF D, S-R: “Latch” option in Trigger attribute
    • New Counter behavior (different pin logic)
  • Fixed bugs:
    • Big fixes to Log menu and Log output file
    • Big fixes for Text Tool
    • Fixed empty template bug introduced in Logisim 2.7.0
    • Fixed input positions in wide gates with 4 inputs
    • Fixed opening new file in new window with old window not used
    • Fixed bugged 32b multiplier
    • Some fix from original early version 2.7.2.255

Bugs

  • All the original Logisim’s bugs we haven’t fixed yet:
    • Some random blue/red line caused by bad values refresh
    • Some problem with high frequencies
    • String attribute not calling attributechanged method while writing its value
  • Programmable Generator: trying to edit its values by clicking on “(click to edit)” is a bit buggy, use “Edit Contents” instead in menu by clicking with right mouse button

Features we want to add

  • Solve dirty points when rotating
  • Add a new type of library
  • Draw also in circuits
  • Suggest us everything at [email protected]

Retro-compatibility

Due to a bug in the original Logisim, wide gates with 4 inputs had a bad pin positioning. I fixed this problem but if you open an old file containing gates with those attributes, its inputs will be disconnected and a warning message will appear

EXE and JAR downloads + microprocessor project

All in our website here

How to compile & use

The project uses maven, from Logisim/Logisim-Fork run mvn package or use your ide and import the directory as a maven project, the output file is target/Logisim-jar-with-dependencies.jar

If you use ecplise, or a older version of Logisim:
Watch our tutorials on “TUTORIAL” section of our website

Translation

New strings are translated really bad (Google Translate) because i just know Italian and English.
You can help me translating other languages or adding a new one, if you want so, contact me at [email protected]

评论

暂无评论