2009-03-10 30 views
12

Đột nhiên, tôi được thực hiện để xem xét một số mã testbench Verilog mà sử dụng rất nhiều $ readmemh, và $ writememh. Tôi hiểu rằng về cơ bản nó đã đọc được ký ức và ghi nhớ. Tôi sẽ rất vui nếu bạn có thể chỉ ra một số tài nguyên liên quan đến những thói quen đó. PS: Tôi đã tìm kiếm trên google không thành công. (Tôi rất ... rất mới với Verilog)

+1

Bạn sẽ không tìm kiếm khó khăn đủ rồi! Hãy thử tìm kiếm một cái gì đó như "readmem tutorial". Các tài liệu cho bạn giả lập nên có thông tin hữu ích quá. – Marty

+0

@Marty, khi tôi tìm kiếm "readmem tutorial" trong google, trang SO này là hit tốt nhất ... ;-))) – Alphaneo

+1

Một IEEE Std 1800-2012 miễn phí hiện đã có sẵn: phần 21.4 "Nạp dữ liệu mảng bộ nhớ từ một tệp ", v.v. – toolic

Trả lời

17

Tôi đồng ý không quá dễ dàng để tìm một điều gì đó về readmem/writemem. Bạn có thể tìm thấy một chút ở đây: http://fullchipdesign.com/index_files/readmemh.htm

Dù sao không có quá nhiều điều để nói về các chức năng này, cú pháp là:

$readmem[hb]("File",ArrayName,StartAddr,EndAddr) 
$writemem[hb]("File",ArrayName,StartAddr,EndAddr) 

Verilog là rất kén chọn về định dạng tập tin, số lượng chút trong tệp văn bản phải khớp với số bit trong mảng.

Tôi khuyên bạn nên chơi xung quanh một chút bằng cách xác định một mảng, điền nó với dữ liệu ghi nó ra với writememh/writememb và in nó ra sau đó.

Một cái gì đó như thế này sẽ giúp bạn bắt đầu (không được thử ra!).

integer i; 
reg [7:0] memory [0:15]; // 8 bit memory with 16 entries 

initial begin 
    for (i=0; i<16; i++) begin 
     memory = i; 
    end 
    $writememb("memory_binary.txt", memory); 
    $writememh("memory_hex.txt", memory); 
end 

Chúc mừng!

0

Đọc file HEX sẽ làm việc như thế này:

integer i; 
reg [7:0] memory [0:15]; // 8 bit memory with 16 entries 

initial begin 
    for (i=0; i<16; i++) begin 
     memory = i; 
    end 
    $readmemh("memory_binary.txt", memory); 

end 
Các vấn đề liên quan