Minimal dụ
Dưới đây là một ví dụ về những gì Qiu đề cập.
Trong RAM, kích thước bộ nhớ là một chức năng của kích thước từ và địa chỉ.
Vì vậy, nếu mô-đun chính xác định kích thước từ và địa chỉ, nó cũng không thể chỉ định kích thước bộ nhớ.
module myram #(
parameter WORD_SIZE = 1,
parameter ADDR_SIZE = 1
) (
input wire [ADDR_SIZE-1:0] addr,
inout wire [WORD_SIZE-1:0] data,
// ...
);
localparam MEM_SIZE = WORD_SIZE * (1 << ADDR_SIZE);
// Use MEM_SIZE several times in block.
...
Và trên mô-đun phụ huynh, điều này là tốt:
module myram_tb;
myram #(
.ADDR_SIZE(2),
.WORD_SIZE(2)
) top (
/* wires */
)
nhưng này nên là một lỗi:
module myram_tb;
myram #(
.ADDR_SIZE(2),
.WORD_SIZE(2),
.MEM_SIZE(2)
) top (
/* wires */
)
iverilog
không thất bại, và tôi tin rằng điều này là lỗi: https://github.com/steveicarus/iverilog/issues/157
Incisive cho một lỗi như mong đợi.