注:扫码关注小青菜哥哥的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语言中需要用而