Separate name from width #20
|
@ -126,10 +126,12 @@ pub(super) fn parse_var<R: std::io::Read>(
|
||||||
// $var parameter 3 a IDLE $end
|
// $var parameter 3 a IDLE $end
|
||||||
// ^^^^ - full_signal_name(can extend until $end)
|
// ^^^^ - full_signal_name(can extend until $end)
|
||||||
let mut full_signal_name = Vec::<String>::new();
|
let mut full_signal_name = Vec::<String>::new();
|
||||||
|
let mut size = None;
|
||||||
loop {
|
loop {
|
||||||
let (word, _) = next_word!(word_reader)?;
|
let (word, _) = next_word!(word_reader)?;
|
||||||
match word {
|
match word {
|
||||||
"$end" => break,
|
"$end" => break,
|
||||||
|
other if other.starts_with('[') => size = Some(other.to_string()),
|
||||||
_ => full_signal_name.push(word.to_string()),
|
_ => full_signal_name.push(word.to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,6 +172,7 @@ pub(super) fn parse_var<R: std::io::Read>(
|
||||||
.chain([full_signal_name])
|
.chain([full_signal_name])
|
||||||
.collect::<Vec<String>>(),
|
.collect::<Vec<String>>(),
|
||||||
signal_type: var_type,
|
signal_type: var_type,
|
||||||
|
index: size,
|
||||||
signal_error: None,
|
signal_error: None,
|
||||||
num_bits,
|
num_bits,
|
||||||
num_bytes,
|
num_bytes,
|
||||||
|
|
|
@ -48,6 +48,11 @@ impl<'a> Signal<'a> {
|
||||||
signal_enum.name()
|
signal_enum.name()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn name_with_size(&self) -> String {
|
||||||
|
let Signal(signal_enum) = &self;
|
||||||
|
signal_enum.name_with_index()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn path(&self) -> &[String] {
|
pub fn path(&self) -> &[String] {
|
||||||
match self.0 {
|
match self.0 {
|
||||||
SignalEnum::Data { path, .. } => path,
|
SignalEnum::Data { path, .. } => path,
|
||||||
|
@ -135,6 +140,9 @@ pub(super) enum SignalEnum {
|
||||||
name: String,
|
name: String,
|
||||||
path: Vec<String>,
|
path: Vec<String>,
|
||||||
signal_type: SignalType,
|
signal_type: SignalType,
|
||||||
|
/// The optional [start:end] part of the signal name that is sometimes
|
||||||
|
/// added to signals
|
||||||
|
index: Option<String>,
|
||||||
/// I've seen a 0 bit signal parameter in a xilinx
|
/// I've seen a 0 bit signal parameter in a xilinx
|
||||||
/// simulation before that gets assigned 1 bit values.
|
/// simulation before that gets assigned 1 bit values.
|
||||||
/// I consider this to be bad behavior. We capture such
|
/// I consider this to be bad behavior. We capture such
|
||||||
|
@ -218,6 +226,20 @@ impl SignalEnum {
|
||||||
}
|
}
|
||||||
.clone()
|
.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn name_with_index(&self) -> String {
|
||||||
|
match self {
|
||||||
|
SignalEnum::Data {
|
||||||
|
name, index: None, ..
|
||||||
|
} => format!("{name}"),
|
||||||
|
SignalEnum::Data {
|
||||||
|
name,
|
||||||
|
index: Some(size),
|
||||||
|
..
|
||||||
|
} => format!("{name} {size}"),
|
||||||
|
SignalEnum::Alias { name, .. } => name.clone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// helper functions ultimately used by Signal's query functions later on
|
// helper functions ultimately used by Signal's query functions later on
|
||||||
|
|
Loading…
Reference in a new issue