2010-11-09 230 views
0

我正在寻找一个Verilog函数来将我的ASCII输入字符串转换为十六进制输出。我不确定我是否可以在C中使用Verilog来完成它。到目前为止,我可以用打印的输入ASCII字符串为十六进制值:verilog中ascii-hex转换

printf("Hexadecimal Output for <CALL-ID>: "); 
for(c = 0; c < strlen(callid); c++) 
{ 
    printf("TO: %x ", callid[c]); 
} 

有没有办法来保存输出文本/ CSV文件,并使其对我的Verilog代码片段访问?

或者请让我知道在Verilog中是否有更简单的方法?

+1

完全不相关,但是您应该避免每次循环迭代时调用'strlen()'。 'strlen()'不是O(1)操作。你应该改为'size_t max = strlen(callid); for(c = 0; c 2010-11-09 06:53:34

+1

@Chris:你的建议有帮助,但仍然很愚蠢。相反,将环路条件从'c 2010-11-09 07:25:09

+1

您是否试图用ASCII字符驱动verilog总线? – Marty 2010-11-09 16:01:41

回答

1

输出到一个文本文件,你可以做这样的事情:

static int string_to_hex_file(const char *filename, const char *string) 
{ 
    FILE   *out; 
    const char  *s; 

    if((out = fopen(filename, "w")) == NULL) 
     return 0; 

    fprintf(out, "\"%s\", ", string); 
    for(s = string; *s; s++) 
    { 
     if(s != string) 
      fprintf(out, ", "); 
     fprintf(out, "0x%02x", (unsigned char) *s); 
    } 
    fprintf(out, "\n"); 

    fclose(out); 
    return 1; 
} 

样品输出string == "this is a test"

"this is a test", 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74 

错误检查当然可以改善,那么您可能需要调整输出格式以适应您的需求。