📄 gfeconsmultaps.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 + -