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

📄 gfeconsmultaps.cpp

📁 用于生成GF(2^m)有限域中常数乘法器的Verilog HDL源文件的C程序
💻 CPP
字号:
// GFEMultiplierTaps.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

int main(int argc, char* argv[])
{
	typedef unsigned int UINT;
	UINT primepolynom[9]={0,0x3,0x7,0xb,0x13,0x25,0x43,0x89,0x11d};
	int m=0;
	printf("GF(2^m) 's dimension m is(1~8):");
	while (true) {
		scanf("%d", &m);
		if (m>0 && m<9) break;
		else printf("m Must Be An Integer Of Range [1,8]\n");
	}
	char oprEqual[8]="=", oprAdd[8]="^";
	//printf(" + :"); scanf("%s", oprAdd);
	//printf(" = :"); scanf("%s", oprEqual);
	int LenPerTerm=6+strlen(oprAdd);

	char **tapC=(char**)malloc(sizeof(char*)*m), index[2]="0";
	UINT *tapMask=(UINT*)malloc(sizeof(UINT)*m);
	int i, j, k;
	for (i=0; i<m; i++) {
		tapC[i]=(char*)malloc(sizeof(char)*LenPerTerm*m);
		if (i==0) tapMask[0]=0x01; else tapMask[i]=(tapMask[i-1]<<1);
	}

	k=0;
	FILE *fp;
	char filename[]="GF8ConstMul_A1023.v", powNum[]="1023";
	for (UINT mask=0x02; mask!=0x01; mask=((mask>>(m-1))!=0? (mask<<1)^primepolynom[m] : mask<<1)) {
		k++;
		filename[13]=0;
		filename[2]='0'+m;
		strcat(filename, itoa(k, powNum, 10));
		//strcat(filename, ".vhd");
		strcat(filename, ".v");
		fp=fopen(filename, "w");
		/*
		fprintf(fp, "Library ieee;\nuse ieee.std_logic_1164.all;\nuse ieee.std_logic_unsigned.all;\n\n");
		fprintf(fp,	"Entity GF%dConstMul_A%d is\nPort(\n", m,k);
		fprintf(fp, "  A: in std_logic_vector(%d downto 0);\n", m-1);
		fprintf(fp, "  C: out std_logic_vector(%d downto 0)\n);\n", m-1);
		fprintf(fp, "End GF%dConstMul_A%d;\n\n", m,k);
		*/
		fprintf(fp,	"module GF%dConstMul_A%d (A,C);\n", m,k);
		fprintf(fp, "input  [%d:0] A;\n", m-1);
		fprintf(fp, "output  [%d:0] C;\n", m-1);
		
		for (i=0; i<m; i++) {
			tapMask[i]<<=1;
			if ((tapMask[i]>>m)!=0) tapMask[i]^=primepolynom[m];
			tapC[i][0]=0;
		}
		for (i=0; i<m; i++) {
			//C[i]
			for (j=0; j<m; j++) {
				//A[j]
				if (((tapMask[j]>>i) & 0x01)!=0) {
					if (tapC[i][0]!=0) strcat(tapC[i], oprAdd);
					//strcat(tapC[i], " A(");
					strcat(tapC[i], " A[");
					index[0]='0'+j;
					strcat(tapC[i], index);
					//strcat(tapC[i], ") ");
					strcat(tapC[i], "] ");
				}
			}
		}

		//fprintf(fp, "Architecture behave of GF%dConstMul_A%d is\nBegin\n", m,k);		
		printf("\n");
		for (i=0; i<m; i++) {
			/*
			printf("C(%d)%s%s;\n", i, oprEqual, tapC[i]);
			fprintf(fp,"C(%d)%s%s;\n", i, oprEqual, tapC[i]);
			*/
			printf("  assign C[%d]%s%s;\n", i, oprEqual, tapC[i]);
			fprintf(fp,"  assign C[%d]%s%s;\n", i, oprEqual, tapC[i]);
		}
		//fprintf(fp, "End behave;\n");
		fprintf(fp, "endmodule\n");
		fclose(fp);
	}
	return 0;
}

⌨️ 快捷键说明

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