Skip to content

Commit

Permalink
初始提交
Browse files Browse the repository at this point in the history
  • Loading branch information
gracilaria0 committed Apr 1, 2024
1 parent 77a06c8 commit 27c2d86
Show file tree
Hide file tree
Showing 5 changed files with 194 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/release/

/.vscode/
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# CPU-Testing-Toolbox
面向verilog中央处理器的测试工具箱

《中央处理器测试工具箱》面向verilog语言开发的中央处理器,主要功能是把汇编得到的机器码转化成处理器中初始化指令内存的verilog语句。
131 changes: 131 additions & 0 deletions src/form.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void txt2v(int);
void reformv(int);
void changeMacro(int,FILE *,FILE *,char);
void addInclude(int,FILE *,FILE *);


int main(int argc,char *argv[])
{
int num = atoi(argv[1]);

txt2v(num);
reformv(num);

return 0;
}

void txt2v(int num)
{
int decCount=0, hexCount=0;

char writeName[32], readName[32], instrucion[16];
sprintf(readName,"../test%d/test%d.txt",num,num);
sprintf(writeName,"../test%d/test%d.v",num,num);

FILE *fileRead = fopen(readName,"r"),\
*fileWrite = fopen(writeName,"w");

fprintf(fileWrite,"`ifdef TEST%d\n",num);

while(!feof(fileRead))
{
if(fgets(instrucion,10,fileRead) && instrucion[0]!='\n')
{
instrucion[8] = ';';
instrucion[9] = '\n';
instrucion[10] = '\0';
fprintf(fileWrite," InstructionMemory[%3d/*%3x*/] <= 32'h%s",decCount++,hexCount,instrucion);
hexCount += 4;
}
}

fprintf(fileWrite,"`endif\n");

fclose(fileRead);
fclose(fileWrite);

return;
}

void reformv(int num)
{
char protoName[32];
sprintf(protoName,"../../code/InstructionMemory.v");

FILE *fileProto = fopen(protoName,"r"),
*fileTemp = fopen("../../code/temp.v","w");

changeMacro(num,fileProto,fileTemp,0);
addInclude(num,fileProto,fileTemp);
changeMacro(num,fileProto,fileTemp,1);

return;
}

void changeMacro(int num,FILE *fileProto,FILE *fileTemp,char isUndef)
{
size_t cpyLength;
char cmpStr[16],prtStr[32];
if(isUndef)
{
cpyLength = 11;
sprintf(cmpStr,"`undef TEST");
sprintf(prtStr,"`undef TEST%d\n",num);
}
else
{
cpyLength = 12;
sprintf(cmpStr,"`define TEST");
sprintf(prtStr,"`define TEST%d\n",num);
}

char proto[128], macro[16]={}, found=0;

while(!feof(fileProto))
{
fgets(proto,128,fileProto);

strncpy(macro,proto,cpyLength);
if(!strcmp(macro,cmpStr) && !found)
{
fprintf(fileTemp,"%s",prtStr);
if(!isUndef)
break;
else
found = 1;
}
else
{
fprintf(fileTemp,"%s",proto);
}
}

return;
}

void addInclude(int num,FILE *fileProto,FILE *fileTemp)
{
char proto[128], addTag[16]={}, found=0;

while(!feof(fileProto))
{
fgets(proto,128,fileProto);

strncpy(addTag,proto,11);
if(!strcmp(addTag,"//TEST CODE"))
{
fprintf(fileTemp,"//TEST CODE\n`include \"../test/test%d/test%d.v\"\n",num,num);
break;
}
else
{
fprintf(fileTemp,"%s",proto);
}
}

return;
}
18 changes: 18 additions & 0 deletions src/make.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@echo off

echo form test?.v
set /p var=?=

cd ..
md test%var%
move test%var%.asm test%var%\test%var%.asm
move test%var%.txt test%var%\test%var%.txt

cd toolbox
form %var%
echo verilog file formed

cd ..\..\code
move /y temp.v InstructionMemory.v

pause
38 changes: 38 additions & 0 deletions src/txt2v.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <stdio.h>

int main()
{
int num;
printf("form test?.v\n?=");
scanf("%d",&num);

int decCount=0, hexCount=0;

char writeName[32], readName[32], instrucion[16];
sprintf(readName,"test%d.txt",num,num);
sprintf(writeName,"test%d.v",num,num);

FILE *fileRead = fopen(readName,"r"),\
*fileWrite = fopen(writeName,"w");

fprintf(fileWrite,"`ifdef TEST%d\n",num);

while(!feof(fileRead))
{
if(fgets(instrucion,10,fileRead) && instrucion[0]!='\n')
{
instrucion[8] = ';';
instrucion[9] = '\n';
instrucion[10] = '\0';
fprintf(fileWrite," InstructionMemory[%3d/*%3x*/] <= 32'h%s",decCount++,hexCount,instrucion);
hexCount += 4;
}
}

fprintf(fileWrite,"`endif\n");

fclose(fileRead);
fclose(fileWrite);

return 0;
}

0 comments on commit 27c2d86

Please sign in to comment.