Thông báo

Collapse
No announcement yet.

Nhờ giúp đỡ code Verilog???

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

  • Nhờ giúp đỡ code Verilog???

    Em muốn viết code để thực hiện mạch đếm thời gian hiển thị trên led 7 segment.Các anh chị vào xem giúp em xem em viết thế này có được không vì em không có bo mạch để thí nghiệm.Đây là code của em:

    module timer (clk, rst, sw, led1, led2, led3, led4, led5, led6);
    input clk, sw, rst, s1, s2;
    output [6:0] led1, led2, led3, led4, led5, led6;
    reg [6:0] led1, led2, led3, led4, led5, led6;
    reg [3:0] bcd1, bcd2, bcd3, bcd4, bcd5, bcd6;
    wire[3:0] bcd_next1, bcd_next2, bcd_next3, bcd_next4, bcd_next5, bcd_next6;
    clock1Hz a(clk, clock);
    always @(posedge clock)
    if (rst == 1'b1)
    begin
    bcd1 <= 4'b0;
    bcd2 <= 4'b0;
    bcd3 <= 4'b0;
    bcd4 <= 4'b0;
    bcd5 <= 4'b0;
    bcd6 <= 4'b0;
    end
    else if (sw == 1'b1)
    begin
    bcd1 <= bcd_next1;
    end
    else if ( bcd1 == 4'b1001)
    begin
    bcd2 <= bcd_next2;
    end
    else if ( bcd2 == 4'b0101)
    begin
    bcd3 <= bcd_next3;
    end
    else if ( bcd3 == 4'b1001)
    begin
    bcd4 <= bcd_next4;
    end
    else if ( bcd4 == 4'b0101)
    begin
    bcd5 <= bcd_next5;
    end
    else if ( bcd5 == 4'b1001)
    begin
    bcd6 <= bcd_next6;
    end
    else if ( bcd6 == 4'b0010&& bcd5==4'b0011)
    begin
    bcd1 <= 4'b0;
    bcd2 <= 4'b0;
    bcd3 <= 4'b0;
    bcd4 <= 4'b0;
    bcd5 <= 4'b0;
    bcd6 <= 4'b0;
    end
    assign bcd_next1 = ( bcd1 == 4'b1001) ? 4'b0 : bcd1 + 4'b1;
    assign bcd_next2 = ( bcd2 == 4'b0101) ? 4'b0 : bcd2 + 4'b1;
    assign bcd_next3 = ( bcd3 == 4'b1001) ? 4'b0 : bcd3 + 4'b1;
    assign bcd_next4 = ( bcd4 == 4'b0101) ? 4'b0 : bcd4 + 4'b1;
    assign bcd_next5 = ( bcd5 == 4'b0011) ? 4'b0 : bcd5 + 4'b1;
    assign bcd_next6 = ( bcd6 == 4'b0010) ? 4'b0 : bcd6 + 4'b1;
    always @(posedge clock)
    begin
    case (bcd1)
    4'b0000: led1 = 7'b0111111;
    4'b0001: led1 = 7'b0000110;
    4'b0010: led1 = 7'b1011011;
    4'b0011: led1 = 7'b1001111;
    4'b0100: led1 = 7'b1100110;
    4'b0101: led1 = 7'b1101101;
    4'b0110: led1 = 7'b1111101;
    4'b0111: led1 = 7'b0000111;
    4'b1000: led1 = 7'b1111111;
    4'b1001: led1 = 7'b1100111;
    endcase
    case ( bcd2)
    4'b0000: led2 = 7'b0111111;
    4'b0001: led2 = 7'b0000110;
    4'b0010: led2 = 7'b1011011;
    4'b0011: led2 = 7'b1001111;
    4'b0100: led2 = 7'b1100110;
    4'b0101: led2 = 7'b1101101;
    4'b0110: led2 = 7'b1111101;
    4'b0111: led2 = 7'b0000111;
    4'b1000: led2 = 7'b1111111;
    4'b1001: led2 = 7'b1100111;
    endcase
    case ( bcd3)
    4'b0000: led3 = 7'b0111111;
    4'b0001: led3 = 7'b0000110;
    4'b0010: led3 = 7'b1011011;
    4'b0011: led3 = 7'b1001111;
    4'b0100: led3 = 7'b1100110;
    4'b0101: led3 = 7'b1101101;
    4'b0110: led3 = 7'b1111101;
    4'b0111: led3 = 7'b0000111;
    4'b1000: led3 = 7'b1111111;
    4'b1001: led3 = 7'b1100111;
    endcase
    case ( bcd4)
    4'b0000: led4 = 7'b0111111;
    4'b0001: led4 = 7'b0000110;
    4'b0010: led4 = 7'b1011011;
    4'b0011: led4 = 7'b1001111;
    4'b0100: led4 = 7'b1100110;
    4'b0101: led4 = 7'b1101101;
    4'b0110: led4 = 7'b1111101;
    4'b0111: led4 = 7'b0000111;
    4'b1000: led4 = 7'b1111111;
    4'b1001: led4 = 7'b1100111;
    endcase
    case ( bcd5)
    4'b0000: led5 = 7'b0111111;
    4'b0001: led5 = 7'b0000110;
    4'b0010: led5 = 7'b1011011;
    4'b0011: led5 = 7'b1001111;
    4'b0100: led5 = 7'b1100110;
    4'b0101: led5 = 7'b1101101;
    4'b0110: led5 = 7'b1111101;
    4'b0111: led5 = 7'b0000111;
    4'b1000: led5 = 7'b1111111;
    4'b1001: led5 = 7'b1100111;
    endcase
    case ( bcd6)
    4'b0000: led6 = 7'b0111111;
    4'b0001: led6 = 7'b0000110;
    4'b0010: led6 = 7'b1011011;
    4'b0011: led6 = 7'b1001111;
    4'b0100: led6 = 7'b1100110;
    4'b0101: led6 = 7'b1101101;
    4'b0110: led6 = 7'b1111101;
    4'b0111: led6 = 7'b0000111;
    4'b1000: led6 = 7'b1111111;
    4'b1001: led6 = 7'b1100111;
    endcase
    end
    endmodule

    // bo chia tan
    module clock1Hz(Clk, clock1);
    input Clk;
    output reg clock1; // xung 1 Hz
    reg [30:0]count ;

    always @(posedge Clk)
    begin
    count = count + 1;
    if (count==50000000)
    begin clock1 = ~clock1;
    count = 0;
    end
    end
    endmodule

    Nút rst của e dùng để reset,khi ấn rst thì 6 đèn led đều hiện thị số 0.Khi ấn nút Sw thì mạch bắt đầu đếm.

  • #2
    Bạn gom mấy cái case lại thành module gọi là decode đi, module decode có input là 4 bit, output là 7 bit. Xong rồi instantiate nhiều lần.
    Cho code bạn nó gọn lại.

    Comment


    • #3
      Bạn copy phần code sau vào 1 file
      module Watch(
      input [6:0] hour0,
      input [6:0] hour1,
      input [6:0] minute0,
      input [6:0] minute1,
      input [6:0] second0,
      input [6:0] second);


      wire [3:0] h0,h1,m0,m1,s0,s1;


      decode decodeh0(.sevenseg(hour0) ,.binary(h0));
      decode decodeh1(.sevenseg(hour1) ,.binary(h1));
      decode decodem0(.sevenseg(minute0) ,.binary(m0));
      decode decodem1(.sevenseg(minute1) ,.binary(m1));
      decode decodes0(.sevenseg(second0) ,.binary(s0));
      decode decodes1(.sevenseg(second1) ,.binary(s1));

      always@(*)
      begin
      $display("%d%d:%d%d:%d%d",h1,h0,m1,m0,s1,s0);
      end


      endmodule

      module decode(
      input [6:0] sevenseg,
      output reg [3:0] binary);


      always@(*)
      case(sevenseg)
      7'b0110000:binary = 4'h1;
      7'b1101101:binary = 4'h2;
      7'b1111001:binary = 4'h3;
      7'b0110011:binary = 4'h4;
      7'b1011011:binary = 4'h5;
      7'b1011111:binary = 4'h6;
      7'b1110000:binary = 4'h7;
      7'b1111111:binary = 4'h8;
      7'b1111011:binary = 4'h9;
      7'b1110111:binary = 4'hA;
      7'b0011111:binary = 4'hB;
      7'b1001110:binary = 4'hC;
      7'b0111101:binary = 4'hD;
      7'b1001111:binary = 4'hE;
      7'b1000111:binary = 4'hF;
      7'b1111110:binary = 4'h0;
      default: $display("Invalid code");
      endcase
      endmodule
      Xong rồi dùng modelSim mô phỏng. Đẻ mô phỏng bạn làm như sau:

      Tạo 1 module Testbench
      Trong module testbench:
      - bạn instantiate module mà bạn vừa thiết kế
      - instantiate module Watch
      - kết nối 2 mạch này
      - tạo các tín hiệu giả lập clock và các input khác của module của bạn

      Module watch làm gì? Module Watch giải mã từ tín hiệu đèn 7 đoạn sang nhị phân và in ra.

      Comment


      • #4
        Thanks anh jefflieu.Em mới học về FPGA nên chưa biết cách viết testbench + dùng modelsim.Em sẽ thử làm theo cách của anh.Cho em hỏi thêm là nếu em muốn viết code để hiển thị đồng hồ thời gian thực hiển thị trên màn lcd có đầy đủ ngày tháng năm thì e có thể phát triển từ phần code ở trên không?anh có thể hưỡng dẫn cho e cách viết không?

        Comment


        • #5
          Nguyên văn bởi tigertiger Xem bài viết
          Thanks anh jefflieu.Em mới học về FPGA nên chưa biết cách viết testbench + dùng modelsim.Em sẽ thử làm theo cách của anh.Cho em hỏi thêm là nếu em muốn viết code để hiển thị đồng hồ thời gian thực hiển thị trên màn lcd có đầy đủ ngày tháng năm thì e có thể phát triển từ phần code ở trên không?anh có thể hưỡng dẫn cho e cách viết không?
          Được. Bạn làm từ từ đi. Testbench quan trọng, khoan đem xuống mạch đã.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          • tuyennhan
            Trả lời cho Tiếng Anh cho người Việt
            bởi tuyennhan
            Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
            Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
            hôm nay, 07:44
          • vi van pham
            Trả lời cho Tiếng Anh cho người Việt
            bởi vi van pham
            Cám ơn những lời chúc tốt đẹp của em.

            Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

            Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
            hôm nay, 02:00
          • nhathung1101
            Trả lời cho Tiếng Anh cho người Việt
            bởi nhathung1101
            Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

            Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

            Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
            Hôm qua, 22:18
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

            Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
            Hôm qua, 14:51
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

            Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
            Hôm qua, 14:39
          • dinhthuong80
            Trả lời cho Tiếng Anh cho người Việt
            bởi dinhthuong80
            Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

            Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
            Hôm qua, 14:28
          • bqviet
            Trả lời cho Tiếng Anh cho người Việt
            bởi bqviet
            Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
            21-02-2025, 20:26
          • mèomướp
            Trả lời cho Tiếng Anh cho người Việt
            bởi mèomướp
            Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
            21-02-2025, 12:32
          • vi van pham
            Trả lời cho Tiếng Anh cho người Việt
            bởi vi van pham
            Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

            Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
            20-02-2025, 21:31
          • bqviet
            Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
            bởi bqviet
            Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
            20-02-2025, 17:22
          Đang tải...
          X