代码之家  ›  专栏  ›  技术社区  ›  tech_scholar

如何在一条语句中连接数字(1'b1)和`define

  •  1
  • tech_scholar  · 技术社区  · 11 月前

    我正在编写一个测试台,我试图在其中定义这样的比特流:

    `define PREAMBLE (10'b1010101011)
    `define FUNC_ENERGY (4'b0001)
    
    reg bit_stream_tb = {`PREAMBLE, `FUNC_ENERGY, 1'b1};
    

    一旦我显示 bit_stream_tb 在我的 initial 声明,我只得到一个“1”。

    $display("bit_stream: ", bit_stream_tb);

    输出:

    bit_stream: 1
    

    如何将其连接起来,使输出为:

    bit_stream: 1010101011     0001          1
                PREAMBLE     FUNC_ENERGY    
    

    当然没有空格。

    在我项目的后期阶段,我希望能够“垃圾邮件”一系列 `DEFINES 以获得比特流。我认为最简单的方法就是连接成一个 reg ,这并没有按预期工作。

    我愿意 想要有一个长长的“这样定义:

    `DEFINE `PREAMBLE `FUNC_ENERGY 1, 
    

    因为它没有我喜欢的模块化。

    1 回复  |  直到 11 月前
        1
  •  1
  •   toolic    11 月前

    输出仅显示 1 因为你宣布 bit_stream_tb 作为1比特信号,它只被分配了级联的LSB,即 1'b1 .

    此声明创建1位信号,因为没有范围说明符:

    reg bit_stream_tb
    

    您应该使用一个指定15位信号的范围,如下所示:

    reg [14:0] bit_stream_tb = {`PREAMBLE, `FUNC_ENERGY, 1'b1};
    

    下面是一个完整的代码示例:

    module tb;
    
    `define PREAMBLE (10'b1010101011)
    `define FUNC_ENERGY (4'b0001)
    
    reg [14:0] bit_stream_tb = {`PREAMBLE, `FUNC_ENERGY, 1'b1};
    
    initial begin
        $display("bit_stream: ", bit_stream_tb);
    end
    
    endmodule
    

    输出:

    bit_stream: 21859
    

    要以二进制格式显示:

    $display("bit_stream: %b", bit_stream_tb);
    

    输出:

    bit_stream: 101010101100011
    

    如果你想单独显示这些数字,你不应该把它们连接起来:

    $display("bit_stream: %b %b %b", `PREAMBLE, `FUNC_ENERGY, 1'b1);
    

    输出:

    bit_stream: 1010101011 0001 1