📄 gfeinvertor.cpp
字号:
// GFEInvertor.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
//printf("NOTE: To use this program to generate VerilogHDL File of GF(2^m) Invertor, You have to
// run GFEMultiplierTaps.exe to get files of GF(2^m) Multiplier first.\n\n");
unsigned int primepolynom[9]={0,0x3,0x7,0xb,0x13,0x25,0x43,0x89,0x11d};
int m=0;
printf("GF(2^m) 's dimension m is(2~8):");
while (true) {
scanf("%d", &m);
if (m>1 && m<9) break;
else printf("m Must Be An Integer Of Range [2,8]\n");
}
/*
char fname[]="GF8Invertor.v", strGFMul[]="GF8Mul";
fname[2]='0'+m; strGFMul[2]='0'+m;
FILE* fp=fopen(fname, "w");
fname[11]=0;
fprintf(fp, "module %s(A, C);\n", fname);
fprintf(fp, "input [%d : 0] A;\n", m-1);
fprintf(fp, "output [%d : 0] C;\n\n", m-1);
fprintf(fp, "wire [%d : 0] pows;\n", m*(m-1)-1);
if (m>2) {
fprintf(fp, "wire [%d : 0] mulO;\n", m*(m-1)-1);
fprintf(fp, "%s(A,A, pows[%d : 0]);\n", strGFMul,m-1);
for (int i=1; i<m-1; i++) {
fprintf(fp, "%s(pows[%d : %d],pows[%d : %d], pows[%d : %d]);\n", strGFMul,
m*i-1, m*(i-1), m*i-1, m*(i-1), m*(i+1)-1, m*i);
}
fprintf(fp, "assign mulO[%d:0]=pows[%d:0];\n", m-1,m-1);
for (i=1; i<m-1; i++) {
fprintf(fp, "%s(mulO[%d : %d], pows[%d : %d], mulO[%d : %d]);\n", strGFMul,
m*i-1,m*(i-1), m*(i+1)-1,m*i, m*(i+1)-1,m*i);
}
fprintf(fp, "assign C=mulO[%d : %d];\n", m*(m-1)-1,m*(m-2));
}
else {
fprintf(fp, "%s(A,A, C);\n");
}
*/
typedef unsigned char byte;
int N=(1<<m)-1;
byte *Pow2Vec=(byte*)malloc(sizeof(byte)*N);
Pow2Vec[0]=1;
for (int i=1; i<N; i++)
{
if ((Pow2Vec[i-1]>>(m-1))!=0) Pow2Vec[i]=(Pow2Vec[i-1]<<1)^primepolynom[m];
else Pow2Vec[i]=(Pow2Vec[i-1]<<1);
}
char fname[]="GF8Invertor.v";
fname[2]='0'+m;
FILE* fp=fopen(fname, "w");
fname[11]=0;
fprintf(fp, "module %s(A, C);\n", fname);
fprintf(fp, "input [%d : 0] A;\n", m-1);
fprintf(fp, "output [%d : 0] C;\n\n", m-1);
fprintf(fp, "reg [%d : 0] tc;\n", m-1);
fprintf(fp, "assign C=tc;\n");
fprintf(fp, "always@(A)\nbegin\n case(A)\n 0:\n tc<=0;\n");
fprintf(fp, " %d'd1:\n", m);
fprintf(fp, " tc<=%d'd1;\n", m);
for (i=1; i<N; i++)
{
fprintf(fp, " %d'd%d:\n", m,Pow2Vec[i]);
fprintf(fp, " tc<=%d'd%d;\n", m,Pow2Vec[N-i]);
}
fprintf(fp, " endcase\nend\n\nendmodule\n");
fclose(fp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -