首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ASCII代码转换为Verilog语言中的字符

如何将ASCII代码转换为Verilog语言中的字符
EN

Stack Overflow用户
提问于 2019-12-01 20:41:18
回答 2查看 2.3K关注 0票数 0

我一直在调查这个问题,但是搜索似乎没有任何结果。它可能太简单,无法描述,但我在这里,抓我的头…任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-12-01 21:11:42

Verilog知道“字符串”。

单个ASCII字符需要8位。因此,要存储8个字符,您需要64位:

代码语言:javascript
复制
wire [63:0] string8;

assign string8 = "12345678";

这里有一些陷阱:

RHS没有字符串结尾字符(像C null-character)

  • The一样,大多数
  • 字符都在7:0位。

因此,字符串87:0将保持8h'38。(“8”)。要遍历必须使用的字符串,必须使用:string[ index +: 8];

  • As

  • 所有Verilog向量赋值:未使用的位被设置为零,因此

assign string8 = "ABCD"; // MS bit63:32 are zero

  • You can not use二维数组:

wire [7:0] string5 [0:4]; assign string5 = "Wrong";

票数 0
EN

Stack Overflow用户

发布于 2019-12-02 11:53:54

你可能被对字符的误解所误导了。在硬件中没有角色这回事。只有几组比特或代码。唯一能将二进制码转换成字符的就是你的终端。它以某种方式解释代码,并形成字母供你使用。因此,'c‘中的所有printfs和verilog中的$display只将代码发送到终端(或文件)。

把字符转换成代码的就是你的键盘,你也可以用它在程序中打字。然后编译器解释你的程序。Verilog (以及'c')编译器将双引号中的字符串(您键入的)直接表示为一组字节。Verilog,以及'c‘对这样的字符串使用ascii-8编码,这意味着'a’的代码是十进制97,'b‘是98,...每个字符都是8位宽,带引号的字符串形成了ascii代码的字节级联。

因此,在回答您的问题时,您可以使用%s修饰符通过$display (或其他)函数将ascii代码发送到终端,从而将ascii代码转换为字符。

所以,举个例子:

代码语言:javascript
复制
module A;
    reg[8*5-1:0] hello; 
    reg[8*3 - 1: 0] bye;
    initial begin
       hello = "hello"; // 5 bytes of characters
       bye = {8'd98, 8'd121, 8'd101}; // 3 bytes 'b' 'y' 'e'
       $display("hello=%s bye=%s", hello, bye);
    end
endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59125591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档