3 个版本
0.0.3 | 2023 年 5 月 17 日 |
---|---|
0.0.2 | 2023 年 1 月 15 日 |
0.0.1 | 2023 年 1 月 15 日 |
#8 in #vhdl
120KB
3K SLoC
source_generator
一个为需要源代码生成的应用程序提供基本源代码生成功能的库。
VHDL 生成
VHDL 源代码生成基于 VHDL 2008 的逆 BNF 并进行了一些简化。示例 vhdl/adder.rs 展示了简单 VHDL 加法器设计的创建。
fn main() -> Result< (), std::io::Error > {
let mut adder = Entity::new( "adder" );
adder.add_library_use( LibraryUse::new( "ieee", "numeric_std" ) );
adder.add_generic( Generic::new_with_default( "SIZE", "positive", "32" ) );
adder.add_port( Port::new( "a", Direction::IN, "unsigned( SIZE - 1 downto 0 )" ) );
adder.add_port( Port::new( "b", Direction::IN, "unsigned( SIZE - 1 downto 0 )" ) );
adder.add_port( Port::new( "c", Direction::OUT, "unsigned( SIZE - 1 downto 0 )" ) );
let mut rtl = Architecture::new( "rtl", adder );
rtl.add_signal_assignment( SignalAssignment::new_with_label( "add", "c", "a + b" ));
let mut vhdl_file = VhdlFile::new( "examples/vhdl/adder.vhd" );
vhdl_file.add_architecture( rtl );
vhdl_file.write()?;
}
此设计包含一个具有两个输入端口和一个输出端口的实体。生成的架构对两个输入进行加法并写入输出。
基于此代码生成程序,创建了以下 VHDL 代码。
library ieee;
use ieee.numeric_std.all;
entity adder is
generic (
SIZE : positive := 32
);
port (
a : in unsigned( SIZE - 1 downto 0 );
b : in unsigned( SIZE - 1 downto 0 );
c : out unsigned( SIZE - 1 downto 0 )
);
begin
end entity adder;
architecture rtl of adder is
begin
add: c <= a + b;
end architecture rtl;
依赖项
~3–4.5MB
~112K SLoC