相关文章推荐
神勇威武的滑板  ·  ExcelVBA 宏 ...·  3 月前    · 
严肃的牙膏  ·  jquery fadein display ...·  10 月前    · 
有腹肌的卡布奇诺  ·  C# ...·  10 月前    · 

注:扫码关注小青菜哥哥的weixin公众号,免费获得更多优质的核探测器与电子学内容~

一个字符串(string)是由双引号 (" ") 括起来并包含在一行中的字符序列。在表达式和赋值中,用作操作数的字符串应被视为由8位ASCII值表示的无符号整数常量,每一个8位ASCII值表示一个字符。

字符串变量的声明:

字符串变量是wire/reg类型的变量,其宽度等于字符串中的字符数乘以8。

存储12个字符的字符串“Hello world!” ,我们需要 8 *12即96位宽

reg [8*12:1] stringvar;
initial begin
stringvar = "Hello world!";

字符串操作

我们可以使用Verilog的运算符来操作字符串,操作的值都是以8位ASCII值为一个整体。

module string_test;
reg [8*14:1] stringvar;//定义了一个14个ASCII值的reg变量
initial begin
stringvar = "Hello world";//字符串只有11个ASCII值
$display("%s is stored as %h", stringvar, stringvar);
stringvar = {stringvar,"!!!"};
$display("%s is stored as %h", stringvar, stringvar);
endmodule

这个例子的输出是:

Hello world is stored as 00000048656c6c6f20776f726c64
Hello world!!! is stored as 48656c6c6f20776f726c64212121

通过这个例子我们可以看到,当一个变量声明的位宽大于保存被赋字符串所需的位宽时,左边的多余位宽在赋值后用0填充。这与在分配非字符串值期间发生的填充是一致的。如果字符串长度大于声明的字符串变量的位宽,则该字符串将被向左截断,最左边的字符将丢失。

今天的博文就到这里了,有问题请在小青菜哥哥的公众号留言,谢谢!

通过这个例子我们可以看到,当一个变量声明的位宽大于保存被赋字符串所需的位宽时,左边的多余位宽在赋值后用0填充。如果字符串长度大于声明的字符串变量的位宽,则该字符串将被向左截断,最左边的字符将丢失。在表达式和赋值中,用作操作数的字符串应被视为由8位ASCII值表示的无符号整数常量,每一个8位ASCII值表示一个字符。我们可以使用Verilog的运算符来操作字符串,操作的值都是以8位ASCII值为一个整体。字符串变量是wire/reg类型的变量,其宽度等于字符串中的字符数乘以8。
3.4.3字符串常量 字符串是双引号内的字符序列,用一串8位二进制ASCⅡ码的形式表示,每一个8位二进制ASCⅡ码代表一个字符。例如:字符串“ab”等价于16'h5758。如果字符串被用作Verilog表达式或复制语句的操作数,则字符串被看做无符号整数序列。 1.字符串变量声明 字符串变量是寄存器型变量,它具有与字符串字符数乘以8相等的位宽。 【例3.13】...
按照Verilog 2005的标准:0-9、a-f、z、x称作数字位(digit); 表示数字正负的’+‘和’-‘视作一元操作符(unary operator); 常说的二进制、八进制、十进制、十六进制称作数字的基(base); 其在Verilog表示’b’、‘o’、‘d’、'h’称作基格式(base format)字符表示常数的bit数称作size。Verilog使用到的字...
字符串能够用在系统任务(诸如$display和$monitor等)作为变量,字符串的值可以像数字一样储存在寄存器,也可以像对数字一样对字符串进行赋值,比较和拼接。 1.一条字符串不能占源代码的多行; 2.字符串可以包含下列列表的扩展字符; 3.诸如$display和$monitor等系统任务的打印字符串可以包含特殊的格式控制字符串,如%b。 4.当字符串存储于寄存器,每个字符要占8位,字符以ASCII代码形式存储。Verilog HDL语言的字符串的定义和C语言不一样。在C语言需要用而