Phát hiện các thanh ghi không được thiết lập lại


8

Khi viết Verilog, tôi sử dụng nhiều "linters" sẽ đưa ra lỗi và cảnh báo. Đây là trình giả lập của tôi (ModelSim), trình biên dịch của tôi (Quartus II), cùng với một kẻ nói dối (Verilator). Cùng nhau, tôi có phạm vi bảo hiểm tốt cho những cạm bẫy thông thường, chẳng hạn như không khớp kích thước xe buýt và chốt được suy luận.

Thật không may, không có công cụ nào trong số ba công cụ phát hiện các thanh ghi không được thiết lập lại. Để xem những gì tôi có ý nghĩa, hãy xem xét những điều sau đây.

reg a;
reg b;

always @(posedge clk_i or posedge rst_i) begin
  if(rst_i) begin
    a <= 1'b0; // Reset a
    // Ooops, forgot to reset b
  end else begin
    // Do stuff with a and b
  end
end

Làm cách nào để các công cụ của tôi tự động phát hiện các thanh ghi không được thiết lập lại?


2
"các thanh ghi không được thiết lập lại" không nhất thiết là một điều xấu (ít nhất là trong một thiết kế silicon), đó có thể là lý do tại sao chúng không được cảnh báo trong các công cụ lint. Nói chung, bạn chỉ muốn đặt lại các thanh ghi cần được đặt lại, vì việc thêm lại vào flip flop làm tăng diện tích của chúng và tải trên mạng đặt lại. Nếu bạn có bus dữ liệu 256 bit và tín hiệu "hợp lệ" một bit, bạn không cần phải đặt lại dữ liệu nếu bạn đặt lại hợp lệ.
Tim

Synplicity (công cụ tổng hợp) đưa ra cảnh báo về những điều như vậy. Bực mình vì chúng thường có chủ ý ... nhưng có thể giúp ích cho tình huống của bạn (giả sử Synplility có Verilog, tôi chưa bao giờ thử)
Brian Drumond

Câu hỏi nêu rõ rằng một loạt các loại xơ đang được sử dụng, ModelSim, Quartus II và Verilator. Các công cụ này có khả năng linting hạn chế và các loại vấn đề họ kiểm tra là khá hẹp.
travisbartley

Câu trả lời:


3

Không có công cụ nào bạn đề cập là một công cụ linting thực sự. Những công cụ này không phải là để cung cấp cho bạn một phạm vi bảo hiểm tốt.

Tôi thấy hai công cụ linting thương mại và cả hai đều có các quy tắc để phát hiện flops không thiết lập lại.

Tôi thấy ba lựa chọn:

  1. Nếu câu trả lời của David Kessner có hiệu quả với bạn - con đường để đi.
  2. Nhận một công cụ linting phong nha sẽ làm công việc.
  3. Viết một kịch bản sẽ phát hiện flops không thiết lập lại.

Bây giờ, # 2 có thể không đơn giản. Tôi không biết liệu có những máy ép miễn phí tốt ngoài kia không, và những máy chuyên nghiệp đắt tiền và sẽ khiến bạn mất nhiều thời gian để thiết lập.

# 3 là cách tiếp cận tôi sẽ sử dụng. Nếu bạn biết bất kỳ ngôn ngữ kịch bản lệnh nào (Perl, Python, ...), bạn sẽ mất tối đa một ngày để viết một tập lệnh tìm kiếm các flop không được thiết lập lại. Nếu bạn không biết bất kỳ ngôn ngữ kịch bản nào, thì có StackOverflow nơi bạn có thể yêu cầu trợ giúp - vài ngày và bạn đã hoàn tất. Điều này cũng sẽ thêm một công cụ khác vào hộp công cụ cá nhân của bạn, thứ rất được các nhà thiết kế mặt trước - viết kịch bản xử lý văn bản.

Chúc may mắn!


4

Khi tôi chạy Modelim trên các thiết kế VHDL của mình, nó đưa ra các cảnh báo tại Time = 0ps về logic với tín hiệu đầu vào loại 'X' hoặc 'U'. Tôi quên tin nhắn cảnh báo chính xác. Vượt qua những cảnh báo này có thể cho tôi biết những gì tôi chưa khởi tạo.


1

Tôi dựa vào các bài kiểm tra chức năng thay vì các công cụ linting cho việc này, tôi có xu hướng chuyển đổi thiết lập lại và phát lại các phần của băng ghế thử nghiệm. Nếu thiết bị hoạt động chính xác sau khi đặt lại, thì bạn đã thiết lập lại không gian trạng thái đủ hoặc băng ghế thử nghiệm của bạn không tốt!


0

Đôi khi các công cụ thiết kế sẽ xuất ra một loạt các báo cáo cung cấp cho bạn tất cả các loại thông tin thú vị. Ví dụ: Xilinx có thể gọi đây là Báo cáo bản đồ, cho bạn biết các thành phần logic nào được ánh xạ tới các thành phần vật lý nào.

Trong ví dụ trên, reg a sẽ được ánh xạ tới FDCE (Flip flop, D, với chế độ Xóa không đồng bộ và Bật đồng hồ), trong khi reg b sẽ được ánh xạ tới FDE (Flip flop, D và Bật đồng hồ). Điều này sẽ cho bạn biết rằng reg b không có thiết lập lại.

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.