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

问题描述 投票:0回答:1

我正在编写一个测试台,我试图在其中定义一个位流,如下所示:

`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:

`DEFINE `PREAMBLE `FUNC_ENERGY 1, 

因为它不像我喜欢的那样模块化。

concatenation verilog
1个回答
0
投票

输出仅显示

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
© www.soinside.com 2019 - 2024. All rights reserved.