UNPKG

signalflip-js

Version:

[![npm version](https://badge.fury.io/js/signalflip-js.svg)](https://badge.fury.io/js/signalflip-js) [![Build Status](https://travis-ci.com/ameetgohil/signalflip-js.svg?branch=master)](https://travis-ci.com/ameetgohil/signalflip-js) [![CI](https://github.

151 lines (123 loc) 3.6 kB
const _ = require('lodash'); var test_str = ` module test ( input wire[7:0] data, input wire valid, input wire ready, output wire sig1, output reg[31.0] sig2, input clk, rst ); `; var test_str2 = ` module top_elastic ( input [31:0] t0_data, input t0_valid, output t0_ready, output [31:0] i0_data, output i0_valid, input i0_ready, input clk, input rstf ); wire t0_ready; reg [31:0] i0_data; reg i0_valid; logic data_en; assign t0_ready = ~rstf ? 0:~i0_valid | i0_ready; assign data_en = t0_valid & t0_ready; always @(posedge clk or negedge rstf) begin if(!rstf) begin i0_data <= 0; i0_valid <= 0; end else begin if(data_en) i0_data <= t0_data<<2; i0_valid <= ~t0_ready | t0_valid; end end endmodule `; //let str2 = `[ sdlk ]`; //let re = /\(([^)]+)\,/; //let re2 = /\(([^)]+)\)/; //let re3 = /\(([^ ]+) (.|\n)\s/m; //console.log(str); //console.log(first_sig_re.exec(module)); //console.log(re3.exec("input ( dsd wire")); //console.log(re4.exec(module)); //console.log(module); //console.log(e); //console.log(':::last: ', (e.replace(remove_new_line)).match(last_word)); //console.log(':::last: ', " output reg[31.0] sig2\n".match(last_word)); //console.log(e.localeCompare(" output reg[31.0] sig2")); //console.log(e); //console.log(brackets.exec(e)); //console.log("[32:3] sig2".match(/\d+/g)); //get_width.exec("32 3")); function get_signal_names(str) { let last_word = /\b(\w+)$/g; let brackets = /\[([^\]]+)]/; let between_parentheses = / *\(([^\)]*)\)/; let get_width = /\d+/g;///^[0-9]+(,[0-9]+)*$/; let modulere = /module *([^ ]*) *\(([^\)]*)\)/g; let modulereParams = /module *([^ ]*)\s*#\s*\(([^\)]*)\)\s*\(([^\)]*)\)/g; let remove_new_line = /\n/g; let returnObj = []; //console.log(modulere.exec(str)); //console.log(_.isEqual(str, test_str2)); //console.log(_.differenceWith(str, test_str2, _.isEqual)); //console.log(str.search(between_parentheses)); //console.log(str.search(modulere)); let module_arr = modulere.exec(str); // let module_name_index = 0; if(module_arr === null) { console.log('Trying params version'); module_arr = modulereParams.exec(str); // console.log(module_arr); // module_name_index = 3; } if(module_arr !== null) { let port_str = module_arr[module_arr.length-1]; // let port_str = between_parentheses.exec(module)[1]; //console.log(module); //console.log(port_str); let port_str_one_line = port_str.replace(/\n/g, ' '); let s = port_str_one_line.split(","); let width; let name; let dir; s.map((e) => { let obj = {}; //console.log(e); if(e.search('input') > 0) { dir = 'input'; width = 1; } else if(e.search('output') > 0) { dir = 'output'; width = 1; } else if(e.search('inout') > 0) { dir = 'inout'; width = 1; } if(e.search(brackets) > 0) { let vector = brackets.exec(e)[1]; let vector_array = vector.match(get_width); width = parseInt(vector_array[0])-parseInt(vector_array[1]) + 1; } name = e.trim().match(last_word)[0]; obj['name'] = name; obj['width'] = width; obj['dir'] = dir; returnObj.push(obj); }); //console.log(returnObj); return returnObj; } else { console.log("problem parsing module name, are you using parameters?"); } } // console.log(get_signal_names(test_str2)); module.exports = get_signal_names;