⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firgen.cpp

📁 產生你所需要的FIR濾波器
💻 CPP
字号:
///////////////////////////////////////////////////////////////// Automatic FIR Generator Tool                              //// Used to generate optimized FIR Filters/Corelators         //// using Nonrecursive Signed Common Subexpression Algorithm  ///////////////////////////////////////////////////////////////////// Writer      : Boris Kipnis// Last Update : 5/5/2005// Last Update : 8/5/2005 - parisng using popt//#include <vector>#include <string>#include <popt.h>#include <stdio.h>#include "MultGen.h"#include "FirGenCode.h"#include <sys/time.h>///////////////////////////////////////////////////////////////// Convert String Line [int,int,int] to Integer Vector Arrayvector<int> StrLine2CoefArray(string strLineIn) {	vector<int> ar;	string str;	char ch;	int temp;		str="";	for (int i=0;i<strLineIn.size();i++) {		ch=strLineIn[i];		str += ch;		if (ch==',') {			sscanf(str.c_str(),"%d",&temp);            ar.push_back(temp);            str = "";		}	}        // Scan Last Expression if exist    if (str.size()>0) {       sscanf(str.c_str(),"%d",&temp);       ar.push_back(temp);    }			return(ar);}/*int GenFir(string fname,int inDataWidth,vector<int> multVector) {		int pm_flag;	int i,j;	vector<int> ar;	int dublicateFlag = 0;		// Find +/- coefitions	for (i=0;i<multVector.size();i++) {		dublicateFlag = 0;		for (j=i+1;j<multVector.size();j++) {			if (multVector[i]==(-1)*multVector[j]) {				pm_flag = 1; // Set PM FLAG				dublicateFlag = 1;			} 		}		if (!dublicateFlag) {			printf("%d,",multVector[i]);		}	}}*//////////////////////////////////////////////                MAIN                   /////////////////////////////////////////////int main(int argc,char *argv[]) {   int temp;  int i;  int result;  vector<int> ar;  int inDataWidth = 0;  char testStr[] = "10";  char *fname;  char* coef_str;  char c;    int gen_Fir_nMult = 1;  int gen_AsyncMult = 0;  int gen_ClkEn     = 0;    MultGen* mMultGen;  FirGenCode* mFirGen;    string params_str;     struct poptOption myOptions[] = {  	{ "input_width", 'w', POPT_ARG_INT, &inDataWidth,1,  		                                    "Input Data Width", "16"},  	{ "multiply_only", 'm', 0, 0, 2,  		                                    "Generate Only Multipliers Array","zzz"},  	{ "async_mult", 'a', 0, 0, 3,  		                                    "Generate Asynchronus Multipliers Array","zzz"},  	{ "clk_en", 'e', 0, 0, 4,  		                                    "Use CLK Enable Signal","zzz"},  	{ "coef", 'c', POPT_ARG_STRING, &coef_str, 5,  		                                    "filter coefitions", "1234,4535,5656,.."},  	{ "out", 'o', POPT_ARG_STRING, &fname, 6,  		                                    "Output File Name (.VHD Extension not needed)", "fir_test"},    POPT_AUTOHELP    POPT_TABLEEND  };  poptContext optCon;  cout << "FIR Filter /Multiplication Array Optimization Programm  \r\n";  cout << "VHDL File Generator\r\n";  cout << "Writed by : Boris Kipnis\r\n";  cout << "----------------------------\r\n";    inDataWidth = -1;  coef_str = NULL;  fname = NULL;  optCon = poptGetContext(NULL,argc,(const char**)argv,myOptions,0);  gen_Fir_nMult = 1;  gen_AsyncMult = 0;  gen_ClkEn = 0;    while ((c = poptGetNextOpt(optCon)) >= 0) {  	if (c==2) gen_Fir_nMult = 0;  	if (c==3) {  	   gen_AsyncMult = 1;  	   gen_Fir_nMult = 0;  	   cout << "JOPA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n";  	}  	if (c==4) gen_ClkEn = 1;  }    if ((inDataWidth<=0)||(coef_str==NULL)||(fname==NULL)) {  	printf("ERROR Invalid Input parameters\r\n");  	printf("Run -? option for more information");  	return(1);  }  time_t tt;  struct tm ut;    tt = time(NULL);  localtime_r(&tt, &ut);  cout << "Date - " << ut.tm_mday << "/" << ut.tm_mon+1 << "/" << (1900+ut.tm_year) << "\r\n";  cout << "Time - "<< ut.tm_hour << ":" << ut.tm_min << ":" << ut.tm_sec << "\r\n";  printf("Data Width %d\r\n",inDataWidth);  ar = StrLine2CoefArray(coef_str);  // Print Arguments  printf("Using following COEF:");  for (i=0;i<ar.size();i++) {    printf("%d,",ar[i]);  }  printf("\r\n");  params_str = "arguments:";  for (i=0;i<argc-1;i++) {   	 params_str += " ";   	 params_str += argv[i+1];   }    ////////////////////////////////////////////////////////////////////  if (gen_Fir_nMult==0) {  	 printf("Generate Multiplier Array");     mMultGen = new MultGen(fname,inDataWidth,ar,gen_ClkEn,gen_AsyncMult,params_str);     delete mMultGen; // erase the class and save VHDL file  } else {     printf("Generate FIR Filter");     mFirGen = new FirGenCode(fname,inDataWidth,ar,gen_ClkEn,params_str);     delete mFirGen;  }     ////////////////////////////////////////////////////////////////////  // FREE Memory  ar.clear(); // remove aray  printf("The END\r\n");  //     return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -