samitbasu / rust-hdl

A framework for writing FPGA firmware using the Rust Programming Language
Other
325 stars 17 forks source link

Naming a signal "output" triggers a "custom attribute panicked" error message #29

Open PoignardAzur opened 1 year ago

PoignardAzur commented 1 year ago

Minimal reproduction:

#[derive(LogicBlock)]
struct NandGate {
    pub input_1: Signal<In, Bits<1>>,
    pub input_2: Signal<In, Bits<1>>,
    pub output: Signal<Out, Bits<1>>,
}

impl Logic for NandGate {
    #[hdl_gen]
    fn update(&mut self) {
        self.output.next = !(self.input_1.val() & self.input_2.val());
    }
}

This triggers the following error

error: custom attribute panicked
  --> src/level_nand.rs:24:5
   |
24 |     #[hdl_gen]
   |     ^^^^^^^^^^
   |
   = help: message: assertion failed: `(left != right)`
             left: `"output"`,
            right: `"output"`

Even if output is a reserved named and shouldn't be used, the error message should at least be more explicit.

PoignardAzur commented 1 year ago

(Also happens when naming a signal "input")