mình đang làm đề tài hiển thị ảnh lên monitor thông qua VGA của kit DE2 mà ko biết làm thế nào. mình đọc tài liệu mà cũng chưa hiểu lắm. bạn nào đã làm rồi có thể hướng dẫn cho mình được không? thanks nhiều nhiều
Thông báo
Collapse
No announcement yet.
VGA trên DE2
Collapse
X
-
Chào ruacon, mình cũng đang thực hiện đề tài này, và mình cũng đang bí, có gì chúng ta cùng trao đổi để hoàn thành tốt nó nhé.Nguyên văn bởi ruaconb52 Xem bài viếtmình đang làm đề tài hiển thị ảnh lên monitor thông qua VGA của kit DE2 mà ko biết làm thế nào. mình đọc tài liệu mà cũng chưa hiểu lắm. bạn nào đã làm rồi có thể hướng dẫn cho mình được không? thanks nhiều nhiều
Bạn có thể cho mình mail để tiện trao đổi không. Hoặc bạn liên lạc với mình qua email : a.nguyen.mh@gmail.com
Comment
-
mình có code này ko có lỗi nhưng gắn monitor thì ko chạy được. bạn nào phát hiện lỗi thì cho mình biết nha.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY vga IS
PORT (CLOCK_50 : IN std_logic; --50Mhz clock
KEY : IN std_logic_vector(3 downto 0); --RESET
VGA_B: OUT std_logic_vector(9 downto 0);
VGA_R: OUT std_logic_vector(9 downto 0);
VGA_G: OUT std_logic_vector(9 downto 0);
VGA_CLK : OUT std_logic;
VGA_BLANK :OUT std_logic; --active low
VGA_SYNC : OUT std_logic;
VGA_HS : OUT std_logic;
VGA_VS : OUT std_logic);
END vga;
ARCHITECTURE vg OF vga IS
SIGNAL line_fin : std_logic; --variable to determine if a line has finished drawing
SIGNAL line_count : integer; --variable for counting the amount of lines drawn
SIGNAL frame_fin : std_logic; --variable to determine if a frame had finished drawing
SIGNAL CLOCK_25 : std_logic; --25Mhz clock
CONSTANT P1 : integer := 24; --Front porch (horizontal)
CONSTANT P2 : integer := 48; --Back porch (horizontal)
CONSTANT HSYNC_TIME : integer := 95; -- H_Sync pulse lenght
CONSTANT V1 : integer := 11250; --Front porch (vertical)
CONSTANT V2 : integer := 25500; --Back porch (vertical)
CONSTANT VSYNC_TIME : integer := 1600; -- V_Sync pulse lenght
BEGIN
VGA_SYNC<= '0';
pixel_draw : PROCESS(CLOCK_25,KEY(0)) --for drawing pixels and generating blank pulses
VARIABLE hcount : INTEGER := 0;
VARIABLE vcount : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
hcount := 0;
vcount := 0;
line_fin <= '0';
frame_fin <= '0';
line_count <= 0;
VGA_BLANK <= '1';
ELSIF rising_edge(CLOCK_25) THEN
IF line_count < 480 THEN
IF hcount < 640 THEN
VGA_R <= "1111111111";--send pixel information each clock_cycle
VGA_B <= "0000000000";
VGA_G <= "0000000000";
VGA_BLANK <= '1';
hcount := hcount+1;
line_fin <= '0';
ELSIF hcount = 640 THEN
line_fin <= '1'; --line finished, pulse line_fin and start blank pulse
hcount := hcount+1;
VGA_BLANK <= '0';
ELSIF hcount >640 and hcount <= 640+P1+HSYNC_TIME+P2 THEN
hcount := hcount+1;--keep blank pulse low for a set amount of time
line_fin <= '0';
VGA_BLANK <= '0';
ELSE
hcount := 1; --reset counters and increment line_counter
line_count <= line_count+1;
END IF;
ELSIF line_count = 480 THEN
IF vcount < 1 THEN --frame is finished; pulse frame_fin and initiate vertical blank pulse
vcount := vcount+1;
VGA_BLANK <= '0';
frame_fin <= '1';
ELSIF vcount >= 1 and vcount < V1+V2+VSYNC_TIME THEN
vcount := vcount+1; --keep blank pulse low for a set amount of time
frame_fin <= '0';
VGA_BLANK <= '0';
ELSE
vcount := 0; -- reset counters and line_counter
VGA_BLANK <= '1';
line_count <= 0;
END IF;
END IF;
END IF;
END PROCESS;
horizontal_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE hsync_counter : INTEGER := 0;
VARIABLE hsync_started : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
VGA_HS <= '1';
hsync_counter := 0;
hsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF line_fin = '1' or hsync_started = 1 THEN
hsync_started:= 1;
IF hsync_counter <= P1 THEN
hsync_counter := hsync_counter+1;--hsync stays high during front porch
VGA_HS <= '1';
ELSIF hsync_counter >= P1-1 and hsync_counter <= HSYNC_TIME+P1 THEN
hsync_counter := hsync_counter+1;--hsync activated
VGA_HS <= '0';
ELSIF hsync_counter >= HSYNC_TIME+P1-1 and hsync_counter < HSYNC_TIME+P1+P2 THEN
hsync_counter := hsync_counter+1;--hsync stays high during back porch
VGA_HS <= '1';
ELSE
hsync_counter := 0;--reset variables and counters
VGA_HS <= '1';
hsync_started := 0;
END IF;
ELSE
VGA_HS <= '1';
END IF;
END IF;
END PROCESS;
vertical_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE vsync_counter : INTEGER := 0;
VARIABLE vsync_started : INTEGER := 0;
BEGIN
IF KEY(0) = '0' THEN
VGA_VS <= '1';
vsync_counter := 0;
vsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF frame_fin = '1' or vsync_started = 1 THEN
vsync_started := 1;
IF vsync_counter < V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSIF vsync_counter >= V1-1 and vsync_counter < VSYNC_TIME+V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '0';
ELSIF vsync_counter >= VSYNC_TIME+V1-1 and vsync_counter < VSYNC_TIME+V1+V2 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSE
vsync_counter := 0;
VGA_VS <= '1';
vsync_started := 0;
END IF;
ELSE
VGA_VS <= '1';
END IF;
END IF;
END PROCESS;
vga_clk_gen : PROCESS(CLOCK_50,KEY(0))--devides 50MHz clock in 2, making it a 25MHz clock
VARIABLE count : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
CLOCK_25 <= '0';
VGA_CLK <= '0';
count := 0;
ELSIF rising_edge(CLOCK_50) THEN
IF count = 0 THEN
CLOCK_25 <= '1'; --1 period of 50MHz high
VGA_CLK <= '1';
count := 1;
ELSIF count = 1 THEN
CLOCK_25 <= '0'; --1 period of 50MHz low
VGA_CLK <= '0';
count := 0;
END IF;
END IF;
END PROCESS;
END vg;
Comment
-
mình có code này ko có lỗi nhưng gắn monitor thì ko chạy được. bạn nào phát hiện lỗi thì cho mình biết nha.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY vga IS
PORT (CLOCK_50 : IN std_logic; --50Mhz clock
KEY : IN std_logic_vector(3 downto 0); --RESET
VGA_B: OUT std_logic_vector(9 downto 0);
VGA_R: OUT std_logic_vector(9 downto 0);
VGA_G: OUT std_logic_vector(9 downto 0);
VGA_CLK : OUT std_logic;
VGA_BLANK :OUT std_logic; --active low
VGA_SYNC : OUT std_logic;
VGA_HS : OUT std_logic;
VGA_VS : OUT std_logic);
END vga;
ARCHITECTURE vg OF vga IS
SIGNAL line_fin : std_logic; --variable to determine if a line has finished drawing
SIGNAL line_count : integer; --variable for counting the amount of lines drawn
SIGNAL frame_fin : std_logic; --variable to determine if a frame had finished drawing
SIGNAL CLOCK_25 : std_logic; --25Mhz clock
CONSTANT P1 : integer := 24; --Front porch (horizontal)
CONSTANT P2 : integer := 48; --Back porch (horizontal)
CONSTANT HSYNC_TIME : integer := 95; -- H_Sync pulse lenght
CONSTANT V1 : integer := 11250; --Front porch (vertical)
CONSTANT V2 : integer := 25500; --Back porch (vertical)
CONSTANT VSYNC_TIME : integer := 1600; -- V_Sync pulse lenght
BEGIN
VGA_SYNC<= '0';
pixel_draw : PROCESS(CLOCK_25,KEY(0)) --for drawing pixels and generating blank pulses
VARIABLE hcount : INTEGER := 0;
VARIABLE vcount : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
hcount := 0;
vcount := 0;
line_fin <= '0';
frame_fin <= '0';
line_count <= 0;
VGA_BLANK <= '1';
ELSIF rising_edge(CLOCK_25) THEN
IF line_count < 480 THEN
IF hcount < 640 THEN
VGA_R <= "1111111111";--send pixel information each clock_cycle
VGA_B <= "0000000000";
VGA_G <= "0000000000";
VGA_BLANK <= '1';
hcount := hcount+1;
line_fin <= '0';
ELSIF hcount = 640 THEN
line_fin <= '1'; --line finished, pulse line_fin and start blank pulse
hcount := hcount+1;
VGA_BLANK <= '0';
ELSIF hcount >640 and hcount <= 640+P1+HSYNC_TIME+P2 THEN
hcount := hcount+1;--keep blank pulse low for a set amount of time
line_fin <= '0';
VGA_BLANK <= '0';
ELSE
hcount := 1; --reset counters and increment line_counter
line_count <= line_count+1;
END IF;
ELSIF line_count = 480 THEN
IF vcount < 1 THEN --frame is finished; pulse frame_fin and initiate vertical blank pulse
vcount := vcount+1;
VGA_BLANK <= '0';
frame_fin <= '1';
ELSIF vcount >= 1 and vcount < V1+V2+VSYNC_TIME THEN
vcount := vcount+1; --keep blank pulse low for a set amount of time
frame_fin <= '0';
VGA_BLANK <= '0';
ELSE
vcount := 0; -- reset counters and line_counter
VGA_BLANK <= '1';
line_count <= 0;
END IF;
END IF;
END IF;
END PROCESS;
horizontal_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE hsync_counter : INTEGER := 0;
VARIABLE hsync_started : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
VGA_HS <= '1';
hsync_counter := 0;
hsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF line_fin = '1' or hsync_started = 1 THEN
hsync_started:= 1;
IF hsync_counter <= P1 THEN
hsync_counter := hsync_counter+1;--hsync stays high during front porch
VGA_HS <= '1';
ELSIF hsync_counter >= P1-1 and hsync_counter <= HSYNC_TIME+P1 THEN
hsync_counter := hsync_counter+1;--hsync activated
VGA_HS <= '0';
ELSIF hsync_counter >= HSYNC_TIME+P1-1 and hsync_counter < HSYNC_TIME+P1+P2 THEN
hsync_counter := hsync_counter+1;--hsync stays high during back porch
VGA_HS <= '1';
ELSE
hsync_counter := 0;--reset variables and counters
VGA_HS <= '1';
hsync_started := 0;
END IF;
ELSE
VGA_HS <= '1';
END IF;
END IF;
END PROCESS;
vertical_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE vsync_counter : INTEGER := 0;
VARIABLE vsync_started : INTEGER := 0;
BEGIN
IF KEY(0) = '0' THEN
VGA_VS <= '1';
vsync_counter := 0;
vsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF frame_fin = '1' or vsync_started = 1 THEN
vsync_started := 1;
IF vsync_counter < V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSIF vsync_counter >= V1-1 and vsync_counter < VSYNC_TIME+V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '0';
ELSIF vsync_counter >= VSYNC_TIME+V1-1 and vsync_counter < VSYNC_TIME+V1+V2 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSE
vsync_counter := 0;
VGA_VS <= '1';
vsync_started := 0;
END IF;
ELSE
VGA_VS <= '1';
END IF;
END IF;
END PROCESS;
vga_clk_gen : PROCESS(CLOCK_50,KEY(0))--devides 50MHz clock in 2, making it a 25MHz clock
VARIABLE count : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
CLOCK_25 <= '0';
VGA_CLK <= '0';
count := 0;
ELSIF rising_edge(CLOCK_50) THEN
IF count = 0 THEN
CLOCK_25 <= '1'; --1 period of 50MHz high
VGA_CLK <= '1';
count := 1;
ELSIF count = 1 THEN
CLOCK_25 <= '0'; --1 period of 50MHz low
VGA_CLK <= '0';
count := 0;
END IF;
END IF;
END PROCESS;
END vg;
Comment
-
Hi ruacon52,
Khi bạn chạy trên KIT DE2, bạn có để ý đèn màng hình không? Thông thường nếu nó chớp tắt (Màng hình VGA, không phải LCD nha) thì phần đồng bộ có vấn đề. Trên đĩa DE2 system (đi kèm với KIT) có một số phần demo liên quan đến VGA (Không nhớ rõ là viết bằng VHDL hay Verilog HDL), bạn có thể tham khảo. Còn thông số để setup cho VGA thì bạn có thể tham khảo những trang web mà bạn ToanXT đã đưa ra trong http://dientuvietnam.net/forums/showthread.php?t=29283.
Chúc bạn thành công.
Comment
-
Mình cũng đang làm đề tài này nhưng chỉ dừng ở mức mới giao tiếp được với monitor.Hiện nay mình đang muốn hiển thị 1 ảnh RGB 256x256x24 từ SRAM lên VGA nhưng chưa được.Lúc hiển thị thì chỉ hiện ra được 1 khung hình 256x256 nhưng toàn nhiễu.Mình thực hiện theo cách sau,sai chỗ nào xin mọi người chỉ giúp.
-Một pixel được lưu bằng 2 words (16bit) của SRAM.words có địa chỉ chẵn sẽ lưu giá trị của R và G,byte có địa chỉ lẻ lưu giá trị của B dưới dạn 00B.
-Địa chỉ truy xuất Sram được cập nhật liên tục bằng xung clock 50mhz,dựa vào tọa độ của pixel cần hiển thị.Dùng thêm 1 clk 25mhz để xác định là địa chỉ lẻ hoặc địa chỉ chẵn.
Comment
-
Làm vậy hình bị nhiễu là đúng rồi. Vì yêu cầu bạn phải xuất đồng thời 24 bit màu. Chứ không phải xuất tùng màu như bạn. Mà SRAM thì chỉ có 16 bit. Vậy sao bây giờ???
Bạn dùng SRAM là đúng. Cái này sẽ hiển thị tốt cho ảnh 16 bit màu. Để hiển thị ảnh 24 bit màu bạn có thể kết hợp hai bộ RAM. Một bộ RAM có trong FPGA và một là SRAM.
SRAM chứa dữ liệu của RG.
FPGA RAM chứa dữ liệu B. (hoặc thay đổi khác đi chút cũng được). Vậy thì có thể xuất đồng thời cả ba màu rồi.
Cái này năm ngoái tôi làm rồi. Chạy good lắm. Nhưng hình như chỉ làm ở kích thước 100x100 thôi. Vì giớ hạn của bộ RAM trong FPGA.
Thân chào.
Comment
-
bạn phuongnhoc làm rồi có thể share chương trình cho mình được không? mình cũng đang làm về hiển thị ảnh chứa trong sdram ra màn hình. giờ vẫn chưa biết quy trình làm như thế nào? bạn có thể hướng dẫn kĩ hơn chút được không?
địa chỉ mail của mình là ngobaviet@gmail.com.
thanks bạn nhiều
Comment
-
Oh`. Bạn làm hiển thị ảnh tư` SDRAM à. Đã giao tiếp được với SDRAM chưa.
Sorry mình không thể cho bạn code được. Nếu bạn cần hướng dẫn làm đề tài LV này thì có thể liên hệ với mình. Mình đã làm thành công đề tài
+ Trình diễn ảnh từ SD_card,.
+ Xử lý ảnh (các phương pháp lọc ảnh)". Chuẩn ảnh 24 bit màu.
+ Game with DE2 KIT
Nếu bạn nào cần hướng dẫn lv có thể liên hệ mình qua email: nguyentrungkien31111@yahoo.com
or 090 707 1167
Comment
-
Hi,
Dùng SRAM 256x16bit trên DE2 thì bạn cho chạy 50MHz. Do 1 pixel phải được xác định trong 1 chu kỳ 25MHz tức là 2 lần chu kỳ 50MHz. Như vậy 1 xung clock 25MHz thì bạn phải có 24bit màu (đúng hơn là 10x3 = 30 bit) => 1pixel phải dùng 2words <=> 32 bits hay truy xuất SRAM 2 lần và sử dụng chế độ 16bits. Như vậy màng hình rộng nhất có thể là 256x512 (RGB) (Còn vời ảnh mức xám thì đơn giản hơn nhiều vì R=G=B, như thế bạn sẽ giảm dụng lượng ô nhớ xuống 3 lần hay bạn có thể lưu ảnh lớn hơn). (Thật ra có thể rộng hơn chút nữa nhưng không cần thiết phải làm như thế). Cái mình nói trên đây chỉ là ảnh tỉnh thôi nha! Còn với Video thì làm cách khác. Nếu bạn muốn màng hình có độ phân giải cao hơn thì bạn có thể dùng SDRAM nhưng như thế bạn phải làm SDRAM Controller để giao tiếp với SDRAM, cái này thì không khó nhưng sẽ làm bạn mất thời gian đó.
Hi vong những thông tin này giúp ích cho các bạn muốn hiển thị ảnh tỉnh trên VGA dùng kit De2.
Comment
-
Làm như Danbeo85 thì mình chưa thử. Vì sợ các lý do sau:
+ Cần chuẩn bị sẳn 24 bit màu trước khi có cạnh lên xung Clock để đưa vào VGA. Vì ngay cạnh lên của xung Clock 24bit dữ liệu sẽ được chuyển vào thanh ghi đệm của VGA chip.
+ 24 bit cần được cấp đồng thời. Do vậy bạn cần có cách thanh ghi để chốt dữ liệu cho 2 byte cao và hai byte thấp.
+ Tính toán timming và latency cẩn thận.
=> có vẻ dùng tần số 100Mhz sẽ dễ điều khiẻn hơn vì có dư thời gian cho việc xuất dữ liệu.
Chỉ là lý thuyết thôi. Mình chưa thực hiện nên không chắc.
P/s Danbeo85: Hồi xưa làm SDRAM controller chưa vậy. Chỉ cho mình hướng giải quyết với. Sắp tậu được cái kit DE2 rồi.
Comment
-
SDR SDRAM Controller (Mình không đề cập đến DDR nha!)là một đề tài khác bạn ơi! Nhưng thật ra nó không quá khó để làm.
1) Bạn tìm hiểu cấu tạo DRAM và SDRAM nói chung để biết được cái khác biệt với SRAM là gì!
2) Tham khảo chuẩn JDEC về SDRAM (nếu không thể tìm được thì bạn có thể xem datasheet của các hãng làm SDRAM như Micron, Samsung, ... Nếu bạn có tài datasheet của SDRAM trên KIT DE2 thì cũng OK) để biết:
a) Những chân dùng để giao tiếp với SDRAM
b) Sơ đồ máy trạng thái của SDRAM
c) Các độ trễ cần thiết giữa các lệnh
3) Khi mô phỏng bộ điều khiễn bạn nên dùng SDRAM model của MICRON để mô phỏng nha vì cái này miễn phí và không bị mã hóa (SAMSUNG bị mã hóa). Các model sẽ đi cùng datasheet của SDRAM. Một lưu ý nhỏ là các model này đã kèm độ trễ nên khi mô phỏng chức năng của bộ điều khiển, bạn nhớ bỏ qua các báo lỗi về vấn đề này, bạn chỉ nên để ý đến các báo lỗi về chức năng thôi.
4) Tổng hợp và mô phỏng timing (mô phỏng có độ trễ). Tại thời điểm này thì sẽ không còn bất cứ lỗi nào được phép xảy ra nha!
5) Lưu ý: Bạn nên dùng một chuẩn giao tiếp thông dụng để viết lớp vỏ ngoài cho bộ điều khiển (Avalon Memory Map, AMBA AHB, ...) như thế sẽ thuận tiện trong việc gắng bộ điều khiển vào hệ thống.
Hi vọng những điều trên sẽ có ích cho bạn. Chúc bạn thành công!
Comment
Bài viết mới nhất
Collapse
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
Hôm qua, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -
-
bởi dinhthuong92Chào bác. Đã là công thức phải tổng quát chứ, nó phải thể hiện cả quá trình, rối thì quá độ hay xác lập tính sau vì tùy điều kiện. Cũng như công thức tính diện tích chả hạn, phải là tích phân....
-
Channel: Nguồn!
08-05-2026, 10:49 -

Comment