Sự cố quan trọng
Khi thực hiện nhiều thiết lập lại của ví dụ thiết kế điều khiển máy trạng thái JESD204B IP RTL được triển khai Intel® Arria® 10, Các thiết bị Stratix® V, Arria® V hoặc Cyclone® V, bạn có thể thấy (các) chân ngắt (jesd204_tx_int và/hoặc jesd204_rx_int) được xác nhận do (các) lỗi, có thể đọc được từ tx_err (0x60), rx_err0 (0x60), và rx_err1 (0x64) của bạn.
Đối với Intel Arria 10, thay vào đó hãy sử dụng ví dụ thiết kế Nios® II xử lý thích hợp.
Đối với Stratix V, Arria V hoặc Cyclone V, thực hiện các sửa đổi sau đối với RTL:
- Thay đổi mô-đun jesd204b_ed cấp cao nhất jesd204b_ed.sv.
Xác định dây đặt lại cao chủ động:
thiết bị tx_link_rst_sync dây;
thiết bị tx_frame_rst_sync dây;
thiết bị rx_link_rst_sync dây;
thiết bị rx_frame_rst_sync dây;
thiết bị global_rst_sync dây;
Sửa đổi độ phân cực của thiết lập lại trong các bài tập dây sau:
Giữ lõi ở chế độ đặt lại cho đến khi bộ thu phát đã sẵn sàng
chỉ định global_rst_n_sync = ~global_rst_sync; Thêm bài global_rst_n_sync tập
gán tx_avs_rst_n = avs_rst_n;
gán rx_avs_rst_n = avs_rst_n;
gán tx_frame_rst_n = ~tx_frame_rst_sync;
gán rx_frame_rst_n = ~rx_frame_rst_sync;
chỉ định tx_link_rst_n = ~tx_link_rst_sync;
gán rx_link_rst_n = ~rx_link_rst_sync;
altera_reset_controller là bộ đồng bộ đặt lại cao đang hoạt động. Sửa đổi đầu vào và đầu ra của các khởi tạo đồng bộ hóa đặt lại cho phù hợp để phản ánh độ phân cực chính xác:
//
Đặt lại bộ đồng bộ hóa cho đặt lại toàn cầu (tên miền xung giờ mgmt)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) U_avs_rst_sync (
.reset_in0 (~global_rst_n),
.clk (mgmt_clk),
.reset_out (global_rst_sync)
);
Thực hiện bitwise AND trên wire_tx_ready & wire_rx_ready, đó là tín hiệu bus.
//
Đặt lại bộ đồng bộ hóa để đặt lại lớp truyền tải (tên miền xung xung khung)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_tx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n & wire_tx_ready)),
.clk (frame_clk),
.reset_out (tx_frame_rst_n_sync)
);
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) U_rx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n & wire_rx_ready)),
.clk (frame_clk),
.reset_out (rx_frame_rst_n_sync)
);
//
Đặt lại bộ đồng bộ hóa cho đặt lại lõi cơ sở (tên miền xung giờ liên kết)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) U_tx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n & wire_tx_ready)),
.clk (link_clk),
.reset_out (tx_link_rst_n_sync)
);
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) U_rx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n & wire_rx_ready)),
.clk (link_clk),
.reset_out (rx_link_rst_n_sync)
);
----------------------------------------
2. Trong trình điều khiển control_unit (control_unit.sv ), thay đổi giá trị đặt lại cho frame_rst, link_rst, avs_rst và xcvr_rst.
//
Thanh ghi đầu ra cho bộ thu phát lõi cơ bản đặt lại
//
luôn @ (tạo dáng clk hoặc phủ định rst_n)
Bắt đầu
nếu (~rst_n) bắt đầu
frame_rst
link_rst
avs_rst
xcvr_rst
đầu còn lại bắt đầu
Không có kế hoạch khắc phục vấn đề này.