欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Verilog自动生成例化模块端口程序

程序员文章站 2022-07-14 23:21:37
...

因为要频繁例化模块,而手写很麻烦,所以用C++写了个简单的程序,自动生成例化模块端口。

目录

1.输入

2.输出

3.程序源码


1.输入

需要先把定义的模块端口号copy到一个txt文件auto_ins.txt,输入格式很重要,如图1

Verilog自动生成例化模块端口程序
图1 输入格式要求

2.输出

用dev-c++运行程序,或者直接双击工程目录的exe,会有有个窗口一闪而过,然后就可以打开生成的文件auto_ins_output.txt查看生成的例化文件了。

工程文件见:
链接:https://pan.baidu.com/s/1wvTXHLaEv9QTSo3CUJjtFg   提取码:hlyh 
运行结果:

Verilog自动生成例化模块端口程序
图2 运行结果

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;
}