Mọi người cho e xin code verilog hiển thị đồng hồ đếm giờ,phút,giây trên led 7 đoạn ứng dụng trên bộ kit altera De2 với ạ.Em mới học về FPGA nên chưa biết viết thế nào?Anh nào biết chỉ em với,em xin cảm ơn rất nhiều^^.
Thông báo
Collapse
No announcement yet.
Cho e xin code hiển thị đồng hồ đếm thời gian trên led 7 đoạn của Kit Altera De2???
Collapse
X
-
Em mới viết code bộ đếm tăng từ 1 đến 9 hiển thị trên led 7 đoạn.Các anh vào xem hộ em sai ở đâu nhé mà em giả lập không đúng?
Code viết = verilog:
module bcd_tang (clock, rst, s1, led);
input clock, s1, rst;
output [6:0] led;
reg [6:0] led;
reg [3:0] bcd;
always @(posedge clock )
begin
if (rst == 1'b1) bcd <= 4'b0;
else if (s1 == 1'b1) bcd <= bcd + 1'b1;
if (bcd == 4'b1001) bcd <= 4'b0000;
end
always @(posedge clock)
begin
case(bcd)
4'b0000: led = 7'b1111110;
4'b0001: led = 7'b0110000;
4'b0010: led = 7'b1101101;
4'b0011: led = 7'b1111001;
4'b0100: led = 7'b0110011;
4'b0101: led = 7'b1011011;
4'b0110: led = 7'b1011111;
4'b0111: led = 7'b1110000;
4'b1000: led = 7'b1111111;
4'b1001: led = 7'b1110011;
default: led = 7'b1111111;
endcase
end
endmodule
-
Nguyên văn bởi tigertiger Xem bài viếtEm mới viết code bộ đếm tăng từ 1 đến 9 hiển thị trên led 7 đoạn.Các anh vào xem hộ em sai ở đâu nhé mà em giả lập không đúng?
Code viết = verilog:
module bcd_tang (clock, rst, s1, led);
input clock, s1, rst;
output [6:0] led;
reg [6:0] led;
reg [3:0] bcd;
always @(posedge clock )
begin
if (rst == 1'b1) bcd <= 4'b0;
else if (s1 == 1'b1) bcd <= bcd + 1'b1;
if (bcd == 4'b1001) bcd <= 4'b0000;
end
always @(posedge clock)
begin
case(bcd)
4'b0000: led = 7'b1111110;
4'b0001: led = 7'b0110000;
4'b0010: led = 7'b1101101;
4'b0011: led = 7'b1111001;
4'b0100: led = 7'b0110011;
4'b0101: led = 7'b1011011;
4'b0110: led = 7'b1011111;
4'b0111: led = 7'b1110000;
4'b1000: led = 7'b1111111;
4'b1001: led = 7'b1110011;
default: led = 7'b1111111;
endcase
end
endmodule
mình nghĩ bạn mới học nên viết code theo các bước như thế này cho dễ:
Viết yêu cầu:
- Mạch của bạn cần bộ đếm với cổng :
- reset: bất chấp tất cả các cổng khác, trả bộ đếm về 0
- Run: khi run=1, đếm từ 0 tới 9, khi đến 9 thì trả về 0, khi run = 0 không làm gì.
Để viết thanh ghi có reset đồng bộ:
always@(posedge clk)
if(rst)
counter <= 0;
else begin
end
Để viết thanh ghi có reset đồng bộ và chân bật (run), và luôn đếm
always@(posedge clk)
if(rst)
counter <= 0;
else if(run) begin
counter <= counter + 1;
end
Để viết thanh ghi có reset đồng bộ, chân run và đếm tới khi == 9 thì quay lại:
Để viết thanh ghi có reset đồng bộ và chân bật (run), và luôn đếm
always@(posedge clk)
if(rst)
counter <= 0;
else if(run) begin
if(overflow) counter <= 0; else
counter <= counter + 1;
end
assign overflow = (counter==9)?1:0;
Ý mình muốn nói là khi mô tả, bạn nên theo bản mẫu (template). Nếu bạn muốn counter của bạn chạy phức tạp hơn thì bạn mô tả giữa phần begin và end của run.
Code của bạn không sai (nếu bạn biết bạn đang làm gì), dễ sai nếu bạn không hình dung được mạch của bạn sẽ được tổng hợp ra như thế nào.
Để tiện bạn nên viết một phần decode, ở phần testbench, bạn kết nối phần này vào các chân LED, phần code này sẽ in ra 1 2 3 4 ... Mình copy đoạn code cho bạn:
case(rv7Lo)
7'b0110000:rv4LoDigit = 4'h1;
7'b1101101:rv4LoDigit = 4'h2;
7'b1111001:rv4LoDigit = 4'h3;
7'b0110011:rv4LoDigit = 4'h4;
7'b1011011:rv4LoDigit = 4'h5;
7'b1011111:rv4LoDigit = 4'h6;
7'b1110000:rv4LoDigit = 4'h7;
7'b1111111:rv4LoDigit = 4'h8;
7'b1111011:rv4LoDigit = 4'h9;
7'b1110111:rv4LoDigit = 4'hA;
7'b0011111:rv4LoDigit = 4'hB;
7'b1001110:rv4LoDigit = 4'hC;
7'b0111101:rv4LoDigit = 4'hD;
7'b1001111:rv4LoDigit = 4'hE;
7'b1000111:rv4LoDigit = 4'hF;
7'b1111110:rv4LoDigit = 4'h0;
default: begin
rv4LoDigit = 4'hz;
$display("Error Decode Values = 0b%b",rv7Lo);
end
endcase
$display("Values = 0x%h%h",rv4HiDigit,rv4LoDigit);
Comment
-
Nguyên văn bởi boyzzun Xem bài viếtbác Jefflieu cho em hỏi cái $display kia thì chỉ cho mô phỏng hay là dùng cho cả mạch thật nữa, em chỉ học theo giáo trình của thày giáo nhưng cũng chưa thấy qua lệnh này
$display không phải là "synthesizable code" nên ... các ctrinh synthesize sẽ bỏ qua lệnh này, không làm gì hết. Cũng dễ hiểu thôi, cứ tự hỏi board mạch thật sẽ "xuất" ra cái gì, bằng cách nào thì thấy là nó không làm được
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm linh kiện sửa loa vi tính.bởi nhathung1101Ra cửa hàng điện tử bất kỳ.
Dõng dạc hét lên:
- Cho 1 con 4558.
Có luôn. Nó chỉ là con Opamp cùi bắp thông thường thôi mà. Giá 2k hay 3k gì đó.
Nếu muốn âm thanh hay hơn, thì mua NE5535, mất 2 cốc beer thôi.-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 22:38 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi nhathung1101Mạch dùng được, nhưng phải kết hợp với Transistor NPN công suất bên ngoài. Loại chịu điện áp cao, dòng lớn.
Loại mạch này nhái theo cái loại IC họ STR trong mấy cái ti vi cổ lỗ ngày xưa thôi mà. Còn được gọi là "ổn áp...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 22:28 -
-
Trả lời cho Tìm linh kiện sửa loa vi tính.bởi Nikon57
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:36 -
-
bởi Nikon57Bộ loa vi tính Microlap cũ của tôi tầng tiền khuyêchs đại bị lỗi. Sau kiểm tra , nguyên nhân là do con chíp 4558D JRC 0077C chết nóng rực. Không thêt tìm được con IC đúng nguyên mã như vậy, để thay thế tôi có thể thay bawngfcon IC 4558 JRC 0058T được không? Mong các bác thành thạo cho ý kiến.
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:36 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi dinhthuong80Mạch trên nếu dùng vào việc khác ( theo người thiết kế ra nó) thì cũng được: làm mạch tiền khuếch đại (pre-Amply) cho "con sò công suất" hay mạch công suất, để chạy cái loa cũng tạm ok.
Các chữ E,B,C trên mạch trên gắn...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 16:47 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi iTronvây là mình đã hiểu lí do vì sao ông ấy lại đưa mình nguyên hộp có hơn chục cái mạch này trong đó...
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 12:21 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi mèomướpDạ mạch này hông dùng được ạ. Chú sang chị hàng xóm mượn cái cuốc kiếm góc nào trong bản có nhìu người qua lại để trồng 1 cây cải ngồng, ngày ngày chú chịu khó qua đấy tưới chăm cho nó lớn ạ, vài tháng sau nó to chú mang ra chợ bán...
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 12:13 -
-
bởi iTronEm được ông anh cho mạch như hình, nhờ ace trong diễn đàn xem giúp mạch này dùng ổn ko và dùng linh kiện công suất nào thì phù hợp.
Xin cảm ơn...-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 11:27 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Vì sản phẩm của họ dân mình có dùng, và có lẽ cũng không phải là không phổ biến, nên ĐT quyết định gởi thư điện tử tiếng Anh cho họ như sau, ( đã sửa vài từ như được góp ý, vì nếu lịch sự thì dù vòng vo cũng nên phản hồi, vì...
-
Channel: Tâm tình dân kỹ thuật
25-02-2025, 16:36 -
-
Trả lời cho Tiếng Anh cho người Việtbởi tuyennhanCá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 .-
Channel: Tâm tình dân kỹ thuật
23-02-2025, 07:44 -
Comment