2010-11-09 3 views
0

Я искал функцию Verilog для преобразования входных строк ASCII в шестнадцатеричный вывод. Я не уверен, смогу ли я сделать это на C и клуб с Verilog. До сих пор я был в состоянии напечатать ввод ASCII строки в виде шестнадцатеричных значений с помощью:ascii-hex conversion in verilog

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

+1

@ Крис: Ваш совет помогает, но это все равно глупо. Вместо этого измените условие цикла с 'c

+1

Вы пытаетесь управлять шиной verilog с символами ASCII? – Marty

ответ

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 

Проверка ошибок, конечно, может быть улучшена, и вы, вероятно, потребуется чтобы настроить выходное форматирование в соответствии с вашими потребностями.