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
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 に答える
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

*/

何がうまくいかないのですか?

データ型は、string2005 年に SystemVerilog 標準に導入されました (IEEE 1800-2005 または 1800-2009 を参照)。

于 2012-01-27T13:44:21.483 に答える
-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 に答える