Tạo số ngẫu nhiên n bit trong Verilog


7

Tôi có thể dễ dàng tạo một số lượng ngẫu nhiên 32 bit chiều rộng trong Verilog bằng cách sử dụng $random. Có cách nào để tạo ra một số nbit chính xác (nói n = 70) không?

Tôi đoán rằng tôi có thể ghép nhiều số ngẫu nhiên 32 bit, và sau đó hạn chế xuống số bit cần thiết, nhưng đó có vẻ như là một hack.


3
Có vẻ như là một cách hack hợp lý đối với tôi, do trình giả lập Verilog sẽ thực sự cần thực hiện các tính toán của nó bằng kiến ​​trúc máy bên dưới, có thể xử lý các từ 32 hoặc 64 bit thay vì các bit đơn lẻ tại một thời điểm.
Photon

Câu trả lời:


8

Nếu bạn có thể sử dụng SystemVerilog, bạn có thể chọn ngẫu nhiên một số chiều rộng bất kỳ. Hoặc khai báo nó như randtrong một lớp, hoặc sử dụng std::randomize. Đây là một ví dụ đơn giản:

module top;

  bit[69:0] vec;

  initial begin
    assert(std::randomize(vec));
    $display("vec = %070b", vec);
  end

endmodule

Nếu bạn cần phải sử dụng Verilog cũ đơn giản, tôi nghĩ rằng bản hack mà bạn đề xuất là tốt nhất, đơn giản nhất và có thể là sự lựa chọn duy nhất. Tôi không nghĩ có bất cứ điều gì trong ngôn ngữ để giúp đỡ, vì $randomtrả về số 32 bit.

Nếu bạn chỉ đơn giản muốn tránh khai báo các biến mới và kết nối chúng một cách rõ ràng, bạn có thể làm một cái gì đó như thế này.

vec[31:0]  = $random;
vec[63:32] = $random;
vec[69:64] = $random;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.