概述
因为要频繁例化模块,而手写很麻烦,所以用C++写了个简单的程序,自动生成例化模块端口。
只需要按照下面的格式将模块端口复制到文件里,双击exe可生成自动例化后的端口,方便快捷!
2019.7.23版本1.0
2019.8.27版本2.0 升级内容:重构程序算法,对输入格式更宽容
1.加入带有parameter的,输出忽略parameter
2.任意一行允许有空格,包括位宽与端口名、端口名之后及逗号之后有无空格都可以
3.加入自动定义输相同的出端口名,并填充输出端口的括号
4.允许有reg定义。
1.0版本被我删掉了,现在看到的是2.0版本的。
目录
1.输入
2.输出
3.程序源码
1.输入
需要先把定义的模块端口号copy到一个txt文件auto_ins.txt,输入格式示例,如图1
注意格式。
2.输出
用dev-c++运行程序,或者直接双击工程目录的exe,会有有个窗口一闪而过,然后就可以打开生成的文件auto_ins_output.txt查看生成的例化文件了。
运行结果:
3.程序源码及可运行exe文件
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
bool jdg_val(char a) //判断字符合法性:是否是端口名或者模块名
{
if((a>='0'&&a<='9')||(a>='A'&&a<='Z')||(a>='a'&&a<='z')||(a=='_'))
return true;
else
return false;
}
int main()
{
string curr_line;
char str_arr[200];
int i,k;
int position;
ifstream fin;
fin.open("auto_ins.txt");
ofstream fout("auto_ins_output.txt");
while(getline(fin,curr_line))
{
if(curr_line.find("output ")!=curr_line.npos)//找到
{
str_arr[0]='w';str_arr[1]='i';str_arr[2]='r';str_arr[3]='e';str_arr[4]=' ';
i=5;
//允许output与端口名之间有多空格
if(curr_line.find("[")!=curr_line.npos) //如果有位宽定义,且位宽与端口名之间有无空格都可
{
position= curr_line.find("[");
while(curr_line[position]!=']')str_arr[i++] = curr_line[position++];
str_arr[i++]=']';str_arr[i++]=' ';
position++;
}
else if(curr_line.find(" reg ")!=curr_line.npos)
position=curr_line.find(" reg ")+5;//有reg定义
else
position=curr_line.find("output ")+7;//没有有位宽定义
while(jdg_val(curr_line[position])==false)position++;
while(jdg_val(curr_line[position])==true)str_arr[i++] = curr_line[position++];
str_arr[i]=';';str_arr[i+1]='