Increase maximum bit width

This commit is contained in:
Oscar Gustafsson 2023-10-11 09:54:59 +02:00
parent b9c507c9d8
commit 9c54c3a295
3 changed files with 13 additions and 13 deletions

View file

@ -71,10 +71,10 @@ pub(super) fn parse_events<R: std::io::Read>(
// handle the case of an n bit signal whose value must be parsed
"b" => {
let binary_value = &word[1..];
let observed_num_bits = u16::try_from(binary_value.len()).map_err(|_| {
let observed_num_bits = u32::try_from(binary_value.len()).map_err(|_| {
format!(
"Error near {}:{}, {cursor:?}. \
Found signal with more than 2^16 - 1 bits.",
Found signal with more than 2^32 - 1 bits.",
file!(),
line!()
)
@ -200,11 +200,11 @@ pub(super) fn parse_events<R: std::io::Read>(
format!("Error near {}:{}. num_bytes empty.", file!(), line!())
})?;
let mut curr_num_bytes =
u8::try_from(value_u8.len()).map_err(|_| {
u16::try_from(value_u8.len()).map_err(|_| {
format!(
"Error near {}:{}. \
Found signal {name} with with value change of greater \
than 2^16 - 1 bits on {cursor:?}.",
than 2^32 - 1 bits on {cursor:?}.",
file!(),
line!()
)

View file

@ -104,10 +104,10 @@ pub(super) fn parse_var<R: std::io::Read>(
let num_bits = word
.parse::<usize>()
.unwrap_or_else(|_| panic!("{}", parse_err));
let num_bits = u16::try_from(num_bits).map_err(|_| {
let num_bits = u32::try_from(num_bits).map_err(|_| {
format!(
"Error near {}:{} while parsing vcd file at {cursor:?}. \
This signal has {num_bits} > 2^16 - 1 bits.",
This signal has {num_bits} > 2^32 - 1 bits.",
file!(),
line!()
)

View file

@ -67,7 +67,7 @@ impl<'a> Signal<'a> {
}
}
pub fn num_bits(&self) -> Option<u16> {
pub fn num_bits(&self) -> Option<u32> {
let Signal(signal_enum) = &self;
signal_enum.bits_required()
}
@ -140,8 +140,8 @@ pub(super) enum SignalEnum {
/// I consider this to be bad behavior. We capture such
/// errors in the following type:
signal_error: Option<String>,
num_bits: Option<u16>,
num_bytes: Option<u8>,
num_bits: Option<u32>,
num_bytes: Option<u16>,
/// TODO : may be able to remove self_idx
self_idx: SignalIdx,
/// A signal may take on a new value and hold that value
@ -225,12 +225,12 @@ impl SignalEnum {
/// Computes the bytes required to store a signal's numerical value
/// using the num_bits which another function would provide from
/// the num_bits field of the Signal::Data variant.
pub(super) fn bytes_required(num_bits: u16, name: &String) -> Result<u8, String> {
pub(super) fn bytes_required(num_bits: u32, name: &String) -> Result<u16, String> {
let bytes_required = (num_bits / 8) + if (num_bits % 8) > 0 { 1 } else { 0 };
let bytes_required = u8::try_from(bytes_required).map_err(|_| {
let bytes_required = u16::try_from(bytes_required).map_err(|_| {
format!(
"Error near {}:{}. Signal {name} of length num_bits requires \
{bytes_required} > 256 bytes.",
{bytes_required} > 65536 bytes.",
file!(),
line!()
)
@ -343,7 +343,7 @@ impl SignalEnum {
Ok((timestamp, signal_val))
}
fn bits_required(&self) -> Option<u16> {
fn bits_required(&self) -> Option<u32> {
match self {
SignalEnum::Data { num_bits, .. } => *num_bits,
// TODO: Follow aliases?