diff --git a/README.md b/README.md index 8c5c4f214..6468db2dc 100644 --- a/README.md +++ b/README.md @@ -76,13 +76,15 @@ All other tests, including the HDL tests, were executed without errors. ## Documentation ## -The [documentation](https://github.com/hneemann/Digital/releases/latest) is available in English, German, Spanish and Portuguese. +The [documentation](https://github.com/hneemann/Digital/releases/latest) is available in English, +German, Spanish, Portuguese and simplified Chinese. It is still very incomplete but it contains a chapter "First Steps" which explains the basic usage of Digital. The documentation also contains a list of available 74xx chips and a list of available keyboard shortcuts. ## Translations ## -So far Digital is available in English, German, Spanish and Portuguese. If someone wants to add a +So far Digital is available in English, German, Spanish, Portuguese and simplified Chinese. +If someone wants to add a new translation, please let me [know](mailto:digital-simulator@web.de). I can provide you with a special file for translation. This file is much easier to translate than the [files](https://github.com/hneemann/Digital/blob/master/src/main/resources/lang) @@ -269,6 +271,7 @@ Many thanks to the following persons for their help: has provided the Portuguese translation. * Ángel Millán from the Instituto de Educación Secundaria Ies Virgen de Villadiego in Peñaflor (Sevilla), Spain has provided the Spanish translation. +* XinJun Ma ([@itviewer](https://github.com/itviewer)) has provided the Chinese translation. ## Additional Screenshots diff --git a/src/main/resources/lang/lang.xml b/src/main/resources/lang/lang.xml index c74025dd1..7a23ff167 100644 --- a/src/main/resources/lang/lang.xml +++ b/src/main/resources/lang/lang.xml @@ -23,4 +23,5 @@ modified keys. Deutsch Español Português + 简体中文 diff --git a/src/main/resources/lang/lang_zh.xml b/src/main/resources/lang/lang_zh.xml new file mode 100644 index 000000000..513a98545 --- /dev/null +++ b/src/main/resources/lang/lang_zh.xml @@ -0,0 +1,1674 @@ + + + 地址 + 目录 + 一般使用 + 修订版本 + 日期 + 以下内容为可用的仿真器设置 + 最大值 + 属性 + 打开电路 + 包含电路: + 在新窗口中打开电路 + 帮助 + 显示该组件的简介 + 十六进制 + 十进制 + Ascii码 + 高阻 + 八进制 + 二进制 + 基础设置 + 高级设置 + 忽略修改 + 编辑 + 继续编辑 + 载入 + 重新载入 + 重新载入最后使用的十六进制文件 + 保存 + 另存为十六进制文件 + 创建 + 在新窗口中创建电路 + 分离编辑 + 以非模态方式打开对话框 + 浏览器打开 + 在浏览器中打开帮助文本 + 清空 + 所有值将被置为0! + 转换 + 所有可能的转换被添加为测试用例。 + 新名称 + 始终保存 + 覆盖 + 应用 + 编辑所选 ROM/EEPROM 中的内容 + 移除所选 ROM 中存储的数据。 + 创建模板 + 创建SVG模板,之后可以使用 Inkscape 编辑 + 导入 + 导入 SVG 文件。如果需要创建 SVG 文件,最好的方式时首先创建 SVG 模板,然后进行编辑。 + 警告 + 取消 + Digital + 表达式 + 输入 + 输出 + 属性 + 逻辑运算输入 {0} + 逻辑运算结果 + 与门 + 二进制与门,仅当所有输入为 1 时输出为 1。 + 其输入和输出也可以使用多位总线,此时将执行按位与运算。 + 与非门 + 与和非的组合。仅当所有输入为 1 时,输出为 0。其输入也可以使用多位总线,此时将先执行按位与运算,然后执行逻辑非运算。 + 或门 + 二进制或门,如果其中一个输入为 1 则输出 1。 + 其输入和输出也可以使用多位总线,此时将执行按位或运算。 + 或非门 + 或门和非门的组合。 + 如果其中一个输入为 1 则输出为 0,如果所有输入为 0,输出为 1。 + 其输入也可以使用多位总线,此时将先执行按位或运算,然后执行逻辑非运算。 + 异或门 + 如果两个输入被使用,当两个输入相等时输出为 0,否则为 1。 + 如果多于两个输入,其行为类似于级联的异或门(A 异或 B 异或 C = (A 异或 B) 异或 C)。 + 其输入也可以使用多位总线,此时将执行按位异或运算。 + 异或非门 + 异或门和非门的组合。 + 非门 + 翻转输入,1 变为 0,0变为 1。 + 其输入和输出也可以使用多位总线,此时将执行按位非运算。 + 非门的输入 + 翻转后的输入值 + 查找表 + LUT + 从一张存储表中获取输出,该组件可以模拟任何组合电路。 + 输入 {0},和其他输入共同定义将要返回的所存储内容地址。 + 根据指定的输入组合,返回对应的存储值。 + 延迟 + 延迟信号传输。Digital 中的所有组件具有相同的传输延迟单位,该组件用于实现必要的传输延迟。 + 将要延迟的输入信号 + 经过延迟的输入信号(默认一个延迟单位) + 输出 + 用于在电路中显示输出信号。也用于连接子电路。 + 当用于生成 CPLD 或 FPGA 代码时,用于为其赋值管脚编号。 + 用于连接输出 + LED + 用于可视化输出信号,仅接受 1 位值,当输入为 1时灯被点亮。 + LED 输入,仅接受 1 位值,当输入为 1时灯被点亮。 + RGB-LED + RGB LED,其颜色通过3个输入信号控制,每个输入表示一个颜色通道。 + 红色通道 + 绿色通道 + 蓝色通道 + 输入 + 可以通过鼠标交互操作输入信号。也用于连接子电路。 + 当用于生成 CPLD 或 FPGA 代码时,用于为其赋值管脚编号。 + 给出连接到该输入的值 + DIP开关 + 简单的DIP开关,可以输出高或低电平 + 开关的输出值 + 时钟输入 + 时钟信号,可以通过实时时钟进行控制。 + 如果频率大于50赫兹,导线的颜色将不会更新。如果没有使用实时时钟,可以通过鼠标单击控制时钟信号。 + 当生成 CPLD 或 FPGA 代码时,用于为其赋值管脚编号。 + 根据设置的时钟频率在0和1间切换 + 按钮 + 一个简单按键,当释放时回到其初始的状态 + 按键输出信号 + 带有LED的按钮 + 一个简单按键,当释放时回到其初始的状态。 + 按键有一个LED,可以通过输入信号进行开关。 + 按键输出信号 + 控制LED的输入信号 + Text + 显示一段文本,其对电路仿真没有影响,可以通过其属性对话框修改文本内容。 + 矩形 + 显示一个矩形,其对电路仿真没有影响。 + 如果使用 - 作为标题,将不会显示标题。 + 探测器 + 测量值可以通过数据图或测量表显示,该组件可用于观察子电路中的值。 + 需要测量的值 + 灯泡 + 灯泡具有两个连接点,当电流经过时灯泡变亮。 + 不关心电流的方向。当输入为不同的值时点亮,行为类似异或门。 + 连接点 + 连接点 + 发光二极管 + LED 区分阴极和阳极,当阳极连接到高电平且阴极连接到低电平时,LED点亮。 + 阳极 + 阴极 + 7段数码管 + 每段都有自己的控制输入 + 该输入控制顶部,水平线 + 该输入控制顶部,右侧,垂直线 + 该输入控制底部,右侧,垂直线 + 该输入控制底部,水平线 + 该输入控制底部,左侧,垂直线 + 该输入控制顶部,左侧,垂直线 + 该输入控制中间,水平线 + 该输入控制小数点 + 共阴极,如果要点亮 LED,该输入需为低电平 + 共阳极,如果要点亮 LED,该输入需为高电平 + 7段数码管(十六进制输入) + 4位十六进制输入7段数码管 + 将被显示的输入值 + 该输入控制小数点 + 16段数码管 + 通过16位输入控制各段,第二个输入控制小数点 + 16位驱动总线 + 该输入控制小数点 + LED矩阵 + LED矩阵,在独立窗口中显示。 + 通过一个数据字段控制一列LED的开关,另外一个输入为当前列的地址。 + 当前列对应的数据位字,自底向上 + 当前列地址 + 数据图 + 在电路面板显示数据绘图,可以绘制完整的时钟周期或单个门改变,该组件不影响仿真。 + 旋转编码器 + 带旋转编码器的旋钮,用于检测旋转运动。 + 信号A + 信号B + 键盘 + 可以用于输入文本的键盘。 + 该组件缓存输入,然后读取输入作为输出。 + 时钟,上升沿时从缓冲中移除旧的字符 + 如果为高电平,则输出 D 有效,输出一个字符。同时使能时钟输入。 + 最后输入的字符或0(如果没有有效字符),输出为16位Java字符值 + 该输出信号表示字符有效,用于触发中断。 + 终端 + 可以想向终端写入ASCII字符,该终端打开新的窗口并显示输出。 + 时钟,在上升沿将输入信号的值写入终端 + 将要写入终端的数据 + 高电平使能 + VGA显示器 + 分析输入视频信号并显示对应图形。 + 因为仿真不能实时运行,除了视频信号,还需要像素时钟。 + 红色组件 + 绿色组件 + 蓝色组件 + 水平同步信号 + 垂直同步信号 + 像素时钟 + MIDI + 使用 MIDI 系统播放记录 + 记录 + 音量 + 为1相当于按下按键,为0相当于释放按键。 + 使能 + 如果为高电平,使用 N 值改变程序(仪器) + 时钟 + 单极性步进电机 + 具有两个限位开关的单极步进电机。支持全步驱动,半步驱动和细分(微步)驱动。 + 限位开关0,当电机角度为 0° 时变为高电平 + 限位开关1,当电机角度为 180° 时变为高电平 + 相数 0 + 相数 1 + 相数 2 + 相数 3 + 双极性步进电机 + 具有两个限位开关的双极步进电机。支持全步驱动,半步驱动和细分(微步)驱动。 + 限位开关0,当电机角度为 0° 时变为高电平 + 限位开关1,当电机角度为 180° 时变为高电平 + 线圈 A,正极 + 线圈 A,负极 + 线圈 B,正极 + 线圈 B,负极 + + 用于接地,输出始终为 0 + 输出始终为 0 + 电源 + 用于连接电源,输出始终为 1 + 输出始终为 1 + 常量 + 常量,值在属性对话框设置 + 返回常量设置值 + 隧道 + 不是有导线实现组件连接。所有具有相同名称的隧道网络被认为连接一起。 + 仅在当前电路有效,不能用于不同电路。没有名称的隧道组件被忽略。 + 连接点 + 分裂器/合并器 + 分裂信号或创建总线。 + 输入位 {0} + 输入位 {0} + 输出位 {0} + 输出位 {0} + 双向分裂器 + 可用于数据总线特别是存储器模块的构建 + When set, the value at the common data terminal D is output to the bit + outputs D[i], if not, the bits D[i] are output to the common output D. + The common data connection. + 数据位 {0} + 上拉电阻 + 弱高电平 + 如果一个网络为高阻态,该电阻将网络上拉到高电平,其它时候该组件无效。 + 下拉电阻 + 弱低电平 + 如果一个网络为高阻态,该电阻将网络下拉到低电平,其它时候该组件无效。 + 驱动器 + 用于将信号连接到其它导线。 + 如果 sel 输入为低电平,输出为高阻状态,如果 sel 为高电平,输出等于输入。 + 输入 + 输出 + 控制位 + 驱动器(低电平有效) + 用于将信号连接到其它导线。 + 如果 sel 输入为高电平,输出为高阻状态,如果 sel 为低电平,输出等于输入。 + 输入 + 控制位 + 输出 + 双向管脚 + 该组件仅在生成 VHDL 或 Verilog 时有效,用于创建双向端口。该组件只能在顶级电路使用。 + 待输出数据 + 使能输出 + 待读取数据 + 实际管脚连接点,只有一个输出可以连接到该端口 + 复用器 + 根据 sel 端口选择哪个输入可以通过 + 输入端口 {0} + 输出 + 选择端口 + 多路分配器 + 根据 sel 将输入值给到某个输出端口 + 选择端口 + 输入端口 + 输出端口 {0} + 解码器 + 仅有一个选中的输出端口为高电平,其它输出为低电平. + 输出端口 {0} + 选择端口 + 位选择器 + 在数据总线中选择某一位 + 输入总线 + 选择端口 + 输出端口 + 优先级编码器 + Priority + 当输入只有一个为高电平时,其对应的值被输出。 + 当多个输入为高电平时,输出对应最大的值。 + 输入信号对应的值 + 如果该端口为高电平,则至少有一个输入为高电平 + 输入信号 {0} + SR 触发器 + SR + 用于存储 1 位数据。通过置位和复位来设置存储的数据。 + 如果输入同时为高电平,输出全为低电平。如果输入同时为低电平,输出状态随机。 + 置位 + 复位 + 返回存储的值 + 返回翻转后的存储值 + SR 触发器(时钟控制) + SR + 用于存储 1 位数据。通过置位和复位来设置存储的数据。 + 如果输入在时钟上升沿同时为低电平,输出状态随机。 + 置位 + 时钟输入,在上升沿状态转换 + 复位 + 返回存储的值 + 返回翻转后的存储值 + JK 触发器 + JK + 可以存储(J=K=0), 置位(J=1, K=0), 复位(J=0, K=1)或翻转(J=K=1)存储的内容。 + 状态转换仅在时钟上升沿发生。 + 置位 + 时钟输入,在上升沿状态转换 + 复位 + 返回存储的值 + 返回翻转后的存储值 + D 触发器 + D + 管脚 D 的值在时钟上升沿被存储。可以设置位宽以允许存储多位数据。 + 输入 + 时钟 + 返回存储的值 + 返回翻转后的存储值 + T 触发器 + T + 存储一位,在时钟上升沿切换状态。 + 使能状态切换 + 时钟输入 + 返回存储的值 + 返回翻转后的存储值 + JK 触发器(异步) + JK-AS + D 触发器(异步) + D-AS + 单稳态触发器 + Mono + 寄存器 + Reg + ROM + RAM + EEPROM + P 沟道场效应晶体管 + N 沟道浮动门场效应晶体管 + 测试用例 + 用于定义测试用例,可用于自动检测电路的行为是否符合该定义。 + 异步时序 + 允许设置异步时序电路如Muller流水线的时序。 + 电源连接器 + 复位器 + 复位输出 + Break + 如果检测到上升沿则停止仿真 + External + 通过执行外部程序计算逻辑值。用于通过 VHDL 或 Verilog 定义组件行为。 + 实际的仿真行为由外部仿真器完成。目前支持 VHDL 仿真器 ghdl 和 verilog 仿真器 Icarus Verilog。 + 二极管 + 错误 + 组件 {1} 的管脚 {0} 不是输入或输出 + 需要唯一的时钟组件,所有的触发器必须使用该唯一时钟信号。 + 电路包含没有标签的输入端口 + 电路包含没有标签的输出端口 + No break detected after {0} cycles at break point ''{1}''. + Possibly the number of timout cycles in the break component should be increased. + 不支持表达式 {0} + 不支持操作 {0} + 创建查找表时遇到错误 + 在一条导线上存在多于一个输出信号导致短路。 + 不能将上拉和下拉电阻连接到同一网络 + 不能分析结点 {0} + 包含 [var] 和 [not var] + 管脚 {0} 在组件 {1} 中重复 + 未发现组件 {0} + Exact {0} valoas necessary, not {1} + 触发器必须连接到时钟信号 + 文件格式无效 + 逻辑值已经初始化 + 隧道组件 {0} 未连接! + 多于一个时钟信号 + 时钟组件未使用! + 需要 {0} 位,但只有 {1} + 找不到管脚 {0} 的网络 + 找不到时钟 + 地址位数 + 地址线位数 + 数据位数 + 数据线位数 + 颜色 + 组件的颜色 + 背景色 + 当嵌入其它电路时的电路背景色 + 超时周期 + 如果设置的周期数完成而没有中断信号则会报错。 + 数据 + 存储在该组件中的值 + 默认 + 电路仿真开始时的默认值。 + 默认值 + 电路仿真启动时的默认值,"Z" 表示高阻状态。 + 允许三态输入 + 如果勾选,则输入信号允许高阻状态,其控制输入组件的默认值是否可以设为 "Z" + 非零输出 + 简介 + 关于该组件和其使用的简短描述 + 频率/赫兹 + 实时时钟频率 + 使用 IEEE 91-1984 外观 + 使用 IEEE 91-1984 形状代替矩形 + 输入端口数 + 输入端口个数,所有的输入端口都必须被连接。 + 标签 + 该组件的名称 + 大小 + 形状大小 + 语言 + 图形界面的语言,需要重启才能生效 + 网络名称 + 所有具有相同名称的网络连在一起。 + 输入分割 + 数字格式 + 显示数字的格式 + ascii + bin + decimal + signed decimal + default + hex + octal + 模式 + 方向 + 设置方向 + + + 最大显示步数 + 存储值的最大数,如果达到最大数,旧的值将被忽略。 + 旋转 + 组件在电路中的旋转角度 + 镜像 + 镜像组件 + 使用实时时钟 + 如果选中,当电路开始模拟时将使用实时时钟 + 仿真启动时显示测量图 + 当仿真开始时,包含测量值的图形将被显示。 + 在测量图中显示 + 在测量图中显示值 + 在仿真开始时显示测量值 + 当仿真开始时,包含测量值的表将被显示。 + 行数 + 显示的行数 + 每行字符数 + 每行字符数 + 作为测量值 + 如果选中,该值将作为测量值在测量图和数据表中显示。此时,必须指定标签作为值的标识。 + 测试数据 + 宽度(像素) + 使用像素描述的屏幕宽度 + 高度(像素) + 使用像素描述的屏幕高度 + 可编程存储器 + 设置 ROM 为可编程存储器,这样就可以通过外部 IDE 访问。 + 程序计数器 + 已编程 + 如果选中,二极管(熔丝)为已烧写,浮动门场效应晶体管为已充电。 + 可以通过快捷键 ‘p’ 修改设置。 + 格式 + 表达式格式 + 共极性 + 如果设置,将会仿真共阴极或共阳极 + + 共极性 + 阴极 + 阳极 + 避免闪烁 + ATF15xx Fitter + 包含Microchip(ATMEL)fit15xx.exe 文件的路径 + 管脚编号 + 为空表示该信号不会被分配给某个管脚 + 行数 + 行数 + 列地址位数 + 单个列的地址,3位表示8列。 + 电路被锁定 + 电路被锁定 + 管脚编号 + 管脚的编号,用于表示电路的 DIL 封装和生成 CPLD 代码时分配管脚。 + 如果具有多位,所有的管脚编号可以表示为逗号分割列表。 + 管脚数 + 管脚数,0表示自动确定管脚数 + 应用启动时显示组件树 + 如果选中,应用启动时会在左侧显示组件树 + 翻转输入 + 选择需要翻转的输入信号 + 菜单字体大小(百分比) + 菜单字体大小,相对于默认大小的百分比 + 允许输入 + 如果设置,将使能输入端口 T + 单向 + Active Low + If selected the output is low if the component is active. + + 包含预定义的子电路,还可以在当前路径下添加自定义电路。 + 显示栅格 + 在主窗口中显示栅格 + 导线提示 + 如果选中,当鼠标划过时导线会高亮 + 映射到键盘 + 按钮被映射的键盘。使用 UP, DOWN, LEFT 或者 RIGHT 作为标签以使用方向键。 + Java 库 + 使用java实现的额外组件jar文件。 + 在总线上显示导线数。 + 注意:值仅在仿真启动后更新。 + 输入位宽 + 输出位宽必须大于输入位宽 + 输出位宽 + 输出位宽必须大于输入位宽 + 字体大小 + 设置文本字体大小 + 时长 + 延迟时间,单位为常见门的传输延迟。 + 翻转输出 + 如果选中,输出将被翻转。 + 脉冲宽度 + 用时钟周期表示的脉冲宽度 + 间距 + 设置输入和输出端口间距 + ROM 内容 + 所有使用的 ROM 中的内容 + 应用 + 定义使用哪个应用 + 通用 + GHDL + IVerilog + 输入 + 输出 + 程序代码 + 被外部应用执行的程序代码 + 选项 + GHDL + GHDL 选项 + 用于处理 GHDL 的选项 + IVerilog + Icarus verilog 安装路径 + 最大值 + 如果为 0,则使用可能的最大值 + 输出为高电平 + 默认输出 + 使用 MacOS 鼠标单击 + 使用 CTRL+左键 代替右键单击。 + 在主面板中不显示工具提示 + 如果选中,将不会在主面板中显示组件的工具提示。 + 显示自动重命名隧道组件对话框 + 如果选中,当一个隧道组件被重命名后,将会显示为同名隧道组件自动重命名的对话框。 + ATMISP + 可执行文件ATMISP.exe的路径。设置后,ATMISP 软件可以被自动启动! + 自定义形状 + 导入 SVG 文件 + 在启动时预加载程序到存储器 + 当仿真一个使用 RAM 作为程序存储器的处理器时,因为 RAM 内容被初始化为零,因此很难启动处理器。 + 该设置允许在处理器启动时加载数据到程序存储器。 + 程序文件 + 在仿真开始时被自动加载进存储器的程序文件 + + 以栅格为单位的宽度 + + 以栅格为单位的高度 + 内置文本 + 将文本放在矩形内部 + 底部文本 + 将文本放在矩形底部 + 右侧文本 + 将文本放在矩形右侧 + 宽形 + 使用较宽的形状显示门 + 形状 + 当电路作为子电路时的形状。 + “Simple” 模式:输入管脚显示在一个简单矩形左侧,输出管脚显示在一个简单矩形右侧。 + “Layout” 模式:管脚的位置由实际电路中输入、输出组件的位置和方向决定。此时,管脚可以位于顶部或底部。 + “DIL-Chip”模式:使用双列直插封装外形显示电路,输入、输出组件的管脚编号决定管脚的位置。 + 默认 + Simple + DIL-Chip + Layout + 自定义 + 文本对齐 + 文本对齐方式 + 左下角 + 居中偏下 + 右下角 + 居中偏右 + 右上角 + 居中偏上 + 左上角 + 居中偏左 + 正中 + 启用 + 启用或禁用该组件 + 工具链配置 + 用于配置集成工具链,如启动外部工具,对 FPGA 进行编程 + 通用参数 + 通用化电路的代码 + 通用电路 + 创建一个通用电路 + 启动时显示使用指南 + 开启使用指南 + SVG 导出设置 + 隐藏测试用例 + 不导出测试用例 + 不填充形状 + 多边形不会被填充 + 输入和输出表示为小圆圈。 + 忽略管脚标注 + 符号中蓝色和红色的管脚标注会被忽略。 + 高对比度 + 导线和管脚的文本显示为黑色。 + 单色 + 仅使用灰色。 + 细线 + 如果选中,绘制的线会比较细 + 对齐到栅格 + 如果选中,组件将会和栅格对齐。 + 管脚间距 + 用于 layout 外观,设置和前一个管脚的距离。 + 插入导线 + 从剪切板插入 + 组件 ''{1}'' 中的 ''{0}'' 值被修改 + 修改组件 ''{0}'' 属性 + 删除导线 + 移动或旋转组件 ''{0}'' + 移动导线 + 删除选中 + 插入组件 ''{0}'' + 删除组件 ''{0}'' + 插入导线 + 移动选中组件 + 撤销: {0} + 恢复: {0} + 修改电路属性 + 排序测量值 + 修改所选组件属性 + 分割单个导线为两个 + 逻辑 + 运算器 + 触发器 + 输入输出 + 存储器 + 复用器 + 导线 + 开关 + 显示 + 机械 + 外设 + 其他 + 更多 + 窗口 + 关于 + 分析 + 分析当前电路 + 剪切 + 复制 + 自定义 + + 删除组件 + 删除选中的组件 + 编辑 + 设置当前电路 + 该电路设置影响当前打开电路的行为,例如当电路作为子电路被其他电路使用时的形状, + 这些设置和电路文件保存在一起。 + 设置 + 全局设置,包括仿真器、界面语言、符号、外部工具等。 + 停止仿真 + 停止仿真并允许编辑电路。 + 组件 + 导出 + 导出 PNG(大) + 导出 PNG(小) + 导出 SVG + 导出 GIF 动画 + 运行至中断 + 运行电路直至中断(BRK)组件检测到断点。 + 文件 + 帮助 + 更新 + 更新组件菜单。 + 适合窗口 + 单门仿真 + 使用单步模式运行电路 + 新建 + 新建一个空电路 + 新建子电路 + 打开新窗口并创建一个子电路,然后可以在当前电路中使用该子电路 + 打开 + 打开最近使用 + 在新窗口打开最近使用 + 在新窗口中打开 + 在新窗口中打开电路 + 排序输入信号 + 排序输入信号(作为子电路使用时) + 排序测量值信号 + 排序在图形和表格视图中的测量值信号 + 排序输出信号 + 排序输出信号(作为子电路使用时) + 粘贴 + 旋转 + 仿真 + 启动仿真 + 启动仿真电路 + 保存 + 另存为 + 保存数据 + 保存数据为 CSV 文件 + 电路速度测试 + 通过计算最大时钟频率进行运算速度测试 + 单门步进 + 运行单个门 + 运行至中断 + 执行所有的单门步骤直至中断组件检测到上升沿。 + 如果没有中断组件,则执行剩余所有单门步骤。 + 综合 + 为真值表生成最简布尔表达式 + {0} 变量 + 创建 + 电路 + 根据真值表创建对应电路 + 基于 JK 触发器的电路 + 使用 JK 触发器电路表示真值表 + 基于查找表的电路 + 使用查找表电路表示真值表 + 基于与非门的电路 + 基于2输入与非门的电路 + 仅使用2输入与非门创建电路 + 仅使用与非门电路表示真值表 + 基于或非门的电路 + 基于2输入或非门的电路 + 仅使用2输入或非门创建电路 + 仅使用或非门电路表示真值表 + 基于2输入门的电路 + 仅使用2输入门创建电路 + 基于3输入门的电路 + 仅使用最多3输入的门创建电路 + 器件 + 为器件创建 JEDEC 文件 + 导出 LaTeX + 导出测试用例 + 创建用于测试用例的描述 + 测试用例仅在电路为纯组合电路时可用 + 导出十六进制文件 + 可用将十六进制文件载入 ROM 或查找表 + 新建 + 组合电路 + 时序电路 + 双向时序电路 + 重新排序或删除输入变量 + 重新排序或删除输出列 + 添加输出列 + 在表中添加新的结果列 + 添加输入变量 + 在表中添加新的输入变量 + 将 X 设为 0 + 将 Don't Cares 设为 0 + 将 X 设为 1 + 将 Don't Cares 设为 1 + 创建 J/K 表达式 + 将值全部设为 X + 将值全部设为 "don't care" + 将值全部设为 0 + 将值全部设为 0 + 将值全部设为 1 + 将值全部设为 1 + 翻转所有位 + 将 "1" 变为 "0","0" 变为 "1",Don't cares保持不变。 + 显示结果对话框 + 如果结果对话框被手动关闭,则重新显示。 + 删除 + 删除终端内容 + 视图 + 放大 + 缩小 + 表达式 + 从表达式创建电路 + 运行测试用例(当前电路) + 运行当前电路中的所有测试用例 + 设置默认输入信号 + 将当前实际输入值设为默认输入值 + 重置二级管和浮动栅场效应晶体管状态 + 将所有二极管(熔丝)和浮动栅场效应晶体管设为 "非编程" 状态,实际的配置将会丢失。 + 组件信息 + 显示可用组件列表 + 帮助对话框 + 显示描述当前电路的帮助对话框 + 在新窗口粘贴 + 在新窗口粘贴剪切板内容 + 组件树视图 + 在左侧以树视图显示可用组件 + 针对 74xx 电路的功能 + 添加输入输出信号前缀 + 移除输入输出信号前缀 + 移除输入输出信号标签的第一个字符 + 管脚向导 + 为输入和输出信号添加管脚编号向导 + 移除管脚编号 + 移除电路中所有管脚编号 + 撤销 + 还原上次修改 + 重做 + 再次应用上一次还原的修改 + 显示图 + 以图方式显示数据 + 显示表格 + 以表格方式显示值数据 + 添加电源 + 为电路添加电源 + 导出 VHDL + 导出电路为 VHDL + 导出 Verilog + -导出电路为 Verilog + 卡诺图 + 以卡诺图表示当前表格 + 使用文档 + 打开 {0} + 显示测量值表格 + 在新窗口中显示带有测量值的表格 + 显示测量图 + 在新窗口中显示测量图 + 导出为 ZIP 文件 + 导出电路为 ZIP 压缩文件,该压缩文件包含所有电路功能需要的必要文件 + 标签化输入输出信号 + 为所有没有标签的输入输出信号自动添加标签 + 使用指南 + 打开新手使用指南 + 电路统计 + 显示所有已使用组件的列表 + 数量 + 组件 + 输入 + + 地址位 + 打开 PDF 文件时遇到错误! + <h1>Digital</h1>一个简单的数字电路仿真器 + 作者: H. Neemann 2016-2020 + + 所用图标来自 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> + + 在 <a href="https://github.com/hneemann/[[name]]">GitHub</a> 查看该项目,并<a href="https://github.com/hneemann/[[name]]/releases/latest">下载</a>最新的发行版 + + 可以在这里提交<a href="https://github.com/hneemann/[[name]]/issues/new?body=version:%20[[version]]&labels=bug">问题</a>或<a href="https://github.com/hneemann/[[name]]/issues/new?labels=enhancement">建议</a> + {0} 结点 + 分析电路时遇到错误 + 时钟状态改变时遇到错误 + 颜色 + 新建电路时遇到错误 + 化简电路时遇到错误 + 创建硬件配置时遇到错误 + 编辑属性时遇到错误 + 导入电路 {0} 时遇到错误! + 更新组件库遇到错误! + 读取文件时遇到错误 + 未知命令 {0} + 写入文件时遇到错误 + 最大频率为 {0} kHz + 形状 {0} 丢失 + 管脚分配 + 管脚 {0}: {1} + 当前更改需要重启生效! + 输入表达式: + 运行测试时遇到错误: + 测试结果 + {0} 通过 + {0} 失败 + (To many entries!) + 所有测试用例已执行,但没有显示所有结果。然而,对测试结果的评估是正确的! + E: {0} / F: {1} + 创建帮助时遇到错误! + 剪贴板包含不可导入数据! + 请选择空文件夹! + Message from the external fitter + Execution of external fitter + 实际电路 + 文件不可导入!可能存在同名文件? + 文件名不唯一!工作目录和子目录下的所有文件必须具有唯一的文件名。 + 存在同名文件: + and {0} more. + 文件尚未导入 + 文件 {0} 已存在!是否覆盖当前文件? + 已禁止编辑电路。你可以在 "{0} -> {1} -> {2}" 移除锁定 + 测试运行速度遇到错误! + 管脚 {0} + 编号向导 + 选择管脚 {0}: + 写入帧:{0} + 写入 GIF 文件错误! + 完成 + GIF 文件结束并关闭 + 导出 GIF + 由于 + 待翻转输入 + 未设置 + 不能确定管脚名称 + 发生在文件 {0}。 + 受影响组件: {0} + 信号 {0} + 管脚 {0} 未指定管脚编号! + 仅当电路没有错误时才可导出! + 无有效 KV 图! + 数据不会被更新 + 修改当前值 + 包含无效数据字段! + 创建 CHN 文件。 + 当前表非常大,导出需要些时间。确认导出? + 必须先创建和分析电路,不能使用独立的真值表生成硬件描述。 + 没有数据 + 不能关闭外部进程! + 测试结果: + 测试 + 启动应用以测试输入代码是否正确。 + 不能自动创建输入和输出端口,请检测设置! + 未发现可执行文件 "{0}" + 输入文本! + 启动 ATMISP + 启动外部程序 ATMISP。 + 启动 ATMISP 遇到错误! + ATMISP 在继续运行!当关闭当前对话框,ATMISP 被终止。 + 运行所有测试(当前目录) + 对当前目录下的所有电路进行测试 + {0} 测试行通过 + 测试文件 + 真值表 + 剪贴板 + 复制文本到剪贴板。 + 确定 + + 180° + 270° + 90° + 删除选中内容 + 下移该项 + 上移该项 + 所有可能方案 + 测试数据 {0} + 数据 + 确认退出 + 测量 + 保存变更? + 内容已更改 + + 导出 + 选择 + 输入 {0} + 卡诺图 + 帮助 + 居中 ROM 内容 + 表达式 + 测试向量 + 有限状态机 + no movement + Transitions + Transitions+States + 设置 {0} + 有限状态机 + 打开有限状态机编辑对话框 + 创建 + 状态转换表 + 创建计数器 + {0} 状态 + 有限状态机编辑器使用帮助 + 状态码 + 表示该状态的数字 + 初始状态 + 如果设置,则该状态为初始状态 + 输出 + 条件 + 布尔表达式 + 半径 + 图中圆的半径 + 载入文件遇到错误! + 存储文件遇到错误! + 转换 + 状态 + 新状态 + 不能创建状态转换表 + 有限状态就编辑器帮助 + 测量图 + 使用指南 + 在接下来的指南中,我们将完成第一个简单的电路: + 首先,在电路中添加一个输入组件,我们可以通过 组件▸输入输出 菜单找到该组件。 + 现在向电路中添加第二个输入组件。 + 最好将第二个输入组件放置在第一个组件的下面。我们可以通过按住鼠标右键来移动电路,单击组件来移动相应组件。 + 接下来,添加一个异或门。可以通过 组件▸逻辑 菜单找到该组件。将该组件放置到输入组件的右侧,保持适当距离。 + 最后要添加的组件为输出组件。 + 将其放置在异或门的右侧,保持适当距离。 + 为完成电路,必须绘制连接导线。 + 点击第一个输入组件的红色点,然后点击异或门的一个蓝色点来连接到异或门的输入。 + 连接第二个输入组件的红色点到异或门的第二个蓝色点,连接异或门的红色点到输出组件的蓝色点。 + 当绘制导线时,单击可以固定导线,右击取消绘制。 + 你的第一个电路此时已可正常工作。 + 要仿真电路,点击工具栏中的 “启动仿真” 按钮,如果移动鼠标到工具栏,相应的提示会显示。 + 此时仿真已开启,单击输入组件可以切换输入值。 + 点击工具栏中 “停止仿真” 按钮来定制仿真。 + 继续完成,需要给输入和输出添加标签。 + 在输入组件上右击打开对话框,在 MacOS 上使用 control+单击,这时可以给输入组件命名。 + 为所有输入和输出添加标签 + 输入和输出名称必须唯一 + 跳过使用指南 + 能够存储(J=K=0), 置位(J=1, K=0), 复位(J=0, K=1)或翻转(J=K=1)存储的内容。 + 状态仅能够在时钟上升沿发生改变。另有两个额外的输入可以立即改变状态而不需要时钟信号。 + 置位 + 时钟输入 + 复位 + 返回存储的值 + 翻转后的存储值 + 异步置位,输入高电平将置位触发器 + 异步复位,输入高电平将复位触发器 + 管脚 D 的值在时钟上升沿被存储。可以设置位宽以允许存储多位数据。 + 另有两个额外的输入可以立即改变状态而不需要时钟信号。 + 输入 + 时钟,上升沿触发 + 输出 + 翻转后的输出 + 异步置位,输入高电平将置位触发器 + 异步复位,输入高电平将复位触发器 + 单稳态触发器(monoflop),在时钟上升沿置位。 + 在经过一个可配置的延迟后,自动复位。该单稳态触发器可重复触发。电路中必须存在唯一的一个时钟组件, + 时钟组件作为测量时间延迟的基准。 + 复位输入,高电平有效 + 时钟输入 + 输出 + 翻转后的输出 + 没有可用输入 + 未找到适用于组件 {0} 的形状 + Nothing connected to input ''{0}'' at component ''{1}''. Open inputs are not allowed. + 所有连接的输出必须具有相同位宽 + 如果允许多个输出信号连接,所有输出必须为三态输出。 + 导线 {0} 未连接到任何输出,状态未定义。 + 至少需要一个结果! + 输出 {0} 未定义 + 管脚 {0} 没有标签 + 管脚 {0} 重复! + 管脚 {0} 不是输入! + 管脚 {0} 不是输出! + No = found! + 太多输入! + 太多输出! + 管脚不存在 + 发现没有定义标签的管脚! + 需要为时钟信号定义标签。 + 组件 {1} 没有管脚 {0} + 未发现管脚 {0} + 自定义形状未定义管脚 {0} + 未知管脚 {0} + Logic seems to oscillate. + To analyse you can run the circuit in single gate step mode. + 远程端口被占用!是否有其它实例正在运行? + 输入端口数和选择位数不匹配 + 分裂器 {0} 包含语法错误 + 分裂器位数不匹配 + 所有输入位必须定义! + 输入位重复定义! + 分裂器仅允许 64 位! + 需要两个输入! + 太多变量,最多允许 {0} 个,但发现 {1} 个。 + {0} 中包含太多变量,最多允许 {1} 个,但发现 {2} 个。 + CUPL 中不允许变量 {0}! + 变量 {0} 未定义 + 意外的 Token {0} + 缺少右括号 + 第 {1} 行中的 {0} 不是数字! + Expected {0} but found {1} values in line {2}! + Unexpected token ({0}) in line {1}. + 变量 {0} 不存在 + 测试向量未定义输入信号! + 测试向量未定义输出信号! + 未发现测试数据。 + 执行远程命令遇到错误 + 可以设置数据位宽度,和D触发器不同,该寄存器具有使能输入。 + 输入 + 时钟输入,上升沿触发 + 使能输入,高电平有效 + 返回存储内容 + 非易失存储器。可以通过属性对话框编辑存储内容。 + 地址位 + 输出使能 + 如果输入为高电平,输出使能,如果输入为低电平,输出为高阻态。 + RAM(独立端口) + RAM + 拥有独立的数据输入存储端口和数据输出读取端口的RAM。 + 输入和输出共用地址位 + 时钟输入 + 输入数据 + 输出数据 + 输出使能,高电平有效,当为低电平时,输出呈高阻态 + 输入使能,高电平有效 + Block-RAM(独立端口) + 该 RAM 输出仅在时钟上升沿更新,用于 FPGA 的块内存。 + 输入和输出共用地址位 + 时钟输入 + 输入数据 + 输出数据 + 输入使能,高电平有效 + EEPROM(独立端口) + 拥有独立的数据输入存储端口和数据输出读取端口的EEPROM。 + 输入和输出共用地址位 + 时钟输入 + 输入数据 + 输出数据 + 输出使能,高电平有效 + 输入使能,高电平有效 + RAM(双向端口) + RAM + 拥有一个既可用作数据输入,又可用作数据输出端口的RAM。 + 输入和输出共用地址位 + 时钟输入 + 双向数据端口 + 输出使能,高电平有效 + 输入使能,高电平有效 + RAM(片选) + RAM + 拥有一个既可用作数据输入,又可用作数据输出端口的RAM。 + 如果片选输入(CS)为低电平,组件被禁止。用于通过使用较小容量的RAM和地址解码器构造较大容量的RAM。 + 输入和输出共用地址位 + 输入使能,高电平有效 + 双向数据端口 + 片选使能,输入为高电平时,RAM可用,否则输出为高阻态。 + 输出使能,高电平有效 + EEPROM + 拥有一个既可用作数据输入,又可用作数据输出端口的EEPROM。 + 如果片选输入(CS)为低电平,组件被禁止。 + 输入和输出共用地址位 + 输入使能,高电平有效 + 双向数据端口 + 片选使能,输入为高电平时,EEPROM可用,否则输出为高阻态。 + 输出使能,高电平有效 + RAM + 一个端口可以读写,另一个端口只读的RAM。 + 第二个端口可用于图形逻辑访问。此时,处理器写数据到RAM,图形逻辑同时读取数据。 + 输出端口 1 + 输出端口 2 + 用于端口 1 读取和写入数据的地址位 + 用于端口 2 读取和写入数据的地址位 + 时钟输入 + 输入数据 + 输出使能,高电平有效,用于输出端口 1 + 输入使能,高电平有效 + Register File + Register + 计数器 + Counter + 计数器(可预设) + 关闭 + 设置开关的初始状态 + + 常量的值 + 宽度 + 当电路作为子电路时,电路符号的宽度 + 高度 + 当电路作为子电路时,电路符号的高度 + 模型启动时重新载入 + 每次模型启动时重新载入十六进制文件 + 翻转选择管脚位置 + 将选择管脚移到对面的位置 + 使用 LaTeX 格式表示文本 + 使用 LaTeX 格式表示文本 + 数据模式命名管脚标签 + 即使不包含索引,仍然使用数学模式命名管脚标签 + 缩小输入和输出管脚 + 使用等号按键 + Use the equal key instead of the plus key. + This is always useful if the plus character is not a primary key, but the second assignment of the + equals character, e.g. for an American or French keyboard layout. + RAM + EEPROM + 根据电路创建 CUPL 源文件 + 根据电路创建 BLIF 文件,然后启动 Atmel fitte 创建 JEDEC 文件。 + 编程二极管(熔丝) + 存储器 + 显示存储器内容 + 为所有选中的输入和输出添加前缀,用于简化复制 74xx 电路。 + 执行单步时遇到错误 + Error at fast run + 导入 SVG 文件时遇到错误 + 创建 SVG 模板时遇到错误 + 不能创建统计 + 读取工具链配置 {0} 时遇发生错误 + 命令 "{0}" 已启动,处理可能需要些时间! + 命令 "{0}" 已完成! + 重命名网络 + 还有 {0} 个网络名为 ''{1}'' 的隧道组件,是否重命名所有组件为 ''{2}''? + 确定忽略 "{0}" 字段中的修改? + Break after {0} half cycles at break point ''{1}''. + 全时钟测量 + 单门测量 + 包含 ROM + <html> + <h3>Motivation</h3> + When a circuit containing a ROM component is embedded multiple times, the contents of the ROM + is normally used for each instance of that circuit. Under certain circumstances, + however, it may be desirable for such a circuit to be embedded multiple times, + but different ROM contents are used for each instance.<br/> + This problem occurs e.g. if a 74xx ROM is used multiple times but with different + memory contents.<br/> + <h3>Function</h3> + At this location, therefore, contents can be defined for all ROM's in the circuit. + When the simulation model is generated, every ROM is initialized with the contents stored + directly in the respective ROM. Then it is checked whether an alternative content is + defined here. If this is the case, the content defined here is loaded into the corresponding ROM. + <h3>Usage</h3> + It should be noted that each ROM requires a unique name used to identify the ROM. + To do this, use the asterisk ('*') in the label of the ROM. The asterisk is then replaced by the complete + path constructed from the names of the embedded circuits. + If a circuit contains only one ROM component, it is sufficient to use only the asterisk as a label for it. + All embedded circuits must be named so that a unique name can be formed for each ROM component. + </html> + <html> + <h1>新版本 {0} 可用</h1> + <p>发现新的仿真器</p> + <p>在这里 <a href="https://github.com/hneemann/[[name]]/releases/latest">发行说明</a> + 你可以查看有哪些功能变更。</p> + <p>也可以直接 <a href="https://github.com/hneemann/[[name]]/releases/latest">下载</a> 最新版本</p> + </html> + To define an expression you can use all most common notations: + + And: "&", "&&", "*", "∧" + Or: "|", "||", "+", "∨", "#" + XOr: "^", "⊻" + Not: "!", "~", "¬" + + As usual AND precedes OR and XOr. + + Multiple expressions can be separated by "," or ";". + If you want to name the expressions you can use the + let-command: "let U=A+B, let V=A*B" + <html> + <head><style>pre { background-color: #E0E0E0;}</style></head> + <body> +<p>The first line has to contain the names of inputs and outputs. +The following lines contain the expected values. +A 'X' represents a don't care, and a 'Z' represents a high Z value. +If a 'C' is used, at first all other values are set, after that a clock cycle is performed and than the +values are compared. So it's easier to test sequential logic. +A line which starts with a number sign ('#') is a comment.</p> + +<p>So a test for a 2-bit counter could look like this:</p> + +<pre> +C Q1 Q0 +0 0 0 +C 0 1 +C 1 0 +C 1 1 +C 0 0 +</pre> + +<p>The tests are executed by Run->Run Tests.</p> +<p> +To make it easier to create a lot of test vectors there is the 'repeat([n])' statement: +If a line begins with 'repeat([n])', [n] test lines are generated. The +Variable 'n' can be used to generate the test data. With 'repeat(16)' +16 lines are created, where n goes from 0 to 15. If there are multiple bit inputs, +and these are to be set together to a binary value, this can be done with the +'bits([bits], [value])' statement. This is used to create [bits] bits of the value [value].</p> + +<p>The following is an example that tests a 4-bit adder:</p> + +<pre> + C_i-1 A_3 A_2 A_1 A_0 B_3 B_2 B_1 B_0 C_i S_3 S_2 S_1 S_0 +repeat(256) 0 bits(4,n>>4) bits(4,n) bits(5,(n>>4)+(n&15)) +repeat(256) 1 bits(4,n>>4) bits(4,n) bits(5,(n>>4)+(n&15)+1) +</pre> + +<p>The input signals are the carry-in (C_i-1) and the eight input bits A_3-A_0 and B_3-B_0. +The 4 input bits are generated with the 'bits' instruction. The result (C_i, S_3-S_0) is also generated +by a 'bits' instruction. +This happens once with C_i-1 = 0 and in the next line with C_i-1 = 1. +In this way, 512 test rows are generated which cover all possible input configurations.</p> +<p>If multiple rows are to be repeated, or if nested loops are required, the loop +statement can be used. The above example could also be implemented as follows:</p> + +<pre> + C_i-1 A_3 A_2 A_1 A_0 B_3 B_2 B_1 B_0 C_i S_3 S_2 S_1 S_0 +loop(a,16) + loop(b,16) + 0 bits(4,a) bits(4,b) bits(5,a+b) + 1 bits(4,a) bits(4,b) bits(5,a+b+1) + end loop +end loop +</pre> + +<p>It may be helpful to generate random numbers in test cases. +These can be created with the function 'random([n])'. The generated number is greater +than or equal to zero and less than [n]. Considering a 16-bit multiplier as an example, +a full test can not be performed since it would have 2^32 input combinations. +A regression test that multiplies 100000 random numbers might look like this:</p> + +<pre> + A B Y +loop(i,100000) + let a = random(1&lt;&lt;16); + let b = random(1&lt;&lt;16); + (a) (b) (a*b) +end loop +</pre> + +<p>An input that allows high impedance as a value can also be used as a test output. +In this case, the signal name can be used with a trailing "_out" to read back and check the current value. +For this, the corresponding input must be set to high impedance ('Z').</p> + +<pre>OE CLK D D_out +0 0 0 0 +0 C 1 1 +1 0 z 1 +0 C 0 0 +1 0 z 0 +</pre> + +<p>The circuit for this test has only one input 'D', but which can be high impedance state. +Therefore, the signal 'D_out' is also available to check the value in this case.</p> + +</body></html> + 定义输出值。简单的如 "A=1, B=0",多位输出,如 "A=101"。 + 未定义的输出状态默认为 0。在状态转换中,为指定的输出保持不变。 + 有限状态机 {0} 不确定 + 状态码 {0} 重复 + 找不到初始状态 + 找不到状态 ''{0}'' + 输出 ''{0}'' 分配错误 + 条件 ''{0}'' 错误 + <html><head></head> +<body> + <h3>Mouse Operation</h3> + <dl> + <dt>Create a state:</dt> + <dd>Right mouse click on a free area.</dd> + <dt>Creating a transition:</dt> + <dd>Right mouse button down on the start state and dragging to the destination state.</dd> + <dt>Delete a state or a transition:</dt> + <dd>Move the mouse over the object and press the [Del] button.</dd> + <dt>Moving a state or transition:</dt> + <dd>Left mouse button down and dragging.</dd> + <dt>Editing a state or a transition:</dt> + <dd>Right mouse click on the state or the transition.</dd> + </dl> + <h3>Layout Help Function</h3> + <dl> + <dt>no movement:</dt> + <dd>The layout help function is disabled.</dd> + <dt>Transitions:</dt> + <dd>The layout help function moves the transition arrows to avoid overlaps.</dd> + <dt>Transitions+States</dt> + <dd>The layout help function moves both states and transitions to help create a well-balanced layout.</dd> + </dl> + <h3>Interpretation of Transitions</h3> + To simplify the generation of a deterministic automata, unconditional transitions are treated in a special way: + an unconditional transition is only executed if no other transition satisfies the transition condition. + So there can be an unconditional transition and conditional transitions that start in the same state. + An unconditional transition thus determines to which state the state machine is shifted if no other transition + condition is met. + If there is no unconditional transition from a state, the state machine will stay in this state if no other + transition condition is met. +</body></html> + <html><body> + <h3>What can be seen in the graph?</h3> + Unlike a real logic analyzer, the X-axis of the measurement graph does not show the time. + Instead a counter is displayed which counts the changes of state in the circuit. + Whenever there is a change in the circuit, the counter is incremented and the new state is displayed.<br/> + You can also think of it as a classic logic analyzer, which does not save any data for optimization + if nothing has changed in the circuit. + However, this also means that it is not possible to read from the graph whether a lot or little time has + passed between two changes in the circuit.<br/> + This behavior is caused by the nature of the simulation: The simulation of the circuit does not know the + concept of time. A change is made to the circuit, and the change in the circuit state is calculated, until + the circuit has stabilized again. Then the next change is made, the effect of which is also is calculated + and so on. These changes are counted and the counter value is displayed on the X-axis of the graph.<br/> + Among other things, this also means that a circuit cannot be overclocked, since the effects of the falling + edge of the clock are not calculated until the circuit has stabilized after the previous rising edge. + </body></html> + 显存 + Gr-RAM + 用于显示位图图形。 + 每个像素都由一个存储器地址表示。存储的值使用固定的调色板定义像素的颜色。实现了两个屏幕缓冲区以支持页翻转。 + 输入B选择显示哪个缓冲区。总存储器大小为 dx * dy * 2。 + 所使用的调色板的结构如下:索引0-9对应于白色,黑色,红色,绿色,蓝色,黄色,青色,品红色,橙色和粉红色。 + 索引32-63映射灰度值,索引64-127表示64个颜色值,其中每个颜色通道有两位。这样产生了一个简单的调色板,该调色板只能用7位寻址。 + 如果支持16位索引,从0x8000开始,则可以使用每个颜色通道5位的高色模式,从而启用32768种颜色。 + 输入和输出共用地址位 + 输入使能,高电平有效 + 时钟输入 + 输出使能,高电平有效 + 选择需要显示的屏幕缓冲区 + 双向数据端口 + RAM(多端口) + 1个写端口,两个读端口的存储器,用于实现处理器寄存器。 + 输出端口 a + 输出端口 b + 输出到端口 a 的寄存器 + 输出到端口 b 的寄存器 + 写寄存器 + 写使能,高电平有效 + 时钟 + 输入数据 + 简单的计数器。时钟上升沿增加计数,通过 clr 输入重置为 0。可通过属性对话框设置计数器位数。 + 时钟输入 + 同步复位,高电平有效 + 溢出位 + 计数输出 + 使能位,高电平有效 + 可预置位的计数器,可以指定最大值和计数方向。 + Counter + 计数输出 + 溢出位,当使能时,如果计数到达最大或递减到 0,则输出 1。 + 时钟输入 + 同步复位 + 使能位,高电平有效 + 计数方向,0 表示递增 + 输入使能,当为 1时 ,输入数据在下一个时钟信号存入计数器 + 数据输入 + 加法器 + Add + 计算输入 a 和输入 b 的和,如果设置进位,则结果加 1。 + 第一个输入 + 第二个输入 + 加法运算结果 + 进位输入,如果为高电平,则结果加 1。 + 输出进位 + 减法器 + Sub + 将二进制输入 a 和输入 b相减,如果进位输入为高电平,则结果减 1。 + 进位输入,如果为高电平,则结果减 1。 + 输入 a + 输入 b + 减法运算结果 + 如果出现溢出,则输出为 1。 + 乘法器 + Mul + 将整数输入 a 和 b 相乘 + 输入 a + 输入 b + 乘法运算结果 + 除法器 + Div + 将整数 a 除以 整数 b。 如果除数为零,则除以1。 在有符号除法中,余数始终为正。 + 被除数 + 除数 + + 余数 + 桶式移位器 + shift + 根据移位输入将数据移位 + 输入数据 + 移位宽度 + 移位后的输出 + 比较器 + 比较二进制输入 a 和 b + 输入 a + 输入 b + 如果 a 等于 b,输出 1 + 如果 a 大于 b,输出 1 + 如果 a 小于 b,输出 1 + 补码器 + Neg + 输入 + 补码输出 + 补码运算 + 符号扩展器 + SignEx + 增加符号数的位宽同时保持值不变 + 输入值,位宽必须小于输出 + 扩展后的输入 + 位计数器 + Bit count + 返回输入值中位为 1 的位数 + 输入 + 包含 1 的位数 + 启动命令 {0} 时遇到错误 + 解析代码时遇到错误 + 未检测到视频模式 ({0}) + 避免输出0。用于设置延迟电路。仅当允许高阻态输出时可用。 + 假设 4位,2位,2位作为输入,可表示为 "4,2,2"。 + 还可以使用 * 号,如 16 位表示为 "1*16"([Bits]*[Number])。还可以直接指定使用的位而不用关心顺序,如 "4-7,0-3"。 + 输入位必须明确且完整的指定。 + 输出分割 + 假设 4位,2位,2位作为输出,可表示为 "4,2,2"。 + 还可以使用 * 号,如 16 位表示为 "1*16"([Bits]*[Number])。还可以直接指定使用的位而不用关心顺序,如 "4-7,0-3"。 + 输出位可以使用多次,如 "0-7,1-6,4-7"。 + 选择位 + 选择位位数 + 补码运算 + 使用补码 + 补码输入 + 输入数据为补码格式 + 桶式移位器模式 + 逻辑 + 环绕 + 算术 + 显示单步 + 在图形中显示所有单步 + 以单步模式显示测量图 + 当仿真启动时,以单步模式显示测量图。 + 测试用例描述,详细的语法可以在测试数据编辑器帮助对话框查看。 + 将该寄存器作为程序计数器。寄存器的值返回给外部汇编器,用来表示当前调试代码行。 + 闭合寄存器 + 输入输入为低电平,继电器闭合 + 极数 + 可用极数 + 不可能将频率增加得太多以至于使闪烁消失。 + 使用此选项,您可以通过保持LED点亮直到公共阴极再次下降来稳定显示,从而模拟高于临界闪烁融合频率的频率。 + 单向晶体管仅将信号从源极传播到漏极。仿真时,比双向晶体管快很多。 + 由于没有从漏极到源极的反馈,因此在这种模式下,晶体管导通时无法使连接的导线短路。此模式对于模拟某些CMOS电路是必需的。 + 外部进程的输入端口。格式为逗号分割的信号名称,对于每个信号,可通过冒号指定位数。如8位加法器的输入可表示为 "a:8,b:8,c_in"。 + 外部进程的输出端口。格式为逗号分割的信号名称,对于每个信号,可通过冒号指定位数。如8位加法器的输出可表示为 "s:8,c_out"。 + 可执行文件ghdl路径。仅当需要使用 ghdl 仿真 vhdl 组件时设置。 + MIDI通道 + 选择需要使用的 MIDI通道 + MIDI 设备 + 选择需要使用的 MIDI 设备 + 允许改变程序 + 增加一个新的输入端口(PC),如果该输入为高电平,输入端口 N 的值用于改变程序(设备) + 开关行为输入化 + 开关行为类似输入,开对应 0,关对应 1。 + 二极管(上拉) + 用于将导线上拉至VDD,必须将下拉电阻连接到二极管输出。 + 如果输入为高电平,输出则为高电平,其它情况输出为高阻。 + 如果输入为高电平,输出则为高电平,其它情况输出为高阻。 + 二极管(下拉) + 用于将导线下拉至地,必须将上拉电阻连接到二极管输出。 + 如果输入为低电平,输出则为低电平,其它情况输出为高阻。 + 如果输入为低电平,输出则为低电平,其它情况输出为高阻。 + 开关 + 连接点 + 简单的开关,没有门延迟 + 双掷开关 + 双掷开关,没有门延迟 + Fuse + 用于构建一次性可编程存储器 + 连接点 + 连接点 + 继电器 + 继电器是一种可以通过线圈控制的开关,如果电流流过线圈,则开关会闭合或断开。不关心电流方向。 + 控制输入 + 控制输入 + 双掷继电器 + 继电器是一种可以通过线圈控制的开关,如果电流流过线圈,则开关会闭合或断开。不关心电流方向。 + 控制输入 + 控制输入 + P 沟道场效应晶体管 + 栅极 + 源极 + 漏极 + N 沟道场效应晶体管 + N 沟道场效应晶体管 + 栅极 + 源极 + 漏极 + P 沟道浮动门场效应晶体管 + P 沟道浮动门场效应,如果浮栅中存储有电荷,即使栅极为低电平时晶体管也不导通 + 栅极 + 源极 + 漏极 + N 沟道浮动门场效应晶体管,如果浮栅中存储有电荷,即使栅极为高电平时晶体管也不导通 + 栅极 + 源极 + 漏极 + 传输门 + 由两个晶体管构建的传输门 + 输入 A + 输入 B + 控制输入 + 翻转的控制输入 + 用于确保电源和地被连接 + 必须连接到电源 + 必须连接到地 + 在电路初始化期间,该组件的输出保持高电平。电路稳定后,输出变为低电平。 如果输出反相,则其行为相反。 + 如果电路中使用到该组件,则 运行至中断 按钮可用。仅在禁用实时时钟时才能使用此功能! + 一个理想的二极管:正向偏置二极管两端没有压降。 + 禁止将上拉电阻和下拉电阻连接到同一条导线 + 无法打开浏览器 + 无法创建文件夹 "{0}" + 不可仅连接输入信号到开关 + The file {0} exists multiple times below {1}. + 找不到文件 {0} + 执行 "{0}" 时遇到错误 + 进程 "{0}" 无返回内容! + 进程返回值非零 {0}: {1} + Error starting the external fitter! + 找不到最简等式! + 正在计算,请稍等! + 变量 {0} 重复! + 文件需要保存! + 电路 {0} 导入自身! + 化简结果不正确,变量的名称或不唯一! + 循环中出现太多迭代! + 二极管输出需要上拉电阻! + 二极管输出需要下拉电阻! + 电路中找不到测试信号 {0}! + 仅允许 {1} 位数据,但给出 {0} 位! + 禁止多于 1 位的触发器! + 传输门的两个控制输入必须反相! + 信号 {0} 使用多次! + 解析测试数据遇到错误。 + 不能分析组件 {0} 的模型。 + 电源布线错误 {0} + 管脚编号 {0} 不是整数 + 导出 VHDL 时遇到错误 + 找不到 {0} 的 VHDL 代码! + 找不到 {0} 的 Verilog 代码! + 创建测试文件遇到错误! + 不允许的类型 {0}! + 缺失名称,是否为所有管脚设置标签? + 多个输出连接在一起。({0}, {1}, {2}) + 未命名网络 + 太多变量! + 无效表达式! + Function {0} not found in line {1}! + Number of arguments in function {0} in line {1} not correct (found {2}, expected {3})! + Invalid value {0} in function {1}! + {0} 不是一个路径元素 + 载入库时遇到错误 + JAR 文件不包含 manifest! + manifest 文件不包含主类! + 找不到类 {0}! + 不能创建类 {0} 的实例! + 输入位必须多于输出位! + 禁止设置物理管脚为常量! + 字符串 {0} 不是有效数字 (pos {1})! + 不允许名称 "{0}" + TT2文件禁止出现空格! + 表中包含太多列! + 创建压缩 zip 时遇到错误。 + 仅允许存在一个高频时钟组件。 + 电路包含环,无法分析当前电路。 + 如果使用单稳态触发器,必须有且也只有一个时钟组件! + 不能创建组件类型 {0}! + ROM's defined in the settings are not supported! + 名称 "{0}" 不唯一! + 无法向外部进程写入值! + 无法从外部进程读取值! + 无法创建外部进程! + 从外部进程读取数据超时! {0} + 接收数据不足! + 接收到的文本包含无效字符:{0}! {1} + 进程异常终止! {0} + 无法结束进程! + 无法启动进程:{0} + 应用退出状态非零 {0}:{1} + 仅 VHDL 代码可导出! + 仅 Verilog 代码可导出! + 如果一个外部组件被使用多次,代码必须相同!影响: {0} + 无法写入 stdOut:{0} + VHDL 仿真器 ghdl 未安装,安装 ghdl (http://ghdl.free.fr/) 并重新尝试。 + Verilog 仿真器 Icarus 未安装,安装 iverilog (http://iverilog.icarus.com/) 并重新尝试。 + 分析电路 {0} 时遇到错误 + 每个 ROM 必须有唯一的标签才能导出! + 每个 LUT 必须有唯一的标签才能导出! + 计数器至少需要两位。 + 禁止在异步模式使用时钟组件。 + 导出 Verilog 时遇到错误。 + 未发现程序存储器! + Error loading the program memory. + 读取 SVG 文件时遇到错误。 + SVG 文件包含电路中不存在的管脚。 + All memories into which data are to be loaded require the same bit width. + If programs are to be loaded into several RAMs, all RAMs must have + different names. The lexical order then determines the order of the RAMs. + MIDI 系统不可用。 + MIDI 通道 {0} 不可用。 + MIDI 设备 {0} 不可用。 + MIDI 设备不可用 + 执行测试 "{0}" 时遇到错误! + HDL not known: {0} + 未命名的输入或者输出端口! + 信号名称 "{0}" 无效或多次使用! + Error when substituting components for the analysis. + Error in the evaluation of the generic code of the circuit. Code + {1} + at Component: {0} + diff --git a/src/main/resources/lang/lang_zh_ref.xml b/src/main/resources/lang/lang_zh_ref.xml new file mode 100644 index 000000000..38b67fff4 --- /dev/null +++ b/src/main/resources/lang/lang_zh_ref.xml @@ -0,0 +1,1938 @@ + + + Address + Table of Contents + General + Revision + Date + The following describes the available settings of the simulator. + maximum + Attributes + Open Circuit + Included circuit: + Opens the circuit in a new window. + Help + Shows a short description of this element. + Hex + Decimal + Ascii + HighZ + Octal + Binary + Basic + Advanced + Discard Changes + Edit + Continue editing + Load + Reload + Reload last hex file + Save + Save as HEX file. + Create + Create a circuit in a separate window + Edit detached + Opens the dialog as a non modal dialog + Browser + Opens help text in the browser. Allows to print the text. + Clear + All values are set to zero! + Transitions + All possible transitions are added as test cases. Is used to create test cases to test the simulator itself. + New Name + Save anyway + Overwrite + Apply + Edits the content of the selected ROM/EEPROM + Removes the stored data for the selected ROM. The content which is stored in the ROM directly is used instead. + Template + Creates an SVG template which can then be edited with Inkscape. + Import + Import an SVG file. To create a suitable SVG file, it is easiest to first create + a SVG template and then edit it. + Warning + Cancel + Digital + Expression + Inputs + Outputs + Attributes + The {0}. input value for the logic operation. + Returns the result of the logic operation. + And + Binary AND gate. Returns high only if all inputs are also set high. + It is also possible to use buses with several bits as inputs and output. In this case, a bitwise AND is executed. + This means that the lowest bits of all inputs are connected with AND and is output as the lowest bit at the output. + The same happens with bit 1, bit 2 and so on. + NAnd + A combination of AND and NOT. + Returns 0 only if all inputs are set to 1. If one of the inputs is set to 0 the output is set to 1. + It is also possible to use buses with several bits per input. In this case, the operation is applied to each + bit of the inputs. + Or + Binary OR gate. Returns a 1 if one of the inputs is set to 1. + If all inputs are set to 0 the output is also set to 0. + It is also possible to use buses with several bits as inputs and output. In this case, a bitwise OR is executed. + This means that the lowest bits of all inputs are connected with OR and is output as the lowest bit at the output. + The same happens with bit 1, bit 2 and so on. + NOr + A combination of OR and NOT. + Returns a 0 if one of the inputs is set to 1. If all inputs are set to 0 the output is also set to 1. + It is also possible to use buses with several bits per input. In this case, the operation is applied to each + bit of the inputs. + XOr + If two inputs are used, the output is 0 if both input bits are equal. + Otherwise the output in set to 1. + If more than two inputs are used, it behaves like cascaded XOR gates ( A XOR B XOR C = (A XOR B) XOR C ). + It is also possible to use buses with several bits per input. In this case, the operation is applied to each + bit of the inputs. + XNOr + A combination of XOR and NOT. The inputs are combined with the XOR operation. + The result of this operation than is inverted. + It is also possible to use buses with several bits per input. In this case, the operation is applied to each + bit of the inputs. + Not + Inverts the input value. A 1 becomes a 0 and a 0 becomes 1. + It is also possible to use a bus with several bits per input. In this case, the operation is applied to each + bit of the inputs. + The input of the NOT gate. + The inverted input value. + Lookup Table + LUT + Gets the output value from a stored table. + So this gate can emulate every combinatorial gate. + Input {0}. This input in combination with all other inputs defines the + address of the stored value to be returned. + Returns the stored value at the address set via the inputs. + Delay + Delays the signal by on propagation delay time. + Delays a signal for an adjustable number of gate delays. + All other components in Digital have a gate delay of on propagation delay time. + This component can be used to realize any necessary propagation delay. + Input of the signal to be delayed. + The input signal delayed by one gate delay time. + Output + Can be used to display an output signal in a circuit. + This element is also used to connect a circuit to an embedding circuit. + In this case the connection is bidirectional. + Is also used to assign an pin number, if code for a CPLD or FPGA is generated. + This value is used for the output connection. + LED + A LED can be used to visualize an output value. Accepts a single bit. + Lights up if the input is set to 1. + LED Input. LED lights up if the input is set to 1. + RGB-LED + An RGB LED whose color can be controlled via three inputs. + At each of the three inputs, a color channel is connected. + The red color channel. + The green color channel. + The blue color channel. + Input + Can be used to interactively manipulate an input signal in a circuit with the + mouse. This element is also used to connect a circuit to an embedding circuit. + In this case the connection is bidirectional. + Is also used to assign an pin number, if code for a CPLD or FPGA is generated. + Gives the value which is connected to this input. + DIP Switch + Simple DIP switch that can output either high or low. + The output value of the switch. + Clock Input + A clock signal. Its possible to control it by a real-time clock. + Depending on the complexity of the circuit, the clock frequency achieved may be less than the selected value. + If the frequency is greater than 50Hz, the graphic representation of the circuit will no longer be updated at + every clock cycle so that the wire colors will no longer be updated. + If the real-time clock is not activated, the clock can be controlled by mouse clicks. + Is also used to assign an pin number, if code for a CPLD or FPGA is generated. + Switches between 0 and 1 with the selected clock frequency. + Button + A simple push button which goes back to its original state when it is released. + The output signal of the button. + Button with LED + A simple push button which goes back to its original state when it is released. + The push button has an LED which can be switched via an input signal. + The output signal of the button. + Input for controlling the LED. + Text + Shows a text in the circuit. + Does not affect the simulation. + The text can be changed in the attribute dialog. + Rectangle + Shows a rectangle in the circuit. + Does not affect the simulation. If a minus sign is used as the heading, the heading is omitted. + Probe + A measurement value which can be shown in the data graph or measurement table. + This component can be used to easily observe values from embedded circuits. + Does not affect the simulation. + The measurement value. + Light Bulb + Light bulb with two connections. If a current flows, the bulb lights up! + The direction of the current does not matter. The lamp lights when the inputs have different values. + The bulb behaves similar to an XOr gate. + Connection + Connection + LED with two connections. + LED with connections for the cathode and the anode. The LED lights up, + if the anode is connected to high and the cathode is connected to low. + The anode connection of the LED. + The cathode connection of the LED. + Seven-Segment Display + Seven Segment Display, every segment has its own control input. + This input controls the upper, horizontal line. + This input controls the upper, right, vertical line. + This input controls the lower, right, vertical line. + This input controls the lower horizontal line. + This input controls the lower, left, vertical line. + This input controls the upper, left, vertical line. + This input controls the middle, horizontal line. + This input controls the decimal point. + Common cathode. To turn on the LEDs, this input needs to be low. + Common anode. To turn on the LEDs, this input needs to be high. + Seven-Segment-Hex Display + Seven Segment Display with a 4 bit hex input + The value at this input is visualized at the display. + This input controls the decimal point. + 16-Segment Display + The LED input has 16 bits which control the segments. The second input controls the decimal point. + 16-bit bus for driving the LEDs. + This input controls the decimal point. + LED-Matrix + A matrix of LEDs. The LEDs are shown in a separate window. + The LEDs of a column of the display are controlled by a data word. At another input, the current column is + selected. So a multiplexed display is realized. + The LEDs are able to light up indefinitely in the simulation to prevent the display from flickering. + The row state of the LEDs of a column. + Each bit in this data word represents the state of a row of the current column. + The number of the current column whose state is currently visible at the other input. + Data Graph + Shows a data plot inside of the circuit panel. + You can plot complete clock cycles or single gate changes. + Does not affect the simulation. + Rotary Encoder + Rotary knob with rotary encoder. Used to detect rotational movements. + encoder signal A + encoder signal B + Keyboard + A keyboard that can be used to enter text. + This component buffers the input, which can then be read out. + A separate window is opened for the text input. + Clock. A rising edge removes the oldest character from the buffer. + If high the output D is active and one character is output. + It also enables the clock input. + The last typed character, or zero if no character is available. + Output is the 16 bit Java char value. + This output indicates that characters are available. + It can be used to trigger an interrupt. + Terminal + You can write ASCII characters to this terminal. + The terminal opens its own window to visualize the output. + Clock. A rising edge writes the value at the input to the terminal window. + The data to write to the terminal + A high at this input enables the clock input. + VGA Monitor + Analyzes the incoming video signals and displays the corresponding graphic. + Since the simulation cannot run in real time, the pixel clock is required in addition to the video signals. + The red color component + The green color component + The blue color component + The horizontal synchronization signal + The vertical synchronization signal + The pixel clock + MIDI + Uses the MIDI system to play notes. + Note + Volume + If set, this translates to pressing a keyboard key (key down event), + if not set, this translates to releasing the key (key up event). + Enables the component + If high, the value at N is used to change the program (instrument). + Clock + Stepper Motor, unipolar + Unipolar stepper motor with two limit position switches. + Full step drive, half step drive and wave drive are supported. + Limit position switch 0, becomes 1 when the motor angle is 0°. + Limit position switch 1, becomes 1 when the motor angle is 180°. + Phase 0 + Phase 1 + Phase 2 + Phase 3 + Stepper Motor, bipolar + Bipolar stepper motor with two limit position switches. + Full step drive, half step drive and wave drive are supported. + Limit position switch 0, becomes 1 when the motor angle is 0°. + Limit position switch 1, becomes 1 when the motor angle is 180°. + Coil A, positive + Coil A, negative + Coil B, positive + Coil B, negative + Ground + A connection to ground. Output is always zero. + Output always returns 0. + Supply voltage + A connection to the supply voltage. Output is always one. + This output always returns 1. + Constant value + A component which returns a given value as a simple constant value. The value can be set in the attribute dialog. + Returns the given value as a constant. + Tunnel + Connects components without a wire. All tunnel elements, which have the same net name, + are connected together. Works only locally, so it is not possible to connect different circuits. + Unnamed tunnels are ignored silently. + The connection to the tunnel. + Splitter/Merger + Splits or creates a wire bundle or a data bus with more than one bit. + With a bus it is e.g. possible to generate 16-bit connections without having to route 16 individual wires. + All 16 connections can be merged into one wire. + The splitter has a direction, meaning it can only transmit signals in one direction. + The input bits {0}. + The input bit {0}. + The output bits {0}. + The output bit {0}. + Bidirectional Splitter + Can be used for data buses and simplifies especially the construction of + memory modules in a DIL package, as the implementation of the data bus is simplified. + When set, the value at the common data terminal D is output to the bit + outputs D[i], if not, the bits D[i] are output to the common output D. + The common data connection. + The data bit {0} of the bus splitter. + Pull-Up Resistor + A "weak high". + If a net is in a HighZ state, this resistor pulls the net to high. + In any other case this component has no effect. + Pull-Down Resistor + A "weak low". + If the net is in a HighZ state, this resistor pulls the net to ground. + In any other case this component has no effect. + Driver + A driver can be used to connect a signal value to another wire. + The driver is controlled by the sel input. + If the sel input is low, the output is in high z state. + If the sel input is high, the output is set to the input value. + The input value of the driver. + If the sel input is 1 the input is given to this output. + If the sel input is 0, this output is in high z state. + Pin to control the driver. + If its value is 1 the input is set to the output. + If the value is 0, the output is in high z state. + Driver, inverted select + A driver can be used to connect a data word to another line. + The driver is controlled by the sel input. + If the sel input is high, the output is in high z state. + If the sel input is low, the output is set to the input value. + The input value of the driver. + Pin to control the driver. + If its value is 0 the input is given to the output. + If the value is 1, the output is in high z state. + If the sel input is 0 the input is given to this output. + If the sel input is 1, this output is in high z state. + Pin Control + Control logic for a bi-directional pin. + This component is necessary only in the context of VHDL or Verilog generation, in order to create a + bi-directional HDL port! + If you don't want to use a bi-directional IO-port on an FPGA, don't use this component! + The PinControl component cannot be used in an embedded circuit! It is only allowed at the top level circuit! + The data to be output. + Activates the output. + The data to be read. + The connector for the actual pin. Only a single output should be connected + here. + Multiplexer + A component which uses the value of the sel pin to decide which input value is + set to the output. + The {0}. data input of the multiplexer. + The value of the selected input. + This input is used to select the data input which is output. + Demultiplexer + A component that can output the input value to one of the outputs. + The other outputs are set to the default value. + This pin selects the output to use. + The value of this input is given to the selected data output. + Data output {0}. + Decoder + One selectable output pin is 1, all other outputs are set to 0. + Output {0}. This output is 1 if selected by the sel input. + This input selects the enabled output. + The selected output is set to 1. All other outputs are set to 0. + Bit Selector + Selects a single bit from a data bus. + The input bus + This input selects the bit + The selected bit. + Priority Encoder + Priority + If one of the inputs is set, its number is output. + If several inputs are set at the same time, the highest number is output. + Number of the set input. + If this output is set, at least one of the inputs is set. + The {0}. input of the priority encoder. + RS-Flip-flop + RS + A component to store a single bit. + Provides the functions "set" and "reset" to set or reset the stored bit. + If both inputs are switched to one, both outputs also output a one. + If both inputs switch back to zero at the same time, the final state is random. + The set input. + The reset input. + Returns the stored value. + Returns the inverted stored value. + RS-Flip-flop, clocked + RS + A component to store a single bit. + Provides the functions "set" and "reset" to set or reset the stored bit. + If both inputs (S, R) are set at the rising edge of the clock, the final state is random. + The set input. + The clock input. A rising edge initiates a state transition. + The reset input. + Returns the stored value. + Returns the inverted stored value. + JK-Flip-flop + JK + Has the possibility to store (J=K=0), set (J=1, K=0), reset (J=0, K=1) or toggle (J=K=1) the stored value. + A change of state takes place only at a rising edge at the clock input C. + The set input of the flip-flop. + The clock input. A rising edge initiates a state change. + The reset input of the flip-flop. + Returns the stored value. + Returns the inverted stored value. + D-Flip-flop + D + A component used to store a value. + The value on pin D is stored on a rising edge of the clock pin C. + The bit width can be selected, which allows to store multiple bits. + Input of the bit to be stored. + Clock pin to store a value. + The value on input D is stored on a rising edge of this pin. + Returns the stored value. + Returns the inverted stored value. + T-Flip-Flop + T + Stores a single bit. Toggles the state on a rising edge at input C. + Enables the toggle function. + Clock input. A rising edge toggles the output, if input T is set to 1. + Returns the stored value. + Returns the inverted stored value. + JK-Flip-flop, asynchronous + JK-AS + D-Flip-flop, asynchronous + D-AS + Monoflop + Mono + Register + Reg + ROM + RAM + EEPROM + P-Channel FET + N-Channel floating gate FET + Test case + Describes a test case. + In a test case you can describe how a circuit should behave. It can then be automatically checked whether the + behavior of the circuit actually corresponds to this description. If this is not the case, an + error message is shown. + Asynchronous Timing + Allows configuration of the timing of an asynchronous sequential circuit such as a + Muller-pipeline. The circuit must be started in single gate step mode and must be able to reach a stable state + at startup. The sequential circuit can then be started interactively or with a reset gate. + It is not allowed to use a regular clock component in this mode. + Power + Reset + Reset Output. + Break + Stops the fast simulation clocking if a rising edge is detected. + External + Component to execute an external process to calculate the logic function. + Is used to specify the behaviour of a component by VHDL or Verilog. + The actual simulation of the behavior must be done with an external simulator. + At present only the VHDL simulator ghdl and the verilog simulator Icarus Verilog are supported. + Diode + Error + Pin {0} in component {1} is not a input or output + A single clock component is necessary. All flip-flops must use this clock signal. + The circuit has no labeled inputs + The circuit has no labeled outputs + No break detected after {0} cycles at break point ''{1}''. + Possibly the number of timout cycles in the break component should be increased. + Expression {0} not supported + Operation {0} not supported + Error creating the lookup table. + More than one output is active on a wire, causing a short circuit. + It is not allowed to connect a pull-up and pull-down resistor to the same net. + Cannot analyse Node {0} + Contains [var] and [not var] + Pin {0} in component {1} exists twice + Component {0} not found + Exact {0} valoas necessary, not {1} + Flip-flop needs to be connected to the clock. + Invalid file format + Logic is already initialized + A tunnel {0} is not connected! + There is more than one clock + The clock component is not used! + There are {0} bits needed, but {1} bits found + Net of pin {0} not found + No clock found in logic + Address Bits + Number of address bits used. + Data Bits + Number of data bits used. + Color + The Color of the element. + Background color + Background color of the circuit when it is embedded in another circuit. Is not used for DIL packages. + Timeout cycles + If this amount of cycles is reached without a break signal, an error is created. + Data + The values stored in this element. + Default + This value is set if the circuit is started. + At the demultiplexer, this value is set for the non-selected outputs. + Default + This value is set if the circuit is started. A "Z" means high-z state. + Is three-state input + If set the input is allowed to be in high-z state. At the input component this is + also allowed if high-z ("Z") is set as the default value. + No zero output. + Description + A short description of this element and its usage. + Frequency/Hz + The real time frequency used for the real time clock + Use IEEE 91-1984 shapes + Use IEEE 91-1984 shapes instead of rectangular shapes + Number of Inputs + The Number of Inputs used. Every input needs to be connected. + Label + The name of this element. + Size + The size of the shape in the circuit. + Language + Language of the GUI. Will only take effect after a restart. + Net name + All nets with identical name are connected together. + Input Splitting + Number Format + The format used to show the numbers. + ascii + bin + decimal + signed decimal + default + hex + octal + Mode + Direction + Set direction. + left + right + Max number of steps to show + The maximal number of values stored. + If the maximum number is reached, the oldest values are discarded. + Rotation + The orientation of the Element in the circuit. + Mirror + Mirrors the component in the circuit. + Start real time clock + If enabled the runtime clock is started when the circuit is started + Show measurement graph at simulation start + When the simulation is started, a graph with the measured values is shown. + Show in Measurement Graph + Shows the value in the measurement graph. + Show measurement values at simulation start + When the simulation is started, a table with the measured values is shown. + Lines + The number of lines to show. + Characters per line + The number of characters shown in a single line. + Use as measurement value + Is set the value is a measurement value and appears in the graph and data table. + In addition, a label must be specified that can serve as identification of the value. + Test data + Width in pixels + The screen width in pixels. + Height in pixels + The screen height in pixels. + Program Memory + Makes this ROM to program memory. So it can be accessed by an external IDE. + Program Counter + Programmed + If set a diode is "blown" or "programmed". + At a floating gate FET the floating gate is charged. + You can change this setting with the key 'p'. + Format + Screen format of expressions. + Common Connection + If selected, a common cathode or anode input is also simulated. + Common + Kind of common connection. + Cathode + Anode + Avoid Flicker + ATF15xx Fitter + Path to the fitter for the ATF15xx. + Enter the directory which contains the fit15xx.exe files provided by Microchip (former ATMEL). + Pin number + An empty field means this signal is not assigned to a pin. + Rows + Specifies the number of rows by specifying the number of bits of the row word. + Address bits of columns + Addresses the individual columns. Three bits means eight columns. + Modification locked + The circuit is locked. It is possible to configure diodes and FGF-FETs. + Pin number + Number of this pin. Used for the representation of a circuit as a DIL package and + the pin assignment when programming a CPLD. + If there are several bits, all pin numbers can be specified as a comma-separated list. + Number of DIL pins + Number of pins. A zero means that the number of pins is determined automatically. + Component tree view is visible at startup. + If set, the component tree view is enabled at startup. + inverted Inputs + You can select the inputs that are to be inverted. + Menus Font Size [%] + Size of the fonts used in the menu in percent of the default size. + Enable Input + If set an enable input (T) is available. + Unidirectional + Active Low + If selected the output is low if the component is active. + Library + Folder which contains the library with predefined sub circuits. + Contains, for example, the components of the 74xx series. You also can add your own circuits by storing + them at this location. + It must be ensured that the names of all files in this folder and all subfolders are unique. + Show Grid + Shows a grid in the main window. + Wire tool tips + If set, lines are highlighted when the mouse hovers over them. + Map to keyboard + Button is mapped to the keyboard. + To use the cursor keys use UP, DOWN, LEFT or RIGHT as label. + Java library + A jar file containing additional components implemented in java. + Shows the number of wires on a bus. + CAUTION: The value is only updated when the simulation starts. + Input Bit Width + The number of output bits must be greater than the number of input bits. + Output Bit Width + The number of output bits must be greater than the number of input bits. + Font Size + Sets the font size to use for this text. + Duration + Delay time in units of the common gate propagation delay. + inverted output + If selected the output is inverted. + Pulse Width + The puls width is measured in clock cycles. + Spreading + Configures the spread of the inputs and outputs in the circuit. + Content of ROM's + Content of all used ROM's + Application + Defines which application to use. + Generic + GHDL + IVerilog + Inputs + Outputs + Programcode + The programm code to be executed by the external application. + Options + GHDL + GHDL Options + Options that are used for all processing steps by GHDL. + IVerilog + Path to the Icarus verilog installation folder. Only necessary if you want to use + iverilog to simulate + components defined with verilog. + Maximum Value + If a zero is entered, the maximum possible value is used (all bits are one). + Output is High + The default output value of the DIP switch when the simulation starts. + Use MacOS mouse clicks. + Uses CTRL-click instead of right-click. + No tool tips for components on the main panel. + If set, no tool tips for the components on the main panel are displayed. + Especially in a presentation, these tool tips can be very annoying. + Show dialog for automatic renaming of tunnels. + If set, a dialog for automatically renaming all tunnels of the same name is displayed after a + tunnel has been renamed. + ATMISP + Path to the executable file ATMISP.exe. If set, the ATMISP software can be started automatically! + Custom Shape + Import of a SVG-file + Preload program memory at startup. + When simulating a processor that uses a RAM device as the program memory, + it is difficult to start this processor because the RAM contents are always initialized with zeros at the start + of the simulation. This setting allows loading data into the program memory at startup. + The program memory in the simulation must be marked as such. + Program file + File which should be loaded into the program memory at the start of the + simulation. + Width + Width in grid units + Height + Height in grid units + Text Inside + Place text inside the rectangle. + Text at the bottom + Place text at the bottom of the rectangle. + Text on the right + Place text to the right of the rectangle. + Wide Shape + Uses a wider shape to visualize the gate. + Shape + The shape to be used for the representation of the circuit in an embedding circuit. + In the "Simple" mode, the inputs are displayed on the left and the outputs on the right side of a simple rectangle. + With "Layout", the position of the inputs and outputs and their orientation in the circuit determines + the position of the pins. Here are also pins at the top or bottom possible. + When selecting "DIL-Chip", a DIL housing is used to display the circuit. The pin numbers of the inputs and outputs + determine the position of the pins in this case. + Default + Simple + DIL-Chip + Layout + User defined + Orientation + Position of the coordinate relative to the text. + left bottom + center bottom + right bottom + right center + right top + center top + left top + left center + center center + Enabled + Enables or disables this component. + Toolchain Configuration + Used to configurate an integration of a toolchain. + Allows the start of external tools, e.g. to program an FPGA or similar. + Generic Parameterization + Statements used to generify a circuit. + Circuit is generic + Allows to create a generic circuit. + Show Tutorial at Startup + Enables the tutorial. + SVG Export Settings + Hide Test Cases + The test cases are not exported. + Shapes not filled + Polygons are not filled. + Inputs and outputs are represented as small circles. + Leave out Pin Marker + The blue and red pin markers on the symbols are omitted. + High Contrast + The wires and the text of the pins are displayed in black. + Monochrome + Only gray colors are used. + Thin Lines + If set, the lines are drawn slightly thinner. + Snap To Grid + If set, the component is aligned with the grid. + Pin Separator + Used by the layout shape type. Sets the distance to the previous pin. + Inserted wire. + Insert from clipboard. + Value ''{0}'' in component ''{1}'' modified. + Attributes of component ''{0}'' modified. + Wire deleted. + Component ''{0}'' moved or rotated. + Wire moved. + Selection deleted. + Component ''{0}'' inserted. + Component ''{0}'' deleted. + Wire inserted. + Selection moved. + Undo: {0} + Redo: {0} + Modified circuit attributes. + Ordered measurements. + Modified attributes of selected components. + Splits a single wire into two wires. + Logic + Arithmetic + Flip-Flops + IO + Memory + Plexers + Wires + Switches + Displays + Mechanical + Peripherals + Misc. + more + Windows + About + Analysis + Analyses the actual circuit + Cut + Copy + Custom + Library + Delete components + Delete selected single component or group of components. + Edit + Circuit specific settings + The circuit specific settings affect the behavior of the + currently open circuit. + Thus, e.g. the shape that represents the circuit when it is embedded in other circuits. + These settings are stored together with the circuit. + Settings + The global settings of the simulator specify, among other + things, the language, the symbol form to be used or the paths of external tools. + Stop Simulation + Stops the simulation and allows to edits the circuit. + Components + Export + Export PNG large + Export PNG small + Export SVG + Export Animated GIF + Run to Break + Runs the circuit until a break is detected by a BRK component. + File + Help + Update + Updates the components menu. + Fit to window + Single gate stepping + Runs the circuit in single gate step mode + New + Creates a new, empty circuit. + New embedded Circuit + Opens a new window to create a new embedded circuit, which than can be used in this circuit. + Open + Open Recent + Open Recent in New Window + Open in New Window + Opens a circuit in a new window + Order Inputs + Order the inputs for the usage as a embedded circuit + Order measurement values + Orders the measurement values in the graphical and table view + Order Outputs + Order the outputs for the usage as a embedded circuit. + Paste + Rotate + Simulation + Start of Simulation + Starts the simulation of the circuit. + Save + Save As + Save Data + Save data as CSV file + Speed Test + Performs a speed test by calculating the max. clock frequency. + Gate Step + Calculates a single gate step + Run To Break in Single Gate Mode + Executes all single gate steps until a rising edge is detected on a break component. + If there is no break component, the remaining single gate steps are executed. + Synthesise + Generates the minimal bool expressions described by a truth table. + {0} variables + Create + Circuit + Creates a circuit which reproduces the truth table. + Circuit with JK flip-flops + Creates a circuit which reproduces the truth table. Uses JK flip-flops. + Circuit with LUTs + Creates a circuit which reproduces the truth table. Uses lookup tables to create the expressions. + Circuit with NAnd gates + Circuit with NAnd gates with two inputs + Use only NAnd gates with two inputs. + Creates a circuit which reproduces the truth table only with NAnd gates. + Circuit with NOr gates + Circuit with NOr gates with two inputs + Use only NOr gates with two inputs. + Creates a circuit which reproduces the truth table only with NOr gates. + Circuit with two input gates + create circuit, use only gates with two inputs + Circuit with three input gates + create circuit, use only gates with a maximum of three inputs + Device + Creates a JEDEC file for the device + Export LaTeX + Export Test Case + Creates a test case description that can be used in a test + case. + The test case is only functional if the circuit is + purely combinatorial! + Export HEX + You can load the HEX file to a ROM or a LUT. + New + Combinatorial + Sequential + Sequential bidirectional + Reorder/Delete Input Variables + Reorder/Delete Output Columns + Add Output Column + Adds a new result column to the table. + Add Input Variable + Adds a new input variable to the table. + Set X to 0 + Sets the Don't Cares to 0. + Set X to 1 + Sets the Don't Cares to 1. + Create J/K Expressions + Set all to X + Set all values to "don't care". + Set all to 0 + Set all values to zero. + Set all to 1 + Set all values to one. + Invert all bits + A "1" becomes a "0" and vice versa. Don't cares remain unchanged. + Show results dialog + Shows the results dialog again if it was closed manually. + Delete + Delete the terminals content. + View + Zoom In + Zoom Out + Expression + Create a circuit from an expression. + Run Tests + Runs all test cases in the circuit + Set Inputs + Use actual input values as new default values. + Reset all diodes and FGFETs + Resets all diodes (fuses) and FGFETs to the "not programed" state. The actual fuse configuration is lost! + Components + Shows a list of all available components. + Help Dialog + Shows the help dialog describing the actual circuit. + Paste in new window + The content of the clip board is pasted in a new window. + Component Tree View + Shows a tree view of available components at the left side. + Special 74xx Funtions + Add IO-Prefix + Remove IO-Prefix + The first character from the inputs and outputs labels are removed. + Is used to simplify the doubling of circuits within a 74xx circuit. + Pin Wizard + Wizard to apply pin numbers to the inputs and outputs. + Remove Pin Numbers + Remove all pin numbers in the circuit + Undo + Revert last modification + Redo + Apply last reverted modification again. + Show graph + Show the data as a Graph. + Show table + Shows values as a table. + Add power supply + Adds a power supply to the circuit. + Export to VHDL + Exports the circuit to VHDL + Export to Verilog + Exports the circuit to Verilog + K-Map + Shows a K-map representation of the Table! + Documentation + Open {0} + Show measurement value table + Show table with the measured values in a separate window. + Show measurement graph + Shows a graph with the measured values in a separate window. + Export to ZIP file + Exports the circuit as a ZIP file. + The ZIP file thus contains all the files that are necessary for the operation of the circuit. + Label Inputs and Outputs + Set a label to all inputs and outputs without a label. + Start Tutorial + Starts the beginner tutorial. + Circuit Statistics + Shows a list of used components. + Number + Component + Inputs + Bits + Addr. Bits + Error opening a PDF file! + <h1>Digital</h1>A simple simulator for digital circuits. + Written by H. Neemann in 2016-2020. + + The icons are taken from the <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. + + Visit the project at <a href="https://github.com/hneemann/[[name]]">GitHub</a>. + At Github you can also <a href="https://github.com/hneemann/[[name]]/releases/latest">download</a> + the latest release. + + There you also can file an <a href="https://github.com/hneemann/[[name]]/issues/new?body=version:%20[[version]]&labels=bug">issue</a> + or suggest + an <a href="https://github.com/hneemann/[[name]]/issues/new?labels=enhancement">enhancement</a>. + {0} nodes + Error analysing the circuit + Error during a clock state change + Color + Error creating the circuit + Error during simplification + Error during creation of hardware configuration. + Error editing a attribute value + Error importing the circuit {0}! + Error updating the component library!! + Error reading a file + Command {0} unknown! + Error writing a file + The maximum frequency is {0} kHz + Shape {0} is missing + Pin assignment + Pin {0}: {1} + A restart is required for the changes to take effect! + Enter an expression: + Error running the tests: + Test result + {0} passed + {0} failed + (To many entries!) + All test cases are executed, but not all results are shown. + The evaluation of the test result is nevertheless correct! + E: {0} / F: {1} + Error creating the help! + The clipboard contains no importable data! + Select an empty folder! + Message from the external fitter + Execution of external fitter + Actual Circuit + The selected file name is not importable from the actual project! + The file name is not unique! + All files in the working directory and all subdirectories must have unique file names. This also applies to the + library folder. If your work directory has a 7400.dig file, you can not use this file or the 7400.dig file from + the library. + If there is a 7400.dig file in your working directory, you can not use this file or the 7400.dig file from the + library, because this file name can no longer be uniquely assigned. + There are several files with identical file names, which can not be + uniquely assigned! Affected are: + and {0} more. + The file has not yet been imported. + The file {0} already exists! Do you want to overwrite the file? + The editing of the circuit is disabled. You can remove the lock at + "{0} -> {1} -> {2}". + However, copying of components and the configuration of diodes and FG-FETs with the [P] key is also possible in the locked mode. + Error during speed test! + Pin {0} + Numbering Wizard + Select pin {0}: + Written frames: {0} + Error writing to GIF file! + Ready + The GIF file is finalized and closed. + GIF Export + caused by + Inputs to invert + none + Could not determine the names of the pins. + Occurred in file {0}. + Affected are: {0}. + Signal {0} + No pin numbers assigned to the pins {0}! + Free pins are automatically assigned. The circuit can therefore not be used on real hardware in most cases! + You can only export a circuit without errors! + No KV map available! + Data will not be updated anymore! + Modify this Value + One of the fields contains a invalid value! + Creation of CHN file. + The table is very large, the export may take a while. + Start export anyway? + To create a hardware description, a circuit must first be created and analyzed. + A standalone truth table can not be used to generate a hardware description. + no data + Could not close external process! + Check Result: + Check + Starts the application to check if the entered code is correct. + If this is not the case, the error message of the external application is displayed. + If possible, the input and output definitions are also adapted to the current code. + Input and output definitions could not be created automatically. + Please check the settings! + Executable file "{0}" not found! + Enter Text! + Start ATMISP + Starts the external program ATMISP. This must have been previously installed. + Error while starting ATMISP! +Is the correct path to the executable ATMISP.exe specified in the settings? + ATMISP is still running! +When this dialog is closed, ATMISP is terminated! +Make sure the flash process is complete before closing this dialog! + Run all Tests + Executes all tests in the current folder. + {0} test rows passed + File Tested + Truth Table + Clipboard + Copies the text to the clipboard. + OK + + 180° + 270° + 90° + Deletes the selected item + Move the item down + Move the item up + All possible solutions + Testdata {0} + Data + Confirm Exit! + Measurements + Save Changes? + State Changed! + Table + Export + Select + Input {0} + Karnaugh Map + Help + Central ROM Content + Expressions + Test vectors + Finite State Machine + no movement + Transitions + Transitions+States + set {0} + Finite State Machine + Opens a Dialog to Edit a Finite State Machine. + Create + State Transition Table + Create Counter + {0} States + Help for operating the FSM editor. + State Number + The number which represents this state. + Initial State + If set, this state is the initial state. + Outputs + Condition + A boolean expression. + Radius + Radius of the circle in the diagram. + Error loading a file! + Error storing a file! + Transition + State + New State + Can not create state transition table. + Help FSM Editor + The measurement graph + Tutorial + In the following a short tutorial leads you to the first, simple circuit: + + First, insert an input into the circuit. You will find the input in the menu Components▸IO. + Now add a second input to the circuit. You can also click on the input + in the toolbar. + + It is best to place the second input slightly below the first input. + You can move the circuit by holding down the right mouse button. + By clicking on components you can move them. + Next, an "Exclusive Or" gate is to be inserted. + You can find this gate in the menu Components▸Logic. + Place this component with some distance to the right of the inputs. + The last component to be inserted is an output. + Place it with some distance to the right of the "Exclusive Or" gate. + In order to complete the circuit, connecting wires must be drawn. + + Click on the red dot at the first input and connect it to an input of the "Exclusive Or" gate, + by clicking on a blue dot of the "Exclusive Or" gate afterwards. + Do NOT drag with mouse button down! + Connect the red dot of the second input to the second blue dot of the + "Exclusive Or" gate and the red dot of the "Exclusive Or" gate to the blue dot of the output. + + While drawing, you can pin the wire by clicking somewhere on the canvas. + Right-click cancels the drawing of the wire (control-click on MacOS). + Your first circuit is now functional. + To start the simulation, you can click on the Play button in the toolbar. + If you move the mouse over the toolbar, tool tips are shown. + The simulation is now active. Switch the inputs by clicking on them. + To stop the simulation, click on the Stop button in the toolbar. + For completeness, the inputs and outputs should be labeled. + + Right-click on an input to open a dialog. On MacOS control-click is used. + Here the input can be given a name. + Label all inputs and outputs. + Inputs and outputs should always be uniquely named. + Skip Tutorial + Has the possibility to store (J=K=0), set (J=1, K=0), reset (J=0, K=1) or toggle (J=K=1) the stored value. + A change of state takes place only at a rising edge at the clock input C. + There are two additional inputs which set or reset the state immediately without a clock signal. + The set input of the flip-flop. + The Clock input. A rising edge initiates a state change. + The reset input of the flip-flop. + Returns the stored value. + Returns the inverted stored value. + asynchronous set. A high value at this input sets the flip-flop. + asynchronous clear. A high value at this input clears the flip-flop. + A component used to store a value. + The value on pin D is stored on a rising edge of the clock pin C. + There are two additional inputs which set or reset the state immediately without a clock signal. + The bit width can be selected, which allows to store multiple bits. + Input of the bit to be stored. + Control pin to store a bit. The bit on input D is stored on a rising edge of this pin. + Returns the stored value. + Returns the inverted stored value. + asynchronous set. If set to one, all stored bits are set to one. + asynchronous clear. If set to one, all stored bits are set to zero. + The monoflop is set at a rising edge at the clock input. + After a configurable delay time, the monoflop will be cleared automatically. + The monoflop is retriggerable. It can only be used if there is exactly one clock component present in the circuit. + This clock component is used as time base to measure the time delay. + Reset Input. A high value clears the monoflop. + The Clock input. A rising edge sets the monoflop. + output + inverted output + No inputs available to set + No shape found for component {0} + Nothing connected to input ''{0}'' at component ''{1}''. Open inputs are not allowed. + Not all connected outputs have the same bit count + If multiple outputs are connected together, all of them have to be three-state outputs. + No output connected to a wire ({0}). The state of the wire is undefined. + Table to small: One result is required! + Output {0} not defined + No label for pin {0} + Pin {0} assigned twice! + Pin {0} is not an input! + Pin {0} is not an output! + No = found! + To many inputs used! + To many outputs used! + Pin not present + Found a pin without a label. + Found a clock without a label. If a clock is embedded also the clock needs a label. + Pin {0} not found at component {1} + Pin {0} not found + The custom shape does not define a pin {0} + Pin {0} unknown + Logic seems to oscillate. + To analyse you can run the circuit in single gate step mode. + The remote port is in use! Is there an other instance running? + Number of inputs does not match selector bit count + Syntax error in splitter definition {0} + Bit count of splitter is not matching + Not all input bits are defined! + Input bits are defined several times! + Only 64 bits allowed in splitter! + Two inputs are required! + To many variables (inputs+flip-flops), allowed are {0} but {1} are found. + To many variables used in {0}, + allowed are {1} variables but {2} are found. + Variable {0} is not allowed in CUPL source! + Variable {0} not defined + Unexpected Token {0} + Missing closed parenthesis + Value {0} in line {1} is not a number! + Expected {0} but found {1} values in line {2}! + Unexpected token ({0}) in line {1}. + Variable {0} not found! + No input signals defined in test vector! + No output signals defined in test vector! + No test data found. + Error during execution of a remote command + A component to store values. The bit width of the data word can be selected. + Unlike a D flip-flop, the register provides an input which enables the clock. + Input pin of the data word to be stored. + Clock input. A rising edge stores the value at the D pin. + Enable pin. Storing a value works only if this pin is set high. + Returns the stored value. + A non-volatile memory component. + The stored data can be edited in the attributes dialog. + This pin defines the address of data word to be output. + The selected data word if the sel input is high. + If the input is high, the output is activated. If it is low, the data output is in high Z state. + RAM, separated Ports + RAM + A RAM module with separate inputs for storing and output for reading the stored data. + The address to read from or write to. + Clock input + The data to be stored in the RAM. + The data output pin + If this input is high the output is activated and the data is visible at the output. + If this input is high and when the clock becomes high, the the data is stored. + Block-RAM, separated ports + A RAM module with separate inputs for storing and output for reading the + stored data. This RAM only updates its output on a rising edge of the clock input. + This allows the usage of Block RAM on an FPGA. + The address to read from or write to. + Clock input + The data to be stored in the RAM. + The data output pin + If this input is high and when the clock becomes high, the the data is stored. + EEPROM, separated Ports + A EEPROM module with separate inputs for storing and output for reading the stored data. + The address to read from or write to. + Clock input + The data to be stored in the EEPROM. + The data output pin + If this input is high the output is activated and the data is visible at the output. + If this input is high and when the clock becomes high, the the data is stored. + RAM, bidirectional Port + RAM + A RAM module with a bidirectional pin for reading and writing the data. + The address to read and write. + Clock + The bidirectional data connection. + If this input is high the output is activated and the data is visible at the output. + If this input is high when the clock becomes high, the the data is stored. + RAM, Chip Select + RAM + A RAM module with a bidirectional connection for reading and writing the data. + If the CS input is low, the component is disabled. + This allows to build a larger RAM from some smaller RAMs and a address decoder. + The write cycle works as follows: By setting CS to high, the component is selected. + A rising edge at WE latches the address, and the following falling edge at WE stores the data. + The address to read and write. + If set to high the data is written to the RAM. + The bidirectional data connection. + If this input is high, this RAM is enabled. Otherwise the output is always in high Z state. + If this input is high, the stored value is output. + EEPROM + A EEPROM module with a bidirectional connection for reading and writing the data. + If the CS input is low, the component is disabled. + The data content is stored like in a ROM. It is thus preserved when the simulation is terminated and restarted. + The write cycle works as follows: By setting CS to high, the component is selected. + A rising edge at WE latches the address, and the following falling edge at WE stores the data. + The address to read and write. + If set to high the data is written to the EEPROM. + The bidirectional data connection. + If this input is high, this EEPROM is enabled. Otherwise the output is always in high Z state. + If this input is high, the stored value is output. + RAM + RAM with one port that allows to write to and read from the RAM, and a second + read only port. + This second port can be used to give some graphic logic access to the memory contents. In this way, a processor + can write to the RAM, and a graphics logic can simultaneously read from the RAM. + Output Port 1 + Output Port 2 + The address at which port 1 is read or written. + The address used to read via port 2. + Clock + The data to be stored in the RAM. + If this input is high the output is activated and the data is visible at the output 1D. + If this input is high and when the clock becomes high, the the data is stored. + Register File + Register + Counter + Counter + Counter with preset + Closed + Sets the initial state of the switch. + Value + The value of the constant. + Width + Width of symbol if this circuit is used as an component in an other circuit. + Height + Height of symbol if this circuit is used as an component in an other circuit. + Reload at model start + Reloads the hex file every time the model is started. + Flip selector position + This option allows you to move te selector pin to the opposite side of the plexer. + Text in LaTeX notation + Text is inserted in LaTeX notation. Inkscape is required for further processing. + Pin-Labels in Math Mode + For pin labels, use math mode even if no indexes are contained. + Small Inputs and Outputs + Use Equals-Key + Use the equal key instead of the plus key. + This is always useful if the plus character is not a primary key, but the second assignment of the + equals character, e.g. for an American or French keyboard layout. + RAM + EEPROM + Creates a CUPL source file containing the define circuit. + Creates a file containing the circuit similar to the Berkeley Logic Interchange Format (BLIF). + After that the Atmel fitter is started to create the JEDEC file. + Program diode + Memory + Shows the content of memory components. + A prefix is added to all selected inputs and outputs. + Is used to simplify the doubling of circuits within a 74xx circuit. + Error calculating a step + Error at fast run + Error while importing the SVG file. + Error creating the SVG template. + Statistics could not be created. + Error while reading the toolchain configuration {0} + Command "{0}" has been started! Processing may take some time! + The command "{0}" has been completed! + Rename Net + There are {0} more tunnels with the net name ''{1}''. + Do you want to rename all {0} to ''{2}''? + Do you really want to discard the changes in the "{0}" field? + Break after {0} half cycles at break point ''{1}''. + Measurements full clock step + Measurements single gate step + Included ROM's + <html> + <h3>Motivation</h3> + When a circuit containing a ROM component is embedded multiple times, the contents of the ROM + is normally used for each instance of that circuit. Under certain circumstances, + however, it may be desirable for such a circuit to be embedded multiple times, + but different ROM contents are used for each instance.<br/> + This problem occurs e.g. if a 74xx ROM is used multiple times but with different + memory contents.<br/> + <h3>Function</h3> + At this location, therefore, contents can be defined for all ROM's in the circuit. + When the simulation model is generated, every ROM is initialized with the contents stored + directly in the respective ROM. Then it is checked whether an alternative content is + defined here. If this is the case, the content defined here is loaded into the corresponding ROM. + <h3>Usage</h3> + It should be noted that each ROM requires a unique name used to identify the ROM. + To do this, use the asterisk ('*') in the label of the ROM. The asterisk is then replaced by the complete + path constructed from the names of the embedded circuits. + If a circuit contains only one ROM component, it is sufficient to use only the asterisk as a label for it. + All embedded circuits must be named so that a unique name can be formed for each ROM component. + </html> + <html> + <h1>New Version {0} Available</h1> + <p>There is a new release of the simulator available.</p> + <p>In the <a href="https://github.com/hneemann/[[name]]/releases/latest">release notes</a> + you can find the changes and improvements.</p> + <p>Here you can <a href="https://github.com/hneemann/[[name]]/releases/latest">download</a> the new release.</p> + </html> + To define an expression you can use all most common notations: + + And: "&", "&&", "*", "∧" + Or: "|", "||", "+", "∨", "#" + XOr: "^", "⊻" + Not: "!", "~", "¬" + + As usual AND precedes OR and XOr. + + Multiple expressions can be separated by "," or ";". + If you want to name the expressions you can use the + let-command: "let U=A+B, let V=A*B" + <html> + <head><style>pre { background-color: #E0E0E0;}</style></head> + <body> +<p>The first line has to contain the names of inputs and outputs. +The following lines contain the expected values. +A 'X' represents a don't care, and a 'Z' represents a high Z value. +If a 'C' is used, at first all other values are set, after that a clock cycle is performed and than the +values are compared. So it's easier to test sequential logic. +A line which starts with a number sign ('#') is a comment.</p> + +<p>So a test for a 2-bit counter could look like this:</p> + +<pre> +C Q1 Q0 +0 0 0 +C 0 1 +C 1 0 +C 1 1 +C 0 0 +</pre> + +<p>The tests are executed by Run->Run Tests.</p> +<p> +To make it easier to create a lot of test vectors there is the 'repeat([n])' statement: +If a line begins with 'repeat([n])', [n] test lines are generated. The +Variable 'n' can be used to generate the test data. With 'repeat(16)' +16 lines are created, where n goes from 0 to 15. If there are multiple bit inputs, +and these are to be set together to a binary value, this can be done with the +'bits([bits], [value])' statement. This is used to create [bits] bits of the value [value].</p> + +<p>The following is an example that tests a 4-bit adder:</p> + +<pre> + C_i-1 A_3 A_2 A_1 A_0 B_3 B_2 B_1 B_0 C_i S_3 S_2 S_1 S_0 +repeat(256) 0 bits(4,n>>4) bits(4,n) bits(5,(n>>4)+(n&15)) +repeat(256) 1 bits(4,n>>4) bits(4,n) bits(5,(n>>4)+(n&15)+1) +</pre> + +<p>The input signals are the carry-in (C_i-1) and the eight input bits A_3-A_0 and B_3-B_0. +The 4 input bits are generated with the 'bits' instruction. The result (C_i, S_3-S_0) is also generated +by a 'bits' instruction. +This happens once with C_i-1 = 0 and in the next line with C_i-1 = 1. +In this way, 512 test rows are generated which cover all possible input configurations.</p> +<p>If multiple rows are to be repeated, or if nested loops are required, the loop +statement can be used. The above example could also be implemented as follows:</p> + +<pre> + C_i-1 A_3 A_2 A_1 A_0 B_3 B_2 B_1 B_0 C_i S_3 S_2 S_1 S_0 +loop(a,16) + loop(b,16) + 0 bits(4,a) bits(4,b) bits(5,a+b) + 1 bits(4,a) bits(4,b) bits(5,a+b+1) + end loop +end loop +</pre> + +<p>It may be helpful to generate random numbers in test cases. +These can be created with the function 'random([n])'. The generated number is greater +than or equal to zero and less than [n]. Considering a 16-bit multiplier as an example, +a full test can not be performed since it would have 2^32 input combinations. +A regression test that multiplies 100000 random numbers might look like this:</p> + +<pre> + A B Y +loop(i,100000) + let a = random(1&lt;&lt;16); + let b = random(1&lt;&lt;16); + (a) (b) (a*b) +end loop +</pre> + +<p>An input that allows high impedance as a value can also be used as a test output. +In this case, the signal name can be used with a trailing "_out" to read back and check the current value. +For this, the corresponding input must be set to high impedance ('Z').</p> + +<pre>OE CLK D D_out +0 0 0 0 +0 C 1 1 +1 0 z 1 +0 C 0 0 +1 0 z 0 +</pre> + +<p>The circuit for this test has only one input 'D', but which can be high impedance state. +Therefore, the signal 'D_out' is also available to check the value in this case.</p> + +</body></html> + Defines the output values. + With simple assignments like "A=1, B=0" outputs can be set. + With instructions like "A=101", multi-bit outputs can be set. + Outputs that are not defined here are set to zero in states. + For transitions, unspecified outputs remain unchanged. + The FSM is not deterministic: {0} + State Number {0} used twice. + There is no initial state (state number zero). + State ''{0}'' not found! + Wrong assignment to output (''{0}'')! + Error in condition ''{0}''! + <html><head></head> +<body> + <h3>Mouse Operation</h3> + <dl> + <dt>Create a state:</dt> + <dd>Right mouse click on a free area.</dd> + <dt>Creating a transition:</dt> + <dd>Right mouse button down on the start state and dragging to the destination state.</dd> + <dt>Delete a state or a transition:</dt> + <dd>Move the mouse over the object and press the [Del] button.</dd> + <dt>Moving a state or transition:</dt> + <dd>Left mouse button down and dragging.</dd> + <dt>Editing a state or a transition:</dt> + <dd>Right mouse click on the state or the transition.</dd> + </dl> + <h3>Layout Help Function</h3> + <dl> + <dt>no movement:</dt> + <dd>The layout help function is disabled.</dd> + <dt>Transitions:</dt> + <dd>The layout help function moves the transition arrows to avoid overlaps.</dd> + <dt>Transitions+States</dt> + <dd>The layout help function moves both states and transitions to help create a well-balanced layout.</dd> + </dl> + <h3>Interpretation of Transitions</h3> + To simplify the generation of a deterministic automata, unconditional transitions are treated in a special way: + an unconditional transition is only executed if no other transition satisfies the transition condition. + So there can be an unconditional transition and conditional transitions that start in the same state. + An unconditional transition thus determines to which state the state machine is shifted if no other transition + condition is met. + If there is no unconditional transition from a state, the state machine will stay in this state if no other + transition condition is met. +</body></html> + <html><body> + <h3>What can be seen in the graph?</h3> + Unlike a real logic analyzer, the X-axis of the measurement graph does not show the time. + Instead a counter is displayed which counts the changes of state in the circuit. + Whenever there is a change in the circuit, the counter is incremented and the new state is displayed.<br/> + You can also think of it as a classic logic analyzer, which does not save any data for optimization + if nothing has changed in the circuit. + However, this also means that it is not possible to read from the graph whether a lot or little time has + passed between two changes in the circuit.<br/> + This behavior is caused by the nature of the simulation: The simulation of the circuit does not know the + concept of time. A change is made to the circuit, and the change in the circuit state is calculated, until + the circuit has stabilized again. Then the next change is made, the effect of which is also is calculated + and so on. These changes are counted and the counter value is displayed on the X-axis of the graph.<br/> + Among other things, this also means that a circuit cannot be overclocked, since the effects of the falling + edge of the clock are not calculated until the circuit has stabilized after the previous rising edge. + </body></html> + Graphic RAM + Gr-RAM + Used to show a bitmap graphic. This element behaves like a RAM. In addition it + shows its content on a graphic screen. Every pixel is represented by a memory address. The value stored defines + the color of the pixel, using a fixed color palette. There are two screen buffers implemented to support page + flipping. The input B selects which buffer is shown. Thus, the total memory size is dx * dy * 2 words. + The palette used is structured as follows: The indices 0-9 correspond to the colors white, black, red, green, + blue, yellow, cyan, magenta, orange and pink. The indices 32-63 map gray values and the indices 64-127 + represent 64 color values each with two bits per color channel. + This results in a simple palette that can be addressed with only 7-bit. + If the architecture supports a 16-bit index, from Index 0x8000, a high-color mode with 5 bits per color channel + can be used, which enables 32768 colors. + The address to read and write. + If this input is high when the clock becomes high, the the data is stored. + Clock + If this input is high the output is activated and the data is visible at the output. + Selects the screen buffer to show. + The bidirectional data connection. + RAM, Dual Port + Memory with one port that allows to write and two ports that allow to read from + the memory simultaneously. Can be used to implement processor registers. + Two registers can be read simultaneously and a third can be written. + Output Port a + Output Port b + The register which is visible at port a. + The register which is visible at port b. + The register into which the data is written. + If this input is high and when the clock becomes high, the the data is stored. + Clock + The data to be stored in the register Rw. + A simple counter component. The clock input increases the counter. + Can be reset back to 0 with the clr input. + The number of bits can be set in the attribute dialog. + The clock input. A rising edge increases the counter. + Synchronous reset of the counter if set to 1. + Overflow output. This pin is set to 1 if the counter is on its maximal value + and the en input is set to 1. + Returns the counted value. + If set to 1 the counter is enabled! + A counter whose value can be set. In addition, a maximum value and a counting direction can be specified. + Counter + Returns the counted value. + Overflow output. It is set to 1 if the 'en' input is set to 1 and if the + counter reaches its maximum value when counting up, or has reached 0 when counting down. + The clock input. A rising edge increases the counter. + Synchronous reset of the counter if set to 1. + If set to 1 the counter is enabled! + Specifies the counting direction. A 0 means upwards. + If set, the value at input 'in' is stored in the counter at the next clock signal. + This data word is stored in the counter when ld is set. + Adder + Add + A component for simple add calculations. + Adds the two integer values from input a and input b (a+b). + The result will be incremented by one if the carry input is set. + First input to add. + Second input to add. + The result of the addition + Carry input, if set the result is incremented by one. + Carry output. If set there was an overflow. + Subtract + Sub + A component for simple subtractions. + Subtracts binary numbers on input a and input b (a-b). + If the carry input is set to 1 the result is decremented by 1. + Carry input, if set the result is decremented by one. + Input a for subtraction. + Input b for subtraction. + Output returns the result of the subtraction. + Output returns 1 if an overflow occurred. + Multiply + Mul + A component for multiplication. + Multiplies the integer numbers on input pin a and input pin b. + Input a for multiplication. + Input b for multiplication. + Output for the result of the multiplication. + Division + Div + A component for division. + Divides the integer applied to input a by the integer applied to input b. + If the divisor is zero, it is divided by one instead. + In signed division, the remainder is always positive. + dividend + divisor + quotient + remainder + Barrel shifter + shift + A component for bit shifting. + Shifts the input value by the number of bits given by the shift input. + Input with bits to be shifted. + Input with shift width. + Output with shifted value. + Comparator + A component for comparing bit values. + Compares the binary numbers on input pin a and input pin b and sets the corresponding outputs. + Input a to compare. + Input b to compare. + Output is 1 if input a equals input b + Output is 1 if input a is greater then input b + Output is 1 if input a is less then input b + Negation + Neg + Input of the data word to be negated in 2th complement + Returns the result of the negation in 2th complement. + Negation in the 2th complement + Sign extender + SignEx + Increases the bit width of a signed value keeping the values sign. + If the input is a single bit, this bit will be output on all output bits. + Input value. + The input bit width must be smaller than the output bit width! + Extended input value. + The input bit width must be smaller than the output bit width! + Bit counter + Bit count + Returns the number of 1-bits in the input value. + The input which 1-bits are counted. + Outputs the number of 1-bits. + Error starting the command {0} + Error while parsing generics code. + Video mode was not detected ({0}) + Avoids zero output. This is especially helpful when setting up relay circuits. + Can only be activated if a high-z output is allowed. + If e.g. four bits, two bits and two further bits are to be used as inputs, + this can be configured with "4,2,2". The number indicates the number of bits. For convenience, the asterisk + can be used: 16 bits can be configured with "[Bits]*[Number]" as "1*16". + It is also possible to specify the bits to be used directly and in any order. + For example, "4-7,0-3" configures bits 4-7 and 0-3. This notation allows any bit arrangement. + The input bits must be specified completely and unambiguously. + Output splitting + If e.g. four bits, two bits and two further bits are to be used as outputs, + this can be configured with "4,2,2". The number indicates the number of bits. For convenience, the asterisk + can be used: 16 bits can be configured with "[Bits]*[Number]" as "1*16". + It is also possible to specify the bits to be used directly and in any order. + For example, "4-7,0-3" configures bits 4-7 and 0-3. This notation allows any bit arrangement. + Output bits can also be output several times: "0-7,1-6,4-7" + Number of Selector Bits + Number of bits used for the selector input. + Signed Operation + If selected the operation is performed with signed (2th complement) values. + shift input has sign + shift input data has two complement format + Mode of barrel shifter + Logical + Rotate + Arithmetic + Show single gate steps + Shows all single step steps in the graphic. + Show measurement graph in single gate step mode at simulation start + When the simulation is started, a graph with the measured values in the + gate step mode is shown. All gate changes are included in the graph. + The description of the test case. + Details of the syntax can be found in the help dialog of the test data editor. + Makes this register a program counter. The value of this register is returned + to the external assembler IDE to mark the current line of code during debugging. + Relay is normally closed. + If set the relay is closed if the input is low. + Pole count + Number of poles available. + It is not possible to increase the frequency so much that the flickering disappears. + With this option you can stabilize the display by keeping the LEDs on until the common cathode goes down again. + This simulates a frequency above the critical flicker fusion frequency. + Unidirectional transistors propagate a signal only from source to drain. They are + much faster to simulate than bidirectional transistors. Since there is no feedback from drain to source, in this + mode, the transistor can not short the connected wires when it is conducting. Thus, this mode is necessary to + simulate certain CMOS circuits. + The inputs of the external process. + It is a comma-separated list of signal names. For each signal name, with a colon separated, a number of bits + can be specified. The inputs of an 8-bit adder could thus be described as "a:8,b:8,c_in". + The outputs of the external process. + It is a comma-separated list of signal names. For each signal name, with a colon separated, a number of bits + can be specified. The outputs of an 8-bit adder could thus be described as "s:8,c_out". + Path to the executable ghdl file. Only necessary if you want to use ghdl to simulate + components defined with vhdl. + MIDI channel + Selects the MIDI channel to use. + MIDI instrument + The MIDI instrument to use. + Allow program change + Adds a new input PC. If this input is set to high, + the value at input N is used to change the program (instrument). + Switch behaves like an input + If the model is analyzed, the switch behaves like an input, where "open" corresponds to '0' and "closed" to '1'. + Diode to VDD + A simplified unidirectional diode, used to pull a wire to VDD. + It is used to implement a wired OR. + So it is necessary to connect a pull down resistor to the diodes output. + In the simulation the diode behaves like an active gate with a trivalent truth table: + Is the input high, also the output is high. In all other cases (input is low or high z) the output is in high z state. + So two anti parallel connected diodes can keep each other in high state, which is not possible with real diodes. + This is an ideal diode: There is no voltage drop across a forward-biased diode. + If the input is high also the output is high. In all other cases the output is in high z state. + If the input is high also the output is high. In all other cases the output is in high z state. + Diode to Ground + A simplified unidirectional diode, used to pull a wire to ground. It is used to implement a wired AND. + So it is necessary to connect a pull up resistor to the diodes output. + Is the input low, also the output is low. In the other cases (input is high or high z) the output is in high z state. + So two anti parallel connected diodes can keep each other in low state, which is not possible with real diodes. + So this is a ideal diode: There is no voltage drop across a forward-biased diode. + If the input is low also the output is low. In all other cases the output is in high z state. + If the input is low also the output is low. In all other cases the output is in high z state. + Switch + One of the connections of the switch. + Simple switch. + There is no gate delay: A signal change is propagated immediately. + Double Throw Switch + Double Throw Switch. + There is no gate delay: A signal change is propagated immediately. + Fuse + A fuse used to build a one time programmable memory. + One of the connections of the fuse. + One of the connections of the fuse. + Relay + A relay is a switch which can be controlled by a coil. + If a current flows through the coil, the switch is closed or opened. + There is no flyback diode so the current direction does not matter. + The switch is actuated if the inputs have different values. + The relay behaves similar to an XOr gate. + On of the inputs to control the relay. + On of the inputs to control the relay. + Double Throw Relay + A relay is a switch which can be controlled by a coil. + If a current flows through the coil, the switch is closed or opened. + There is no flyback diode so the current direction does not matter. + The switch is actuated if the inputs have different values. + The relay behaves similar to an XOr gate. + On of the inputs to control the relay. + On of the inputs to control the relay. + P-Channel Field Effect Transistor. + The bulk is connected to the pos. voltage rail and the transistor is simulated without a body diode. + Gate + Source + Drain + N-Channel FET + N-Channel Field Effect Transistor. + The bulk is connected to ground and the transistor is simulated without a body diode. + Gate + Source + Drain + P-Channel floating gate FET + P-Channel Floating Gate Field Effect Transistor. + The bulk is connected to ground and the transistor is simulated without a body diode. + If there is a charge stored in the floating gate, the fet isn't conducting even if the gate is low. + Gate + Source + Drain + N-Channel Floating Gate Field Effect Transistor. + The bulk is connected to ground and the transistor is simulated without a body diode. + If there is a charge stored in the floating gate, the fet isn't conducting even if the gate is high. + Gate + Source + Drain + Transmission-Gate + A real transmission-gate is build from only two transistors. + Therefore, it is often used to save transistors during implementation on silicon. + input A + input B + control input. + inverted control input + Has no function. Makes sure that VDD and GND are connected. + Can be used in 74xx circuits to generate the pins for the voltage supply, which are tested for correct wiring. + Must be connected to VDD! + Must be connected to GND! + The output of this component is held high during the initialisation of the circuit. + After the circuit has stabilized the output goes to low. + If the output is inverted it behaves the opposite way. + If this component is used in the circuit, the "Run To Break" button between "Start" + and "Stop" is enabled. This button clocks the circuit until a rising edge on the input of this component is + detected. This element can be used for debugging by clocking the circuit to any breakpoint. + Also an assembler command BRK can be implemented. This allows to execute a program up to the next BRK command. + This function can only be used if the real-time clock is deactivated! + Simplified bidirectional diode. It is used to implement a wired AND or a wired OR.. + This is a ideal diode: There is no voltage drop across a forward-biased diode. + It's not allowed to connect a pull up and a pull down resistor to a single wire. + Could not open the browser. + Could not create folder "{0}"! + It is not allowed to connect only inputs to a switch. + The file {0} exists multiple times below {1}. + Could not find the file {0}. + Error during execution of "{0}". + The process "{0}" does not return! + The process returns the non zero value {0}: {1} + Error starting the external fitter! + There are no minimized equations! + Equations are calculated! Please wait a moment! + The variable {0} is used twice! + The file needs to be saved! + The circuit {0} imports itself! + The result of the minimization is not correct! + The names of the variables may not be unique. + To many iterations in a loop. + Diode needs a pull up resistor at its output! + Diode needs a pull down resistor at its output! + Test signal {0} not found in the circuit! + Only {1} bits allowed, but {0} bits found! + Flip-flops with more than one bit are not allowed! + The two control inputs of a transmission gate must be inverted! + Signal {0} is used twice! + Error parsing the test data. + The model component {0} can not be analysed. + Error in wiring of power supply at {0}. + The pin number {0} is not an integer! + Error during export to VHDL. + No VHDL code for {0} available! + No Verilog code for {0} available! + Error creating a test bench! + Values of typ {0} are not allowed! + A name is missing. Have e.g. all pins a label set? + Several outputs are connected to each other. + This type of interconnection is not supported for HDL export. ({0}, {1}, {2}). + unnamed net + To many variables! + Invalid expression! + Function {0} not found in line {1}! + Number of arguments in function {0} in line {1} not correct (found {2}, expected {3})! + Invalid value {0} in function {1}! + The name {0} is not a path element. + Error during loading of a library. + The JAR file contains no manifest! + The manifest does not contain a Main-Class entry! + Could not find the class {0}! + Could not create an instance of the class {0}! + There must be more input bits than output bits! + It is not possible to set physical pins to constant values! + The string {0} is not a valid number (pos {1})! + The name "{0}" is not allowed! + No white space is allowed in the name of the TT2 file! + The table has too many columns! + Error writing the zip file. + Only one clock component with high frequency is allowed. + The circuit contains cycles. It's not possible to analyze such a circuit. + Cycles arise if an output of a gate is fed back to one of the inputs of the same gate. + The use of switches, FETs or relays also causes cycles. + If a monoflop is used, there must be exactly one clock component! + Could not create a component of type {0}! + ROM's defined in the settings are not supported! + The name "{0}" is not unique! + Could not write values to the external process! + Could not read values from the external process! + Could not create the external process! + Timeout reading data from external process! + {0} + Not enough data received! + {0} + The received text contains an invalid character: {0}! + {1} + The process has terminated unexpected! + {0} + Could not terminate the process! + Could not start process: {0} + Application exit status was not 0 but {0}: + {1} + External code can only be exported if it is VHDL! + External code can only be exported if it is Verilog! + If an external component is used multiple times, the code must be identical! Effects: {0} + Could not write to stdOut: + {0} + The VHDL simulator ghdl does not seem to be installed. Install ghdl (http://ghdl.free.fr/) and try again. If there are still problems, check the path to the ghdl executable in the Digital settings. + The Verilog simulator Icarus does not seem to be installed. Install iverilog (http://iverilog.icarus.com/) and try again. If there are still problems, check the path to the iverilog executable in the Digital settings. + Error analysing the circuit: {0} + Every ROM needs a unique label to be exported! + Every LUT needs a unique label to be exported! + The counter needs at least two bits. + Clock elements can not be used in asynchronous mode. + Error during export to Verilog. + No program memory found! The program memory needs to be flagged as such. + Error loading the program memory. + Error while reading the SVG file. + The SVG file contains pins that do not exist in the circuit. + All memories into which data are to be loaded require the same bit width. + If programs are to be loaded into several RAMs, all RAMs must have + different names. The lexical order then determines the order of the RAMs. + The MIDI-System is not available. + The MIDI channel {0} is not available. + The MIDI instrument {0} is not available. + The MIDI instruments are not available. + During the execution of the tests "{0}" an error has occurred! + HDL not known: {0} + There is a unnamed input or output! + The signal name "{0}" is invalid or used multiple times! + Error when substituting components for the analysis. + Error in the evaluation of the generic code of the circuit. Code + {1} + at Component: {0} + diff --git a/src/test/java/de/neemann/digital/docu/DocuTest.java b/src/test/java/de/neemann/digital/docu/DocuTest.java index a1e2a237f..c59b9af27 100644 --- a/src/test/java/de/neemann/digital/docu/DocuTest.java +++ b/src/test/java/de/neemann/digital/docu/DocuTest.java @@ -59,6 +59,8 @@ public class DocuTest extends TestCase { .append(Lang.get("tableOfContent")) .append("\" lang=\"") .append(language) + .append("\" fontFamily=\"") + .append(language.equals("zh") ? "SansSerif,SimSun" : "SansSerif") .append("\" rev=\"") .append(System.getProperty("buildnumber")) .append("\" revt=\"") diff --git a/src/test/java/de/neemann/digital/docu/ScreenShots.java b/src/test/java/de/neemann/digital/docu/ScreenShots.java index 21337104f..de7d20d58 100644 --- a/src/test/java/de/neemann/digital/docu/ScreenShots.java +++ b/src/test/java/de/neemann/digital/docu/ScreenShots.java @@ -91,6 +91,13 @@ public class ScreenShots { .set(Keys.SETTINGS_IEEE_SHAPES, true); firstSteps(); hierarchicalDesign(); + + // Chinese + Lang.setActualRuntimeLanguage(new Language("zh")); + Settings.getInstance().getAttributes() + .set(Keys.SETTINGS_IEEE_SHAPES, true); + firstSteps(); + hierarchicalDesign(); } private static void mainScreenShot() { @@ -316,7 +323,7 @@ public class ScreenShots { .add(new ScreenShot<>(TableDialog.class).useParent()) // k-map .press("F10") - .press("RIGHT", 5) + .press("RIGHT", 4) .press("DOWN", 1) .add(new ScreenShot<>(TableDialog.class).useParent()) .press("ENTER") diff --git a/src/test/resources/docu/elem2fo.xslt b/src/test/resources/docu/elem2fo.xslt index 833a5533e..e6b1a76dd 100644 --- a/src/test/resources/docu/elem2fo.xslt +++ b/src/test/resources/docu/elem2fo.xslt @@ -6,17 +6,17 @@ / - + + margin-top="2cm" margin-bottom="1cm" + margin-left="2.5cm" margin-right="2.5cm"> + margin-left="0cm" margin-right="0cm"/> - + diff --git a/src/test/resources/docu/fop.xconf b/src/test/resources/docu/fop.xconf index b5ac46d6c..4fffd7117 100644 --- a/src/test/resources/docu/fop.xconf +++ b/src/test/resources/docu/fop.xconf @@ -112,6 +112,11 @@ the location of this file. for details of FOP configuration for AFP --> + + + + + diff --git a/src/test/resources/docu/images/zh/scr00.png b/src/test/resources/docu/images/zh/scr00.png new file mode 100644 index 000000000..650d0a382 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr00.png differ diff --git a/src/test/resources/docu/images/zh/scr01.png b/src/test/resources/docu/images/zh/scr01.png new file mode 100644 index 000000000..14918a2a6 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr01.png differ diff --git a/src/test/resources/docu/images/zh/scr02.png b/src/test/resources/docu/images/zh/scr02.png new file mode 100644 index 000000000..a7d6b1305 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr02.png differ diff --git a/src/test/resources/docu/images/zh/scr03.png b/src/test/resources/docu/images/zh/scr03.png new file mode 100644 index 000000000..d90316f21 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr03.png differ diff --git a/src/test/resources/docu/images/zh/scr04.png b/src/test/resources/docu/images/zh/scr04.png new file mode 100644 index 000000000..dc61a9b53 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr04.png differ diff --git a/src/test/resources/docu/images/zh/scr05.png b/src/test/resources/docu/images/zh/scr05.png new file mode 100644 index 000000000..34330dab9 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr05.png differ diff --git a/src/test/resources/docu/images/zh/scr06.png b/src/test/resources/docu/images/zh/scr06.png new file mode 100644 index 000000000..ed1d6b05d Binary files /dev/null and b/src/test/resources/docu/images/zh/scr06.png differ diff --git a/src/test/resources/docu/images/zh/scr07.png b/src/test/resources/docu/images/zh/scr07.png new file mode 100644 index 000000000..eef7f59fd Binary files /dev/null and b/src/test/resources/docu/images/zh/scr07.png differ diff --git a/src/test/resources/docu/images/zh/scr08.png b/src/test/resources/docu/images/zh/scr08.png new file mode 100644 index 000000000..12bbcfe76 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr08.png differ diff --git a/src/test/resources/docu/images/zh/scr09.png b/src/test/resources/docu/images/zh/scr09.png new file mode 100644 index 000000000..f08ad9bf6 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr09.png differ diff --git a/src/test/resources/docu/images/zh/scr10.png b/src/test/resources/docu/images/zh/scr10.png new file mode 100644 index 000000000..a58e61907 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr10.png differ diff --git a/src/test/resources/docu/images/zh/scr11.png b/src/test/resources/docu/images/zh/scr11.png new file mode 100644 index 000000000..89d22d25f Binary files /dev/null and b/src/test/resources/docu/images/zh/scr11.png differ diff --git a/src/test/resources/docu/images/zh/scr12.png b/src/test/resources/docu/images/zh/scr12.png new file mode 100644 index 000000000..a5a11daf1 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr12.png differ diff --git a/src/test/resources/docu/images/zh/scr13.png b/src/test/resources/docu/images/zh/scr13.png new file mode 100644 index 000000000..896fb8733 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr13.png differ diff --git a/src/test/resources/docu/images/zh/scr14.png b/src/test/resources/docu/images/zh/scr14.png new file mode 100644 index 000000000..c4c16e113 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr14.png differ diff --git a/src/test/resources/docu/images/zh/scr20.png b/src/test/resources/docu/images/zh/scr20.png new file mode 100644 index 000000000..2ca7a911b Binary files /dev/null and b/src/test/resources/docu/images/zh/scr20.png differ diff --git a/src/test/resources/docu/images/zh/scr21.png b/src/test/resources/docu/images/zh/scr21.png new file mode 100644 index 000000000..c8d1fc5ef Binary files /dev/null and b/src/test/resources/docu/images/zh/scr21.png differ diff --git a/src/test/resources/docu/images/zh/scr22.png b/src/test/resources/docu/images/zh/scr22.png new file mode 100644 index 000000000..ccc83f839 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr22.png differ diff --git a/src/test/resources/docu/images/zh/scr23.png b/src/test/resources/docu/images/zh/scr23.png new file mode 100644 index 000000000..9230cda42 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr23.png differ diff --git a/src/test/resources/docu/images/zh/scr24.png b/src/test/resources/docu/images/zh/scr24.png new file mode 100644 index 000000000..e8cbe6399 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr24.png differ diff --git a/src/test/resources/docu/images/zh/scr25.png b/src/test/resources/docu/images/zh/scr25.png new file mode 100644 index 000000000..aa34b2017 Binary files /dev/null and b/src/test/resources/docu/images/zh/scr25.png differ diff --git a/src/test/resources/docu/simsun.ttf b/src/test/resources/docu/simsun.ttf new file mode 100644 index 000000000..e0115abeb Binary files /dev/null and b/src/test/resources/docu/simsun.ttf differ diff --git a/src/test/resources/docu/static_zh.xml b/src/test/resources/docu/static_zh.xml new file mode 100644 index 000000000..c94a8104a --- /dev/null +++ b/src/test/resources/docu/static_zh.xml @@ -0,0 +1,449 @@ + + + + + + Digital 是一个简单的数字电路仿真器。通过导线将各种逻辑门连接起来,可以仿真整个电路的行为。 + 用户可以通过点击按钮或者设置输入值实现交互式仿真。 + + + 通过这种方式,多数数字电路中的基本电路可以被构建和仿真。在 "examples" 文件夹内,用户可以浏览各种示例,如 + 1个16位的单周期哈佛架构处理器。 + + + 仿真器有两种操作模式:编辑和仿真模式。 + 在编辑模式,不允许仿真,只允许修改电路。用户可以添加或连接各种组件。 + 可以通过点按工具栏中的 "启动仿真电路" 按钮开启仿真模式。在开始仿真电路之前,将会先检测电路的一致性。 + 如果有某些错误,将会显示对应的消息提示并且相关的组件或导线将会高亮。如果没有任何错误,将会开启仿真模式。这时, + 你可以和正在运行的仿真进行交互。 + + + + + + 作为第一个示例,将会构建一个由异或门组成的电路。在主窗口,"组件" 菜单允许我们选择各种组件。 + 然后它们会被放置于绘图面板。在任何时候,可以通过 ESC 键取消操作。让我们开始选择一个输入组件,该组件在 + 仿真时可以通过鼠标交互进行控制。 + + + 选择后,输入组件可以被放置在绘图面板。 + 红色的点表示组件和导线之间的连接点,在之后会被连接。同时红色表示输出,意思为该端口定义了一个信号,该信号可以驱动导线。 + + + + 使用同样的方式,添加第二个输入组件,最好将其放置在第一个输入组件下面。 + + + 添加完输入组件,我们选中异或门。该门表示实际的逻辑功能。 + + + + 选中后我们可以将其添加到电路。最好将其放置在合适的位置使得后续的连线尽可能简单。蓝色的点表示门的输入端口。 + + + + 现在,选择一个输出组件,该组件用于显示一个信号状态或者传递信号给一个子电路。 + + + + 输出组件有一个蓝色的点,意思为输入端口,我们可以通过为其赋值以便之后使用。 + + + + 当所有组件放置好后,使用鼠标连接蓝色和红色的点。确保仅有一个红色的点被连接到任何蓝色的点。只有允许三态的输出可以 + 打破该规则,允许连接到多个红色的点。当所有导线被绘制后,整个电路即完成。 + + + + 当仿真启动后,我们可以和电路进行交互。通过点击 “启动仿真电路” 按钮开始仿真。 + 仿真开启后,导线的颜色改变并且输入、输出组件被填充。鲜绿色表示逻辑电平 ‘1’,深绿色表示逻辑电平 ‘0’。 + 在上图中,所有的导线为 ‘0’。 + + + + 通过鼠标点击,可以切换输入组件的值。由于仿真已经运行,输出组件的值根据当前输入的状态而做出对应改变。电路的行为 + 和期望的异或门一样。 + + + + 如果需要修改电路,必须先停止仿真。最简单的方式是通过点击工具栏的 “停止” 按钮。 + 通过在组件上右击(MacOS 使用 control+左击)打开组件属性对话框。通过该对话框,我们定义第一个输入组件的标签为 ‘A’。 + + + + 通过同样的方式,定义剩余组件的输入和输出端口标签。 + "分析" 菜单包含一个同名的菜单项,该功能对当前电路进行分析。不过,需要先给所有的输入和输出端口添加标签才行。 + + + + 仿真电路的真值表在一个新窗口中显示,在表的下面,我们可以找到一个和电路对应的布尔表达式。如果电路可能有多个布尔 + 表达式,一个独立的窗口将会打开并显示所有可能的表达式。 + + + + 真值表对话框有一个 "卡诺图" 菜单项,允许以卡诺图方式显示真值表。 + + + + 在对话框的顶部,通过下拉列表允许选择期望的表达式。通过这种方式,我们可以评估多个等价的布尔表达式。然而,在该示例中, + 仅有一个最小表达式。点击卡诺图,可以实现对真值表的修改。 + + + + + 所有的组件必须通过导线连接起来。不可以通过将两个组件相邻放置实现连接。 + + + 另外,仅可以通过导线的端点连接到组件,如果一个组件的管脚放置在一条导线中间,该组件和导线并不会实现连接。 + 因此,导线必须在其所连接的管脚终止。即使使用隧道组件,也必须使用导线连接管脚和隧道组件。 + + + 如果需要移动组件,包括其连接的导线,则必须先框选该组件,如果不想同时移到其连接的导线,可以通过单击选择组件。 + + + 通过 CTRL-单击,可以选中且移动或删除一个单独的导线段。如果在画导线时按下 D 键,可以绘制斜线。 + 键 S 可以将一条线段分割为两条。 + + + + + 随着电路越来越复杂,电路将变得难以理解。为解决该问题,电路中不同的部分可以存放在不同的文件。该机制使得 + 使用子电路变为可能。 + + + + 作为一个示例,我们考虑4位加法器:首先,我们构建一个简单的半加器,其包含一个异或门和一个与门。 + 位 ‘A’ 和 ‘B’ 相加的结果通过 ‘S’ 和 ‘C’ 输出。该电路存储在文件 "halfAdder.dig"。 + + + + 使用两个半加器可以构建一个全加器。 + 创建一个空文件并保存为 "fullAdder.dig",将其放在和半加器相同的路径下。这时,可以通过菜单"组件""自定义" + 将半加器添加进电路。 + 半加器的管脚顺序可以在半加器电路中通过菜单 "编辑""排序输入信号" 或者 "编辑""排序输出信号" + 重新排序。全加器实现将位 ‘A’,‘B’,‘Ci’ 相加,结果给到输出 ‘S’ 和 ‘Co’。 + + + + 为了检验全加器正常工作,我们需要添加一个测试用例。在测试用例中存储满足电路功能的真值表,通过这种方式,可以自动 + 测试电路功能是否正确。 + + + + 可以通过测试用例编辑器或工具栏中的测试按钮执行测试。 + 绿色高亮的单元格表示电路的输出和测试用例中的真值表相匹配。 + + + + 现在可以通过全加器进一步构建逐位(行波)进位加法器;。 + 在该示例中,前一个加法器的进位输出作为下一级加法器的进位输入,就像使用纸和笔进行加法一样。 + 为了测试该 4 位加法器的功能,我门添加了一个测试用例。 + + + + 该测试用例执行 100% 测试,这对于相对简单的电路是可能的。在这里,所有的512种输入组合被应用于电路,同时检测其输出是否 + 正确。 + 第一行列出输入和输出信号,下面的内容应用输入值并检测其对应的输出,像真值表一样。 + 在该示例中,需要512行。然而这样输入即繁琐又容易出错,如果能够自动生成所需要的行,则更容易和可靠。 + 为此,变量 "A" 和 "B" 分别被分别从0到15进行遍历。对应的值被赋值给 ‘A[n]’ 和 ‘B[n]’。然后检测电路输出 + 是否为 "A+B"。然后再次检测当设置进位时,即 "A+B+1" 的对应结果。详细的测试语法可以通过帮助对话框查看。 + + + 如果一个电路被嵌入另外一个电路,仅仅子电路的名字被保存在父电路而不是子电路本身。 + 因此,在仿真时,必须可以通过文件系统找到对应的子电路。为了避免复杂的导入路径管理,使用以下导入策略。 + + + 仅仅子电路的文件名而不是完整的文件路径被存储。如果需要打开某个子电路,需要在所有的子文件夹下寻找。 + 该过程仅依赖文件名称而不是完整路径,当在不同路径下有多个同名文件时,将会给出错误信息。 + + + 一个合理的项目结构看起来应当时这样的:根电路放在独立的文件夹下,所有导入的子电路必须放在相同和子文件夹下。 + 所有的电路必须不能重名,即使位于不同的文件夹内。 + + + + + + + 在仿真时,所有的逻辑门均有一个传输延迟。所有的组件具有相同的传输延迟而与其复杂度无关。 + 因此,与门和乘法器具有相同的传输延迟。特例是二极管,开关和分裂器,这些组件没有任何延迟。 + + + 如果需要仿真一个组件如乘法器更长的传输延迟,必须在乘法器的输出右侧添加一个延迟组件。 + + + 如果一个电路被包含进另一个父电路,被包含的电路保持其时序行为。被包含的电路同将其所有组件直接插入父电路行为一致。 + + + + + + 可以通过 "分析" 菜单来分析电路。对于纯组合电路,会生成对应的真值表。可以编辑该真值表,然后从编辑后的真值表生成 + 新的电路。 + + + 分析和生成时序电路也是可能的。此时,会生成状态转换表而不是简单的真值表。 + 每个触发器在状态转换表的输入和输出侧都会显示。在该表中,右侧为下一个状态,其会在下一个时钟信号产生。 + 下一个状态依赖左侧触发器的当前状态。为了能够分析电路,必须为触发器命名。 + + + 右侧的下一个状态通过小写的 ‘n+1’ 表示,对应的当前状态通过附加 ‘n’ 表示。如果状态变量为 ‘A’, ‘An’ 表示当前状态, + ‘An+1’ 表示下一个状态。在一个真值表中,如果信号的名称以此方式命名,则被认为时状态转换表,会生成时序电路而不是组合电路。 + + + 需要注意的是,需要分析的电路仅可包含纯组合电路和内建的 D、JK 触发器。如果一个触发器由用户自己构建,如使用或非门 + 组成,则该电路不被认为触发器,因此不可以分析这种电路。 + + + + + + 在真值表对话框电路生成菜单中,有生成 JEDEC 文件的功能。这是一种描述 PLD 配置图(fuse map)的特殊文件格式。 + 该 JEDEC 文件可以通过特殊的编程器烧写进对应的 PLD 设备。目前,支持 "GAL16v8" 和 "GAL22v10" 或其兼容的设备。 + + + + + + "ATF150x" + + 系列芯片是简单的 CPLDs,其最多有128个宏单元。具有 PLCC 封装。这样,如果一个 IC 在实验中被毁坏,那么其可以被 + 简单的替换。另外,通过 + + "ATDH1150USB" + + 廉价和易用的编程器,可以使用 JTAG 接口编程 + + "ATF150x" + + 芯片。 + 一个合适的评估开发板为 + + ("ATF15XX-DK3-U") + + ,编程所需要的软件 + + "ATMISP" + , + 通过 ATMEL/Microchip 网站提供。 + + + + + 电路可以导出为 VHDL 或 Verilog,导出文件包含电路的完整描述。生成的 VHDL 代码通过了Xilinx Vivado + 和开源 VHDL 仿真器 ghdl 的测试。Verilog 代码通过了仿真器 Icarus Verilog 的测试。 + + + 如果电路包含测试用例,测试数据用于生成对应的 HDL 测试平台(test bench),可用于在 HDL 仿真时检测电路功能的正确性。 + + + 对于一些开发板,会为其生成额外所需的文件。目前,支持 BASYS3 + 和 Mimas 开发板 Mimas + 和 Mimas V2。 + 包含管脚分配的约束文件将会被创建。可以在开发板的数据手册中查找其管脚描述,并为输入和输出组件分配管脚编号。 + + + 对于 BASYS3 板子,如果电路的时钟频率比较低,在生成的 HDL 代码中将包含一个分频器,从而合理的对板载的时钟进行分频。 + 如果电路的时钟频率超过 4.7MHz,则使用 Artix-7 的 MMCM 单元用于生成时钟。 + + + + 为了创建 HDL 需要的约束文件,必须在设置中配置对应的开发板。在字段 “工具链配置” 中,可以设置对应的 XML 文件。 + 在 "examples/hdl" 目录下,可以找到以 ".config" 为后缀的可用配置文件。 + 如果配置文件正确,会在主菜单右侧显示对应的功能菜单。 + + + + + + 尽管 Digital 有些内建的选项可以设置子电路的外观,但在某些时候,需要使用更特殊的形状来显示子电路。如当表示处理器 + 中的 ALU 时,本节解释如何为电路定义一个特殊的形状。 + + + Digital 没有提供一个用例创建特殊形状的编辑器。 + 为了创建电路形状,需要一些特殊步骤:首先,打开需要创建特殊外观形状的电路,然后为该电路创建一个 SVG 模板,在 + 该模板中,电路表示为一个简单矩形,另外还包含电路中所有的管脚,其中输入使用蓝色圆圈表示,输出使用红色圆圈表示。 + 可以通过查看圆圈的 ID 对象属性了解该圆圈属于哪个管脚。ID 格式为 "pin:[name]" 或 "pin+:[name]"。 + 对于后者,当导入 Digital 时,管脚将被包含一个标签。 + + + SVG 文件可以被编辑,如使用最常用的开源编辑器Inkscape。 + 管脚可以自由移动,但在重新导入 Digital 时,其被替换为最近的栅格坐标位置。 + + + 当导入Digital后,所有的信息将被提取和保存在电路文件中,SVG 文件不再需要。 + 最后提示:SVG 是一种非常强大和灵活的文件格式。可用于描述非常复杂的图形。 + Digital 并不能导入所有可能的 SVG 文件。如果一个文件不能被导入,可能会出现异常。 + + + + + 有这样一种情形,一个子电路用于多种变形。如需要一个不同位宽的计数器,分别用于创建一个 4,5,6位宽的电路, + 这样,将来维护时会非常困难。因为我们必须维护多个子电路,然而这些子电路除了一个位宽参数,其它都相同。 + + + 为解决该问题,我们可以创建一个通用参数化的部分电路。 + 为此,电路设置中的 “通用电路” 复选框必须被选中,然后每个组件的属性对话框包含一个额外的字段 “通用参数”。 + 在该字段中,可以输入程序代码用来改变组件的参数。 + 每个参数须有一个名字,可以作为字段"this"的属性被修改。可用参数的名称可以通过组件的帮助对话框查看。 + 如果我们需要改变加法器的位宽,可以通过 "this.Bits=int(1);" 实现,这里的常量 1 始终是 "long" + 类型,但位宽是 "int",因此必须使用类型转换。 + + + 此时,电路仍然没有被参数化。这种情形是必要的,即当电路实际被使用时给出参数。 + 这可以通过 “args” 字段来实现。如果我们想在外部设置位宽,代码可以这样 "this.Bits=int(args.bitWidth);"。 + 参数的名称-这里为 "bitWidth" 是任意的。当实际使用该电路时,需要设置参数 "bitWidth":。 + + + 当使用电路时,打开子电路的属性对话框,其也有一个 “通用参数” 字段。这里可以通过输入 "bitWidth:=5;" + 来实现设置位宽。 + + + "examples/generic" 文件夹包含一个格雷码计数器的例子,其位宽可以被配置。 + + + + + 如果学生通过 Digital 来完成测验,能够自动测试学生提交的电路将会非常有帮助。为实现这种测试,可以通过命令行启动 Digital: + + + + java -cp Digital.jar de.neemann.digital.testing.CommandLineTester [file to test] [[optional file with + test cases]] + + + + 如果仅指定一个文件,则该文件中的测试用例将被执行。 + + + 如果指定了第二个文件,则使用第二个文件中的测试用例和第一个文件中的电路进行测试。第二个文件中的电路将被忽略。 + + + 此时,待测电路和测试用例中的电路输入输出信号名称必须相同。 + + + + + 如何移动导线? + 选择其中一个端点或通过 CTRL+单击选择导线,移动鼠标。 + + + + 如何删除导线? + + 选择其中一个端点或通过 CTRL+单击选择导线,然后按 "DEL" 键。 + + + + 如何移动组件,包括其所连接的导线? + 框选整个组件 + + + + 当组件管脚放在导线上时没有连接 + 仅当导线的端点位于管脚时才会连接 + + + 如果管脚的名字比较长,当作为子电路时,管脚名字无法阅读 + 通过菜单 "编辑设置当前电路" 修改组件的宽度 + + + + 修改子电路管脚的顺序 + 菜单 "编辑排序输入信号" 或 + "编辑排序输出信号" + + + + 当开始仿真时,导线颜色变为灰色 + + 鲜绿色表示高电平,深绿色表示低电平,灰色表示高阻。 + + + + 我有一个真值表,如何计算最小布尔表达式? + + 通过菜单 "分析" 选择 "综合",然后输入真值表。在窗口底部,你会发现匹配的布尔表达式。 + + + + + 我输入真值表后,显示多个布尔表达式,哪个是正确的? + + + 化简一个布尔表达式可能出现多个结果,它们描述同样的功能 + + + + 我有一个真值表,如何创建对应的电路? + 通过菜单 "分析" 选择 "综合",然后输入真值表。 + 使用菜单 "创建" "电路" 可以创建对应的电路。 + + + + 如何编辑真值表中信号的名称? + 在表头中右击信号名称 + + + 如何根据表达式创建电路? + 通过菜单 "分析" "表达式",输入表达式。 + + + + 如何通过表达式创建真值表? + 菜单 "分析" "表达式" 输入表达式,创建电路。 + 然后通过菜单 "分析" "分析" 创建真值表。 + + + + 我创建了一个电路,想把它用于很多电路,如何才能不重复的复制到不同的文件夹下? + + 放在 “lib” 文件夹内 + + + + + + 开启或停止仿真 + 打开测量表对话框 + 运行至中断 + 执行测试用例 + 时钟步进(仅在仿真模式且只有一个时钟组件时可用) + + 单门步进 + 执行所有单门步骤,直至中断或完成 + 分析电路 + 选择所有 + 剪切 + 复制 + 从剪贴板插入 + 复制当前选中而不更改剪贴板 + 旋转组件 + 插入最近一次插入的组件 + 插入隧道组件 + 新建电路 + 打开电路 + 保存电路 + 撤销上次修改 + 重做上次撤销操作 + 对二极管或浮动栅场效应管编程 + 画导线时使用对角线模式 + 画线时翻转方向 + 分割一条导线为两条 + 放弃当前操作 + 删除 + 删除 + + 加1 + + 减1 + + 放大 + 缩小 + 适合窗口 + 显示或隐藏组件树 + + + \ No newline at end of file diff --git a/src/test/resources/docu/static_zh_ref.xml b/src/test/resources/docu/static_zh_ref.xml new file mode 100644 index 000000000..e44d9153e --- /dev/null +++ b/src/test/resources/docu/static_zh_ref.xml @@ -0,0 +1,741 @@ + + + + + + Digital is a simple simulator used to simulate digital circuits. The logic gates are connected + to each other by wires and the behavior of the overall circuit can be simulated. + The user can interact with the simulation by either pressing buttons or setting + values to the inputs of the circuit. + + + In this way, most of the basic circuits used in digital electronics can be built and simulated. + In the folder examples, users can browse for examples that includes a functional + 16-bit single-cycle Harvard processor. + + + The simulator has two modes of operation: Editing and Simulation mode. + In the editing mode, modifications to the circuit can be performed. Users can add or connect components. + In this mode, simulation is disabled. + The simulation mode is activated by pressing the Start button in the tool bar. + While starting the simulation the circuit is checked for consistency. + If there are errors in the circuit an appropriate message is shown and + the affected components or wires are highlighted. If the circuit is error free, the simulation is + enabled. Now you can interact with the running simulation. + In the simulation mode it is not possible to modify the circuit. To do so you have to activate the + editing mode again by stopping the simulation. + + + + + + + + As a first example, a circuit is to be constructed with an Exclusive-Or gate. + From the main window, the Components menu allows you to select the various components. + Then they are placed on the drawing panel. This process can be canceled by pressing the ESC key at any + time. Start by selecting an input component. + This can later be controlled interactively by using the mouse. + + + + + After selection, the first input can be placed on the drawing panel. + The red dot on the input component symbol is a connection point between the component and a wire, + which will be + connected later on. + The red color indicates an output. This means that the port defines a signal value or can drive a + wire. + + + + + + In the same way, a second input is added. It is best to place it directly below the first input. + + + + + After adding the inputs, the Exclusive-Or gate is selected. This gate represents the actual logical + function. + + + + + + This gate can now also be added to the circuit. It is best to place it in a way that the subsequent + wiring is made as simple as possible. The blue dots indicate the input terminals of the gate. + + + + + + Now, select an output which could be used to display a signal state or to later pass signals to + an embedding circuit. + + + + + + This is placed in a way that it can be wired easily. + The output has a blue dot, which indicates an input terminal. + Here you can feed in the value which is then exported. + + + + + + After all components are selected and in place, use the mouse to wire a connection between the blue and + red dots. Make sure that exactly one red dot is connected to any number of blue dots. + Only the usage of three-state outputs makes it possible to deviate from this rule and to interconnect + several red dots. + If all wires have been drawn, the circuit is complete. + + + + + + Interaction with the circuit is possible when simulation is started. + This is done by clicking on the play button located in the toolbar. + After starting the simulation, the color of the wires changes and the + inputs and outputs are now filled. Bright green indicates a logical '1' and dark green a logical '0'. + In the figure above, all wires have a '0' value. + + + + + + By clicking with the mouse, the inputs can be switched. Since the simulation is now active, the + output changes according to the current input states. The circuit behaves like an + Exclusive-Or gate as expected . + + + + + + To further process the circuit, the simulation must first be stopped. The easiest way to do this is + with the Stop button in the tool bar. Clicking on a component with the right mouse button + (control-click on MacOS) opens a dialog which shows the component's properties. The label 'A' can + be defined for the first input via this dialog. + + + + + + In this way, the labels for the remaining inputs and outputs can be defined. The menu item + Analysis + also contains a menu item Analysis. This function performs an analysis of + the current circuit. However, this is only possible if all inputs and outputs are labeled properly. + + + + + + The truth table of the simulated circuit appears in a new window. Below the table you can find the + algebraic expression associated with the circuit. If there are several possible algebraic + expressions, a separate window will open, showing all possible expressions. + + + + + + The table dialog has the menu entry K-Map in its main menu. This allows to display the truth + table in the form of a K-map. + + + + + + At the top of this dialog there is a drop-down list which allows the selection of the desired + expression in the K-map. In this way you can, for example, illustrate how several equivalent + algebraic expressions can result. However, in this example, there is only one minimal expression. + The truth table can also be modified by clicking the K-map. + + + + + All components must be connected via wires. It is not possible to connect two components + by placing them directly next to each other. + + + In addition, there are only connections between an endpoint of a wire and a component. + If a pin of a component is placed in the middle of a wire, no connection is made between the component + and the wire. + Therefore, a wire must actually terminate at each pin which is to be connected. + Even if the tunnel component is used, there must be a wire between the pin and the tunnel element. + + + The component needs to be selected using the rectangular selection tool in order to be moved, + including the connected wires. For moving a component without the connected wires, + select the component using a mouse click. + + + With CTRL-Click a single wire section can be selected to move or delete it. + If the D key is pressed while drawing a wire, a diagonal wire can be drawn. + The key S allows the splitting of a line segment into two segments. + + + + + If a complex circuit is built up, this can quickly become very confusing. To keep track here, + the different parts of a circuit can be stored in different files. This mechanism also makes it + possible to use a subcircuit, which has been created once, several times in a further circuit. + This approach also offers the advantage that the files can be stored independently of each other in a + version control system and changes can be tracked. + + + + + + As an example, consider a 4-bit adder: First, we built a simple half-adder. This consists of an + XOR gate and an AND gate. The sum of the two bits 'A' and 'B' is given to the outputs 'S' and 'C'. + This circuit is stored in the file halfAdder.dig. + + + + + + From two half adders a full adder can now be built. To do this, create a new empty file and save the + empty file as fullAdder.dig in the same folder as the half adder. Then the + half adder can be added to the new circuit via the + Components + + Custom + menu. + The order of the pins at the package of the half-adder can be rearranged in the half adder in the + menu + Edit + + Order inputs + or + Edit + + Order outputs. + The full adder adds the three bits 'A', 'B' and 'Ci' and gives the sum to the outputs 'S' and 'Co'. + + + + + + In order to check the correct function of the full adder, a test case should be added. In the test case, + the truth table is stored, which should fulfill the circuit. In this way it can be automatically + checked whether this is the case. + + + + + + The tests can be executed via the test case editor or the test button in the toolbar. + The table cells highlighted in green indicate that the output of the circuit matches + the truth table given in the test case. + + + + + + Now the full adders can be put together to form a so-called ripple-carry adder. + In this case, the carry output of an addition is forwarded as a carry input to the addition of the + next higher-order bit, just as is usual in pencil-and-paper addition. + This 4-bit adder should be tested for correct function. For this purpose a test case was inserted. + + + + + + This test case performs a 100% test, which is possible only with relatively simple circuits: all + possible 512 input combinations are applied to the circuit, and it is checked whether the output + of the circuit is correct. + The first line lists the input and output signals. Below this, the input values to be applied and + the output values to be checked are specified in a row, as in a truth table. + In this example, however, 512 lines are required. Entering this would be a tedious and error-prone task. + It is easier and more reliable to automatically generate the required lines. + For this purpose, the variables A and B are each traversed + from 0 to 15. The respective values of A and B are then assigned to inputs 'A[n]' and + 'B[n]'. + Then it is checked whether the circuit outputs the value A+B. Then it is checked again with + the carry bit set, in which case A+B+1 must result. + The details of the test syntax are provided by the help dialog. + + + If a circuit is embedded in an other circuit, only the file name of the subcircuit is stored in a + circuit, not the embedded circuit itself. + The corresponding files of + the embedded subcircuits must therefore be found in the file system at runtime of the simulation. + In order to support the various work methods of the users as best as possible and still to avoid a + complex administration of import paths, etc., a somewhat unusual import strategy is implemented. + + + Only the file names of the embedded circuits are stored in a circuits file, not the full path. + If a file needs to be opened, all subfolders are searched for a file of the corresponding name. + If a suitable file is found, it is imported. This process only depends on the file name of the file to + be read, not on its path. Correspondingly, an error message is generated if there are several files of + the same name in different subfolders, since ambiguities then arise. + + + A suitable project structure therefore looks as follows: The root circuit is located in a separate + folder. + All imported circuits must be in the same folder or subfolders. All circuits must have different names, + so it must not happen that there are circuits of the same name in different folders. + + + + + + + During the simulation every logic gate has a propagation delay. Every component found in the library + has the same propagation delay regardless of its complexity. + The AND gate thus has the same propagation delay as the multiplier. + The only exceptions are diodes, switches and splitters which are used to create data buses. + These components have no propagation delay at all. + + + If it's necessary to simulate a gate - e.g. the multiplier - with a longer propagation delay, a delay + gate must be inserted in the circuit right behind the output of the multiplier. + + + If a circuit is included in another parent circuit, the included circuit keeps its timing behaviour. + So if you include a complex circuit which has a large propagation delay because the input signals + has to pass three gates until it reaches the output, this behaviour is conserved while including this + circuit. + There are no additional delays introduced as a result of including a circuit. If not all outputs of a + circuit have + the same propagation delay, then this is also the case if it is included in a parent circuit. + In general, including a circuit into an other circuit does not modify its timing behaviour at all. An + included circuit behaves exactly the same way as if all components had been inserted at the same circuit + level. + + + + + + A circuit can be analyzed via the menu entry Analysis. A truth table is generated for purely + combinatorial circuits. This truth table can be edited as desired. + A new circuit can be generated from this truth table after editing. + + + In addition to purely combinatorial circuits, it is also possible to analyze or generate sequential + circuits. + Instead of a simple truth table a so-called state transition table is created. + Each flip-flop thereby appears on the input side and the output side of the state transition table. + In this table, on the right-hand side, you can find the next state, which will + occur after the next clock signal. This next state depends on the current state of the flip-flops as found + at the left-hand side of the table. + For an analysis to be possible, the flip-flops must be named. + + + The following naming convention applies: The following next state of a bit on the right side of the table + is indicated by a lowercase 'n+1'. The corresponding current state is indicated by an appended 'n'. + If there is a state variable 'A', 'An' indicates the current state and 'An+1' indicates the next state. + If, in the truth table on the left and right side, signals are present, which correspond to this pattern + it is assumed that the table is a state transition table, and a sequential circuit is generated instead of + a combinatorial circuit. + + + It should be noted that the circuit to be analyzed may contain only purely combinatorial elements in + addition to the built-in D and JK flip-flops. If a flip-flop is e.g. made from Nor gates, this + circuit is not recognized as a flip-flop and therefore it is not possible to analyse such a circuit. + + + + + + In the circuit generation menu in the truth table there are also functions to generate so-called + JEDEC files. This is a special file format that describes the fuse map of a PLD. + This JEDEC file can be written into a corresponding PLD using a special programmer. + At the moment, circuits of the type GAL16v8 and GAL22v10 or fuse map compatible + devices are supported. + + + + + The chips in the + + ATF150x + + family are simple CPLDs with up to 128 macrocells. They are available in a + PLCC package, which makes them suitable for laboratory exercises: If an IC is destroyed during + exercises, + it can simply be replaced. In addition, with the + + ATDH1150USB + + an easy to use, low-cost programmer is available. This programmer is able to program the + + ATF150x + + chips in system using a JTAG interface. + A suitable evaluation board + + (ATF15XX-DK3-U) + + is also available. + The software + + ATMISP + + , + which is available on the ATMEL/Microchip website, is required for programming the chips. + + + Unfortunately, the fuse map details are not publicly available so that no suitable fitter for this chip + can be integrated in Digital, as is possible with the GAL16v8 and GAL22v10 chips. + + + Therefore, the fitters fit150[x].exe provided by ATMEL must be used. These programs create a + JEDEC + file from a suitable TT2 file which can then be programmed on the chip. Digital + starts the fitter automatically every time a TT2 file is created. For this purpose, the path to + the + fit150[n].exe + fitters must be specified in the settings. + The created JEDEC file can then be opened and programmed directly with + + ATMISP + + . + + + For legal reasons the fitter fit1502.exe can not be distributed with Digital. However, it can be + found in the folder WinCupl\Fitters after installing + + WinCupl + + . + + WinCupl + + is available on the ATMEL/Microchip website. + On Linux systems, the fitters can also be executed by Digital if wine is installed. + + + + + A circuit can be exported to VHDL or Verilog. A file is generated which contains the complete + description + of the circuit. The generated VHDL code was tested with + Xilinx Vivado + and the open source VHDL simulator ghdl. + The Verilog code is tested with the Verilog simulator Icarus + Verilog. + + + If a circuit contains test cases, the test data is used to generate a HDL test bench. This can be used + to check the correct function of the circuit in a HDL simulation. + + + Additional files which are needed by special boards can be created. At present only the + BASYS3 + board and the Mimas boards + Mimas + and + Mimas V2 + + are supported. + A constraints file is created, which contains the assignment of the pins. The description of the pins + can + be found in the boards data sheet, and must be entered as a pin number for the inputs and outputs. + + + At a BASYS3 board, if the circuit clock frequency is low, a frequency divider is integrated into the HDL + code to divide the board clock accordingly. + If the clock frequency selected in the circuit exceeds 4.7MHz, the MMCM unit of the + Artix-7 is used for clock generation. + This ensures that the FPGA resources provided for the clock distribution are used. + This allows the included example processor to run at 20MHz, and if you can do without the + multiplier, 30HMz is also possible. + + + + If a circuit is to run on a BASYS3 board, a new project can be created in Vivado. + The generated VHDL file and the constraints file must be added to the project. + Once the project has been created, the bitstream can be generated and the Hardware-Manager can be used + to program a BASYS3 board. + + + In order to create the required constraints file in addition to the HDL file, the corresponding board + must be configured in the settings. In the field "Toolchain Configuration" the corresponding XML file + can be selected. + The available configurations can be found in the folder examples/hdl and have the file + extension .config. + If the configuration was successfully integrated, a further menu appears, which makes the board + specific functions accessible. + + + + + + Although Digital has some options that determine the appearance of a circuit when it is embedded in + another, in some cases it may be useful to use a very special shape for a subcircuit. An example is + the representation of the ALU in the processor included in the examples. This chapter explains how to + define such a special shape for a circuit. + + + Digital does not provide an editor for creating a special shape. Instead, a small detour is required + for creating circuit shapes: First, the circuit is opened, which is to be represented by a special shape. + Then an SVG template is created for this circuit. In this template, the circuit is represented by a + simple rectangle. It also contains all the pins of the circuit, represented by blue (inputs) and + red (outputs) circuits. To see which circle belongs to which pin, you can look at the ID of the + circle in the object properties. This ID has the form pin:[name] or pin+:[name]. + In the latter variant, the pin is provided with a label if reimported to digital. + If you do not want such a label, the + can be removed. + + + This SVG file can now be edited. The most suitable is the open source program + Inkscape + which is available for free. + The pins can be moved freely, but are moved to the next grid point during the reimport. + + + If existing SVG files are to be used, it is easiest to open the created template and paste the + existing graphic into the template via Copy&Paste. + + + If the file was saved, it can be imported with Digital. The file is read in and all necessary + information is extracted and stored in the circuit. For further use of the circuit, the SVG + file is no longer required. + + + A final remark: SVG is a very powerful and flexible file format. + It can be used to describe extremely complex graphics. The Digital importer is not able to import all + possible SVG files without errors. If a file can not be imported, or does not appear as expected, + some experimentation may be required before the desired result is achieved. + + + + + It happens that a subcircuit has been created, and this is to be used in different variants. + For example, you can imagine a special counter that is needed for different bit widths. + If one would create a partial circuit for 4, 5 and 6 bits each, the maintenance of the circuit + would be difficult in the future, since one must always work on several subcircuits, which are + identical except for one parameter, the bit width. + + + To prevent this, a generic partial circuit can be created which can be parameterized. + For this purpose, the checkbox "Circuit is generic" must be set in the circuit setting of the circuit. + Then the parameter dialog of each component of the circuit contains the additional field "generic + parameterization". In this field program code can be entered, which can change the parameters of the + component. Each parameter has a name and can be modified as an attribute of the field this. + The names of the parameters can be found in the help dialog of the component. + If you want to change the bit width of an adder, the line this.Bits=int(1); can be used. + Constants - here the one - are always of type long, but the bit width is an int. + Therefore the type conversion to an int is necessary. + + + In this way, however, it is not yet possible to create a circuit that can be parameterized. + It is still necessary to access parameters that are set when the circuit is used. + This is done via the field "args". If you want to set the bit width from outside, you can write: + this.Bits=int(args.bitWidth);. The name of the argument - here bitWidth is arbitrary. + If this partial circuit is used, this argument must be set. + + + If the circuit is used and the parameter dialog of the embedded circuit is opened, it also has a + field "generic parameterization". Here the bit width to be used can be set with the instruction + bitWidth:=5;. + + + In this way, no wires or components can be removed or added. Nevertheless, many circuits can be + realized with a trick. This is achieved by replacing one circuit with another, depending on the + arguments. For this purpose the function setCircuit([Name]) is available. + If it is called in the definition part of a subcircuit, the circuit to be inserted can be replaced + by another circuit. This allows the recursive definition of a circuit. As in other programming + languages, a suitable termination condition must be ensured. + + + The examples/generic folder contains an example of a Gray code counter whose bit width can + be configured. Here a Gray code counter is constructed by recursively adding further bits to an + initial circuit until the required number of bits of the counter is reached. + + + + + If students are to complete exercises with Digital, it can be helpful if the circuits submitted by the + students can be checked in an automatic process. To perform this check, Digital can be started + from the command line. The call is done as follows: + + + + java -cp Digital.jar de.neemann.digital.testing.CommandLineTester [file to test] [[optional file with + test cases]] + + + + If only the file to be tested is specified, the test cases in that file are executed. In this way, the + test cases created by the students themselves can be executed. + + + If a second file name is specified, the test cases are taken from the second file and the first circuit + is checked with these test cases. The second file will therefore usually contain the sample solution + whose test cases are complete and correct. The circuit contained in the second file is ignored. + Only the test cases are taken from it. + + + In order to test a submitted circuit against a sample solution, the signal names of the inputs and + outputs in both circuits must match. + + + + + How to move a wire? + Select one of the end points with the rectangular selection. Then move this point using the mouse. + You can also select a wire with CTRL + mouse button. + + + + How to delete a wire? + Select one of the end points and press DEL or click on the trashcan. + You can also select a wire with CTRL + mouse button. + + + + How to move a component including all the connected wires? + Select the component with the rectangular selection. The selection must include the entire + component. + Then move the component including the wires using the mouse. + + + + There is a component not connected to a wire, even though the pins are on the wire. + A pin is only connected to a wire if the wire has an endpoint at the pin. + + + If the names of the pins in a circuit are long, the names are no longer readable when + the circuit is embedded. What can I do? + + The width of the block can be increased using the menu item + EditEdit circuit attributes + + . + + + + The pins in an embedded circuit have an non-optimal order. How can this be changed? + The sequence can be changed using the menu entry + EditOrder inputs + + or + EditOrder outputs + + . + + + + + When the simulation is started, a wire becomes gray. What does that mean? + The colors light green and dark green are used to represent high and low state. + Gray means the wire is in high Z state. + + + + I have a truth table. How to calculate the minimized boolean equations? + In the menu Analysis select the entry Synthesise. Then enter the truth table. + At the bottom of the window you can find the matching boolean equation. If you enter more than one + dependent variable, a new window opens in which all boolean equations are shown. + + + + I have entered a truth table, but there is more than one boolean equation shown. + Which of them is the correct one? + + Minimizing a boolean equation can result in many equations, describing the same function. + Digital shows all of them and they all create the same truth table. + There may be differences depending on the "don't cares" in the truth table. + + + + I have a truth table. How to create a circuit representing the truth table? + In the menu Analysis select the entry Synthesise. Then enter the truth table. + You can edit the table using the New or Add Columns menus. + In the menu Create you can create a circuit using the Circuit item. + + + + How to edit a signal's name in the truth table? + Right click on the name in the table header to edit the name. + + + I have a boolean equation. How to create a circuit? + In the menu Analysis select the entry Expression. Then enter the expression. + + + + How to create a truth table from a boolean equation? + In the menu Analysis select the entry Expression. Then enter the expression. + Then create a circuit and in the menu Analysis use the entry Analysis to create the truth + table. + + + + How to create a JEDEC file from a given circuit? + In the menu Analysis select the entry Analysis. Then in the menu Create in the + new + window choose the correct device in the sub menu Device. + + + + When creating a JEDEC file: How to assign a pin number to a certain signal? + At the corresponding inputs and outputs you can enter a pin number in the settings dialog of the + pin. + + + + I have created a JEDEC file. How to program it to a GAL16v8 or GAL22v10? + + To program such a chip a special programmer hardware is necessary. + + + I have created a circuit that I want to use in many other circuits. + How can I do this without copying the file over and over again into the appropriate folders? + + The circuit can be saved in the "lib" folder. Then it is available in all other circuits. + + + + + + Starts or stops the simulation. + Opens the measurement table dialog. + Run to Break + Execute test cases + A single clock step (Works only in a running simulation and only if there is a single + clock component). + + Execute a single gate step. + Execute all single gate steps until the circuit has stabilized or, + if a break component is present, until the break. + + Analysis of the circuit + Select all. + Cuts the selected components to the clipboard. + Copys the selected components to the clipboard. + Inserts the components from the clipboard. + Duplicate the current selection without modifying the clipboard. + While inserting this rotates the components. + Inserts the last inserted component again. + Inserts a new tunnel. + New circuit. + Open circuit. + Save the circuit. + Undo last modification. + Redo the last undone modification. + Programs a diode or a FG-FET. + While drawing a wire switches to the diagonal mode. + While drawing a line flips the orientation. + Splits a single wire into two wires. + Abort the current action. + Removes the selected components. + Removes the selected components. + Increases the number of inputs at the component the mouse points to. If it is used with + constants, the value is increased. + + Decreases the number of inputs at the component the mouse points to. If it is used with + constants, the value is decreased. + + Zoom In + Zoom Out + Fit to size + Show or hide the components tree view + + + \ No newline at end of file