爱学习的小二哥 2016-04-11 00:27 采纳率: 66.7%
浏览 702
已结题

求助大神c程序的verilog写法

将下列c程序改为verilog程序
#include
#include

int f0(int, int, int);
int f1(int, int, int);
int f2(int, int, int);
int f3(int, int, int);

int main(int argc, char ** argv)
{
unsigned int s[5]={0X12345678,0X23456789,0X3456789A,0X456789AB,0X56789ABC};
unsigned int h[4]={0X11223344,0X22334455,0X33445566,0X44556677};
unsigned int M[48];
unsigned int z,i;
unsigned int a, b, c, d, e;
unsigned int U;
FILE *source, *result;

/* for(z=0;z<8;z++)
{
printf("%d\n", z);
scanf("%x",&M[z]);
}
*/
if(argc != 3){
printf("Usage: rng source_file result_file.\n");
return 1;
}

if((source = fopen(argv[1], "rb")) == NULL){
    printf("Error! Can't open %s for read. \n", argv[1]);
    return 1;
}

if((result = fopen(argv[2], "wb")) == NULL){
    printf("Error! Can't open %s for write. \n", argv[2]);
    return 1;
}   

while(!feof(source)){

    for(z=0;z<8;z++)
    {
        fscanf(source, "%x", &M[z]);
        printf("Data readed is %08X\n", M[z]);
        //fread(&M[z], sizeof(unsigned int), 1, source); 
    }

    for(z=8;z<48;z++)
    {
        M[z]=((M[z-1]^M[z-2]^M[z-5]^M[z-8])<<1)|((M[z-1]^M[z-2]^M[z-5]^M[z-8])>>31);
        printf("M[%d] is %08X \n", z, M[z]);
    }

    a = h[0];
    b = h[1];
    c = h[2];
    d = h[3];

    for(z=0;z<48;z++)
    {
        e = (c<<3)|(c>>29);

        switch(z%4){
            case 0:
                U = f0(a,b,e)+d+M[z]+s[z%5];
                break;     
            case 1:            
                U = f1(a,b,e)+d+M[z]+s[z%5];
                break;     
            case 2:            
                U = f2(a,b,e)+d+M[z]+s[z%5];
                break;     
            case 3:            
                U = f3(a,b,e)+d+M[z]+s[z%5];
                break;
            default:
                printf("Error!\n");
                return 1;
        }

        d = c;
        c = b;
        b = (a<<23)|(a>>9);
        a = U;

        //if(z == 46){
            printf("z=%d : ", z);
            printf("%08X", d);
            printf("%08X", c);
            printf("%08X", b);
            printf("%08X", a);
            printf("\n");
        //}

    }

    h[0] = h[0]+a; 
    h[1] = h[1]+b; 
    h[2] = h[2]+c; 
    h[3] = h[3]+d; 

    for(z=0;z<4;z++)
    {
        printf("%08X", h[z]);
    }
    printf("\n");

    printf("%08X", d);
    printf("%08X", c);
    printf("%08X", b);
    printf("%08X", a);
    printf("\n");

    for(z=0;z<4;z++)
    {
        fprintf(result, "%08X\n", h[z]);
    }
    printf("\n");

    //printf("s4 is %X\n", s[4]^s[0]);
    //printf("s4 is %X\n", ((s[4]<<1)|(s[4]>>31)));

}   //while

fclose(source);
fclose(result);

return 0;

}

int f0(int a , int b, int c)
{
return a^b^c;

}

int f1(int a , int b, int c)
{
return (a&b)|(~a&c);

}

int f2(int a , int b, int c)
{
return a^(b|~c);

}

int f3(int a , int b, int c)
{
return (a&b)|(b&c)|(c&a);

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 opencv 无法读取视频
    • ¥15 用matlab 实现通信仿真
    • ¥15 按键修改电子时钟,C51单片机
    • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
    • ¥20 5037端口被adb自己占了
    • ¥15 python:excel数据写入多个对应word文档
    • ¥60 全一数分解素因子和素数循环节位数
    • ¥15 ffmpeg如何安装到虚拟环境
    • ¥188 寻找能做王者评分提取的
    • ¥15 matlab用simulink求解一个二阶微分方程,要求截图