45 个版本 (11 个重大更新)

新增 0.12.0 2024年8月21日
0.11.1 2024年7月3日
0.8.1 2024年3月14日
0.5.6 2023年10月19日
0.1.3 2022年12月23日

#1237硬件支持

Download history 5/week @ 2024-05-03 187/week @ 2024-05-10 19/week @ 2024-05-17 183/week @ 2024-05-24 38/week @ 2024-05-31 17/week @ 2024-06-07 10/week @ 2024-06-14 159/week @ 2024-06-21 138/week @ 2024-06-28 31/week @ 2024-07-05 20/week @ 2024-07-12 4/week @ 2024-07-19 52/week @ 2024-07-26 131/week @ 2024-08-02 137/week @ 2024-08-09 152/week @ 2024-08-16

每月472次 下载
用于 6 个crate

MIT/Apache

2MB
54K SLoC

Veryl

Actions Status Crates.io Changelog

Veryl是一种现代硬件描述语言。

本项目处于语言设计探索阶段。如果您有任何想法,请打开 问题

概述

Veryl是基于SystemVerilog的硬件描述语言,具有以下优势:

优化语法

Veryl采用了针对逻辑设计优化的语法,同时基于SystemVerilog专家熟悉的基
本语法。这种优化包括可综合性的保证,确保仿真结果的一致性,并为常见的习语提供
许多语法简化。这种方法使学习变得容易,提高了设计过程的可靠性和效率,并便于代码
编写。

互操作性

考虑到与SystemVerilog的互操作性进行设计,Veryl允许平滑地集成和部分替换
现有的SystemVerilog组件和项目。此外,从Veryl转换的SystemVerilog源代码仍具有高可读
性,使集成和调试无缝进行。

生产力

Veryl附带丰富的开发支持工具,包括包管理器、构建工具、与VSCode、Vim、Emacs
等主要编辑器兼容的实时检查器、自动补全和自动格式化。这些工具加速了开发过程,显
著提高了生产力。

具有这些功能,Veryl为设计师提供了强大的支持,使他们能够高效、高效地进行高
质量的硬件设计。

示例

Veryl SystemVerilog
/// documentation comment by markdown format
/// * list item1
/// * list item2
pub module Delay #( // visibility control by `pub` keyword
    param WIDTH: u32 = 1, // trailing comma is allowed
) (
    i_clk : input clock       ,
    i_rst : input reset       ,
    i_data: input logic<WIDTH>,
    o_data: input logic<WIDTH>,
) {
    // unused variable which is not started with `_` are warned
    var _unused_variable: logic;

    // clock and reset signals can be omitted
    // because Veryl can infer these signals
    always_ff {
        // abstraction syntax of reset polarity and synchronicity
        if_reset {
            o_data = '0;
        } else {
            o_data = i_data;
        }
    }
}
// comment
//
//
module Delay #(
    parameter int WIDTH = 1
) (
    input              i_clk ,
    input              i_rst ,
    input  [WIDTH-1:0] i_data,
    output [WIDTH-1:0] o_data
);
    logic unused_variable;

    always_ff @ (posedge i_clk or negedge i_rst) begin
        if (!i_rst) begin
            o_data <= '0;
        end else begin
            o_data <= i_data;
        end
    end
endmodule

安装

文档

使用

// Create a new project
veryl new [project name]

// Create a new project in an existing directory
veryl init [path]

// Format the current project
veryl fmt

// Analyze the current project
veryl check

// Build target codes corresponding to the current project
veryl build

// Build the document corresponding to the current project
veryl doc

有关详细信息,见 文档

许可证

根据以下任一许可证授权

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的您有意提交的工作贡献,将按照上述方式双重授权,不附加任何额外条款或条件。

依赖项

~18–54MB
~803K SLoC