6

我知道您可以在 Verilog 测试台中声明一个字符串,如下所示:

reg [8*14:1] string_value;  

initial 
    string_value = "Hello, World!";

然后我可以用这个字符串做一些事情,比如$display在测试台上使用它来显示它。

当我将模块闪存到我的 FPGA 时,我没有成功地在模块中做同样的事情:

reg [8*14:1] string_value;  

always @(reset) 
begin
    string_value = "Hello, World!";
    // Do stuff with string value

即使分配单个值也不起作用:

reg [8:1] char_value;  

always @(reset) 
begin
    char_value = "A";
    if (char_value == 8'h41)
        // Do stuff!

我想将 8 位总线上的单个字符转移到 LCD 屏幕上进行显示。

如何在 Verilog 中处理字符串?

4

6 回答 6

9

您可以将字符串分配给寄存器类型。任何说其他话的人都是错的。您可能希望使您的寄存器基于 0' 以使其正常工作。我已经在真正的 FPGA 中完成了这项工作,并且可以正常工作。

于 2012-09-13T09:11:10.057 回答
7

定义一个字节数组,然后将 ASCII 分配给每个数组元素:

wire [7:0] foo [0:11];
assign foo[0]  = "H";
assign foo[1]  = "e";
assign foo[2]  = "l";
assign foo[3]  = "l";
assign foo[4]  = "o";
assign foo[5]  = " ";
assign foo[6]  = "W";
assign foo[7]  = "o";
assign foo[8]  = "r";
assign foo[9]  = "l";
assign foo[10] = "d";
assign foo[11] = "!";

您现在有一个包含 ASCII 值的常量,您可以对其进行索引。

reg [7:0] data_out;
reg       data_out_valid;
reg [3:0] some_index;
:
// pushing data onto a bus
data_out       <= foo[some_index];
data_out_valid <= 1'd1;
some_index     <= some_index + 4'd1;

通过适当的索引检查和控制应该可以工作。

于 2014-10-19T23:14:56.923 回答
3

这对我有用:

    reg [8*16:1] line1data = "Hello, World!   ";

无论是在仿真中还是在 Spartan-3E FPGA 上

于 2013-06-24T20:33:09.587 回答
0

字符串似乎在我的模块中工作:

module tb;

reg [8:1] char_value;

initial begin
    char_value = "A";
    $display("%h", char_value);
    if (char_value == 8'h41) begin
        $display("match");
    end else begin
        $display("no match");
    end
end

endmodule

/*

Prints out:

41
match

*/

什么不适合你?

数据类型于 2005年string被引入 SystemVerilog 标准(参见 IEEE 1800-2005 或 1800-2009)。

于 2012-01-27T13:44:21.483 回答
0
output [8*14:1]string_value1;  
reg [8*14:1]string_value1;

always @ (posedge BIWEn)

if (BIWEn==1'b1 ||BIREn==1'b1)
    begin:START_STATE_WRITE
        psW=idleW;  //psW is Present State Write
        string_value1= "IDLE";
    end

![test bench] (c:\pictures)
于 2014-04-12T22:07:42.137 回答
-3

SystemVerilog 应该支持规范中提到的字符串分配:

For example, to store the 12-character string "Hello world\n" requires a variable 8x12, or 96 bits wide. 
     bit [8*12:1] stringvar = "Hello world\n";

不确定旧的verilog是否支持它。

于 2012-02-07T11:07:31.927 回答