Make blif cppcheck clean

This commit is contained in:
Cary R 2026-01-25 12:10:14 -08:00
parent 67e48188a9
commit 7916ae3c49
9 changed files with 83 additions and 52 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -42,7 +42,8 @@ static int do_print_logic_gate(FILE*fd, ivl_net_logic_t net, unsigned bit)
ivl_nexus_t nex_out = ivl_logic_pin(net,0);
blif_nex_data_t*ned_out = blif_nex_data_t::get_nex_data(nex_out);
assert(ned_out->get_width() > bit);
size_t o_wid = ned_out->get_width();
assert(o_wid > bit);
fprintf(fd, ".names");
for (unsigned idx = 1 ; idx < ivl_logic_pins(net) ; idx += 1) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -38,9 +38,12 @@ int print_lpm_add(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(ivl_lpm_width(net) == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(ivl_lpm_width(net) == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
// Q[0] = A[0] ^ B[0]
fprintf(fd, ".names %s%s %s%s %s%s\n"
@ -114,9 +117,12 @@ int print_lpm_sub(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(ivl_lpm_width(net) == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(ivl_lpm_width(net) == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
// Q[0] = A[0] ^ ~B[0] ^ 1
fprintf(fd, ".names %s%s %s%s %s%s\n"

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -38,9 +38,12 @@ int print_lpm_cmp_eq(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(1 == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(1 == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
if (ivl_lpm_width(net) == 1) {
fprintf(fd, ".names %s%s %s%s %s%s\n"
@ -89,9 +92,12 @@ int print_lpm_cmp_ne(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(1 == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(1 == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
if (ivl_lpm_width(net) == 1) {
fprintf(fd, ".names %s%s %s%s %s%s\n"

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -31,9 +31,12 @@ static int print_lpm_cmp_gt_s(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(1 == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(1 == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
// This is true if the operator is GE instead of just GT.
bool ge_flag = ivl_lpm_type(net)==IVL_LPM_CMP_GE;
@ -67,9 +70,12 @@ static int print_lpm_cmp_gt_u(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*a_ned = blif_nex_data_t::get_nex_data(a_nex);
blif_nex_data_t*b_ned = blif_nex_data_t::get_nex_data(b_nex);
assert(1 == q_ned->get_width());
assert(ivl_lpm_width(net) == a_ned->get_width());
assert(ivl_lpm_width(net) == b_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t a_wid = a_ned->get_width();
size_t b_wid = b_ned->get_width();
assert(1 == q_wid);
assert(ivl_lpm_width(net) == a_wid);
assert(ivl_lpm_width(net) == b_wid);
// This is true if the operator is GE instead of just GT.
bool ge_flag = ivl_lpm_type(net)==IVL_LPM_CMP_GE;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -46,12 +46,16 @@ static int print_lpm_mux_s1(FILE*fd, ivl_lpm_t net)
fprintf(fd, "# IVL_LPM_MUX ivl_lpm_width(net)=%u, Q=%s, D0=%s, D1=%s\n",
ivl_lpm_width(net), ned_out->get_name(), ned_d0->get_name(), ned_d1->get_name());
assert(ivl_lpm_width(net) == ned_out->get_width());
assert(ivl_lpm_width(net) == ned_d0->get_width());
assert(ivl_lpm_width(net) == ned_d1->get_width());
size_t o_wid = ned_out->get_width();
size_t d0_wid = ned_d0->get_width();
size_t d1_wid = ned_d1->get_width();
assert(ivl_lpm_width(net) == o_wid);
assert(ivl_lpm_width(net) == d0_wid);
assert(ivl_lpm_width(net) == d1_wid);
// Only support single-bit select
assert(ned_sel->get_width() == 1);
size_t s_wid = ned_sel->get_width();
assert(1 == s_wid);
for (unsigned idx = 0 ; idx < ivl_lpm_width(net) ; idx += 1) {
fprintf(fd, ".names %s%s %s%s %s%s %s%s\n"

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -40,7 +40,8 @@ int print_lpm_part_vp(FILE*fd, ivl_lpm_t net)
ivl_nexus_t nex_out = ivl_lpm_q(net);
blif_nex_data_t*ned_out = blif_nex_data_t::get_nex_data(nex_out);
assert(ivl_lpm_width(net) == ned_out->get_width());
size_t o_wid = ned_out->get_width();
assert(ivl_lpm_width(net) == o_wid);
// Only handle constant part select base.
assert(ivl_lpm_data(net,1) == 0);
@ -49,7 +50,8 @@ int print_lpm_part_vp(FILE*fd, ivl_lpm_t net)
ivl_nexus_t nex_in = ivl_lpm_data(net,0);
blif_nex_data_t*ned_in = blif_nex_data_t::get_nex_data(nex_in);
assert(bit_sel < ned_in->get_width());
size_t i_wid = ned_in->get_width();
assert(bit_sel < i_wid);
for (unsigned idx = 0 ; idx < ivl_lpm_width(net) ; idx += 1) {
fprintf(fd, ".names %s%s %s%s # %s:%u\n1 1\n",
@ -70,7 +72,8 @@ static int print_part_vp_mux(FILE*fd, ivl_lpm_t net)
blif_nex_data_t*ned_out = blif_nex_data_t::get_nex_data(nex_out);
// Only handle bit selects.
assert(ned_out->get_width() == 1);
size_t o_wid = ned_out->get_width();
assert(1 == o_wid);
ivl_nexus_t nex_in = ivl_lpm_data(net,0);
blif_nex_data_t*ned_in = blif_nex_data_t::get_nex_data(nex_in);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013 Stephen Williams (steve@icarus.com)
* Copyright (c) 2013-2026 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -40,24 +40,26 @@ int print_lpm_re_logic(FILE*fd, ivl_lpm_t net)
ivl_nexus_t nex_d = ivl_lpm_data(net,0);
blif_nex_data_t*ned_d = blif_nex_data_t::get_nex_data(nex_d);
assert(ned_q->get_width() == 1);
size_t q_wid = ned_q->get_width();
assert(1 == q_wid);
size_t d_wid = ned_d->get_width();
fprintf(fd, ".names");
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1) {
for (size_t idx = 0 ; idx < d_wid ; idx += 1) {
fprintf(fd, " %s%s", ned_d->get_name(), ned_d->get_name_index(idx));
}
fprintf(fd, " %s%s\n", ned_q->get_name(), ned_q->get_name_index(0));
switch (ivl_lpm_type(net)) {
case IVL_LPM_RE_AND:
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1)
for (size_t idx = 0 ; idx < d_wid ; idx += 1)
fputc('1', fd);
fprintf(fd, " 1\n");
break;
case IVL_LPM_RE_OR:
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1) {
for (size_t wid = 0 ; wid < ned_d->get_width() ; wid += 1) {
for (size_t idx = 0 ; idx < d_wid ; idx += 1) {
for (size_t wid = 0 ; wid < d_wid ; wid += 1) {
if (wid==idx)
fputc('1', fd);
else
@ -68,12 +70,12 @@ int print_lpm_re_logic(FILE*fd, ivl_lpm_t net)
break;
case IVL_LPM_RE_XOR:
assert(ned_d->get_width() < 8*sizeof(unsigned));
for (unsigned val = 0; val < (1U<<ned_d->get_width()); val += 1) {
assert(d_wid < 8*sizeof(unsigned));
for (unsigned val = 0; val < (1U << d_wid) ; val += 1) {
if (! re_xor(val))
continue;
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1) {
for (size_t idx = 0 ; idx < d_wid ; idx += 1) {
if (val & (1<<idx))
fputc('1', fd);
else
@ -84,8 +86,8 @@ int print_lpm_re_logic(FILE*fd, ivl_lpm_t net)
break;
case IVL_LPM_RE_NAND:
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1) {
for (size_t wid = 0 ; wid < ned_d->get_width() ; wid += 1) {
for (size_t idx = 0 ; idx < d_wid ; idx += 1) {
for (size_t wid = 0 ; wid < d_wid ; wid += 1) {
if (wid==idx)
fputc('0', fd);
else
@ -96,18 +98,18 @@ int print_lpm_re_logic(FILE*fd, ivl_lpm_t net)
break;
case IVL_LPM_RE_NOR:
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1)
for (size_t idx = 0 ; idx < d_wid ; idx += 1)
fputc('0', fd);
fprintf(fd, " 1\n");
break;
case IVL_LPM_RE_XNOR:
assert(ned_d->get_width() < 8*sizeof(unsigned));
for (unsigned val = 0; val < (1U<<ned_d->get_width()); val += 1) {
assert(d_wid < 8*sizeof(unsigned));
for (unsigned val = 0; val < (1U << d_wid) ; val += 1) {
if (re_xor(val))
continue;
for (size_t idx = 0 ; idx < ned_d->get_width() ; idx += 1) {
for (size_t idx = 0 ; idx < d_wid ; idx += 1) {
if (val & (1<<idx))
fputc('1', fd);
else

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016 Yury Gribov (tetra2005@gmail.com)
* Copyright (c) 2016-2026 Yury Gribov (tetra2005@gmail.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -43,8 +43,10 @@ int print_lpm_shift(FILE*fd, ivl_lpm_t net, bool left)
size_t shiftw = s_ned->get_width();
bool signed_ = ivl_lpm_signed(net);
assert(dataw == q_ned->get_width());
assert(dataw == d_ned->get_width());
size_t q_wid = q_ned->get_width();
size_t d_wid = d_ned->get_width();
assert(dataw == q_wid);
assert(dataw == d_wid);
// TODO: output width can be larger than data

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016 Yury Gribov (tetra2005@gmail.com)
* Copyright (c) 2016-2026 Yury Gribov (tetra2005@gmail.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -41,7 +41,8 @@ int print_lpm_sign_ext(FILE*fd, ivl_lpm_t net)
//printf("Shift: LPM width = %u, output width = %zd, input width = %u\n", outw, q_ned->get_width(), inw);
assert(outw == q_ned->get_width());
size_t q_wid = q_ned->get_width();
assert(outw == q_wid);
assert(inw < outw);
for (unsigned idx = 0 ; idx < outw ; idx += 1) {