Verilog自动生成例化模块端口程序
程序员文章站
2022-07-14 23:21:37
...
因为要频繁例化模块,而手写很麻烦,所以用C++写了个简单的程序,自动生成例化模块端口。
目录
1.输入
需要先把定义的模块端口号copy到一个txt文件auto_ins.txt,输入格式很重要,如图1
2.输出
用dev-c++运行程序,或者直接双击工程目录的exe,会有有个窗口一闪而过,然后就可以打开生成的文件auto_ins_output.txt查看生成的例化文件了。
工程文件见:
链接:https://pan.baidu.com/s/1wvTXHLaEv9QTSo3CUJjtFg 提取码:hlyh
运行结果:
3.程序源码
有什么不对的,或者需要改进的地方请直接留言!
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int MAX = 100;
int main()
{
string curr_line;
char get_line[MAX];
int line_cnt=0;
int i=0,k=0,space=0,line_len=0;
int last_line=0; //最后一行的标志位
ifstream fin;
fin.open("auto_ins.txt");
ofstream fout("auto_ins_output.txt");
//逐行读取并输出
while(getline(fin, curr_line))
{
line_cnt++;
line_len=curr_line.length();
for(i=line_len-1;i>=0;--i)
{
if(curr_line[i]==' ')
{
space=i;
if(line_cnt==1) //第一行是模块名
{
for(int j=space+1;j<line_len-1;j++)
fout<<curr_line[j];
fout<<" ";
for(int j=space+1;j<line_len-1;j++)
fout<<curr_line[j];
fout<<"_u(";
}
else //其他行
{
for(k=line_len-1;k>=0;--k)
{
if(curr_line[k]==';') last_line=1;
if(curr_line[k]==',') break;
}
if((k<0)&&(last_line==0)) //倒数第2行没有“,”
{
fout<<".";
for(int j=space+1;j<line_len;j++)
fout<<curr_line[j];
fout<<"( )";
}
else if(last_line==1) //倒数第一行
{
fout<<");";
}
else //中间某一行
{
fout<<".";
for(int j=space+1;j<line_len-1;j++)
fout<<curr_line[j];
fout<<"( ),";
}
}
break;
}
}
fout<<endl;
}
fin.close();
fout.close();
return 0;
}
推荐阅读