lần trước tôi đã xem xét một bộ xử lý RISC 16 bit đơn giản nhắm vào học sinh. Nó cần một chút hỗ trợ về tài liệu cũng như có một tệp bị thiếu, tuy nhiên tôi đã quản lý để đưa nó mô phỏng sử dụng miễn phí trên công cụ Internet có tên là Sân chơi EDA. Lần này, tôi sẽ đưa bạn với các chi tiết mã cũng như chính xác cách chạy mô phỏng.
Bạn sẽ muốn đề cập đến công bố trước đó nếu bạn đã không kiểm tra nó rồi. Các sơ đồ cũng như các bảng cung cấp một cái nhìn tổng quan cấp cao sẽ hỗ trợ bạn hiểu các tệp được thảo luận trong bài đăng này.
Nếu bạn muốn thực sự lập trình này trên một FPGA chính hãng, bạn sẽ có một chút việc phải làm. Bộ nhớ cũng như khởi tạo Đăng ký được thực hiện trong một phương thức hoạt động tốt để mô phỏng, tuy nhiên sẽ không hoạt động trên một fpga chính hãng. Dù sao, hãy bắt đầu!
Tệp theo tệp
Nếu bạn lấy từng dữ liệu riêng lẻ, không ai trong số họ cực kỳ khó hiểu. Dưới đây là một dòng dõi nhanh (Tôi đang sử dụng tên dữ liệu, tôi sẽ sử dụng trong mô phỏng Internet của mình):
Tham số.vets – Điều này giống như một dữ liệu bao gồm đặt một số định nghĩa cơ bản cho mọi tệp khác.
Prog.V – Đây là bộ nhớ hướng. Một mô-đun đơn giản, nó cần một địa chỉ cũng như trình bày dữ liệu cho địa chỉ đó. Chỉ thị $ ReadMemb đọc dữ liệu từ dữ liệu (test.prog).
Đăng ký.v – tệp đăng ký. Điều này gần giống như bộ nhớ hướng tuy nhiên nó có hai cổng đã kiểm tra cũng như bạn có thể sáng tác với nó.
data.v – bộ nhớ RAM. Điều này gần giống như các thanh ghi, tuy nhiên lớn hơn cũng như với một cổng kiểm tra duy nhất. Có một số mã mô phỏng mở dữ liệu cũng như in bình luận bộ nhớ, tuy nhiên tôi đã xóa nó vì nó chỉ để gỡ lỗi. Nội dung sơ bộ đến từ tệp test.data.
Alu.V – bạn sẽ tin rằng điều này sẽ phức tạp, tuy nhiên nó không phải là. Nó chỉ cần có hai đầu vào cũng như một cái gì đó để tạo ra đầu ra. Một cái gì đó đơn giản như thêm hoặc trừ. Luôn luôn @ (*) nói với Verilog không tạo ra logic đồng hồ cho việc này. Nó chỉ biến thành một số cổng đơn giản cũng như muxes.
Datapath_unit.vit – Đây là một trong những tệp phức tạp hơn, mặc dù nếu bạn đào sâu vào nó, bạn sẽ thấy nó chủ yếu là số lượng lớn. Dữ liệu này tạo ra tất cả các tài nguyên (như các thanh ghi cũng như ký ức) cũng như dây của chúng với nhau.
Control_unit.v – Một mô-đun dài hơn nữa, điều này chỉ thực hiện bảng hướng, đặt các dòng điều khiển dựa trên hướng dẫn hiện tại.
Alucontrol.v – Dữ liệu này hướng dẫn hướng dẫn cho ALU. Nó đã bị thiếu trên bài viết gốc. Điều kỳ lạ, có thêm một CPU tương tự trên cùng một trang web có tệp alucontrol, tuy nhiên nó rõ ràng là cho một bộ hướng khác. Tuy nhiên, bắt đầu giữ dữ liệu đó cũng như sử dụng bảng kiểu, tôi đã có thể tạo lại nó. Nếu [fpga4students] sửa lỗi này, các tệp có thể trông cực kỳ khác biệt.
Design.sv – Dữ liệu này là cần thiết cho trình giả lập edaplayground tôi đang sử dụng. Nó chứa các phần tử cấp cao nhất (đường dẫn dữ liệu cũng như bộ điều khiển). Vì edaplayground chỉ xử lý tệp này, cần phải bao gồm các tệp khác được đề cập ở trên. Điều này gây ra một số cảnh báo vì mỗi người trong số họ có một chỉ thị Timescale, tuy nhiên điều này là vô hại.
TestBench.sv – TestBench không phải là một phần của thiết kế chính hãng, tuy nhiên chỉ cần thiết lập mô phỏng cũng như thu thập kết quả. Tôi đã phải sửa đổi một chút để làm việc với edaplayground, tuy nhiên hoạt động là như nhau. Nó chỉ tạo ra một CPU, cung cấp cho nó một chiếc đồng hồ, cũng như cho phép nó chạy trong một thời gian. Chương trình thử nghiệm cũng như nội dung bộ nhớ trong Test.Prog cũng như Test.Data.
Mô phỏng.
Bạn có thể làm một trong hai việc. Bạn có thể mở bản sao của phong cách sẵn sàng để đi, tuy nhiên đó có thể không phải là lựa chọn tốt nhất của bạn. Tôi muốn đề nghị bạn chỉ cần đến Edaplayground và sản xuất một dự án Verilog mới. Sau đó bắt đầu di chuyển các tập tin từ bài viết gốc. Bạn sẽ gặp lỗi cũng như thiếu tệp. Xem chính xác bao nhiêu bạn có thể sửa chữa. Nếu bạn bị bối rối, thì bạn có thể sử dụng bản sao của mình để hỗ trợ bạn nếu bạn bị sập. Bạn sẽ khám phá thêm theo cách đó.
Nếu bạn chọn thử nó, ngay tại đây là một vài lời khuyên về Edaplayground. Bạn không yêu cầu UVM / OVM đã chọn, bạn cũng không yêu cầu bất kỳ loại thư viện khác. Tôi sử dụng Icarus Verilog 0.9.7, tuy nhiên rất có thể bạn có thể sử dụng bất kỳ loại công cụ Verilog nào có sẵn. Bạn muốn kiểm tra hộp kiểm Epwave cũng như yêu cầu sẽ thêm phần này vào phần quan trọng của TestBench:
ban đầu
bắt đầu
$ dumpfile (“dump.vcd”);
$ dumpvars;
Sử dụng dấu hiệu + bên cạnh các tab Tên dữ liệu để tạo các tệp mới. Edaplayground có giới hạn mười tệp trên mỗi ngăn. Hãy nhớ rằng, bạn sẽ phải bao gồm bất kỳ loại tệp .v nào bạn sản xuất trong TestBench.SV hoặc Design.SV. Bạn không yêu cầu bao gồm các tệp dữ liệu vì các tệp khác sử dụng chúng một cách gián tiếp.
Chạy!
Khi bạn có tất cả các lỗi hoạt động, bạn có thể nhấn Run cũng như bạn sẽ nhận được trình xem dạng sóng, Epwave. Bạn hav.e Để thêm các tín hiệu lãi suất để bạn có thể xem CPU tại nơi làm việc. Sẽ rất thú vị khi thêm một số thiết bị I / O vào bộ nhớ hoặc một số cổng gỡ lỗi để bạn có thể xem mọi thứ tốt hơn một chút. Tôi thường xem bộ đếm chương trình cũng như đăng ký sáng tác cổng để có được một khái niệm về những gì đang diễn ra bên trong.
Mã ban đầu đã có một chương trình thực hiện rất nhiều hướng dẫn. Tôi nhận xét nó cũng như thay thế nó với điều này:
0000_0100_0000_0000 // 0000: TẤN R0