Thông báo

Collapse
No announcement yet.

Help me !!!! Vấn đề về Modelsim

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Help me !!!! Vấn đề về Modelsim

    Chào mọi người....mình có 1 vấn đề về mô phỏng trong Modelsim. Tình hình là thế này
    Đây là code counter đơn giản, chỉ cần có xung là đếm lên...

    module counter( input clk, output [3:0]counter_out);

    reg [3:0]Q;
    always @ (posedge clk)
    Q <= Q + 1'b1;

    assign counter_out = Q;
    endmodule


    Đây là file testbench

    module counter_tb();
    reg clk;
    wire [3:0]counter_out;
    // tao xung
    initial forever
    begin
    clk <= 0;
    #5 clk <=1;
    #5 clk <=0;
    end
    counter U0(clk,counter_out);

    endmodule

    Không biết như vậy có đúng không mà sao khi mô phỏng chỉ thấy xung clock, còn ngõ ra thì không đếm lên...
    Mong mọi người giúp đỡ
    Mail:
    DT: 01676674005
    Yahoo: emdepviemkhongmangdep

  • #2
    Hi nghung270192,

    Trong phần khai báo counter, bạn không có định nghĩa điều kiện khời động cho Q nên giá trị khi khởi động của nó là "x" nên có cộng bao nhiêu nó vẫn là "x". Bạn nên thêm phần reset cho mạch đếm này (khi có reset thi Q sẽ là một giá trị cụ thể nào đó do bạn chọn trước, 0, 1, .... 15).

    Đây là vấn đề về verilog không phải do ModelSim.

    Regard,
    ^_^

    Comment


    • #3
      Nguyên văn bởi danbeo85 Xem bài viết
      Hi nghung270192,

      Trong phần khai báo counter, bạn không có định nghĩa điều kiện khời động cho Q nên giá trị khi khởi động của nó là "x" nên có cộng bao nhiêu nó vẫn là "x". Bạn nên thêm phần reset cho mạch đếm này (khi có reset thi Q sẽ là một giá trị cụ thể nào đó do bạn chọn trước, 0, 1, .... 15).

      Đây là vấn đề về verilog không phải do ModelSim.

      Regard,
      ^_^
      bạn trả lời đúng rồi, mình chỉ xin có một góp ý nhỏ khi model một mạch sequential logic:
      tách riêng phần combination logic tính trạng thái kế tiếp với phần cập nhật thanh ghi trạng thái, nên model bộ đếm của bạn như sau, sẽ rất rõ ràng và không bao giờ gây nhầm lẫn

      PHP Code:
      module counterinput clkrst_noutput [3:0]counter_out);
      reg [3:0]Q;
      reg [3:0]Q_next;

      always @ (posedge clk or negedge rst_n)
      if (!
      rst_n<= 0;
      else 
      <= Q_next;

      assign Q_next 1;

      assign counter_out Q;
      endmodule 
      Nhất bộ khởi xuất vạn lý hành (Lão Tử)
      A journey of a thousand miles begins with one step.

      Comment

      Về tác giả

      Collapse

      nghung270192 Tìm hiểu thêm về nghung270192

      Bài viết mới nhất

      Collapse

      Đang tải...
      X